Sunteți pe pagina 1din 46

MICROCONTROLLER LAB

PROGRAMS
SUB CODE: 10ESL47

Microcontroller

ALP

1.

Write an Assembly Language Program to ADD two 8bit numbers.


CPU 8051.TBL
HOF INT8
ORG 6000H
MOV A, #09H
ADD A, #06H
RET

Result:
Before Execution

After Execution

A<= 09H+06H

A<= 09H+06H

A<= 0FH

00001001
+00000110
00001111
0
A<= 0FH

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<= 09H-05H

A<= 09H-05H

A<= 04H

00001001
-00000101
00000100
0
A<= 04H

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<= 17H+12H= 29H

R0<= 17H+12H

R1<= 15H+13H

R1<= 15H+13H= 28H

00010111

00010101

+00010010

+00010011

00101001
2 9

00101000
2
8

1517H+ 1312H=2829H

R0<=29H

R1<=28H

1517H+ 1312H=2829H

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
MOV A, #15H
SUBB A, #13H
MOV R1, A
RET

; lower 8-bit subtraction saved to R0

; upper 8-bit subtraction saved to R1

Result:
Before Execution

After Execution

R0<= 17H-12H= 05H

R0<= 17H-12H

R1<= 15H-13H

R1<= 15H-13H= 02H

00010111

00010101

1517H- 1312H=0205H

-00010010

-00010011

00000101
0 5

00000010
0 2

R0<=05H

R1<=02H

1517H- 1312H=0205H

5.

ALP for 8-bit addition with carry.


CPU 8051.TBL
HOF INT8
ORG 6000H
CLR C
MOV R0, #00H
MOV A, #98H
ADDC A, #0F4H
MOV R1,A
JNC GO
MOV R0, #01H
GO: RET

; clear R0 for carry

; copy result to R1
; jump on NO carry
; copy carry into R0

Result:
Before Execution

After Execution

A<= 98H+F4H

A<= 98H+F4H

A<= 18CH

10011000
+11110100
1 10001100
1
R0<=01

R1<= 8C

98H + F4H = 018C

6.

ALP for 16-bit addition with carry.


CPU 8051.TBL
HOF INT8
ORG 6000H
CLR C
MOV R0, #00H
MOV A, #98H
ADDC A, #0F4H
MOV R2,A
MOV A, #98H
ADDC A, #0F4H
MOV R1,A
JNC GO
INC R0
GO: RET

; clear R0 for carry

; lower 8-bit addition saved to R1

; upper 8-bit addition saved to R2


; jump on NO carry
; increment R0 i.e. carry

Result:
Before Execution

After Execution

R2<= 98H+F4H= 8CH

R1<= 98H+F4H

R2<= 98H+F4H

R1<= 98H+F4H= 8DH

10011000

10011000

+11110100

+11110100

R0<= 01H
9898H+F4F4H=18D8CH

10001101

1
R0<=01

R1<=8DH

10001100
8

R2<=8CH

9898H+ F4F4H=18D8CH

7.

Write an ALP to ADD 8-bit BCD numbers.


CPU 8051.TBL
HOF INT8
ORG 6000H
MOV A, 30H
ADD A, 31H
DAA
MOV 35H, A
RET

; Decimal Adjust Accumulator

Result:
Before Execution

After Execution

30H<= 09H

30H<= 09H

31H<= 05H

31H<= 05H

00001001

35H<= 09H+05H=14H

+00000101
00001110
14
35H<= 09H+05H=14H

8.

WALP to multiply two 8-bit numbers.


CPU8051.TBL
HOFINT8
ORG 6000H
MOV A, 30H
MOV 0F0H, 31H
MUL AB
MOV 35H, A
MOV 36H, 0F0H
RET

; 0F0H is mem location for reg B

Result:
Before Execution:

After Execution:

30H<=09H

30H<= 09H

31H<= 04H

31H<=04H

09 04 = (36)10

09 04= 0024H

(36)10 = (24)16

35H<= 24H (Lower byte)

35H<= 24H (Lower byte)

36H<= 00H (Upper byte)

36H<= 00H (Upper byte)

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<=09H

30H<= 09H

31H<=02H

31H<= 02H

09 02 = 04H
Quotient= 04H

09 02= 04H

Remainder= 01H

Remain= 01H
35H<= 04H (Quotient)

35H<= 04H (Quotient)

