Micro controller Lab

46
1 MICROCONTROLLER LAB PROGRAMS SUB CODE: 10ESL47 Microcontroller ALP

description

Contains the basic assembly language programs of the 8051 Micro controller for only lab purpose with results.

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