Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0...

39
Assembly Programming Manual 8051 Project Board v1.0 Student name:____________________________________________________ Student ID:______________________ Major:__________________________

Transcript of Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0...

Page 1: Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0 44 . 0139 c2a3 45 clr digit.3 013b 20a406 46 jb key_press, check5 47 013e 75804f

Assembly Programming Manual

8051 Project Board v1.0

Student name:____________________________________________________

Student ID:______________________ Major:__________________________

Page 2: Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0 44 . 0139 c2a3 45 clr digit.3 013b 20a406 46 jb key_press, check5 47 013e 75804f

Listing Program1

1 $MOD52 2 0000 3 CSEG AT 00000 020100 4 JMP START 5 0100 6 ORG 100H 7 0100 B292 8 START: CPL P1.2 ; DEBUG LED0102 120107 9 CALL DELAY ; DELAY0105 80F9 10 JMP START ; REPEAT LOOP 11 0107 7F00 12 DELAY: MOV R7,#00109 7E00 13 DELAY1: MOV R6,#0010B DEFE 14 DJNZ R6,$010D DFFA 15 DJNZ R7,DELAY1010F 22 16 RET 17 18 END

VERSION 1.2k ASSEMBLY COMPLETE, 0 ERRORS FOUND LED PAGE 2

DELAY. . . . . . . . . . . . . . C ADDR 0107H DELAY1 . . . . . . . . . . . . . C ADDR 0109H P1 . . . . . . . . . . . . . . . D ADDR 0090H PREDEFINED START. . . . . . . . . . . . . . C ADDR 0100H

HEX file

:03000000020100FA:10010000B29212010780F97F007E00DEFEDFFA2244:00000001FF

Page 3: Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0 44 . 0139 c2a3 45 clr digit.3 013b 20a406 46 jb key_press, check5 47 013e 75804f

Exercise 1

1. Explain the operation of below instructions:

CPL P1.2 _________________________________________________

JMP START _______________________________________________

CALL DELAY______________________________________________

MOV R6,#0________________________________________________

DJNZ R6,$_________________________________________________

RET_______________________________________________________

2. Explain the Assembler control directives:

$MOD52__________________________________________________

CSEG_____________________________________________________

ORG______________________________________________________

END______________________________________________________

3. The first record of Intel hex file is,

:03 0000 00 020100 FA

Explain the meanings of below symbols;

:__________________________

03_________________________

0000_______________________

00_________________________

Page 4: Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0 44 . 0139 c2a3 45 clr digit.3 013b 20a406 46 jb key_press, check5 47 013e 75804f

02________________________

0100______________________

FA _______________________

The last record is

:000000 01 FF

Explain the meanings;

01________________________

FF________________________

4. Modify the source code and make blinking speed faster, how to do that? Why?

Page 5: Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0 44 . 0139 c2a3 45 clr digit.3 013b 20a406 46 jb key_press, check5 47 013e 75804f

Listing Program2

SEVEN1.ASM PAGE 1

1 ; SEVEN SEGMENT TEST PROGRAM #1 2 3 $MOD52 4 0080 5 SEGMENT EQU P0 ; PORT 0 DRIVES LED SEGMENT 00A0 6 DIGIT EQU P2 ; PORT 2 DRIVES COMMON PIN 7 0000 8 CSEG AT 00000 020100 9 JMP START 10 0100 11 ORG 100H 12 0100 75A0FE 13 START: MOV DIGIT,#11111110B0103 7580FF 14 MOV SEGMENT,#11111111B0106 120114 15 CALL DELAY 16 0109 75A0FD 17 MOV DIGIT,#11111101B010C 7580FF 18 MOV SEGMENT,#11111111B010F 120114 19 CALL DELAY 20 0112 80EC 21 JMP START ; REPEAT LOOP 22 0114 7F00 23 DELAY: MOV R7,#00116 7E00 24 DELAY1: MOV R6,#00118 DEFE 25 DJNZ R6,$011A DFFA 26 DJNZ R7,DELAY1011C 22 27 RET 28 29 END

VERSION 1.2k ASSEMBLY COMPLETE, 0 ERRORS FOUNDSEVEN1 PAGE 2

DELAY. . . . . . . . . . . . . . C ADDR 0114H DELAY1 . . . . . . . . . . . . . C ADDR 0116H DIGIT. . . . . . . . . . . . . . NUMB 00A0H P0 . . . . . . . . . . . . . . . D ADDR 0080H PREDEFINED P2 . . . . . . . . . . . . . . . D ADDR 00A0H PREDEFINED SEGMENT. . . . . . . . . . . . . NUMB 0080H START. . . . . . . . . . . . . . C ADDR 0100H

Page 6: Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0 44 . 0139 c2a3 45 clr digit.3 013b 20a406 46 jb key_press, check5 47 013e 75804f

Exercise 2

1. Explain the assembler directives:

EQU_________________________________________________

1. Explain the instructions below:

MOV DIGIT,#11111110B ________________________

MOV SEGMENT,#11111111B_______________________

2. Modify the source code, make all four digits running. How?

Page 7: Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0 44 . 0139 c2a3 45 clr digit.3 013b 20a406 46 jb key_press, check5 47 013e 75804f

Listing Program 3

SEVEN2 PAGE 1

1 ; SEVEN SEGMENT TEST PROGRAM #2 2 3 $MOD52 4 0080 5 SEGMENT EQU P0 ; PORT 0 DRIVES LED SEGMENT 00A0 6 DIGIT EQU P2 ; PORT 2 DRIVES COMMON PIN 7 0000 8 CSEG AT 00000 020100 9 JMP START 10 0100 11 ORG 100H 12 0100 75A0F7 13 START: MOV DIGIT,#11110111B0103 75807F 14 MOV SEGMENT,#01111111B0106 120126 15 CALL DELAY 16 0109 75A0FB 17 MOV DIGIT,#11111011B010C 75807F 18 MOV SEGMENT,#01111111B010F 120126 19 CALL DELAY 20 0112 75A0FD 21 MOV DIGIT,#11111101B0115 75807F 22 MOV SEGMENT,#01111111B0118 120126 23 CALL DELAY 24 011B 75A0FE 25 MOV DIGIT,#11111110B011E 75807F 26 MOV SEGMENT,#01111111B0121 120126 27 CALL DELAY 28 0124 80DA 29 JMP START ; REPEAT LOOP 30 0126 7F00 31 DELAY: MOV R7,#00128 7E00 32 DELAY1: MOV R6,#0012A DEFE 33 DJNZ R6,$012C DFFA 34 DJNZ R7,DELAY1012E 22 35 RET 36 37 END

VERSION 1.2k ASSEMBLY COMPLETE, 0 ERRORS FOUND

Page 8: Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0 44 . 0139 c2a3 45 clr digit.3 013b 20a406 46 jb key_press, check5 47 013e 75804f

SEVEN2 PAGE 2