36H<= 01H (Remainder)

36H<= 01H (Remainder)

10

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<= 10H

30H<= 10H

102= 100H

102= 100H
35H<= 00H
36H<=01H

11

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<= 03H

30H<= 03H

033= 1BH

033= (27)10H
(27)10= (1B)16
35H<= 1BH
36H<= 00H

12

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
20H<=01H
30H<=01H
21H<=02H
31H<=02H
22H<=03H
32H<=03H
23H<=04H
33H<=04H
24H<=05H
34H<=05H
25H<=06H
35H<=06H
26H<=07H
36H<=07H

After Execution
20H<=01H
30H<=01H
21H<=02H
31H<=02H
22H<=03H
32H<=03H
23H<=04H
33H<=04H
24H<=05H
34H<=05H
25H<=06H
35H<=06H
26H<=07H
36H<=07H

7000H<=02H
7001H<=04H
7002H<=06H
7003H<=08H
7004H<=0AH
7005H<=0CH
7006H<=0EH

7000H<= 01+01=02H
7001H<= 02+02=04H
7002H<= 03+03=06H
7003H<= 04+04=08H
7004H<= 05+05=0AH
7005H<= 06+06=0CH
7006H<= 07+07=0EH
13

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
20H<=0FH
30H<=01H
21H<=0EH
31H<=02H
22H<=0DH
32H<=03H
23H<=0CH
33H<=04H
24H<=0BH
34H<=05H
25H<=0AH
35H<=06H
26H<=09H
36H<=07H

After Execution
20H<=0FH
30H<=01H
21H<=0EH
31H<=02H
22H<=0DH
32H<=03H
23H<=0CH
33H<=04H
24H<=0BH
34H<=05H
25H<=0AH
35H<=06H
26H<=09H
36H<=07H

7000H<=0EH
7001H<=0CH
7002H<=0AH
7003H<=08H
7004H<=06H
7005H<=04H
7006H<=02H

7000H<= 0F-01=0EH
7001H<= 0E-02=0CH
7002H<= 0D-03=0AH
7003H<= 0C-04=08H
7004H<= 0B-05=06H
7005H<= 0A-06=04H
7006H<= 09-07=02H
14

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<= 0FH

30H<= 0FH

R0<= 04 (no. of 0s)


R1<= 04 (no. of 1s)

00001111
0 0 0 0 1 1 1 1

Rotating right with carry


R0<= 04(no. of 0s)
R1<= 04(no. of 1s)

15

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<= 01
31H<= 02
32H<= 03
33H<= 04
34H<= 05

30H<= 01
31H<= 02
32H<= 03
33H<= 04
34H<= 05

Average:
R1<= 03H

Average:
= 01+02+03+04+05
05
= 0F = 03H
05
R1<= 03H

16

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

17

Result:
Before Execution

After Execution

5000H<= 05H
5001H<= 06H
5002H<= 07H
5003H<= 08H
5004H<= 09H
Even:
30H<= 06H
31H<= 08H
Odd:
20H<= 05H
21H<= 07H
22H<= 09H

5000H<= 05H
5001H<= 06H
5002H<= 07H
5003H<= 08H
5004H<= 09H
05
06
07
08
09

<=
<=
<=
<=
<=

0
0
0
0
0

0
0
0
0
0

0
0
0
0
0

0
0
0
0
0

0
0
0
1
1

1
1
1
0
0

0
1
1
0
0

Even: 06 & 08
Odd: 05, 07 & 09
Even:
30H<= 06H
31H<= 08H

18

Odd:
20H<=05H
21H<= 07H
22H<= 09H

1
0
1
0
1

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

19

Result:
Before Execution

After Execution

5000H<= FFH
5001H<= 08H
5002H<= 80H
5003H<= 05H
5004H<= 16H

5000H<= FFH
5001H<= 08H
5002H<= 80H
5003H<= 05H
5004H<= 16H

Negative:
30H<= FFH
31H<= 80H
Positive:
20H<= 08H
21H<= 05H
22H<= 16H

FF
08
80
05
16

<=
<=
<=
<=
<=

1
0
1
0
0

1
0
0
0
0

1
0
0
0
0

1
0
0
0
1

1
1
0
0
0

1
0
0
1
1

1
0
0
0
1

Negative: FF & 80
Positive: 08, 05 & 16
Negative:
30H<= FFH
31H<= 80H

