Upload
phamthuy
View
256
Download
3
Embed Size (px)
Citation preview
Chapter 3 Instruction Set
How to write a program
The 8051 Microcontroller
Lê Chí Thông 1
Lê Chí Thông
sites.google.com/site/chithong
Ho Chi Minh City University of Technology
Instruction Set
• 255 instructions
1-byte instructions: 139
2-byte instructions: 92
3-byte instructions: 24
• Summary instruction set (pdf)
• Full instruction set (pdf)
Lê Chí Thông 2
The First ProgramFirst_program.asm
ORG 0000H
MOV P1,#0FH
SETB P1.7
CLR P1.0
END
Lê Chí Thông 3
First_program.hex
:0700000075900FD297C2902A
:00000001FF
First_program.lst
LOC OBJ LINE SOURCE
0000 1 ORG 0000H
0000 75900F 2 MOV P1,#0FH
0003 D297 3 SETB P1.7
0005 C290 4 CLR P1.0
5 END
Byte count
Load addressOpcode
Checksum =
2’s complement
of all data
Type
end of file record type
0000H 75H
0001H 90H
0002H 0FH
0003H D2H
0004H 97H
0005H C2H
0006H 90H
CodeMemory
Registers and Data Transfer Instructions
• Register
o Register A = accumulator
o Register B
o Register R0 – R7
• Data Transfer Instruction
o MOV destination, source
Ex:
MOV A,R0
MOV R1,B
MOV R1,R3Lê Chí Thông
A R0
R1 B
4
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í Thông 5
Bit-addressable
RAM (20H-2FH)
Register banks
(00H-1FH)
General purpose
RAM (30H-7FH)
Special function registers
(SFRs)(80H-FFH)
Lê Chí Thông 6
• Address from 30H to 7FH
• The content of one location is 8 bit.
Ex: MOV A,30H
This instruction moves (reads) the content of location 30H (NOT data 30H) to register A.
Ex: MOV 31H,R4
This instruction moves (writes) the content of register R4to location 31H.
Lê Chí Thông
General Purpose RAM
A 30H
31H R4
7
Bit-addressable
RAM (20H-2FH)
Register banks
(00H-1FH)
General purpose
RAM (30H-7FH)
Special function registers
(SFRs)(80H-FFH)
Lê Chí Thông 8
• Address from 20H to 2FH
• The content of one location is 8 bit.
• Can read/write a byte or a bit
Ex: MOV 20H, A ; writes the content of register A to location 20H.
Ex: SETB 20H.0
or SETB 00H
Ex: MOV C,31H
or MOV C, 26H.1
Lê Chí Thông
Bit Addressable RAM
20H A
20H 1
Not affected
26HCY
9
Bit-addressable
RAM (20H-2FH)
Register banks
(00H-1FH)
General purpose
RAM (30H-7FH)
Special function registers
(SFRs)(80H-FFH)
Lê Chí Thông 10
• 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 R7o R0 of Bank 0 is location 00H
o …
o R7 of Bank 0 is location 07H
o R0 of Bank 1 is location 08H
o …
o R7 of Bank 1 is location 0FH
o R0 of Bank 2 is location 10H
o …
o R7 of Bank 2 is location 17H
o R0 of Bank 3 is location 18H
o …
o R7 of Bank 3 is location 1FH Lê Chí Thông
Register Banks
11
o R1 of Bank 0 is location ………
o R5 of Bank 0 is location ………
o R5 of Bank 1 is location ………
o R1 of Bank 2 is location ………
o R2 of Bank 3 is location ………
o R6 of Bank 3 is location ………
Lê Chí Thông
Register Banks – Your Turn!
12
Ex: use default bank (Bank 0)
MOV A, R5 = MOV A, 05H
MOV R0, A = MOV 00H, A
Lê Chí Thông
Register Banks
R5 05H≡
Read the contents of register R5 into the accumulator
Read the contents of location 05H into the accumulator
Read the contents of register Ainto register R0
Read the contents of register Ainto location 00H
13
Lê Chí Thông
Register PSW (Program Status Word)
14
The active bank is selected by bit RS1 (PSW.4) & RS0 (PSW.3)
Ex: MOV PSW, #00010000B ; select bank 2
or SETB RS1
CLR RS0
Try it: Select bank 1
……………………..
……………………..Lê Chí Thông
Selecting Register Bank
RS1 RS0 Bank
0 0 0
0 1 1
1 0 2
1 1 3
15
Bit-addressable
RAM (20H-2FH)
Register banks
(00H-1FH)
General purpose
RAM (30H-7FH)
Special function registers
(SFRs)(80H-FFH)
Lê Chí Thông 16
Lê Chí Thông
Special Function Registers (SFRs)• SFRs include register A, B, PSW, P0, P1, P2, P3, DPTR,
TMOD, SCON …
• All SFRs are accessible by name and direct address.
• Both of them must be coded as direct addressEx: MOV P1, A ; Output register A to Port 1
MOV 90H, A ; same
Same opcode: F5 90Ex: MOV R1, ACC
MOV R1, 0E0H
Same opcode: A9 E0Ex: MOV R1, ACC
MOV R1, A
Same function BUT different opcodes (A9 E0 vs. F9)
Try it: Input Port 2 to register A ……………………………17
1. Immediate Addressing
2. Register Addressing
3. Direct Addressing
4. Indirect Addressing
5. Relative Addressing
6. Absolute Addressing
7. Long Addressing
8. Indexed Addressing
Addressing Modes
Lê Chí Thông 18
Lê Chí Thông
Coding format- Addressing modes
19
- Source operand is constant
- Use # sign
(Source)
MOV A,#12
MOV A,#0C4H
MOV R1,#1110B
ADD A,#11110001B
MOV DPTR,#2000H
Immediate Addressing
Lê Chí Thông
A 0 0 0 0 1 1 0 0
A 1 1 0 0 0 1 0 0
R1 0 0 0 0 1 1 1 0
A 1 0 1 1 0 1 0 1CY 1
DPH 0 0 1 0 0 0 0 0 DPL 0 0 0 0 0 0 0 0
20
Ex: MOV R1,#36H
MOV A,R1
MOV R7,#0FH
ANL A,R7
INC A
DEC A
MOV DPTR,#2000
INC DPTR (source)
Lê Chí Thông
Register Addressing
R1 0 0 1 1 0 1 1 0
A 0 0 1 1 0 1 1 0
R7 0 0 0 0 1 1 1 1
A 0 0 0 0 0 1 1 0
A 0 0 0 0 0 1 1 1
A 0 0 0 0 0 1 1 0
DPH 0 0 1 0 0 0 0 0 DPL 0 0 0 0 0 0 0 1
21
Direct Addressing
Lê Chí Thông
• Access internal RAM and SFRs
MOV A,70H ; copy contents of RAM at 70H to A
MOV R0,40H ; copy contents of RAM at 40H to A
MOV 56H,A ; put contents of A into RAM at 56H
MOV 0D0H,A ; put contents of A into PSW
MOV PSW,A ; same
22
Direct Addressing vs. Immediate Addressing
Lê Chí Thông
MOV A,30H MOV A,#30H
Direct addressing Immediate addressing
A 30H A 0 0 1 1 0 0 0 0
23
≠
Play with R0-R7 (bank 0) by Direct Addressing
Lê Chí Thông
MOV A,4 MOV A,R4
MOV A,7 MOV A,R7
MOV 7,6 MOV R7,R6
MOV R2,#05 ; Put 5 in R2
MOV R2,5 ; Put content of RAM at address 5 in R2
R2 05H R2 0 0 0 0 0 1 0 1
24
≠MOV R2,5 MOV R2,#5
1. Immediate Addressing
2. Register Addressing
3. Direct Addressing
4. Indirect Addressing
5. Relative Addressing
6. Absolute Addressing
7. Long Addressing
8. Indexed Addressing
Addressing Modes
Lê Chí Thông 25
• 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
Indirect Addressing
Lê Chí Thông
A
7FH
30H
00H
R0 0 0 1 1 0 0 0 0Internal RAM
26
Ex: Write a program to move (write) the content of A to location 32H in internal RAM using 2 methods of addressing: direct addressing and indirect addressing. Method 1: Direct addressing
ORG 0000H
MOV 32H,A
END
Method 2: Indirect addressingORG 0000H
MOV R0,#32H
MOV @R0,A
END
Lê Chí Thông 27
Ex: Write Data to Internal RAM (1)
Ex: Write Data to Internal RAM (2)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 addressingORG 0000H
MOV R0,#30H
MOV @R0,#40H
END
Lê Chí Thông 28
Ex: Clear Internal RAMEx: Write a program to clear location 31H in internal RAM using 2 methods of addressing: direct addressing and indirect addressing. Hint: to clear means to reset the data to zero. Method 1: Direct addressing
ORG 0000H
MOV 31H,#0
END
Method 2: Indirect addressingORG 0000H
MOV R0,#31H
MOV @R0,#0
END
Lê Chí Thông 29
Ex: Write a program to move (read) the content of location 33H in internal RAM to register A using 2 methods of addressing: direct addressing and indirect addressing. Method 1: Direct addressing
ORG 0000H
MOV A,33H
END
Method 2: Indirect addressingORG 0000H
MOV R0,#33H
MOV A,@R0
END
Lê Chí Thông 30
Ex: Read Data from Internal RAM
Ex: Write a program to move (transfer) the content of internal RAM from address 34H to address 35H, using 2 methods of addressing: direct addressing and indirect addressing. Method 1: Direct addressing
ORG 0000H
MOV 35H,34H
END
Method 2: Indirect addressingORG 0000H
MOV R0,#34H
MOV A,@R0
INC R0
MOV @R0,A
END
Lê Chí Thông 31
Ex: Data Transfer (Read/Write)
Ex: MOV R0,#30H ;R0 30H
MOVX A,@R0 ;A(R0): read content of eXternal RAM at ; address specified by R0 to A
Indirect Addressing – External 8-bit address RAM
Lê Chí Thông
A 30H
00H
External RAMR0 0 0 1 1 0 0 0 0
32
• Uses DPTR register for 16-bit addresses (external memory)
• Use @ sign to access the content of the memory location:@DPTR
Ex: MOV DPTR,#4000H ; DPTR Address
MOVX A,@DPTR ; read content of external RAM at
; address 4000H to A
Lê Chí Thông
A 4000H
00H
External RAMDPTR 40H 00H
33
Indirect Addressing – External 16-bit address RAM
Ex: MOV DPTR,#31FFH ; DPTR Address
MOVX @DPTR,A ; write content of A to external RAM
; at address 31FFH
A 31FFH
00H
External RAMDPTR 31H FFH
Lê Chí Thông 34
Indirect Addressing – External 16-bit address RAM
Ex: Write a program to move the content of register A to location 0033H in external RAM.
ORG 0000H
MOV DPTR,#0033H
MOVX @DPTTR,A
END
Lê Chí Thông 35
Write Data to External RAM (1)
Ex: Write a program to write 40H to location 0030H in externalRAM.
ORG 0000H
MOV A,#40H
MOV DPTR,#0030H
MOVX @DPTR,A
END
Lê Chí Thông 36
Write Data to External RAM (2)
Ex: Write a program to clear location 0031H in external RAM. ORG 0000H
CLR A
MOV DPTR,#0031H
MOVX @DPTTR,A
END
Lê Chí Thông 37
Clear External RAM
Ex: Write a program to read data from external RAM at address 0032 to register A.
ORG 0000H
MOV DPTR,#0032H
MOVX A,@DPTTR
END
Lê Chí Thông 38
Read Data from External RAM
Ex: Write a program to move the content of location 0034H in external RAM to location 0035H in external RAM.
ORG 0000H
MOV DPTR,#0034H
MOVX A,@DPTTR
INC DPTR
MOVX @DPTR,A
END
Lê Chí Thông 39
Read/Write External RAM
Write a program to move data from internal RAM at address 56H to external RAM at address 4123H.
ORG 0000H
MOV A, 56H
MOV DPTR, #4123H
MOVX @DPTR, A
END
Your Turn!
Lê Chí Thông 40
Register Addressing vs. Indirect Addressing
Lê Chí Thông
MOV A,R1 MOV A,@R1
Register addressing
Indirect addressing
A R1
41
A
7FH
00H
R1Internal RAM
≠
Ex: (Implementation of array)
Clear internal RAM from address60H to 7FH
MOV R0, #60H
LOOP: MOV @R0, #0
INC R0
CJNE R0, #80H, LOOP
Example of Indirect Addressing
Lê Chí Thông 42
R0 60H
(R0) 0
R0 R0+1
R0= 80h?N
Y
Write a program to output (send) the content of internal RAM, from address 20H to 45H, to Port 1
ORG 0000H
MOV R0, #20H
LOOP:
MOV A, @R0
MOV P1, A
INC R0
CJNE R0, #46H, LOOP
END
Your Turn!
Lê Chí Thông 43
1. Immediate Addressing
2. Register Addressing
3. Direct Addressing
4. Indirect Addressing
5. Relative Addressing
6. Absolute Addressing
7. Long Addressing
8. Indexed Addressing
Addressing Modes
Lê Chí Thông 44
• 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
Relative Addressing
Lê Chí Thông 45
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
Relative Addressing
Lê Chí Thông 46
Ex: ORG 0000H
AGAIN: 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?
Your Turn!
Lê Chí Thông 47
• Used in AJMP, ACALL instruction
• Usually used with label
Absolute Addressing
Memory map showing 2K pages
Lê Chí Thông 48
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
• Used in LCALL and LJMP instruction
• Use full 16-bit address
• Usually used with label
Ex: LCALL SUBPROGRAM1
LJMP LABEL2
Long Addressing
Lê Chí Thông 49
• Base address (PC or DPTR) + Offset (A) Effective Address
• Used with JMP or MOVC
Ex: MOVC A, @A+DPTR
MOVC A, @A+PC
JMP @A+DPTR
Indexed Addressing
Lê Chí Thông 50
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.
Indexed Addressing
Lê Chí Thông 51
Instruction Types
• Data transfer
• Arithmetic
• Logical
• Boolean variable
• Program branching
Lê Chí Thông 52
8051 Instruction Set SummaryLegend
Lê Chí Thông 53
8051 Instruction Set SummaryData Transfer
Lê Chí Thông 54
8051 Instruction Set SummaryData Transfer
Lê Chí Thông 55
Data TransferMOV dest, source ; dest source
MOV A,#72H ;A=72HMOV R4,#62H ;R4=62HMOV B,0F9H ;B=the content of address F9H of RAM
MOV DPTR,#7634HMOV DPL,#34HMOV DPH,#76H
MOV P1,A ;move (out) A to Port 1
Note 1:MOV A,#72H ≠ MOV A,72H
Note 2:MOV A,R3 ≡ MOV A,3 ;R3 of bank 0 is location 3
Lê Chí Thông 56
Creating a Loop (1)Ex: Write a program to write 40H to internal RAM from location 30H to location 36H.
ORG 0000H
MOV 30H,#40H
MOV 31H,#40H
MOV 32H,#40H
MOV 33H,#40H
MOV 34H,#40H
MOV 35H,#40H
MOV 36H,#40H
END
Lê Chí Thông 57
Ex: Write a program to write 40H to internal RAMfrom location 30H to location 36H.(source)
ORG 0000H
MOV R5,#7 ;Loop=7
MOV R1,#30H;Address=30H
Again: MOV @R1,#40H
INC R1
DEC R5
CJNE R5,#0,Again
END
Lê Chí Thông 58
Addr 30H
(Addr) 40H
AddrAddr+1
Loop=0?N
Y
Loop 7
LoopLoop-1
Creating a Loop (2)
Ex: Write a program to write 40H to internal RAMfrom 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
Lê Chí Thông 59
Creating a Loop (3)
Addr 30H
(Addr) 40H
AddrAddr+1
Loop=0?N
Y
Loop 7
LoopLoop-1
Ex: Write a program to write 40H to internal RAMfrom location 30H to location 36H.(source)
ORG 0000H
MOV R1,#30H;Address=30H
Again: MOV @R1,#40H
INC R1
CJNE R1,#37H,Again
END
Lê Chí Thông 60
Creating a Loop (4)
Addr 30H
(Addr) 40H
AddrAddr+1
Addr=37H?N
Y
Your Turn! Write a program to read data from internal RAM from location 20H to location 29H and output to Port 1
Lê Chí Thông 61
Solutions (1)Write a program to read data from internal RAM from location 20H to location 29H and output to Port 1Method 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í Thông 62
Solutions (2)Write a program to read data from internal RAM from location 20H to location 29H and output to Port 1Method 2: using CJNE
ORG 0000H
MOV R0,#20H
Loop:MOV P1,@R0 ;Output to Port1
INC R0
CJNE R0,#2AH,loop
END
Lê Chí Thông 63
MOV A,#ENTRY_NUMBER
MOV DPTR,#TABLE
MOVC A,@A+DPTR
TABLE: DB data1, data2, data3, …
Lê Chí Thông 64
Look-up Table
Given a packed-BCD number in location 33H of internal RAM. Writea program that calculate the square of high decade of this number,and store the result in internal RAM at address 34H
ORG 0MOV A,33HSWAP AANL A,#0FHMOV DPTR,#TABLEMOVC A,@A+DPTRMOV 34H, A
TABLE:DB 0,1,4,9,16,25,36,49,64,81END
Lê Chí Thông 65
Look-up Table - Example
Given a packed-BCD number in location 34H of internal RAM. Writea program that displays the low decade of this number on thecommon-anode 7-seg LED connected to Port 2 (schematic).
Lê Chí Thông 66
Your Turn!
Lê Chí Thông 67
Create the TableD7 D6
gD5f
D4e
D3d
D2c
D1b
D0a
0 0 1 0 0 0 0 0 0 40H
1 0 1 1 1 1 0 0 1 79H
2 0 0 1 0 0 1 0 0 24H
3 0 0 1 1 0 0 0 0 30H
4 0 0 0 1 1 0 0 1 19H
5 0 0 0 1 0 0 1 0 12H
6 0 0 0 0 0 0 1 0 02H
7 0 1 1 1 1 0 0 0 78H
8 0 0 0 0 0 0 0 0 00H
9 0 0 0 1 0 0 0 0 10H
TABLE: DB 40h,79h,24h,30h,19h, 12h,02h,78h,00h,10h
ORG 0000HMOV 34H,#25HMOV A,34HANL A,#0FHMOV DPTR,#TABLEMOVC A,@A+DPTRMOV P2,ASJMP DONE
TABLE: DB 40h,79h,24h,30h,19hDB 12h,02h,78h,00h,10h
DONE: NOPEND
(source)
Lê Chí Thông 68
Solutions
MOV A, #ENTRY_NUMBER
CALL LOOK_UP
…
LOOK_UP:
INC A
MOVC A, @A+PC
RET
TABLE:
DB data1, data2, data3, …
Lê Chí Thông 69
Look-up Table
MOV DPTR,#JUMP_TABLEMOV A,INDEX_NUMBERRL AJMP @A+DPTR…
JUMP_TABLE: AJMP CASE0AJMP CASE1AJMP CASE2…
Lê Chí Thông
Jump Table
70
8051 Instruction Set SummaryArithmetic Operations
Lê Chí Thông 71
8051 Instruction Set SummaryArithmetic Operations
Lê Chí Thông 72
8051 Instruction Set SummaryArithmetic Operations
Lê Chí Thông 73
8051 Instruction Set SummaryFlag Effect
Lê Chí Thông 74
Arithmetic Operations (1)
ADD A,#34H ; Immediate addressing A A + 34H
ADD A,34H ;Direct addressing A A + (34H)
ADD A,R1 ;Register addressing A A + R1
ADD A,@R1 ;Indirect addressing A A + (R1)
Lê Chí Thông 75
Arithmetic Operations (2)
MOV A,#23H ; A = 23H, CY = 0, P = 1, OV = 0
ADD A,#22 ; A = 39H, CY = 0, P = 0, OV = 0
ADD A,#11100111B ; A = 20H, CY = 1, P = 1, OV = 0
ADDC A,#09H ; A = 2AH, CY = 0, P = 1, OV = 0
SUBB A,#00100111B ; A = 03H, CY = 0, P = 0, OV = 0
SUBB A,#3 ; A = 00H, CY = 0, P = 0, OV = 0
SUBB A,#0F2H ; A = 0EH, CY = 1, P = 1, OV = 0
Lê Chí Thông 76
Arithmetic Operations (3)
MOV A,#45 ; A = 2DH, CY = 1, P = 0, OV = 0
MOV B,#12H ; B = 12H
MUL AB ; A = 2AH, B = 03H
MOV B,#10 ; B = 10
DIV AB ; A = 04H, B = 02H
MOV A,#-100 ; A = 9CH, CY = 0, P = 0, OV = 0
ADD A,#-50 ; A = 6AH, CY = 1, P = 0, OV = 1
MOV A,#120 ; A = 78H, CY = 1, P = 0, OV = 1
ADD A,#30 ; A = 44H, CY = 0, P = 0, OV = 1
Lê Chí Thông 77
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í Thông 78
SolutionsGiven 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 0MOV R0,#30HCLR AMOV R2,#10
loop: ADD A,@R0INC R0DJNZ R2,loopMOV 2FH,AEND
Lê Chí Thông 79
• Rotate instructions operate only on A
RL A
MOV A,#0F0H ; A 11110000
RR A ; A 11100001
RR A
MOV A,#0F0H ; A 11110000
RR A ; A 01111000
Rotate
80Lê Chí Thông
RRC A
MOV A, #0A9H ; A A9H
ADD A, #14H ; A BDH (10111101), C0
RRC A ; A 01011110, C1
RLC A
MOV A, #3CH ; A 3CH(00111100)
SETB C ; C 1
RLC A ; A 01111001, C1
C
C
Rotate through Carry
81Lê Chí Thông
• Note that a shift left is the same as multiplying by 2, shift right is divide by 2
MOV A, #3 ; A 00000011 (3)
CLR C ; C 0
RLC A ; A 00000110 (6)
RLC A ; A 00001100 (12)
RRC A ; A 00000110 (6)
Rotate and Multiplication/Division
82Lê Chí Thông
SWAP A
MOV A, #72H ; A 72H
SWAP A ; A = 27H
Swap
83Lê Chí Thông
8051 Instruction Set SummaryLogic Operations
Lê Chí Thông 84
Logic Operations (1)
Lê Chí Thông 85
MOV A,#46H
MOV R3,A
ANL A,#0FH
MOV R7,A
MOV A,R3
ANL A,#0F0H
SWAP A
MOV R6,A
R6 = ………………………….; R7 = …………………………….
Logic Operations (2)
Lê Chí Thông 86
MOV R2,#05H
MOV R3,#07H
MOV A,R2
SWAP A
ORL A,R3
A = ………………………….
8051 Instruction Set SummaryBoolean Variable
Lê Chí Thông 87
Boolean Variable
Lê Chí Thông 88
ORG 0
LOOP: MOV C,P1.0
ANL C,P1.1
MOV P1.2,C
SJMP LOOP
END
Your Turn!
Lê Chí Thông 89
Solutions
Lê Chí Thông 90
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
8051 Instruction Set SummaryProgram Branching
Lê Chí Thông 91
8051 Instruction Set SummaryProgram Branching
Lê Chí Thông 92
Program Branching
Lê Chí Thông 93
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.
SJMP : 8-bit offsetLJMP : 11-bit address (2KB segment)AJMP : 16-bit
Unconditional jumps
Conditional Jumps
Lê Chí Thông 94
JZ Jump if A=0
JNZ Jump if A ≠ 0
DJNZ Decrement and jump if ≠ 0
CJNE A,byte Jump if A ≠ byte
CJNE reg,#data Jump if byte ≠ #data
JC Jump if CY=1
JNC Jump if CY=0
JB Jump if bit=1
JNB Jump if bit=0
JBC Jump if bit=1 and clear bit
CALL Instruction
Lê Chí Thông 95
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.
• Call is similar to a jump, but
– Call pushes PC on stack before branching
ACALL <address ll> ; stack PC
; PC address 11 bit
LCALL <address 16> ; stack PC
; PC address 16 bit
Call and Return
96Lê Chí Thông
• Return is also similar to a jump, but
– Return instruction pops PC from stack to get address to jump to
RET ; PC stack
Call and Return
97Lê Chí Thông
MAIN: ...
ACALL SUBLABEL
...
...
SUBLABEL: ...
...
RET
the subroutine
call to the subroutine
Subroutines
98Lê Chí Thông
DJNZ – a For loop
Lê Chí Thông 99
Use DJNZ to create a for loop control
Ex: a 10-time loopMOV R7,#10
LOOP: (begin loop)……(end loop)DJNZ R7,LOOP(continue)
DJNZ – a For loop
Lê Chí Thông 100
Use DJNZ to create a 1000-time loop?
DJNZ – an example
Lê Chí Thông 101
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
Addr 30H
(Addr) 40H
AddrAddr+1
Loop=0?N
Y
Loop 7
LoopLoop-1
Write a program to clear ACC, then add 3 to the accumulator ten times.
Solution:
MOV A,#0
MOV R2,#10
AGAIN: ADD A,#03
DJNZ R2,AGAIN ;repeat until R2=0 (10 times)
MOV R5,A
Lê Chí Thông 102
DJNZ – another example
Write a program to copy a block of 10 bytes from RAM location starting at 37h to RAM location starting at 59h.
Lê Chí Thông 103
DJNZ – Your Turn!
Write a program to copy a block of 10 bytes from RAM location starting at 37h to RAM location starting at 59h.
Solution:MOV R0,#37h ; source pointerMOV R1,#59h ; dest pointer MOV R2,#10 ; counter
L1: MOV A,@R0MOV @R1,AINC R0INC R1DJNZ R2,L1
Lê Chí Thông 104
Solutions
ORG 0LOOP: SETB P1.0
ACALL DELAYCLR P1.0ACALL DELAYSJMP LOOP
DELAY: MOV R6,#200DL1: MOV R7,#250
DJNZ R7,$DJNZ R6,DL1RETEND
(source)
Waveform? Period? Frequency?
Lê Chí Thông 106
Blinky Program
P1.0 1
Delay
P1.0 0
Delay
ORG 0LOOP: SETB P1.0
ACALL DELAYCLR P1.0ACALL DELAYSJMP LOOP
DELAY: MOV R6,#200DL1: MOV R7,#250 1MC x 1
DJNZ R7,$ 2 MC x 250DJNZ R6,DL1RETEND
Lê Chí Thông 107
Blinky Program
501 MC
ORG 0LOOP: SETB P1.0
ACALL DELAYCLR P1.0ACALL DELAYSJMP LOOP
DELAY: MOV R6,#200 1 MC x 1DL1: MOV R7,#250
DJNZ R7,$DJNZ R6,DL1 2 MC x 200RETEND
Lê Chí Thông 108
Blinky Program
501 MC x 200 100,601 MC
ORG 0LOOP: SETB P1.0
ACALL DELAYCLR P1.0ACALL DELAYSJMP LOOP
DELAY: MOV R6,#200DL1: MOV R7,#250
DJNZ R7,$DJNZ R6,DL1RET 2 MCEND
Lê Chí Thông 109
Blinky Program
100,601 MC100,603 MC
ORG 0LOOP: SETB P1.0 1 MC
ACALL DELAY 100,063 + 2 MCCLR P1.0 1 MCACALL DELAY 100,063 + 2 MCSJMP LOOP 2 MC
DELAY: MOV R6,#200DL1: MOV R7,#250
DJNZ R7,$DJNZ R6,DL1RETEND
tH = 100,063 + 2 + 1 = 100,066 MC tL = 100,063 + 2 + 2 + 1 = 100,068 MC
Lê Chí Thông 110
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
Lê Chí Thông 111
Blinky Program
tH tL
T
P1.0 1
Delay tH
P1.0 0
Delay tL
ORG 0LOOP: SETB P1.0
ACALL DELAYCLR P1.0ACALL DELAYSJMP LOOP
DELAY: MOV R6,#200DL1: MOV R7,#250
DJNZ R7,$DJNZ R6,DL1RETEND
tH = tL ≈ tDELAY ≈ 200 x 250 x 2 MC = 100,000 MC = 100,000 μs T ≈ 200,000 μs f ≈ 5 Hz
Lê Chí Thông 112
Blinky Program - Estimating
P1.0 1
Delay tH
P1.0 0
Delay tL
ORG 0LOOP: CPL P1.0
ACALL DELAYSJMP LOOP
DELAY: MOV R6,#200DL1: MOV R7,#250
DJNZ R7,$DJNZ R6,DL1RETEND
Lê Chí Thông 113
Blinky Program – Alternative Method
P1.0 NOT (P1.0)
Delay
P1.0 1
Delay
P1.0 0
Delay
Write a program that creates a 10-KHz square wave at pin P1.3. Assume that crystal is 24 MHz.
Lê Chí Thông 114
10-kHz square wave
Write a program that creates a 10-KHz square wave at pin P1.3. Assume that crystal is 24 MHz.
Lê Chí Thông 115
10-kHz square wave
tH tL
T
P1.3 1
Delay tH
P1.3 0
Delay tL
P1.3 NOT (P1.3)
Delay
If tH = tL
Write a program that creates a 10-KHz square wave at pin P1.3. Assume that crystal is 24 MHz.
ORG 0000Hlap: CPL P1.3
ACALL delaySJMP lap
delay:MOV R4,#50DJNZ R4,$RETEND
Lê Chí Thông 116
10-kHz square wave
P1.3 NOT (P1.3)
Delay
Write a program that creates a 10-KHz square wave with duty cycle 30% at pin P1.3. Assume that crystal is 24 MHz.
Lê Chí Thông 117
10-kHz square wave, duty cycle 30%
tH tL
T
P1.3 1
Delay tH
P1.3 0
Delay tL
Write a program that creates a 10-KHz square wave with duty cycle 30% at pin P1.3. Assume that crystal is 24 MHz.
ORG 0000Hlap: SETB P1.3
ACALL delay1CLR P1.3ACALL delay2SJMP lap
Delay1: MOV R4,#30DJNZ R4,$RET
Delay2: MOV R4,#70DJNZ R4,$RETEND
Lê Chí Thông 118
10-kHz square wave, duty cycle 30%
P1.3 1
Delay tH
P1.3 0
Delay tL
Write a program that creates a 100-kHz square wave at pin P1.1. Assume that crystal is 12 MHz.
Lê Chí Thông 119
100-kHz square wave
Write a program that creates a 100-kHz square wave at pin P1.1. Assume that crystal is 12 MHz.
ORG 0000Hlap: CPL P1.1
NOPNOPSJMP lapEND
Lê Chí Thông 120
100-kHz square wave
Write a program that creates a 100-kHz square wave with duty cycle 40% at pin P1.2. Assume that crystal is 12 MHz.
Lê Chí Thông 121
100-kHz square wave, duty cycle 40%
Write a program that creates a 100-kHz square wave with duty cycle 40% at pin P1.2. Assume that crystal is 12 MHz.
ORG 0000Hlap: SETB P1.2
NOPNOPNOPCLR P1.2NOPNOPNOPSJMP lapEND
Lê Chí Thông 122
100-kHz square wave, duty cycle 40%
CJNE A,#05H,Skip
(Statement 1)
Skip: (Continue)
Lê Chí Thông 123
CJNE – Equal/Not Equal (1)
A = 05H?N
Y
Statement 1
Ex: Write a program to write 40H to internal RAM from location 30H to location 36H.(source)
ORG 0000H
MOV R1,#30H;Address=30H
Again: MOV @R1,#40H
INC R1
CJNE R1,#37H,Again
END
Lê Chí Thông 124
An Example
Addr 30H
(Addr) 40H
AddrAddr+1
Addr=37H?N
Y
CJNE A,#05H,Not_Eq
(Statement 1)
SJMP Next
Not_Eq: (Statement 2)
Next: (Continue)
Lê Chí Thông 125
CJNE – Equal/Not Equal (2)
A = 05H?N
Y
Statement 1Statement 2
CJNE A,#05H,Next
Next: JC LessThan
(Statement 1)
LessThan: (Continue)
Lê Chí Thông 126
CJNE – Greater Than or Equal/Less Than (1)
A ≥ 05H?N
Y
Statement 1
CJNE A,#05H,$+3
JC LessThan
(Statement 1)
LessThan: (Continue)
CJNE A,#05H,Next
Next: JNC GT_Eq
SJMP Continue
GT_Eq: (Statement 1)
Continue: (Continue)
Lê Chí Thông 127
CJNE – Greater Than or Equal/Less Than (1)
A ≥ 05H?N
Y
Statement 1
CJNE A,#05H,$+3
JNC GT_Eq
SJMP Continue
GT_Eq: (Statement 1)
Continue: (Continue)
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
128Lê Chí Thông
An Example
CJNE A,#05H,$+3
JNC GT_Eq
(Statement 2)
SJMP Next
GT_Eq: (Statement 1)
Next: (Continue)
Lê Chí Thông 129
CJNE – Greater Than or Equal/Less Than (2)
A ≥ 05H?N
Y
Statement 1Statement 2
Given a 20-byte string in internal RAM, starting at address 40H. Write a program that output even numbers to Port 2.
130Lê Chí Thông
Bit Testing
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 ; Number of loops
MOV R0,#40H ; Address pointer
LOOP:
MOV A,@R0 ; Read data from internal RAM to A
JB ACC.0,NEXT ; skip if odd number
MOV P2,A ; Output to Port 2 if even number
NEXT:
INC R0
DJNZ R4,LOOP
END 131Lê Chí Thông
Bit Testing
Given a 20-byte string in external RAM, starting at address 4000H. Write a program that output odd numbers to Port 2.
132Lê Chí Thông
Your Turn!
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 133Lê Chí Thông
Solutions
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í Thông
Bit Testing
134
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 0000HMOV DPTR,#0100HMOV R4,#100
loop: MOVX A,@DPTRJNB ACC.7,positiveMOV P2,ASJMP next
positive: MOV P1,Anext: INC DPTR
DJNZ R4,loopEND
Lê Chí Thông
Bit Testing
135
Lê Chí Thông
Bit Testing
LOOP: MOV C,P1.0
JNB P1.1,SKIP
CPL C
SKIP: MOV P1.2,C
SJMP LOOP
XOR
P1.0
P1.1
P1.2
136
Lê Chí Thông
Example ProblemA 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”.
137
138
References
Lê Chí Thông
• I. Scott MacKenzie , The 8051 Microcontroller, 2nd Edition, Prentice-Hall, 1995
• Kenneth J. Ayala, The 8051 Microcontroller: Architecture, Programming, and Applications, West Publishing Company
• [email protected] , Lecture notes