DELAY. . . . . . . . . . . . . . C ADDR 0126H DELAY1 . . . . . . . . . . . . . C ADDR 0128H DIGIT. . . . . . . . . . . . . . NUMB 00A0H P0 . . . . . . . . . . . . . . . D ADDR 0080H PREDEFINED P2 . . . . . . . . . . . . . . . D ADDR 00A0H PREDEFINED SEGMENT. . . . . . . . . . . . . NUMB 0080H START. . . . . . . . . . . . . . C ADDR 0100H

Page 9: Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0 44 . 0139 c2a3 45 clr digit.3 013b 20a406 46 jb key_press, check5 47 013e 75804f

Exercise 3

1. Modify the source code, change blinking direction from right to left to left to right. How?

2. Make your own running pattern, says, small BOX cycling. How?

Page 10: Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0 44 . 0139 c2a3 45 clr digit.3 013b 20a406 46 jb key_press, check5 47 013e 75804f

Listing Program 4

SEVEN3.ASM PAGE 1

1 ; SEVEN SEGMENT TEST PROGRAM #3 2 3 $MOD52 4 0080 5 SEGMENT EQU P0 ; PORT 0 DRIVES LED SEGMENT 00A0 6 DIGIT EQU P2 ; PORT 2 DRIVES COMMON PIN 7 0000 8 CSEG AT 00000 020100 9 JMP START 10 0100 11 ORG 100H 12 0100 75A0F7 13 START: MOV DIGIT,#11110111B0103 758006 14 MOV SEGMENT,#60106 120126 15 CALL DELAY 16 0109 75A0FB 17 MOV DIGIT,#11111011B010C 75806D 18 MOV SEGMENT,#6DH010F 120126 19 CALL DELAY 20 0112 75A0FD 21 MOV DIGIT,#11111101B0115 75803F 22 MOV SEGMENT,#3FH0118 120126 23 CALL DELAY 24 011B 75A0FE 25 MOV DIGIT,#11111110B011E 75807F 26 MOV SEGMENT,#7FH0121 120126 27 CALL DELAY 28 0124 80DA 29 JMP START ; REPEAT LOOP 30 0126 7F0A 31 DELAY: MOV R7,#100128 7E00 32 DELAY1: MOV R6,#0012A DEFE 33 DJNZ R6,$012C DFFA 34 DJNZ R7,DELAY1012E 22 35 RET 36 37 END

VERSION 1.2k ASSEMBLY COMPLETE, 0 ERRORS FOUND

Page 11: Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0 44 . 0139 c2a3 45 clr digit.3 013b 20a406 46 jb key_press, check5 47 013e 75804f

SEVEN3 PAGE 2

DELAY. . . . . . . . . . . . . . C ADDR 0126H DELAY1 . . . . . . . . . . . . . C ADDR 0128H DIGIT. . . . . . . . . . . . . . NUMB 00A0H P0 . . . . . . . . . . . . . . . D ADDR 0080H PREDEFINED P2 . . . . . . . . . . . . . . . D ADDR 00A0H PREDEFINED SEGMENT. . . . . . . . . . . . . NUMB 0080H START. . . . . . . . . . . . . . C ADDR 0100H

Page 12: Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0 44 . 0139 c2a3 45 clr digit.3 013b 20a406 46 jb key_press, check5 47 013e 75804f

Exercise 4

1. Modify the source code, show your name on the display, how?

Example,

pele

Page 13: Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0 44 . 0139 c2a3 45 clr digit.3 013b 20a406 46 jb key_press, check5 47 013e 75804f

Listing Program5KEY1.ASM PAGE 1

1 ; KEY SWITCH INPUT TEST PROGRAM #1 2 ; DISPLAY ZERO WHEN KEY WAS PRESSED 3 4 $MOD52 5 0080 6 SEGMENT EQU P0 ; PORT 0 DRIVES LED SEGMENT 00A0 7 DIGIT EQU P2 ; PORT 2 DRIVES COMMON PIN 00A4 8 KEY_PRESS EQU P2.4 ; ACTIVE LOW KEY PRESSED 9 0000 10 CSEG AT 00000 020100 11 JMP START 12 0100 13 ORG 100H 14 0100 75A0FF 15 START: MOV DIGIT,#11111111B ; ALL BITS ARE LOGIC HIGH0103 758000 16 MOV SEGMENT,#0 17 0106 C2A0 18 CLR DIGIT.00108 20A406 19 JB KEY_PRESS, CHECK2 20 010B 75803F 21 MOV SEGMENT,#3FH010E 30A4FD 22 JNB KEY_PRESS,$ 23 0111 75A0FF 24 CHECK2: MOV DIGIT,#11111111B ; ALL BITS ARE LOGIC HIGH0114 758000 25 MOV SEGMENT,#0 26 0117 C2A1 27 CLR DIGIT.10119 20A406 28 JB KEY_PRESS, CHECK3 29 011C 758006 30 MOV SEGMENT,#6011F 30A4FD 31 JNB KEY_PRESS,$ 32 0122 75A0FF 33 CHECK3: MOV DIGIT,#11111111B0125 758000 34 MOV SEGMENT,#0 35 0128 C2A2 36 CLR DIGIT.2012A 20A406 37 JB KEY_PRESS, CHECK4 38 012D 75805B 39 MOV SEGMENT,#5BH0130 30A4FD 40 JNB KEY_PRESS,$ 41 0133 75A0FF 42 CHECK4: MOV DIGIT,#11111111B0136 758000 43 MOV SEGMENT,#0 44

Page 14: Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0 44 . 0139 c2a3 45 clr digit.3 013b 20a406 46 jb key_press, check5 47 013e 75804f

0139 C2A3 45 CLR DIGIT.3013B 20A406 46 JB KEY_PRESS, CHECK5 47 013E 75804F 48 MOV SEGMENT,#4FH0141 30A4FD 49 JNB KEY_PRESS,$ 50 0144 80BA 51 CHECK5: JMP START 52 53 54 0146 7F00 55 DELAY: MOV R7,#00148 7E00 56 DELAY1: MOV R6,#0014A DEFE 57 DJNZ R6,$014C DFFA 58 DJNZ R7,DELAY1014E 22 59 RET 60 61 END

VERSION 1.2k ASSEMBLY COMPLETE, 0 ERRORS FOUNDKEY1 PAGE 3

CHECK2 . . . . . . . . . . . . . C ADDR 0111H CHECK3 . . . . . . . . . . . . . C ADDR 0122H CHECK4 . . . . . . . . . . . . . C ADDR 0133H CHECK5 . . . . . . . . . . . . . C ADDR 0144H DELAY. . . . . . . . . . . . . . C ADDR 0146H NOT USED DELAY1 . . . . . . . . . . . . . C ADDR 0148H DIGIT. . . . . . . . . . . . . . NUMB 00A0H KEY_PRESS. . . . . . . . . . . . NUMB 00A4H P0 . . . . . . . . . . . . . . . D ADDR 0080H PREDEFINED P2 . . . . . . . . . . . . . . . D ADDR 00A0H PREDEFINED SEGMENT. . . . . . . . . . . . . NUMB 0080H START. . . . . . . . . . . . . . C ADDR 0100H