20

Positive:
20H<=08H
21H<= 05H
22H<= 16H

1
0
0
1
0

18. WALP for Fibonacci series.


Method-1:
CPU 8051.TBL
HOF INT8
ORG 6000H
MOV A, #00H
MOV 30H, A
MOV R0, #31H
MOV @R0, #01H
MOV R2, #08H
UP: MOV 0F0H,@R0
ADD A, @R0
INC R0
MOV @R0, A
MOV A, 0F0H
DJNZ R2, UP
RET

Method-2:
CPU 8051.TBL
HOF INT8
ORG 6000H
MOV R2, #0AH
MOV R0, #30H
MOV @R0, #00H
DEC R2
INC R0
MOV @R0, #01H
DEC R2
UP: MOV A,@R0
DEC R0
ADD A,@R0
INC R0
INC R0
MOV @R0, A
DJNZ R2, UP
RET

Result:
Before Execution
30H<= 0
31H<= 1
32H<= 1
33H<= 2
34H<= 3
35H<= 5
36H<= 8
37H<= 0D
38H<= 15
39H<= 22

After Execution
30H<= 0
31H<= 1
32H<= 0+1= 1
33H<=1+1= 2
34H<=1+2= 3
35H<= 2+3= 5
36H<=3+5= 8
37H<=5+8= 0D
38H<=8+D= 15
39H<=D+15= 22
21

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<= 05H

30H<= 05H

Factorial:
78H

Factorial:
54321
= (120)10
(120)10 = (78)16
= 78H

22

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<= 0FH
31H<= 0CH

30H<= 0FH
31H<= 0CH

(A+B)(A-B)
(0F+0C)(0F-0C)
= 51H

=> (A+B)(A-B)
(0F+0C) (0F-0C)
(1B) (03)
=51H

23

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
30H<= 02H
31H<= 04H
32H<= 02H
22-4/2+42
= 12H

After Execution
30H<= 02H 31H<= 04H 32H<= 02H
w 2-y/z+y2
=> 22 - 4/2 + 42
=> 4 2 + 10
=> 12H

24

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
30H<=0FH
50H<=01H
31H<=0EH
51H<=02H
32H<=0DH
52H<=03H
33H<=0CH
53H<=04H
34H<=0BH
54H<=05H

After Execution
30H<=0FH
50H<=01H
31H<=0EH
51H<=02H
32H<=0DH
52H<=03H
33H<=0CH
53H<=04H
34H<=0BH
54H<=05H

INTERCHANGED:
30H<=01H
31H<=02H
32H<=03H
33H<=04H
34H<=05H

INTERCHANGED:

50H<=0FH
51H<=0EH
52H<=0DH
53H<=0CH
54H<=0BH

30H<=01H
31H<=02H
32H<=03H
33H<=04H
34H<=05H
25

50H<=0FH
51H<=0EH
52H<=0DH
53H<=0CH
54H<=0BH

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
RAM
30H<=01H
31H<=03H
32H<=04H
33H<=06H
34H<=0BH

After Execution

ROM (copied)
5000H<=01H
5001H<=03H
5002H<=04H
5003H<=06H
5004H<=0BH

RAM
30H<=01H
31H<=03H
32H<=04H
33H<=06H
34H<=0BH

26

ROM (copied)
5000H<=01H
5001H<=03H
5002H<=04H
5003H<=06H
5004H<=0BH

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
30H<=0FH
5000H<=01H
31H<=0EH
5001H<=02H
32H<=0DH
5002H<=03H
33H<=0CH
5003H<=04H
34H<=0BH
5004H<=05H

After Execution
30H<=0FH
5000H<=01H
31H<=0EH
5001H<=02H
32H<=0DH
5002H<=03H
33H<=0CH
5003H<=04H
34H<=0BH
5004H<=05H

INTERCHANGED:
30H<=01H
31H<=02H
32H<=03H
33H<=04H
34H<=05H

INTERCHANGED:

5000H<=0FH
5001H<=0EH
5002H<=0DH
5003H<=0CH
5004H<=0BH

30H<=01H
31H<=02H
32H<=03H
33H<=04H
34H<=05H
27

5000H<=0FH
5001H<=0EH
5002H<=0DH
5003H<=0CH
5004H<=0BH

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
RAM
30H<=00H
31H<=00H
32H<=00H
33H<=00H
34H<=00H
35H<=00H
36H<=00H
37H<=00H
38H<=00H
39H<=00H

