Upload
rupesh-kumar
View
45
Download
4
Embed Size (px)
DESCRIPTION
Contains the basic assembly language programs of the 8051 Micro controller for only lab purpose with results.
Citation preview
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