Page 15: Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0 44 . 0139 c2a3 45 clr digit.3 013b 20a406 46 jb key_press, check5 47 013e 75804f

Exercise 5

1. Modify the source code, show the letter with key pressed

H, SW4 pressedO, SW3 pressedL, SW2 pressedA, SW1 pressed

2. Explain the operation of instructions:

KEY_PRESSED EQU P2.4

CLR DIGIT.0___________________________________________

JB KEY_PRESSED, CHECK2

JNB KEY_PRESSED, $

Page 16: Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0 44 . 0139 c2a3 45 clr digit.3 013b 20a406 46 jb key_press, check5 47 013e 75804f

Listing Program #6INT0.ASM PAGE 1

1 ; Test program using timer0 interrupt 2 ; CPU jumo to interrupt vector at 000BH 3 4 ; INTERRUPT VECTORS 5 6 ; Interrupt Flag Interrupt Vectors 7 ;----------------------------- 8 ; External 0 IE0 0003h 9 ; Timer 0 TF0 000Bh 10 ; External 1 IE1 0013h 11 ; Timer 1 TF1 001Bh 12 ; Serial RI/TI 0023h 13 ; Timer/Counter2 TF2 002Bh 14 15 $MOD52 16 0040 17 DSEG AT 40H 18 0040 19 TICK: DS 1 20 21 0000 22 CSEG AT 0 23 0000 020100 24 JMP MAIN 25 000B 26 ORG 000BH 27 000B 28 TIMER0_INTERRUPT: 29 000B C0E0 30 PUSH ACC 31 000D 438CD8 32 ORL TH0,#0D8H ; reload timer0 with D8F00010 438AF0 33 ORL TL0,#0F0H 34 0013 0540 35 INC TICK0015 E540 36 MOV A,TICK0017 B43205 37 CJNE A,#50,SKIP001A 754000 38 MOV TICK,#0 39 001D B292 40 CPL P1.2 41 001F D0E0 42 SKIP: POP ACC0021 32 43 RETI 44 45 46

Page 17: Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0 44 . 0139 c2a3 45 clr digit.3 013b 20a406 46 jb key_press, check5 47 013e 75804f

0100 47 ORG 100H 48 0100 758160 49 MAIN: MOV SP,#60H 0103 758901 50 MOV TMOD,#010106 D2A9 51 SETB ET00108 D2AF 52 SETB EA010A D28C 53 SETB TR0 54 010C 80FE 55 WAIT: SJMP WAIT 56 57 END

VERSION 1.2k ASSEMBLY COMPLETE, 0 ERRORS FOUNDINT0 PAGE 2

ACC. . . . . . . . . . . . . . . D ADDR 00E0H PREDEFINED EA . . . . . . . . . . . . . . . B ADDR 00AFH PREDEFINED ET0. . . . . . . . . . . . . . . B ADDR 00A9H PREDEFINED MAIN . . . . . . . . . . . . . . C ADDR 0100H P1 . . . . . . . . . . . . . . . D ADDR 0090H PREDEFINED SKIP . . . . . . . . . . . . . . C ADDR 001FH SP . . . . . . . . . . . . . . . D ADDR 0081H PREDEFINED TH0. . . . . . . . . . . . . . . D ADDR 008CH PREDEFINED TICK . . . . . . . . . . . . . . D ADDR 0040H TIMER0_INTERRUPT . . . . . . . . C ADDR 000BH NOT USED TL0. . . . . . . . . . . . . . . D ADDR 008AH PREDEFINED TMOD . . . . . . . . . . . . . . D ADDR 0089H PREDEFINED TR0. . . . . . . . . . . . . . . B ADDR 008CH PREDEFINED WAIT . . . . . . . . . . . . . . C ADDR 010CH

Page 18: Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0 44 . 0139 c2a3 45 clr digit.3 013b 20a406 46 jb key_press, check5 47 013e 75804f

Exercise 6

1. What are interrupt vectors?

2. Where is the location of timer0 interrupt vector?

3. Which bits need to be set to enable Timer0 interrupt?

4. How to find the reloaded value, D8F0H to timer0? (Xtal frequency is 12MHz)

Page 19: Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0 44 . 0139 c2a3 45 clr digit.3 013b 20a406 46 jb key_press, check5 47 013e 75804f

Listing Program #7SECTICK.ASM PAGE 1

1 ; Using 10ms tick to produce one second display on 7-segment 2 $MOD52 3 0080 4 SEGMENT EQU P0 ; PORT 0 DRIVES LED SEGMENT 00A0 5 DIGIT EQU P2 ; PORT 2 DRIVES COMMON PIN 6 0040 7 DSEG AT 40H 8 0040 9 TICK: DS 10041 10 SEC: DS 1 11 12 0000 13 CSEG AT 0 14 0000 020100 15 JMP MAIN 16 000B 17 ORG 000BH000B 120117 18 CALL TIMER0_INTERRUPT000E 22 19 RET 20 21 0100 22 ORG 100H 23 0100 758160 24 MAIN: MOV SP,#60H 0103 758901 25 MOV TMOD,#010106 D2A9 26 SETB ET00108 D2AF 27 SETB EA010A D28C 28 SETB TR0 29 010C 754100 30 MOV SEC,#0010F 75803F 31 MOV SEGMENT,#3FH0112 75A0F7 32 MOV DIGIT,#11110111B 33 0115 80FE 34 WAIT: SJMP WAIT 35 36 37 0117 38 TIMER0_INTERRUPT: 39 0117 C0E0 40 PUSH ACC 41 0119 438CD8 42 ORL TH0,#0D8H ; reload timer0 with D8F0011C 438AF0 43 ORL TL0,#0F0H 44 011F 0540 45 INC TICK

Page 20: Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0 44 . 0139 c2a3 45 clr digit.3 013b 20a406 46 jb key_press, check5 47 013e 75804f

0121 E540 46 MOV A,TICK0123 B46417 47 CJNE A,#100,SKIP0126 754000 48 MOV TICK,#0 49 0129 0541 50 INC SEC012B E541 51 MOV A,SEC012D B40A03 52 CJNE A,#10,SKIP10130 754100 53 MOV SEC,#0 54 0133 900140 55 SKIP1: MOV DPTR,#TABLE10136 E541 56 MOV A,SEC0138 93 57 MOVC A,@A+DPTR0139 F580 58 MOV SEGMENT,A 59 60 61 013B B292 62 CPL P1.2 63 013D D0E0 64 SKIP: POP ACC013F 32 65 RETI 66 67 68 0140 3F065B4F 69 TABLE1: DB 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,77h,7ch,39h,5eh,79h,71h0144 666D7D07 0148 7F6F777C 014C 395E7971 70 71 72 73 END

VERSION 1.2k ASSEMBLY COMPLETE, 0 ERRORS FOUND

Page 21: Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0 44 . 0139 c2a3 45 clr digit.3 013b 20a406 46 jb key_press, check5 47 013e 75804f