After Execution

ROM
5000H<=00H
5001H<=00H
5002H<=00H
5003H<=00H
5004H<=00H
5005H<=00H
5006H<=00H
5007H<=00H
5008H<=00H
5009H<=00H

RAM
30H<=00H
31H<=00H
32H<=00H
33H<=00H
34H<=00H
35H<=00H
36H<=00H
37H<=00H
38H<=00H
39H<=00H

28

ROM
5000H<=00H
5001H<=00H
5002H<=00H
5003H<=00H
5004H<=00H
5005H<=00H
5006H<=00H
5007H<=00H
5008H<=00H
5009H<=00H

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
05H
01H
10H
0AH

30H<=08H
31H<=05H
32H<=01H
33H<=10H
34H<=0AH

01H (smallest)

R1<= 01H (smallest)

29

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
05H
0AH
10H
01H

30H<=08H
31H<=05H
32H<=0AH
33H<=10H
34H<=01H

0AH (greatest)

R1<= 0AH (greatest)

30

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
08H
01H
01H
02H
02H
05H
09H
08H
05H
09H

After Execution
5000H<=08H
5000H<=01H
5001H<=01H
5001H<=02H
5002H<=02H
5002H<=05H
5003H<=09H
5003H<=08H
5004H<=05H
5004H<=09H
31

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
08H
09H
01H
08H
02H
05H
09H
02H
05H
01H

After Execution
5000H<=08H
5000H<=09H
5001H<=01H
5001H<=08H
5002H<=02H
5002H<=05H
5003H<=09H
5003H<=02H
5004H<=05H
5004H<=01H
32

30. WALP to unpack a pack number.


Method-1:

Method-2 (using logical instrucn):

CPU 8051.TBL
HOF INT8
ORG 6000H
MOV A, R0
MOV 0F0H, #10H
DIV AB
MOV R1, A
MOV R2, 0F0H
RET

CPU 8051.TBL
HOF INT8
ORG 6000H
MOV A, R0
ANL A, #0FH
MOV R6, A
MOV A, R0
ANL A, #0F0H
SWAP A
MOV R1, A
MOV A, R6
MOV R2, A
RET

Result:
Before Execution

After Execution

85H

R0<= 85H

08H

R1<= 08H
R2<= 05H

05H

33

31. WALP to pack the unpack numbers.


Method-1:

Method-2:

CPU 8051.TBL
HOF INT8
ORG 6000H
MOV A, R0
MOV 0F0H, #10H
MUL AB
ADD A, R1
MOV R2, A
RET

CPU 8051.TBL
HOF INT8
ORG 6000H
MOV A, R0
SWAP A
ADD A, R1
MOV R2, A
RET

Result:
Before Execution

After Execution

08H
05H

R0<= 08H
R1<= 05H

85H

R2<= 80+5= 85H

34

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<= 08H

5000H<= 08H

5001H<= 38H

5001H<= 08+30= 38H

35

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<= 38H

5000H<= 38H

5001H<= 08H

5001H<= 38-30= 08H

36

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<= 38H

50H<= 38H

51H<= 08H

51H<= 38-30= 08H

37

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<= 20H

20H<= 20H

R0<= 14H

R0<= 14H

38

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<= 0FFH

255

31H<= 02H
32H<= 05H
33H<= 05H
(FF)16= (255)10

39

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
00
01
02
03

After Execution
00
01
02
03

FC

FC

FD

FD

FE

FE

FF

FF
40

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
FF
FE
FD
FC
.
.
.

After Execution
FF
FE
FD
FC
.
.
.

04

04

03

03

02

02

01

01

00

00
41

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
25
26
27
28
.
.
.

After Execution
25
26
27
28
.
.
.

47

47

48

48

49

49

50

50
42

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
99
98
97
96
.
.
.

After Execution
99
98
97
96
.
.
.

1
43

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
00
01
02
03
.
.
.

After Execution
00
01
02
03
.
.
.

96

96

97

97

98

98

99

99
44

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

45

Result:
Before Execution
00
01
02
03

After Execution
00
01
02
03

.
.
.

.
.
.

96
97
98
99
99
98
97
96
.
.
.

96
97
98
99
99
98
97
96
.
.
.

04

04

03

03

02

02

01

01

00

00

46

S-ar putea să vă placă și