Professional Documents
Culture Documents
HCM
L Ch Thng
Instruction Set
255 instructions
1-byte instructions: 139 2-byte instructions: 92 3-byte instructions: 24
L Ch Thng
www.tinyurl.com/thongchile
L Ch Thng
First Program
First_program.asm ORG 0000H MOV P1,#0FH SETB P1.7 CLR P1.0 END First_program.hex
Byte count Load address Type
First_program.lst LOC OBJ LINE 0000 1 0000 75900F 2 0003 D297 3 0005 C290 4 5
0000H
Checksum = 2s complement of all data
SOURCE ORG 0000H MOV P1,#0FH SETB P1.7 CLR P1.0 END
75H 90H 0FH D2H 97H C2H 90H
3
Code Memory
Opcode
:0700000075900FD297C2902A :00000001FF
end of record type
L Ch Thng
0006H
R1
L Ch Thng
B
4
www.tinyurl.com/thongchile
L Ch Thng
Internal RAM
128 locations from address 00H to 7FH (256 locations for 8052) The content of one location is 8 bit. Register banks: address 00H to 1FH Bit Addressable RAM: address 20H to 2FH General purpose RAM: address from 30H to 7FH
L Ch Thng
www.tinyurl.com/thongchile
L Ch Thng
30H
Ex: MOV 31H,R4 This instruction moves (writes) the content of register R4 to location 31H.
31H R4
L Ch Thng 7
www.tinyurl.com/thongchile
L Ch Thng
20H
Not affected
CY
26H
L Ch Thng 9
www.tinyurl.com/thongchile
L Ch Thng
Register Banks
4 banks: Bank 0 (default), Bank 1, Bank 2, and Bank 3 Change register bank by selecting bits RS1 and RS0 (in register PSW) One bank includes 8 registers: R0 through R7
o o o o o o o o o o o R0 of Bank 0 is location 00H R7 of Bank 0 is location 07H R0 of Bank 1 is location 08H R7 of Bank 1 is location 0FH R0 of Bank 2 is location 10H R7 of Bank 2 is location 17H R0 of Bank 3 is location 18H
L Ch Thng 11
Register Banks
Ex: use default bank (Bank 0)
R5
05H
L Ch Thng
12
www.tinyurl.com/thongchile
L Ch Thng
L Ch Thng
13
Ex: MOV PSW, #00010000B ; select bank 2 or SETB RS1 CLR RS0
L Ch Thng
14
www.tinyurl.com/thongchile
L Ch Thng
www.tinyurl.com/thongchile
L Ch Thng
Addressing Modes
Immediate Addressing Register Addressing Direct Addressing Indirect Addressing Relative Addressing Absolute Addressing Long Addressing Indexed Addressing
L Ch Thng 17
L Ch Thng
18
www.tinyurl.com/thongchile
L Ch Thng
Immediate Addressing
- Source operand is constant - Use # sign Ex 3.1: MOV MOV MOV ADD MOV A,#12 A,#0C4H R1,#1110B A,#11110001B DPTR,#2000H
DPL 0 0 0 0 0 0 0 0 A A R1 CY 0 0 0 0 1 1 0 0 1 1 0 0 0 1 0 0 0 0 0 0 1 1 1 0 1 A 1 0 1 1 0 1 0 1
DPH 0 0 1 0 0 0 0 0
L Ch Thng
19
Register Addressing
Ex: MOV MOV MOV ANL INC DEC MOV INC R1,#36H A,R1 R7,#0FH A,R7 A A DPTR,#2000 DPTR
DPL 0 0 0 0 0 0 0 1
20 L Ch Thng
R1 A R7 A A A
0 0 1 1 0 1 1 0 0 0 1 1 0 1 1 0 0 0 0 0 1 1 1 1 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 1 0 0 1 1 0 0 0 0
DPH 0 0 1 0 0 0 0 0
www.tinyurl.com/thongchile
10
L Ch Thng
Direct Addressing
Access internal RAM and SFRs
MOV A,70H MOV R0,40H MOV 56H,A MOV 0D0H,A MOV PSW,A ; copy contents of RAM at 70H to A ; copy contents of RAM at 40H to A ; put contents of A at 56H ; put contents of A into PSW ; same
L Ch Thng
21
MOV A,30H
A 30H Direct addressing
MOV A,#30H
0 0 1 1 0 0 0 0 Immediate addressing
L Ch Thng
22
www.tinyurl.com/thongchile
11
L Ch Thng
MOV R2,5
R2 05H
R2
MOV R2,#5
0 0 0 0 0 1 0 1
L Ch Thng
23
Indirect Addressing
The address of the source or destination is specified in registers. Use registers R0 or R1 for 8-bit address (internal or external RAM) Use @ sign to access the content of the memory location: @R0, @R1 Ex: MOV R0,#30H ;R0 30H MOV A,@R0 ;A(R0): read content of internal RAM at ; address specified by R0 to A
R0 0 0 1 1 0 0 0 0 Internal RAM 7FH 30H 00H
L Ch Thng
24
www.tinyurl.com/thongchile
12
L Ch Thng
Indirect Addressing
Ex: MOV MOVX R0,#30H ;R0 30H A,@R0 ;A(R0): read content of eXternal RAM at ; address specified by R0 to A
R0
0 0 1 1 0 0 0 0
External RAM
30H 00H
L Ch Thng
25
Indirect Addressing
Uses DPTR register for 16-bit addresses (external memory) Use @ sign to access the content of the memory location:@DPTR Ex: MOV MOVX DPTR,#4000H A,@DPTR ; read content of external RAM at ; address 4000H to A
DPTR
40H
00H
External RAM
4000H 00H
L Ch Thng
26
www.tinyurl.com/thongchile
13
L Ch Thng
Indirect Addressing
DPTR
31H
FFH
External RAM
31FFH 00H
L Ch Thng
27
MOV A,@R1
www.tinyurl.com/thongchile
14
L Ch Thng
(R0) 0 R0 R0+1
L Ch Thng
29
Relative Addressing
Used in SJMP instruction A relative address (or offset) is an 8-bit signed value. It is added to PC to form a new value for PC. Range: -128 ~ +127 Usually used with label
Ex: SJMP LABEL1 is in memory at locations 0100H and 0101H PC = 0102H If LABEL1 is the label representing an instruction at location 0107H Relative offset is 0107H 0102H = 5 Opcode of SJMP LABEL1 is 80 05
L Ch Thng 30
www.tinyurl.com/thongchile
15
L Ch Thng
Relative Addressing
Ex: SJMP LABEL2 is in memory at locations 2040H and 2041H PC = 2042H If LABEL2 is the label representing an instruction at location 2038H Relative offset is 2038H 2042H = -10 = F6H Opcode of SJMP LABEL1 is 80 F6
L Ch Thng
31
Your Turn!
Ex: AGAIN: ORG 0000H SETB P1.0 NOP NOP CLR P1.0 NOP SJMP AGAIN END a. Find the opcode of SJMP AGAIN instruction? b. Find the duration of P1.0=1? P1.0=0? c. What is the result of this program?
L Ch Thng
32
www.tinyurl.com/thongchile
16
L Ch Thng
Absolute Addressing
Used in AJMP, ACALL instruction Usually used with label
Within any 2K page, the upper five address bits are the same for the source and destination addresses. The lower 11 bits of the destination are supplied in the instruction
Long Addressing
Used in LCALL and LJMP instruction Use full 16-bit address Usually used with label Ex: LCALL SUBPROGRAM1 LJMP LABEL2
L Ch Thng
34
www.tinyurl.com/thongchile
17
L Ch Thng
Indexed Addressing
Base address (PC or DPTR) + Offset (A) Used with JMP or MOVC Ex: MOVC A, @A+DPTR MOVC A, @A+PC JMP @A+DPTR Effective Address
L Ch Thng
35
Indexed Addressing
Ex: An even number from 0 to 6 is in the Accumulator. The following sequence of instructions branches to one of four AJMP instructions in a jump table starting at JMP_TBL. MOV DPTR, # JMP_TBL JMP @A + DPTR JMP_TBL: AJMP LABEL0 AJMP LABEL1 AJMP LABEL2 AJMP LABEL3 If the Accumulator equals 04H when starting this sequence, execution jumps to label LABEL2. Because AJMP is a 2-byte instruction, the jump instructions start at every other address.
L Ch Thng 36
www.tinyurl.com/thongchile
18
L Ch Thng
Instruction Types
Data transfer Arithmetic Logical Boolean variable Program branching
L Ch Thng
37
L Ch Thng
38
www.tinyurl.com/thongchile
19
L Ch Thng
L Ch Thng
39
L Ch Thng
40
www.tinyurl.com/thongchile
20
L Ch Thng
Data Transfer
MOV dest, source MOV A,#72H MOV R4,#62H MOV B,0F9H MOV MOV MOV MOV Note 1: MOV Note 2: MOV DPTR,#7634H DPL,#34H DPH,#76H P1,A A,#72H A,R3 ;move (out) A to Port 1 MOV A,72H MOV A,3 ;R3 of bank 0 is location 3
L Ch Thng 41
Data Transfer
Ex: Write a program to move (write) 40H to location 30H in internal RAM using 2 methods of addressing: direct addressing and indirect addressing. Method 1: Direct addressing ORG 0000H MOV 30H,#40H END Method 2: Indirect addressing ORG 0000H MOV R0,#30H MOV @R0,#40H END
L Ch Thng
42
www.tinyurl.com/thongchile
21
L Ch Thng
L Ch Thng
43
Loop=0?
L Ch Thng
44
www.tinyurl.com/thongchile
22
L Ch Thng
Loop=0?
L Ch Thng
45
Addr=37H? Y
L Ch Thng
46
www.tinyurl.com/thongchile
23
L Ch Thng
Your Turn!
Write a program to read data from internal RAM from location 20H to location 29H and output to Port 1
L Ch Thng
47
Your Turn!
Write a program to read data from internal RAM from location 20H to location 29H and output to Port 1 Method 1: using DJNZ ORG 0000H MOV R7,#10 MOV R0,#20H Loop:MOV P1,@R0 ;Output to Port1 INC R0 DJNZ R7,loop END
L Ch Thng
48
www.tinyurl.com/thongchile
24
L Ch Thng
Your Turn!
Ex: Write a program to read data from internal RAM from location 20H to location 29H and output to Port 1 Method 2: using CJNE ORG 0000H MOV R0,#20H Loop:MOV P1,@R0 ;Output to Port1 INC R0 CJNE R0,#2AH,loop END
L Ch Thng
49
L Ch Thng
50
www.tinyurl.com/thongchile
25
L Ch Thng
L Ch Thng
51
L Ch Thng
52
www.tinyurl.com/thongchile
26
L Ch Thng
L Ch Thng
53
www.tinyurl.com/thongchile
27
L Ch Thng
L Ch Thng
55
L Ch Thng
56
www.tinyurl.com/thongchile
28
L Ch Thng
L Ch Thng
57
L Ch Thng
58
www.tinyurl.com/thongchile
29
L Ch Thng
L Ch Thng
59
Look-up Table
MOV MOV MOVC DB A,#ENTRY_NUMBER DPTR,#TABLE A,@A+DPTR data1, data2, data3,
TABLE:
L Ch Thng
60
www.tinyurl.com/thongchile
30
L Ch Thng
Look-up Table
Given a packed-BCD number in location 33H of internal RAM. Write a program that calculate the square of high decade of this number, and store the result in internal RAM at address 34H ORG 0 MOV A,33H SWAP A ANL A,#0FH MOV DPTR,#TABLE MOVC A,@A+DPTR TABLE: DB 0,1,4,9,16,25,36,49,64,81 END
L Ch Thng
61
Look-up Table
MOV A, #ENTRY_NUMBER CALL LOOK_UP LOOK_UP: INC A MOVC A, @A+PC RET TABLE: DB data1, data2, data3,
L Ch Thng
62
www.tinyurl.com/thongchile
31
L Ch Thng
L Ch Thng
63
L Ch Thng
64
www.tinyurl.com/thongchile
32
L Ch Thng
L Ch Thng
65
L Ch Thng
66
www.tinyurl.com/thongchile
33
L Ch Thng
L Ch Thng
67
L Ch Thng
68
www.tinyurl.com/thongchile
34
L Ch Thng
Your Turn!
Given 10 8-bit unsigned numbers in internal RAM at starting address 30H. Write a program to calculate the sum of these numbers and store the result in internal RAM at address 2FH. Assume that the result is less than or equal 255.
L Ch Thng
70
www.tinyurl.com/thongchile
35
L Ch Thng
Your Turn!
Given 10 8-bit unsigned numbers in internal RAM at starting address 30H. Write a program to calculate the sum of these numbers and store the result in internal RAM at address 2FH. Assume that the result is less than or equal 255. ORG 0 MOV R0,#30H CLR A MOV R2,#10 loop: ADD A,@R0 INC R0 DJNZ R2,loop MOV 2FH,A END
L Ch Thng
71
Rotate
Rotate instructions operate only on A RL A
MOV RR A,#0F0H A ; A 11110000 ; A 11100001
RR A
MOV RR A,#0F0H A ; A 11110000 ; A 01111000
L Ch Thng 72
www.tinyurl.com/thongchile
36
L Ch Thng
RLC A
MOV A, #3CH SETB C RLC A ; A 3CH(00111100) ; C 1 ; A 01111001, C1
L Ch Thng 73
L Ch Thng
74
www.tinyurl.com/thongchile
37
L Ch Thng
Swap
SWAP A
; A 72H ; A = 27H
L Ch Thng
75
L Ch Thng
76
www.tinyurl.com/thongchile
38
L Ch Thng
L Ch Thng
78
www.tinyurl.com/thongchile
39
L Ch Thng
L Ch Thng
79
Boolean Variable
ORG 0 LOOP: MOV C,P1.0 ANL C,P1.1 MOV P1.2,C SJMP LOOP END
L Ch Thng
80
www.tinyurl.com/thongchile
40
L Ch Thng
Your Turn!
L Ch Thng
81
Your Turn!
ORG 0 LOOP: MOV C,P1.4 CPL C ANL C,P1.5 CPL C ORL C,P1.6 MOV P1.7,C SJMP LOOP END
L Ch Thng 82
www.tinyurl.com/thongchile
41
L Ch Thng
L Ch Thng
83
L Ch Thng
84
www.tinyurl.com/thongchile
42
L Ch Thng
Program Branching
LJMP(long jump) LJMP is an unconditional jump. It is a 3-byte instruction. It allows a jump to any memory location from 0000 to FFFFH. AJMP(absolute jump) In this 2-byte instruction, It allows a jump to any memory location within the 2k block of program memory. SJMP(short jump) In this 2-byte instruction. The relative address range of 00-FFH is divided into forward and backward jumps, that is , within -128 to +127 bytes of memory relative to the address of the current PC.
Unconditional jumps
SJMP : 8-bit offset LJMP : 11-bit address (2KB segment) AJMP : 16-bit
L Ch Thng 85
Conditional Jumps
JZ JNZ DJNZ CJNE A,byte CJNE reg,#data JC JNC JB JNB JBC Jump if A=0 Jump if A 0 Decrement and jump if 0 Jump if A byte Jump if byte #data Jump if CY=1 Jump if CY=0 Jump if bit=1 Jump if bit=0 Jump if bit=1 and clear bit
L Ch Thng 86
www.tinyurl.com/thongchile
43
L Ch Thng
CALL Instruction
LCALL(long call) This 3-byte instruction can be used to call subroutines located anywhere within the 64K byte address space of the 8051. ACALL (absolute call) ACALL is 2-byte instruction. the target address of the subroutine must be within 2K byte range.
L Ch Thng
87
L Ch Thng
88
www.tinyurl.com/thongchile
44
L Ch Thng
L Ch Thng
89
Subroutines
call to the subroutine ... ACALL SUBLABEL ... ... SUBLABEL: ... ... the subroutine RET MAIN:
L Ch Thng
90
www.tinyurl.com/thongchile
45
L Ch Thng
L Ch Thng
91
L Ch Thng
92
www.tinyurl.com/thongchile
46
L Ch Thng
DJNZ an example
Ex: Write a program to write 40H to internal RAM from location 30H to location 36H. (source) ORG 0000H MOV R5,#7;Loop=7 MOV R1,#30H;Address=30H Again: MOV @R1,#40H INC R1 DJNZ R5,Again END
Loop 7 Addr 30H
Loop=0?
93
L Ch Thng
AGAIN:
L Ch Thng
94
www.tinyurl.com/thongchile
47
L Ch Thng
L Ch Thng
95
L Ch Thng
96
www.tinyurl.com/thongchile
48
L Ch Thng
Blinky Program
P1.0 1 Delay P1.0 0 Delay
schematic
L Ch Thng 97
Blinky Program
ORG 0 LOOP: SETB P1.0 ACALL DELAY CLR P1.0 ACALL DELAY SJMP LOOP DELAY: MOV R6,#200 DL1: MOV R7,#250 DJNZ R7,$ DJNZ R6,DL1 RET END (source) Waveform? Period? Frequency?
L Ch Thng 98
www.tinyurl.com/thongchile
49
L Ch Thng
Blinky Program
ORG 0 LOOP: SETB P1.0 ACALL DELAY CLR P1.0 ACALL DELAY SJMP LOOP DELAY: MOV R6,#200 DL1: MOV R7,#250 DJNZ R7,$ DJNZ R6,DL1 RET END
1MC x 1 2 MC x 250
501 MC
L Ch Thng
99
Blinky Program
ORG 0 LOOP: SETB P1.0 ACALL DELAY CLR P1.0 ACALL DELAY SJMP LOOP DELAY: MOV R6,#200 DL1: MOV R7,#250 DJNZ R7,$ DJNZ R6,DL1 RET END
100,601 MC
L Ch Thng
100
www.tinyurl.com/thongchile
50
L Ch Thng
Blinky Program
ORG 0 LOOP: SETB P1.0 ACALL DELAY CLR P1.0 ACALL DELAY SJMP LOOP DELAY: MOV R6,#200 DL1: MOV R7,#250 DJNZ R7,$ DJNZ R6,DL1 RET END
100,601 MC 100,603 MC 2 MC
L Ch Thng
101
Blinky Program
ORG 0 LOOP: SETB P1.0 ACALL DELAY CLR P1.0 ACALL DELAY SJMP LOOP DELAY: MOV R6,#200 DL1: MOV R7,#250 DJNZ R7,$ DJNZ R6,DL1 RET END 1 MC 100,063 + 2 MC 1 MC 100,063 + 2 MC 2 MC
www.tinyurl.com/thongchile
51
L Ch Thng
Blinky Program
If using 12 MHz crystal, 1 MC = 1 s tH = 100,066 MC = 100,066 s tL = 100,068 MC = 100,068 s T = tH + tL = 200,134 s f = 1/T = 4.99 Hz
tH T
tL
L Ch Thng
103
www.tinyurl.com/thongchile
52
L Ch Thng
Delay
L Ch Thng
105
L Ch Thng
106
www.tinyurl.com/thongchile
53
L Ch Thng
L Ch Thng
107
L Ch Thng
108
www.tinyurl.com/thongchile
54
L Ch Thng
L Ch Thng
110
www.tinyurl.com/thongchile
55
L Ch Thng
lap:
L Ch Thng
111
L Ch Thng
112
www.tinyurl.com/thongchile
56
L Ch Thng
lap:
A = 05H?
Y Statement 1
Skip:
L Ch Thng
114
www.tinyurl.com/thongchile
57
L Ch Thng
An Example
Ex: Write a program to write 40H to internal RAM from location 30H to location 36H. (source) ORG 0000H Addr 30H MOV R1,#30H;Address=30H Again: MOV @R1,#40H INC R1 (Addr) 40H CJNE R1,#37H,Again END AddrAddr+1
N
Addr=37H? Y
L Ch Thng
115
A = 05H?
Y
Statement 2
Statement 1
L Ch Thng
116
www.tinyurl.com/thongchile
58
L Ch Thng
A 05H?
Y Statement 1
CJNE A,#05H,Next Next: JNC GT_Eq SJMP Continue GT_Eq: (Statement 1) Continue: (Continue) CJNE A,#05H,$+3 JNC GT_Eq SJMP Continue GT_Eq: (Statement 1) Continue: (Continue)
L Ch Thng 117
An Example
Ex: Examine the content of A, if 5 A 10 then output A to Port 1; if not, output A to Port 2. ORG 0 CJNE A,#5,$+3 JC PORT2 CJNE A,#11,$+3 JNC PORT2 MOV P1,A SJMP DONE PORT2:MOV P2,A DONE: NOP END
L Ch Thng 118
www.tinyurl.com/thongchile
59
L Ch Thng
A 05H?
Y
Statement 2
Statement 1
GT_Eq: Next:
L Ch Thng
119
Jump Table
MOV MOV RL JMP JUMP_TABLE: AJMP AJMP AJMP DPTR,#JUMP_TABLE A,INDEX_NUMBER A @A+DPTR CASE0 CASE1 CASE2
L Ch Thng
120
www.tinyurl.com/thongchile
60
L Ch Thng
Bit Testing
Given a 100-byte unsigned number string in external RAM at address starting from 0100H. Write a program that sends positive numbers to Port 1 and negative numbers to Port 2. Hint: - A positive number has MSB = 0. - A negative number has MSB = 1. - Use JB / JNB instruction
L Ch Thng
121
Bit Testing
Given a 100-byte unsigned number string in external RAM at address starting from 0100H. Write a program that sends positive numbers to Port 1 and negative numbers to Port 2. ORG 0000H MOV DPTR,#0100H MOV R4,#100 loop: MOVX A,@DPTR JNB ACC.7,positive MOV P2,A SJMP next positive: MOV P1,A next: INC DPTR DJNZ R4,loop END
L Ch Thng 122
www.tinyurl.com/thongchile
61
L Ch Thng
Your Turn!
Ex: Given a 20-byte string in internal RAM, starting at address 40H. Write a program that output even numbers to Port 2.
L Ch Thng
123
Your Turn!
Ex: Given a 20-byte string in internal RAM, starting at address 40H. Write a program that output even numbers to Port 2.
ORG 0 MOV R4,#20 MOV R0,#40H LOOP: MOV A,@R0 JB ACC.0,NEXT MOV P2,A NEXT: INC R0 DJNZ R4,LOOP END ; Number of loops ; Address pointer ; Read data from internal RAM to A ; skip if odd number ; Output to Port 2 if even number
L Ch Thng
124
www.tinyurl.com/thongchile
62
L Ch Thng
Your Turn!
Ex: Given a 20-byte string in external RAM, starting at address 4000H. Write a program that output odd numbers to Port 2.
L Ch Thng
125
Your Turn!
Ex: Given a 20-byte string in external RAM, starting at address 4000H. Write a program that output odd numbers to Port 2.
ORG 0 MOV R4,#20 ; Number of loops MOV DPTR,#4000H ; Address of external RAM LOOP: MOVX A,@DPTR ; Read data from external RAM to A JNB ACC.0,NEXT ; skip if even number MOV P2,A ; Output to Port 2 if odd number NEXT: INC DPTR DJNZ R4,LOOP END
L Ch Thng 126
www.tinyurl.com/thongchile
63
L Ch Thng
Bit Testing
P1.0 P1.1 P1.2
LOOP:
SKIP:
Example Problem
A 4-bit DIP switch and a common-anode 7-segment LED are connected to an 8051 as shown in the following figure. Write a program that continually reads a 4-bit code from the DIP switch and updates the LEDs to display the appropriate hexadecimal character. For example, if the code 1100B is read, the hexadecimal character C should appear, thus, segments a through g respectively should be ON, OFF, OFF, ON, ON, ON, and OFF. Note that setting an 8051 port pin to 1 turns the corresponding segment ON.
www.tinyurl.com/thongchile
64
L Ch Thng
References
I. Scott MacKenzie , The 8051 Microcontroller, 2nd Edition, Prentice-Hall, 1995 Kenneth J. Ayala, The 8051 Microcontroller: Architecture, Programming, and Applications, West Publishing Company hsabaghianb@kashanu.ac.jr , Lecture notes
L Ch Thng
129
www.tinyurl.com/thongchile
65