Exercise 7

1. Explain the operation of below instructions:

PUSH ACC

__________________________________________________________

POP ACC

RETI

___________________________________________________________

MOVC A,@A+DPTR

__________________________________________________________

1. Modify the source code, change the position of number displaying to theleft most digit. How?

Page 22: Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0 44 . 0139 c2a3 45 clr digit.3 013b 20a406 46 jb key_press, check5 47 013e 75804f

Listing Program #8UART1.ASM PAGE 1

1 ; UART TEST PROGRAM #1 2 3 $MOD52 4 0080 5 SEGMENT EQU P0 ; PORT 0 DRIVES LED SEGMENT 00A0 6 DIGIT EQU P2 ; PORT 2 DRIVES COMMON PIN 7 0000 8 CSEG AT 00000 020100 9 JMP START 10 0100 11 ORG 100H 12 0100 758180 13 START: MOV SP,#80H 14 0103 120114 15 CALL INIT_UART 16 0106 7820 17 RELOAD: MOV R0,#20H 18 0108 E8 19 LOOP: MOV A,R00109 120123 20 CALL COUT010C 08 21 INC R0010D B880F8 22 CJNE R0,#80H,LOOP 23 0110 80F4 24 SJMP RELOAD 25 0112 80EC 26 JMP START ; REPEAT LOOP 27 28 ; SUBROUTINES 29 0114 30 INIT_UART: 31 0114 75C830 32 MOV T2CON,#30H ;0117 75CBFF 33 MOV RCAP2H,#0FFH ;011A 75CAD9 34 MOV RCAP2L,#0d9H ;011D 759852 35 MOV SCON,#52H ;0120 D2CA 36 SETB TR2 ; 37 0122 22 38 RET 39 40 0123 3099FD 41 COUT: JNB TI,$0126 C299 42 CLR TI0128 F599 43 MOV SBUF,A012A 22 44 RET 45 012B 3098FD 46 CIN: JNB RI,$012E C298 47 CLR RI

Page 23: Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0 44 . 0139 c2a3 45 clr digit.3 013b 20a406 46 jb key_press, check5 47 013e 75804f

0130 E599 48 MOV A,SBUF0132 22 49 RET 50 51 0133 7F00 52 DELAY: MOV R7,#00135 7E00 53 DELAY1: MOV R6,#00137 DEFE 54 DJNZ R6,$0139 DFFA 55 DJNZ R7,DELAY1013B 22 56 RET 57 58 END

VERSION 1.2k ASSEMBLY COMPLETE, 0 ERRORS FOUNDUART1 PAGE 2

CIN. . . . . . . . . . . . . . . C ADDR 012BH NOT USED COUT . . . . . . . . . . . . . . C ADDR 0123H DELAY. . . . . . . . . . . . . . C ADDR 0133H NOT USED DELAY1 . . . . . . . . . . . . . C ADDR 0135H DIGIT. . . . . . . . . . . . . . NUMB 00A0H NOT USED INIT_UART. . . . . . . . . . . . C ADDR 0114H LOOP . . . . . . . . . . . . . . C ADDR 0108H P0 . . . . . . . . . . . . . . . D ADDR 0080H PREDEFINED P2 . . . . . . . . . . . . . . . D ADDR 00A0H PREDEFINED RCAP2H . . . . . . . . . . . . . D ADDR 00CBH PREDEFINED RCAP2L . . . . . . . . . . . . . D ADDR 00CAH PREDEFINED RELOAD . . . . . . . . . . . . . C ADDR 0106H RI . . . . . . . . . . . . . . . B ADDR 0098H PREDEFINED SBUF . . . . . . . . . . . . . . D ADDR 0099H PREDEFINED SCON . . . . . . . . . . . . . . D ADDR 0098H PREDEFINED SEGMENT. . . . . . . . . . . . . NUMB 0080H NOT USED SP . . . . . . . . . . . . . . . D ADDR 0081H PREDEFINED START. . . . . . . . . . . . . . C ADDR 0100H T2CON. . . . . . . . . . . . . . D ADDR 00C8H PREDEFINED TI . . . . . . . . . . . . . . . B ADDR 0099H PREDEFINED TR2. . . . . . . . . . . . . . . B ADDR 00CAH PREDEFINED

Page 24: Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0 44 . 0139 c2a3 45 clr digit.3 013b 20a406 46 jb key_press, check5 47 013e 75804f

Exercise 8

1. What is UART?

2. Explain how to initialize registers to enable the 8051 UART hardware?

3. What is 9600 terminal?

Page 25: Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0 44 . 0139 c2a3 45 clr digit.3 013b 20a406 46 jb key_press, check5 47 013e 75804f

Listing Program #9UART2.ASM PAGE 1

1 ; UART TEST PROGRAM #2 2 ; read CIN and write to COUT 3 ; enter text with key ENTER 4 5 $MOD52 6 0080 7 SEGMENT EQU P0 ; PORT 0 DRIVES LED SEGMENT 00A0 8 DIGIT EQU P2 ; PORT 2 DRIVES COMMON PIN 9 0000 10 CSEG AT 00000 020100 11 JMP START 12 0100 13 ORG 100H 14 0100 758180 15 START: MOV SP,#80H 16 0103 120117 17 CALL INIT_UART 18 0106 12014A 19 START2: CALL PRT_TITLE 20 0109 12012E 21 LOOP: CALL CIN010C 120126 22 CALL COUT010F B40DF7 23 CJNE A,#0DH,LOOP 24 0112 120150 25 CALL PRT_THANKS0115 80EF 26 JMP START2 ; REPEAT LOOP 27 28 ; SUBROUTINES 29 0117 30 INIT_UART: 31 0117 75C830 32 MOV T2CON,#30H ;011A 75CBFF 33 MOV RCAP2H,#0FFH ;011D 75CAD9 34 MOV RCAP2L,#0d9H ;0120 759852 35 MOV SCON,#52H ;0123 D2CA 36 SETB TR2 ; 37 0125 22 38 RET 39 40 0126 3099FD 41 COUT: JNB TI,$0129 C299 42 CLR TI012B F599 43 MOV SBUF,A012D 22 44 RET 45 012E 3098FD 46 CIN: JNB RI,$

Page 26: Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0 44 . 0139 c2a3 45 clr digit.3 013b 20a406 46 jb key_press, check5 47 013e 75804f

