Micro controller Lab
-
Upload
rupesh-kumar -
Category
Documents
-
view
45 -
download
4
description
Transcript of Micro controller Lab
-
1
MICROCONTROLLER LAB
PROGRAMS
SUB CODE: 10ESL47
Microcontroller
ALP
-
2
1. Write an Assembly Language Program to ADD two 8-
bit numbers.
CPU 8051.TBL
HOF INT8
ORG 6000H
MOV A, #09H
ADD A, #06H
RET
Result:
Before Execution After Execution
A
-
3
2. Write an ALP to subtract two 8-bit numbers.
CPU 8051.TBL
HOF INT8
ORG 6000H
MOV A, #09H
SUBB A, #05H
RET
Result:
Before Execution After Execution
A
-
4
3. Write an ALP to ADD two 16 bit numbers.
CPU 8051.TBL
HOF INT8
ORG 6000H
CLR C
MOV A, #17H
ADD A, #12H
MOV R0, A ; lower 8-bit addition saved to R0
MOV A, #15H
ADD A, #13H
MOV R1, A ; upper 8-bit addition saved to R1
RET
Result:
Before Execution After Execution
R0
-
5
4. Write an ALP to subtract two 16-bit numbers.
CPU 8051.TBL
HOF INT8
ORG 6000H
CLR C
MOV A, #17H
SUBB A, #12H
MOV R0, A ; lower 8-bit subtraction saved to R0
MOV A, #15H
SUBB A, #13H
MOV R1, A ; upper 8-bit subtraction saved to R1
RET
Result:
Before Execution After Execution
R0
-
6
5. ALP for 8-bit addition with carry.
CPU 8051.TBL
HOF INT8
ORG 6000H
CLR C
MOV R0, #00H ; clear R0 for carry
MOV A, #98H
ADDC A, #0F4H
MOV R1,A ; copy result to R1
JNC GO ; jump on NO carry
MOV R0, #01H ; copy carry into R0
GO: RET
Result:
Before Execution After Execution
A
-
7
6. ALP for 16-bit addition with carry. CPU 8051.TBL
HOF INT8
ORG 6000H
CLR C
MOV R0, #00H ; clear R0 for carry
MOV A, #98H
ADDC A, #0F4H
MOV R2,A ; lower 8-bit addition saved to R1
MOV A, #98H
ADDC A, #0F4H
MOV R1,A ; upper 8-bit addition saved to R2
JNC GO ; jump on NO carry
INC R0 ; increment R0 i.e. carry
GO: RET
Result:
Before Execution After Execution
R2
-
8
7. Write an ALP to ADD 8-bit BCD numbers.
CPU 8051.TBL
HOF INT8
ORG 6000H
MOV A, 30H
ADD A, 31H
DAA ; Decimal Adjust Accumulator
MOV 35H, A
RET
Result:
Before Execution After Execution
30H
-
9
8. WALP to multiply two 8-bit numbers. CPU8051.TBL
HOFINT8
ORG 6000H
MOV A, 30H
MOV 0F0H, 31H ; 0F0H is mem location for reg B
MUL AB
MOV 35H, A
MOV 36H, 0F0H
RET
Result:
Before Execution: After Execution:
30H
-
10
9. WALP to divide two 8-bit numbers. CPU8051.TBL
HOFINT8
ORG 6000H
MOV A, 30H
MOV 0F0H, 31H
DIV AB
MOV 35H, A
MOV 36H, 0F0H
RET
Result:
Before Execution: After Execution:
30H
-
11
10. WALP to find square of the given number. CPU 8051.TBL
HOF INT8
ORG 6000H
MOV A, 30H
MOV 0F0H, A
MUL AB
MOV 35H, A
MOV 36H, 0F0H
RET
Result:
Before Execution After Execution
30H
-
12
11. WALP to find the cube of a given number.
CPU8051.TBL
HOFINT8
ORG 6000H
MOV A, 30H
MOV 0F0H, A
MUL AB
MOV 0F0H, 30H
MUL AB
MOV 35H, A
MOV 36H, 0F0H
RET
Result:
Before Execution After Execution
30H
-
13
12. WALP to add multiple byte numbers. CPU 8051.TBL
HOF INT8
ORG 6000H
MOV R2, #07H
MOV R0, #20H
MOV R1, #30H
MOV DPTR, #7000H
UP: MOV A, @R0
ADDC A, @R1
MOVX @DPTR, A
INC R0
INC R1
INC DPTR
DJNZ R2, UP
RET
Result:
Before Execution After Execution
20H
-
14
13. WALP to subtract multiple byte numbers. CPU 8051.TBL
HOF INT8
ORG 6000H
MOV R2, #07H
MOV R0, #20H
MOV R1, #30H
MOV DPTR, #7000H
UP: MOV A, @R0
SUBB A, @R1
MOVX @DPTR, A
INC R0
INC R1
INC DPTR
DJNZ R2, UP
RET
Result:
Before Execution After Execution
20H
-
15
14. WALP to COUNT number of 1s & 0s in a number. CPU 8051.TBL
HOF INT8
ORG 6000H
MOV R2, #08H
MOV A, 30H
MOV R0, #00H
MOV R1, #00H
CLR C
UP: RRC A
JNC GO
INC R1
SJMP LAST
GO: INC R0
LAST: DJNZ R2, UP
RET
Result:
Before Execution After Execution
30H
-
16
15. WALP to find average of n numbers. CPU 8051.TBL
HOF INT8
ORG 6000H
MOV R2, #05H
MOV 0F0H, #05H
MOV R0, #30H
CLR A
UP: ADD A,@R0
INC R0
DJNZ R2, UP
DIV AB
MOV R1, A
RET
Result:
Before Execution After Execution
30H
-
17
16. WALP to find even & odd from given array.
CPU 8051.TBL
HOF INT8
ORG 6000H
MOV 0D0H, #00H ; clear the PSW
MOV DPTR, #5000H
MOV R0, #30H
MOV R1, #20H
MOV R3, #05H
UP: MOVX A,@DPTR
RRC A
JNC NEXT
MOVX A,@DPTR
MOV @R1, A
INC R1
SJMP SKIP
NEXT: MOVX A,@DPTR
MOV @R0, A
INC R0
SKIP: INC DPTR
DJNZ R3, UP
RET
-
18
Result:
Before Execution After Execution
5000H
-
19
17. WALP to find positive & negative from given array.
CPU 8051.TBL
HOF INT8
ORG 6000H
MOV 0D0H, #00H ; clear the PSW
MOV DPTR, #5000H
MOV R0, #30H
MOV R1, #20H
MOV R3, #05H
UP: MOVX A,@DPTR
RLC A
JNC NEXT
MOVX A,@DPTR
MOV @R1, A
INC R1
SJMP SKIP
NEXT: MOVX A,@DPTR
MOV @R0, A
INC R0
SKIP: INC DPTR
DJNZ R3, UP
RET
-
20
Result:
Before Execution After Execution
5000H
-
21
18. WALP for Fibonacci series. Method-1: Method-2:
CPU 8051.TBL CPU 8051.TBL
HOF INT8 HOF INT8
ORG 6000H ORG 6000H
MOV A, #00H MOV R2, #0AH
MOV 30H, A MOV R0, #30H
MOV R0, #31H MOV @R0, #00H
MOV @R0, #01H DEC R2
MOV R2, #08H INC R0
UP: MOV 0F0H,@R0 MOV @R0, #01H
ADD A, @R0 DEC R2
INC R0 UP: MOV A,@R0
MOV @R0, A DEC R0
MOV A, 0F0H ADD A,@R0
DJNZ R2, UP INC R0
RET INC R0
MOV @R0, A
DJNZ R2, UP
RET
Result:
Before Execution After Execution
30H
-
22
19. WALP to find factorial of a number.
CPU 8051.TBL
HOF INT8
ORG 6000H
MOV A, 30H
MOV R2, A
DEC R2
UP: MOV 0F0H, R2
MUL AB
DJNZ R2, UP
RET
Result:
Before Execution After Execution
30H
-
23
20. WALP to find value of an expression (A+B) (A-B).
CPU 8051.TBL
HOF INT8
ORG 6000H
MOV A, 30H
CLR C
ADDC A, 31H
MOV 0F0H, A
MOV A, 30H
SUBB A, 31H
MUL AB
RET
Result:
Before Execution After Execution
30H
-
24
21. WALP to find value of an expression w2-y/z+y2. CPU 8051.TBL
HOF INT8
ORG 6000H
MOV A, 30H
MOV 0F0H, 30H
MUL AB
MOV R0, A
MOV A, 31H
MOV 0F0H, 31H
MUL AB
ADD A, R0
MOV R1, A
MOV A, 31H
MOV 0F0H, 32H
DIV AB
MOV R2, A
MOV A, R1
SUBB A, R2
RET
Result:
Before Execution After Execution
30H
-
25
22. WALP to interchange 1 RAM location content to
another RAM location.
CPU 8051.TBL
HOF INT8
ORG 6000H
MOV R0, #30H
MOV R1, #50H
MOV R2, #05H
UP: MOV A,@R0
XCH @R1, A
MOV @R0, A
INC R0
INC R1
DJNZ R2, UP
RET
Result:
Before Execution After Execution
30H
-
26
23. WALP to copy the content of RAM location to ROM
location.
CPU 8051.TBL
HOF INT8
ORG 6000H
MOV DPTR, #5000H
MOV R1, #30H
MOV R2, #05H
UP: MOV A,@R1
MOVX @DPTR, A
INC DPTR
INC R1
DJNZ R2, UP
RET
Result:
Before Execution After Execution
RAM ROM (copied) RAM ROM (copied)
30H
-
27
24. WALP to interchange the content of RAM location to
ROM location.
CPU 8051.TBL
HOF INT8
ORG 6000H
MOV DPTR, #5000H
MOV R1, #30H
MOV R2, #05H
UP: MOVX A,@DPTR
XCH @R1, A
MOVX @DPTR, A
INC DPTR
INC R1
DJNZ R2, UP
RET
Result:
Before Execution After Execution
30H
-
28
25. WALP to clear RAM & ROM location. CPU 8051.TBL
HOF INT8
ORG 6000H
MOV DPTR, #5000H
MOV R1, #30H
MOV R2, #0AH
UP: MOV @R1, #00H
MOV A, #00H
MOVX @DPTR, A
INC DPTR
INC R1
DJNZ R2, UP
RET
Result:
Before Execution After Execution
RAM ROM RAM ROM
30H
-
29
26. WALP to find smallest in a given array. CPU 8051.TBL
HOF INT8
ORG 6000H
MOV R1, #30H
MOV R2, #05H
MOV R0, #0FFH
AGAIN: MOV A,@R1
MOV 30H, R0
CJNE A, 30H, DOWN
SJMP SKIP
DOWN: JNC SKIP
MOV R0, A
SKIP: INC R1
DJNZ R2, AGAIN
RET
Result:
Before Execution After Execution
08H 30H
-
30
27. WALP to find greatest in a given array. CPU 8051.TBL
HOF INT8
ORG 6000H
MOV R1, #30H
MOV R2, #05H
MOV R0, #00H
AGAIN: MOV A,@R1
MOV 30H, R0
CJNE A, 30H, DOWN
SJMP SKIP
DOWN: JC SKIP
MOV R0, A
SKIP: INC R1
DJNZ R2, AGAIN
RET
Result:
Before Execution After Execution
08H 30H
-
31
28. WALP to set the given array in ascending order. CPU 8051.TBL
HOF INT8
ORG 6000H
MOV R3, #05H
UP: MOV DPTR, #5000H
MOV R2, #04H
AGAIN: MOV R1, 82H
MOVX A,@DPTR
MOV 30H, A
INC DPTR
MOVX A,@DPTR
CJNE A, 30H, DOWN
SJMP SKIP
DOWN: JNC SKIP
MOV 82H, R1
MOVX @DPTR, A
INC DPTR
MOV A, 30H
MOVX @DPTR, A
SKIP: DJNZ R2, AGAIN
DJNZ R3, UP
RET
Result:
Before Execution After Execution
08H 01H 5000H
-
32
29. WALP to set the given array in descending order. CPU 8051.TBL
HOF INT8
ORG 6000H
MOV R3, #05H
UP: MOV DPTR, #5000H
MOV R2, #04H
AGAIN: MOV R1, 82H
MOVX A,@DPTR
MOV 30H, A
INC DPTR
MOVX A,@DPTR
CJNE A, 30H, DOWN
SJMP SKIP
DOWN: JC SKIP
MOV 82H, R1
MOVX @DPTR, A
INC DPTR
MOV A, 30H
MOVX @DPTR, A
SKIP: DJNZ R2, AGAIN
DJNZ R3, UP
RET
Result:
Before Execution After Execution
08H 09H 5000H
-
33
30. WALP to unpack a pack number.
Method-1: Method-2 (using logical instrucn):
CPU 8051.TBL CPU 8051.TBL
HOF INT8 HOF INT8
ORG 6000H ORG 6000H
MOV A, R0 MOV A, R0
MOV 0F0H, #10H ANL A, #0FH
DIV AB MOV R6, A
MOV R1, A MOV A, R0
MOV R2, 0F0H ANL A, #0F0H
RET SWAP A
MOV R1, A
MOV A, R6
MOV R2, A
RET
Result:
Before Execution After Execution
85H R0
-
34
31. WALP to pack the unpack numbers.
Method-1: Method-2:
CPU 8051.TBL CPU 8051.TBL
HOF INT8 HOF INT8
ORG 6000H ORG 6000H
MOV A, R0 MOV A, R0
MOV 0F0H, #10H SWAP A
MUL AB ADD A, R1
ADD A, R1 MOV R2, A
MOV R2, A RET
RET
Result:
Before Execution After Execution
08H R0
-
35
32. WALP to convert BCD to ASCII.
CPU 8051.TBL
HOF INT8
ORG 6000H
MOV DPTR, #5000H
MOVX A,@DPTR
CLR C
ADDC A, #30H
INC DPTR
MOVX @DPTR, A
RET
Result:
Before Execution After Execution
5000H
-
36
33. WALP to convert ASCII to BCD number.
CPU 8051.TBL
HOF INT8
ORG 6000H
MOV DPTR, #5000H
MOVX A,@DPTR ; input no. must be > 30
CLR C
SUBB A, #30H
INC DPTR
MOVX @DPTR, A
RET
Result:
Before Execution After Execution
5000H
-
37
34. WALP to convert ASCII to hexadecimal.
CPU 8051.TBL
HOF INT8
ORG 6000H
MOV R1, #50H
MOV A,@R1
CLR C
SUBB A, #41H
MOV A,@R1
JC SKIP
CLR C
SUBB A, #07H
SKIP: CLR C
SUBB A, #30H
INC R1
MOV @R1, A
RET
Result:
Before Execution After Execution
50H
-
38
35. WALP to convert decimal no. to hexadecimal.
CPU 8051.TBL
HOF INT8
ORG 6000H
MOV A, 20H
ANL A, #0F0H
SWAP A
MOV 0F0H, #0AH
MUL AB
MOV R2, A
MOV A, 20H
ANL A, #0FH
ADD A, R2
MOV R0, A
RET
Result:
Before Execution After Execution
20H
-
39
36. WALP to convert decimal no. to hexadecimal.
CPU 8051.TBL
HOF INT8
ORG 6000H
MOV A, 30H
MOV 0F0H, #0AH
DIV AB
MOV 33H, 0F0H
MOV 0F0H, #0AH
DIV AB
MOV 31H, A
MOV 32H, 0F0H
RET
Result:
Before Execution After Execution
FFH 30H
-
40
37. WALP to generate binary up-counter.
CPU 8051.TBL
HOF INT8
ORG 6000H
MOV A, #00H
UP: LCALL 061DH
MOV R3, A
MOV R4, #00H
MOV R5, #02H
LCALL 059EH
ADD A, #01H
CJNE A, #00H, UP
RET
Result:
Before Execution After Execution
00 00
01 01
02 02
03 03
. .
. .
. .
FC FC
FD FD
FE FE
FF FF
-
41
38. WALP to generate binary down-counter.
CPU 8051.TBL
HOF INT8
ORG 6000H
MOV A, #0FFH
UP: LCALL 061DH
MOV R3, A
MOV R4, #00H
MOV R5, #02H
LCALL 059EH
SUBB A, #01H
CJNE A, #0FFH, UP
RET
Result:
Before Execution After Execution
FF FF
FE FE
FD FD
FC FC
. .
. .
. .
04 04
03 03
02 02
01 01
00 00
-
42
39. WALP to generate BCD up-counter from 25 to 51.
CPU 8051.TBL
HOF INT8
ORG 6000H
MOV A, #25H
UP: LCALL 061DH
MOV R3, A
MOV R4, #00H
MOV R5, #02H
LCALL 059EH
ADD A, #01H
DA A
CJNE A, #51H, UP
RET
Result:
Before Execution After Execution
25 25
26 26
27 27
28 28
. .
. .
. .
47 47
48 48
49 49
50 50
-
43
40. WALP to generate BCD down counter.
CPU 8051.TBL
HOF INT8
ORG 6000H
MOV A, #99H
UP: LCALL 061DH
MOV R3, A
MOV R4, #00H
MOV R5, #02H
LCALL 059EH
ADD A, #99H
DA A
CJNE A, #99H, UP
RET
Result:
Before Execution After Execution
99 99
98 98
97 97
96 96
. .
. .
. .
4 4
3 3
2 2
1 1
-
44
41. WALP to generate BCD up counter.
CPU 8051.TBL
HOF INT8
ORG 6000H
MOV A, #00H
UP: LCALL 061DH
MOV R3, A
MOV R4, #00H
MOV R5, #02H
LCALL 059EH
ADD A, #01H
DA A
CJNE A, #00H, UP
RET
Result:
Before Execution After Execution
00 00
01 01
02 02
03 03
. .
. .
. .
96 96
97 97
98 98
99 99
-
45
42. WALP to generate BCD up-down counter.
CPU 8051.TBL
HOF INT8
ORG 6000H
MOV A, #00H
UP: LCALL 061DH
MOV R3, A
MOV R4, #00H
MOV R5, #02H
LCALL 059EH
ADD A, #01H
DA A
CJNE A, #00H, UP
MOV A, #99H
UP1: LCALL 061DH
MOV R3, A
MOV R4, #00H
MOV R5, #02H
LCALL 059EH
ADD A, #99H
DA A
CJNE A, #99H, UP1
RET
-
46
Result:
Before Execution After Execution
00 00
01 01
02 02
03 03
. .
. .
. .
96 96 97 97
98 98
99 99
99 99
98 98
97 97
96 96
. .
. .
. .
04 04
03 03
02 02
01 01
00 00