0131 C298 47 CLR RI0133 E599 48 MOV A,SBUF0135 22 49 RET 50 0136 E4 51 PUTSTR: CLR A0137 93 52 MOVC A,@A+DPTR0138 B40001 53 CJNE A,#0,SENDIT013B 22 54 RET 55 013C 3126 56 SENDIT: CALL COUT013E A3 57 INC DPTR013F 80F5 58 SJMP PUTSTR 59 60 0141 7F00 61 DELAY: MOV R7,#00143 7E00 62 DELAY1: MOV R6,#00145 DEFE 63 DJNZ R6,$0147 DFFA 64 DJNZ R7,DELAY10149 22 65 RET 66 014A 900156 67 PRT_TITLE: MOV DPTR,#TEXT1014D 3136 68 CALL PUTSTR014F 22 69 RET 70 0150 90016C 71 PRT_THANKS: MOV DPTR,#TEXT20153 3136 72 CALL PUTSTR0155 22 73 RET 74 75 0156 0D0A5768 76 TEXT1: DB 0dh,0ah,'What is your name?',0015A 61742069 015E 7320796F 0162 7572206E 0166 616D653F 016A 2000 016C 0D0A5468 77 TEXT2: DB 0DH,0AH,'Thanks...',00170 616E6B73 0174 2E2E2E00 78 79 END 80 81

Page 27: Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0 44 . 0139 c2a3 45 clr digit.3 013b 20a406 46 jb key_press, check5 47 013e 75804f

VERSION 1.2k ASSEMBLY COMPLETE, 0 ERRORS FOUNDUART2 PAGE 3

CIN. . . . . . . . . . . . . . . C ADDR 012EH COUT . . . . . . . . . . . . . . C ADDR 0126H DELAY. . . . . . . . . . . . . . C ADDR 0141H NOT USED DELAY1 . . . . . . . . . . . . . C ADDR 0143H DIGIT. . . . . . . . . . . . . . NUMB 00A0H NOT USED INIT_UART. . . . . . . . . . . . C ADDR 0117H LOOP . . . . . . . . . . . . . . C ADDR 0109H P0 . . . . . . . . . . . . . . . D ADDR 0080H PREDEFINED P2 . . . . . . . . . . . . . . . D ADDR 00A0H PREDEFINED PRT_THANKS . . . . . . . . . . . C ADDR 0150H PRT_TITLE. . . . . . . . . . . . C ADDR 014AH PUTSTR . . . . . . . . . . . . . C ADDR 0136H RCAP2H . . . . . . . . . . . . . D ADDR 00CBH PREDEFINED RCAP2L . . . . . . . . . . . . . D ADDR 00CAH PREDEFINED RI . . . . . . . . . . . . . . . B ADDR 0098H PREDEFINED SBUF . . . . . . . . . . . . . . D ADDR 0099H PREDEFINED SCON . . . . . . . . . . . . . . D ADDR 0098H PREDEFINED SEGMENT. . . . . . . . . . . . . NUMB 0080H NOT USED SENDIT . . . . . . . . . . . . . C ADDR 013CH SP . . . . . . . . . . . . . . . D ADDR 0081H PREDEFINED START. . . . . . . . . . . . . . C ADDR 0100H START2 . . . . . . . . . . . . . C ADDR 0106H T2CON. . . . . . . . . . . . . . D ADDR 00C8H PREDEFINED TEXT1. . . . . . . . . . . . . . C ADDR 0156H TEXT2. . . . . . . . . . . . . . C ADDR 016CH TI . . . . . . . . . . . . . . . B ADDR 0099H PREDEFINED TR2. . . . . . . . . . . . . . . B ADDR 00CAH PREDEFINED

Page 28: Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0 44 . 0139 c2a3 45 clr digit.3 013b 20a406 46 jb key_press, check5 47 013e 75804f

Exercise 9

1. Modify the source code, let the program responses with word started with the letter that pressed.

For example; press key, h, echo with Hello. Press key, b, echo with Boy.

Page 29: Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0 44 . 0139 c2a3 45 clr digit.3 013b 20a406 46 jb key_press, check5 47 013e 75804f

55

44

33

22

11

DD

CC

BB

AA

+5V

ADC0

RS

GND

R/W

ADC1

E

External +5V USB powerAdapter/PowerBank/SolarUSB/USBrealtime data

UART to USB

10-pin USBaspLoader

Designed by Wichit Sirichote, [email protected] (C) 2017

<Doc>

1

8051 PR

OJE

CT

BO

ARD

V1.0

Custom

11

Monday, S

eptember 25, 2017

Title

Size

Docum

ent Num

berR

ev

Date:

Sheet

of

P3.2/IN

T0

D3

P1.1/T

2-EX

D0

DIG

IT1

SC

K

P3.2/IN

T0

P1.1/T

2-EX

D1

DIG

IT4RS

P3.4/T

0

D2

D7

DIG

IT2

CS

KE

Y_P

RE

SS

P1.2

D6

E

D4

ADC

DAT

A

D5

P3.4/T

0

XTAL1

MO

SI

D1

D2

P3.3/IN

T1

P1.0/T

2T

XD

P1.3

12MH

zXT

AL2

P1.0/T

2

MIS

O DIG

IT3RW

D6

D5

P3.3/IN

T1

D4

SC

K

RXD

RS

RW

XTAL1

P1.2

P3.5/T

1

E

RE

SE

T D0

P1.3

D3

P3.7

CS

P3.7

P3.5/T

1

XTAL2

D7

ADC

DAT

A

D4

D2

D0

D6

D1

D7

D5

D3

DIG

IT2

DIG

IT3

DIG

IT4

KE

Y_P

RE

SS

DIG

IT1

D5

D2

D3

D7

D6

D0

D1

D4

12MH

z

TXD

+5VUS

B

+5VUS

BR

XD

UD

+

UD

-

+5VUS

B

MO

SI

MIS

OS

CK

MO

SI

RE

SE

TS

CK

MIS

O

VCC

VCC

VCC

VCC

VCC

VCC

VCC

VCC

VCC

VCC

VCC

U2SS

T59E

516RD

/AT89S

52

9 18 192930

31

40

12345678

21222324252627281011121314151617

3938373635343332

RS

TXT

AL2XT

AL1P

SE

N

ALE/P

RO

G

EA/VP

P

VCC

P1.0/T

2P

1.1/T2-E

XP

1.2P

1.3P

1.4P

1.5/MO

SI

P1.6/M

ISO

P1.7/S

Ck

P2.0/A8

P2.1/A9

P2.2/A10

P2.3/A11

P2.4/A12

P2.5/A13

P2.6/A14

P2.7/A15

P3.0/R

XDP

3.1/TXD

P3.2/IN

TO

P3.3/IN

T1

P3.4/T

OP

3.5/T1

P3.6/W

RP

3.7/RD

P0.0/AD

0P

0.1/AD1

P0.2/AD

2P

0.3/AD3

P0.4/AD

4P

0.5/AD5

P0.6/AD

6P

0.7/AD7

U3

MC

3202

1 5 678

23

CS

/SH

DN

DIN

DO

UT

CLK

VCC

CH

0

CH

1

D21N

5231B 5.1Vz 1/2W

J3CO

N6

123456

+

C10

100uF 16V

C11

0.1uF

+C

5100uF

C9

100nF

U4CH

340G

16417856 23

15

VCC

V3GN

D

XIXOU

D+

UD

-

TXD

RXD

RS

232

R8100

SW

2

12

JR1

CO

NN

RE

CT

16

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

D-D+ +5V

GND

CN

1M

ICR

O-U

SB

1234

5

SW

3

12

+

C4

10uF 16V

SW

4

12

S1

RE

SE

T

J2

13579111315

246810121416

++++++++

++++++++

TP

1

+5V 1

TP

2

GN

D

1

C

R4

1k RE

SIS

TO

R S

IP 9

123456789

C6

100nF

J1CO

N10AP

13579

246810

+++++

+++++

R6

100

R7

100

+C

310uF

R3

10K

13

2

R5

10k

C12

100nF

Q1

12MH

z

SW

1

12

C7

0.1uF

D1DE

BU

G LE

D

C8

0.1uF

C1

30pF

R2

5

R1

330C

2

30pF

U1LT

C-4727JR

1416133511157

1

2

6

8

4

ABCDEFGDP

DIGIT1

DIGIT2

DIGIT3

DIGIT4

L1L2L3

Page 30: Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0 44 . 0139 c2a3 45 clr digit.3 013b 20a406 46 jb key_press, check5 47 013e 75804f

8051BOARD

Page 1

8051 PROJECT BOARD V1.0 Revised: Monday, September 25, 2017 Revision: 1Bill Of Material Page1

Item Quantity Reference Part Chk______________________________________________

1 1 CN1 MICRO-USB connector2 2 C1,C2 30pF ceramic cap3 1 C3 10uF 16V electrolytic capacitor4 1 C4 10uF 16V5 1 C5 10uF electrolytic capacitor6 3 C6,C9,C12 100nF7 3 C7,C8,C11 0.1uF8 1 C10 10uF 16V9 1 D1 3mm LED

10 1 D2 1N5231B 5.1Vz 1/2W zener diode11 1 JR1 Header 16-pin12 1 J1 CON10AP13 1 J2 CON16AP14 1 J3 CON615 1 Q1 12MHz xtal16 1 R1 Ohms 330 1/8W 5%17 1 R2 Ohms 5 1/8W 5%18 2 R3,R5 10k 1/8W 5%19 1 R4 1k RESISTOR SIP 920 3 R6,R7,R8 Ohms 100 1/8W 5%21 4 SW1,SW2,SW3,SW4 12x12 TACT switch22 1 S1 6x6 TACT switch RESET23 1 TP1 +5V24 1 TP2 GND25 1 U1 LTC-4727JR26 1 U2 SST89E516RD + 40 pins socket27 1 U3 MCP3202 12-bit ADC + 8 pins socket28 1 U4 CH340G USB-UART chip29 1 PCB Printed Circuit Board

Page 31: Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0 44 . 0139 c2a3 45 clr digit.3 013b 20a406 46 jb key_press, check5 47 013e 75804f
Page 32: Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0 44 . 0139 c2a3 45 clr digit.3 013b 20a406 46 jb key_press, check5 47 013e 75804f

8051 Instruction hex code

MOVE with immediate data

Hex Bytes Instruction74 2 MOV A, #immediate75 3 MOV direct, #immediate76 2 MOV @R0, #immediate77 2 MOV @R1, #immediate78 2 MOV R0, #immediate79 2 MOV R1, #immediate7A 2 MOV R2, #immediate7B 2 MOV R3, #immediate7C 2 MOV R4, #immediate7D 2 MOV R5, #immediate7E 2 MOV R6, #immediate7F 2 MOV R7, #immediate90 3 MOV DPTR, #immediate

MOVE with direct memory location

85 3 MOV direct, direct88 2 MOV direct, R089 2 MOV direct, R18A 2 MOV direct, R28B 2 MOV direct, R38C 2 MOV direct, R48D 2 MOV direct, R58E 2 MOV direct, R68F 2 MOV direct, R7A8 2 MOV R0, directA9 2 MOV R1, directAA 2 MOV R2, directAB 2 MOV R3, directAC 2 MOV R4, directAD 2 MOV R5, directAE 2 MOV R6, directAF 2 MOV R7, direct

MOVE with Accumulator

E5 2 MOV A, directE6 1 MOV A, @R0E7 1 MOV A, @R1E8 1 MOV A, R0E9 1 MOV A, R1EA 1 MOV A, R2EB 1 MOV A, R3EC 1 MOV A, R4ED 1 MOV A, R5EE 1 MOV A, R6EF 1 MOV A, R7F5 2 MOV direct, AF6 1 MOV @R0, AF7 1 MOV @R1, AF8 1 MOV R0, A

F9 1 MOV R1, AFA 1 MOV R2, AFB 1 MOV R3, AFC 1 MOV R4, AFD 1 MOV R5, AFE 1 MOV R6, AFF 1 MOV R7, A

MOVE with external memory

E0 1 MOVX A, @DPTRE2 1 MOVX A, @R0E3 1 MOVX A, @R1F0 1 MOVX @DPTR, AF2 1 MOVX @R0, AF3 1 MOVX @R1, A

MOVE with code memory

83 1 MOVC A, @A+PC93 1 MOVC A, @A+DPTR

Bit MOVE

92 2 MOV bit, CA2 2 MOV C, bit

Indirect MOVE with R0 and R1

86 2 MOV direct, @R087 2 MOV direct, @R1A6 2 MOV @R0, directA7 2 MOV @R1, direct

ADD with Accumulator

24 2 ADD A, #immediate25 2 ADD A, direct26 1 ADD A, @R027 1 ADD A, @R128 1 ADD A, R029 1 ADD A, R12A 1 ADD A, R22B 1 ADD A, R32C 1 ADD A, R42D 1 ADD A, R52E 1 ADD A, R62F 1 ADD A, R7

ADD with Accumulator & carry flag

34 2 ADDC A, #immediate35 2 ADDC A, direct36 1 ADDC A, @R037 1 ADDC A, @R138 1 ADDC A, R039 1 ADDC A, R1

Page 33: Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0 44 . 0139 c2a3 45 clr digit.3 013b 20a406 46 jb key_press, check5 47 013e 75804f

3A 1 ADDC A, R23B 1 ADDC A, R33C 1 ADDC A, R43D 1 ADDC A, R53E 1 ADDC A, R63F 1 ADDC A, R7

Subtract with borrow

94 2 SUBB A, #immediate95 2 SUBB A, direct96 1 SUBB A, @R097 1 SUBB A, @R198 1 SUBB A, R099 1 SUBB A, R19A 1 SUBB A, R29B 1 SUBB A, R39C 1 SUBB A, R49D 1 SUBB A, R59E 1 SUBB A, R69F 1 SUBB A, R7

INC and DEC

04 1 INC A05 2 INC direct06 1 INC @R007 1 INC @R108 1 INC R009 1 INC R10A 1 INC R20B 1 INC R30C 1 INC R40D 1 INC R50E 1 INC R60F 1 INC R7A3 1 INC DPTR

14 1 DEC A15 2 DEC direct16 1 DEC @R017 1 DEC @R118 1 DEC R019 1 DEC R11A 1 DEC R21B 1 DEC R31C 1 DEC R41D 1 DEC R51E 1 DEC R61F 1 DEC R7

COMPARE with JUMP

B4 3 CJNE A, #immediate, offsetB5 3 CJNE A, direct, offsetB6 3 CJNE @R0, #immediate, offsetB7 3 CJNE @R1, #immediate, offset

B8 3 CJNE R0, #immediate, offsetB9 3 CJNE R1, #immediate, offsetBA 3 CJNE R2, #immediate, offsetBB 3 CJNE R3, #immediate, offsetBC 3 CJNE R4, #immediate, offsetBD 3 CJNE R5, #immediate, offsetBE 3 CJNE R6, #immediate, offsetBF 3 CJNE R7, #immediate, offset

D8 2 DJNZ R0, offsetD9 2 DJNZ R1, offsetDA 2 DJNZ R2, offsetDB 2 DJNZ R3, offsetDC 2 DJNZ R4, offsetDD 2 DJNZ R5, offsetDE 2 DJNZ R6, offsetDF 2 DJNZ R7, offsetD5 3 DJNZ direct, offset

JUMP

01 2 AJMP addr1121 2 AJMP addr1141 2 AJMP addr1161 2 AJMP addr1181 2 AJMP addr11A1 2 AJMP addr11C1 2 AJMP addr11E1 2 AJMP addr11

02 3 LJMP addr1680 2 SJMP offset

JUMP with flag

10 3 JBC bit, offset20 3 JB bit, offset30 3 JNB bit, offset40 2 JC offset50 2 JNC offset60 2 JZ offset70 2 JNZ offset

JUMP indirect

73 1 JMP @A+DPTR

CALL subroutine and Return

11 2 ACALL addr1131 2 ACALL addr1151 2 ACALL addr1171 2 ACALL addr1191 2 ACALL addr11B1 2 ACALL addr11

Page 34: Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0 44 . 0139 c2a3 45 clr digit.3 013b 20a406 46 jb key_press, check5 47 013e 75804f

D1 2 ACALLaddr11F1 2 ACALL addr11

12 3 LCALL addr1622 1 RET32 1 RETI

ROTATE

03 1 RR A13 1 RRC A23 1 RL A 33 1 RLC AC4 1 SWAP A

LOGICAL

52 2 ANL direct, A53 3 ANL direct, #immediate54 2 ANL A, #immediate55 2 ANL A, direct56 1 ANL A, @R057 1 ANL A, @R158 1 ANL A, R059 1 ANL A, R15A 1 ANL A, R25B 1 ANL A, R35C 1 ANL A, R45D 1 ANL A, R55E 1 ANL A, R65F 1 ANL A, R7

42 2 ORL direct, A43 3 ORL direct, #immediate44 2 ORL A, #immediate45 2 ORL A, direct46 1 ORL A, @R047 1 ORL A, @R148 1 ORL A, R049 1 ORL A, R14A 1 ORL A, R24B 1 ORL A, R34C 1 ORL A, R44D 1 ORL A, R54E 1 ORL A, R64F 1 ORL A, R7

62 2 XRL direct, A63 3 XRL direct, #immediate64 2 XRL A, #immediate65 2 XRL A, direct66 1 XRL A, @R067 1 XRL A, @R168 1 XRL A, R069 1 XRL A, R16A 1 XRL A, R26B 1 XRL A, R3

6C 1 XRL A, R46D 1 XRL A, R56E 1 XRL A, R66F 1 XRL A, R7

BIT logical

72 2 ORL C, bit82 2 ANL C, bitA0 2 ORL C, /bitB0 2 ANL C, /bit

B2 2 CPL bitB3 1 CPL CC2 2 CLR bitC3 1 CLR CD2 2 SETB bitD3 1 SETB C

Exchange

C5 2 XCH A, directC6 1 XCH A, @R0C7 1 XCH A, @R1C8 1 XCH A, R0C9 1 XCH A, R1CA 1 XCH A, R2CB 1 XCH A, R3CC 1 XCH A, R4CD 1 XCH A, R5CE 1 XCH A, R6CF 1 XCH A, R71D6 1 XCHD A, @R0D7 1 XCHD A, @R1

PUSH & POP

C0 2 PUSH directD0 2 POP direct

Accumulator

A4 1 MUL AB84 1 DIV ABD4 1 DA AE4 1 CLR AF4 1 CPL A

No operation

00 1 NOP

Prepared for 8051 Microcontroller Kit by Wichit Sirichote © 2015

Page 35: Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0 44 . 0139 c2a3 45 clr digit.3 013b 20a406 46 jb key_press, check5 47 013e 75804f

8051 Instruction hex code

Hex Bytes Instruction00 1 NOP 01 2 AJMP addr1102 3 LJMP addr1603 1 RR A04 1 INC A05 2 INC direct06 1 INC @R007 1 INC @R108 1 INC R009 1 INC R10A 1 INC R20B 1 INC R30C 1 INC R40D 1 INC R50E 1 INC R60F 1 INC R710 3 JBC bit, offset11 2 ACALL addr1112 3 LCALL addr1613 1 RRC A14 1 DEC A15 2 DEC direct16 1 DEC @R017 1 DEC @R118 1 DEC R019 1 DEC R11A 1 DEC R21B 1 DEC R31C 1 DEC R41D 1 DEC R51E 1 DEC R61F 1 DEC R720 3 JB bit, offset21 2 AJMP addr1122 1 RET 23 1 RL A24 2 ADD A, #immediate25 2 ADD A, direct26 1 ADD A, @R027 1 ADD A, @R128 1 ADD A, R029 1 ADD A, R12A 1 ADD A, R22B 1 ADD A, R32C 1 ADD A, R42D 1 ADD A, R52E 1 ADD A, R62F 1 ADD A, R730 3 JNB bit, offset31 2 ACALL addr1132 1 RETI 33 1 RLC A34 2 ADDC A, #immediate

35 2 ADDC A, direct36 1 ADDC A, @R037 1 ADDC A, @R138 1 ADDC A, R039 1 ADDC A, R13A 1 ADDC A, R23B 1 ADDC A, R33C 1 ADDC A, R43D 1 ADDC A, R53E 1 ADDC A, R63F 1 ADDC A, R740 2 JC offset41 2 AJMP addr1142 2 ORL direct, A43 3 ORL direct, #immediate44 2 ORL A, #immediate45 2 ORL A, direct4 6 1 ORL A, @R047 1 ORL A, @R148 1 ORL A, R049 1 ORL A, R14A 1 ORL A, R24B 1 ORL A, R34C 1 ORL A, R44D 1 ORL A, R54E 1 ORL A, R64F 1 ORL A, R750 2 JNC offset51 2 ACALL addr1152 2 ANL direct, A53 3 ANL direct, #immediate54 2 ANL A, #immediate55 2 ANL A, direct56 1 ANL A, @R057 1 ANL A, @R158 1 ANL A, R059 1 ANL A, R15A 1 ANL A, R25B 1 ANL A, R35C 1 ANL A, R45D 1 ANL A, R55E 1 ANL A, R65F 1 ANL A, R760 2 JZ offset61 2 AJMP addr1162 2 XRL direct, A63 3 XRL direct, #immediate64 2 XRL A, #immediate65 2 XRL A, direct66 1 XRL A, @R067 1 XRL A, @R168 1 XRL A, R069 1 XRL A, R16A 1 XRL A, R26B 1 XRL A, R36C 1 XRL A, R46D 1 XRL A, R5

Page 36: Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0 44 . 0139 c2a3 45 clr digit.3 013b 20a406 46 jb key_press, check5 47 013e 75804f

6E 1 XRL A, R66F 1 XRL A, R770 2 JNZ offset71 2 ACALL addr1172 2 ORL C, bit73 1 JMP @A+DPTR74 2 MOV A, #immediate75 3 MOV direct, #immediate76 2 MOV @R0, #immediate77 2 MOV @R1, #immediate78 2 MOV R0, #immediate79 2 MOV R1, #immediate7A 2 MOV R2, #immediate7B 2 MOV R3, #immediate7C 2 MOV R4, #immediate7D 2 MOV R5, #immediate7E 2 MOV R6, #immediate7F 2 MOV R7, #immediate

80 2 SJMP offset81 2 AJMP addr1182 2 ANL C, bit83 1 MOVC A, @A+PC84 1 DIV AB85 3 MOV direct, direct86 2 MOV direct, @R087 2 MOV direct, @R188 2 MOV direct, R089 2 MOV direct, R18A 2 MOV direct, R28B 2 MOV direct, R38C 2 MOV direct, R48D 2 MOV direct, R58E 2 MOV direct, R68F 2 MOV direct, R790 3 MOV DPTR, #immediate91 2 ACALL addr1192 2 MOV bit, C93 1 MOVC A, @A+DPTR94 2 SUBB A, #immediate95 2 SUBB A, direct96 1 SUBB A, @R097 1 SUBB A, @R198 1 SUBB A, R099 1 SUBB A, R19A 1 SUBB A, R29B 1 SUBB A, R39C 1 SUBB A, R49D 1 SUBB A, R59E 1 SUBB A, R69F 1 SUBB A, R7A0 2 ORL C, /bitA1 2 AJMP addr11A2 2 MOV C, bitA3 1 INC DPTRA4 1 MUL ABA5 undefined

A6 2 MOV @R0, directA7 2 MOV @R1, directA8 2 MOV R0, directA9 2 MOV R1, directAA 2 MOV R2, directAB 2 MOV R3, directAC 2 MOV R4, directAD 2 MOV R5, directAE 2 MOV R6, directAF 2 MOV R7, directB0 2 ANL C, /bitB1 2 ACALL addr11B2 2 CPL bitB3 1 CPL CB4 3 CJNE A, #immediate, offsetB5 3 CJNE A, direct, offsetB6 3 CJNE @R0, #immediate, offsetB7 3 CJNE @R1, #immediate, offsetB8 3 CJNE R0, #immediate, offsetB9 3 CJNE R1, #immediate, offsetBA 3 CJNE R2, #immediate, offsetBB 3 CJNE R3, #immediate, offsetBC 3 CJNE R4, #immediate, offsetBD 3 CJNE R5, #immediate, offsetBE 3 CJNE R6, #immediate, offsetBF 3 CJNE R7, #immediate, offsetC0 2 PUSH directC1 2 AJMP addr11C2 2 CLR bitC3 1 CLR CC4 1 SWAP AC5 2 XCH A, directC6 1 XCH A, @R0C7 1 XCH A, @R1C8 1 XCH A, R0C9 1 XCH A, R1CA 1 XCH A, R2CB 1 XCH A, R3CC 1 XCH A, R4CD 1 XCH A, R5CE 1 XCH A, R6CF 1 XCH A, R7D0 2 POP directD1 2 ACALL addr11D2 2 SETB bitD3 1 SETB CD4 1 DA AD5 3 DJNZ direct, offsetD6 1 XCHD A, @R0D7 1 XCHD A, @R1D8 2 DJNZ R0, offsetD9 2 DJNZ R1, offsetDA 2 DJNZ R2, offsetDB 2 DJNZ R3, offsetDC 2 DJNZ R4, offsetDD 2 DJNZ R5, offsetDE 2 DJNZ R6, offset

Page 37: Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0 44 . 0139 c2a3 45 clr digit.3 013b 20a406 46 jb key_press, check5 47 013e 75804f

DF 2 DJNZ R7, offsetE0 1 MOVX A, @DPTRE1 2 AJMP addr11E2 1 MOVX A, @R0E3 1 MOVX A, @R1E4 1 CLR AE5 2 MOV A, directE6 1 MOV A, @R0E7 1 MOV A, @R1E8 1 MOV A, R0E9 1 MOV A, R1EA 1 MOV A, R2EB 1 MOV A, R3EC 1 MOV A, R4ED 1 MOV A, R5EE 1 MOV A, R6EF 1 MOV A, R7F0 1 MOVX @DPTR, AF1 2 ACALL addr11F2 1 MOVX @R0, AF3 1 MOVX @R1, AF4 1 CPL AF5 2 MOV direct, AF6 1 MOV @R0, AF7 1 MOV @R1, AF8 1 MOV R0, AF9 1 MOV R1, AFA 1 MOV R2, AFB 1 MOV R3, AFC 1 MOV R4, AFD 1 MOV R5, AFE 1 MOV R6, AFF 1 MOV R7, A

NOTES

1. Direct address is RAM location 00-7F and SFR80-FF

Hex code Instruction75 30 55 MOV 30H, #55H

75 90 1F MOV 90H,#1FH

90H is PORT1, Special Function Register (SFR).

2. Indirect address is RAM location 00-FF

78 90 MOV R0,#90H76 20 MOV @R0,#20H

90H is not PORT1. It is general RAM space in the upper page 80-FF. The upper page must be accessed with indirect addressing

3. Immediate data for DPTR will be 16-bit

90 01 00 MOV DPTR,#0100H

4. Bit is location of bit address.

A2 B2 MOV C, P3.2

5. OFFSET is the byte distant between current Program counter and the destination.

Finding the OFFSET byte can be done with ALT,OFFSET press.

6. Addr11 is 11 bits of destination address.

Finding the hex code for AJMP or ACALL can be done with ALT, AJMP or ACALL press.

7. Long CALL or Long JMP uses 16-bit address.

02 91 00 LJMP 9100H12 00 0B LCALL 000B

Prepared for 8051 Microcontroller Kit by Wichit Sirichote © 2015

Page 38: Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0 44 . 0139 c2a3 45 clr digit.3 013b 20a406 46 jb key_press, check5 47 013e 75804f
Page 39: Assembly Programming Manual0133 75a0ff 42 check4: mov digit,#11111111b 0136 758000 43 mov segment,#0 44 . 0139 c2a3 45 clr digit.3 013b 20a406 46 jb key_press, check5 47 013e 75804f