Table 5-1: Special Function Register (SFR) Addresses (1)

Download Report

Transcript Table 5-1: Special Function Register (SFR) Addresses (1)

Chapter 5
8051 Addressing Modes
1
Sections
5.1 Immediate and register addressing modes
5.2 Accessing memory using various address modes
2
Objective
• 程式中的資料可能是放在 Register 中,或在
RAM 中某一位址上,或在 ROM 一塊特殊區域
放置資料,或者是指令中直接給予定值。
• 設計 8051 IC 的人們,提供這些存取資料的方
式。這些方式便叫作 Addressing Mode。
– 中文稱為“定址模式”:決定參數位址的模式
– 也許不同家的 Assembler 會有不同的指令寫法,但
基本上 addressing mode 都是一樣的。
3
Section 5.1
Immediate and Register Addressing
Modes
4
What is Addressing Mode
• The CPU can access data in various ways.
• The data could be in a register, or in memory
(RAM or ROM), or be provided as an
immediate value.
• These various ways of accessing data are called
addressing mode.
5
Addressing Mode in the 8051
• Five addressing mode in the 8051:
1. immediate
2. register
3. direct
4. register indirect
5. indexed
6
Addressing Mode 1
1. immediate - the operand is a constant
MOV A,#01FH
2. register - the operand is in a register
MOV A,R0
3. direct - access the data in the RAM with address
MOV A,01FH
4. register indirect - the register holds the RAM
address of the data
MOV A,@R0
5. indexed - for on-chip ROM access
MOVC A,@A+DPTR
7
Immediate Addressing Mode
• The source operand is a constant.
• When the instruction is assembled, the operand
comes immediately after the opcode.
• The immediate vale can be loaded into any of the
registers.
– The immediate data must be preceded by the pound
sign, ‘#’.
– The immediate value is bounded by the size of register.
– Please use the simulation tools to find the the machine
code and the content of registers after execution.
– See Tables 10 &11 (page 418).
8
Example of Immediate Mode(1/2)
• Immediate Mode:
1 0000 74 25
2 0002 7C 3E
3 0004 90 45 21
MOV
MOV
MOV
A,#25H
;A=25H
R4,#62
;A=62=3EH
DPTR,#4521H
• Instruction Opcodes in Table 11
Hex code
74
7C
90
Mnemonic
MOV
MOV
MOV
Operands
A, #data
R4, #data
DPTR, #data
Byte
2
2
3
9
Example of Immediate Mode(2/2)
• Immediate Mode:
1 0000 74 25
2 0002 7C 3E
3 0004 90 45 21
MOV
MOV
MOV
A,#25H
;A=25H
R4,#62
;A=62=3EH
DPTR,#4521H
• Instruction Opcodes in Table 10
Mnemonic
MOV
A, #data
MOV
Rn, #data
MOV
DPTR, #data
Oscillator Period
12
12
24
10
EQU
• The EQU directive is used in the immediate
addressing mode.
1
2
3
4
5
6
7
0000
ORG
0000
COUNT EQU
0000 7C 1E
MOV
0002 90 02 00
MOV
0200
ORG
0200 41 6D 65 72 69 MYDATA DB
0207
END
0H
30
R4,#COUNT
DPTR,#MYDATA
200H
"America"
11
Addressing Mode 2
1. immediate - the operand is a constant
MOV A,#01FH
2. register - the operand is in a register
MOV A,R0
3. direct - access the data in the RAM with address
MOV A,01FH
4. register indirect - the register holds the RAM
address of the data
MOV A,@R0
5. indexed - for on-chip ROM access
MOVC A,@A+DPTR
12
Register Addressing Mode
• Register addressing mode involves the use of
registers to hold the data.
– The source and destination registers must match in size.
– The movement of data between Rn registers is not
allowed. “MOV R4,R7” is illegal.
• You can find that the opcode in register addressing
mode is short!
13
Example of Register Mode(1/2)
• Register Mode:
1 0000 E8
2 0001 FA
3 0002 2D
MOV A,R0
MOV R2,A
ADD A,R5
• Instruction Opcodes in Table 11
Hex code Mnemonic Operands
E8
MOV
A,R0
FA
MOV
R2,A
2D
ADD
A,R5
Byte
1
1
1
14
Example of Register Mode(2/2)
• Register Mode:
1 0000 E8
2 0001 FA
3 0002 2D
MOV A,R0
MOV R2,A
ADD A,R5
• Instruction Opcodes in Table 10
Mnemonic
MOV
A, Rn
MOV
Rn, A
ADD
A, Rn
Oscillator Period
12
12
12
15
Section 5.2
Accessing Memory Using Various
Address Modes
16
Addressing Mode 3
1. immediate - the operand is a constant
MOV A,#01FH
2. register - the operand is in a register
MOV A,R0
3. direct - access the data in the RAM with address
MOV A,01FH
4. register indirect - the register holds the RAM
address of the data
MOV A,@R0
5. indexed - for on-chip ROM access
MOVC A,@A+DPTR
17
Direct Addressing Mode
• There are 128 bytes of RAM in the 8051.
• The RAM has been assigned address 00 - 7FH.
– 00-1FH:the register banks and stack
– 20-2FH:bit-addressable space to save single-bit data
– 30-7FH:scratch pad RAM
• In direct addressing mode, the data is in a RAM
memory location whose address is known, and this
address is given as a part of the instruction.
– If an number begins without a pound sign, ‘#’, then
Assembler think it as the RAM address.
18
Example of Direct Mode(1/2)
• Direct Mode:
1
2
3
4
5
0000
0002
0004
0007
000A
A8
F5
90
75
75
40
56
45 21
83 45
82 21
MOV
MOV
MOV
MOV
MOV
R0,40H
56H,A
DPTR,#4521
DPH,#45H
DPL,#21H
• Instruction Opcodes Table 11
Hex code
A8
F5
75
Mnemonic
MOV
MOV
MOV
Operands
R0, data addr.
data addr., A
data addr., #data
Bytes
2
2
3
19
Example of Direct Mode(2/2)
• Direct Mode:
1
2
3
4
5
0000
0002
0004
0007
000A
A8
F5
90
75
75
40
56
45 21
83 45
82 21
MOV
MOV
MOV
MOV
MOV
R0,40H
56H,A
DPTR,#4521
DPH,#45H
DPL,#21H
• Instruction Opcodes Table 10
Mnemonic
MOV
Rn, direct
MOV
direct, A
MOV
direct, #data
Oscillator Period
24
12
24
20
Register Bank(1/2)
• If we use register bank 0, then the following
instructions 2&3 do the same works:
1 0000 7C 64
2 0002 E5 04
3 0004 EC
MOV R4,#100
MOV A,4 ;direct mode
MOV A,R4 ;register mode
– Initially, the 8051 uses the register bank 0.
– R4 has RAM address 04H.
21
Register Bank(2/2)
• If we use register bank 1, then the following
instructions 3&4 do the different works:
1
2
3
4
0000
0002
0004
0006
D2 D3
7C 64
E5 04
EC
SETB RS0
;RS0=1
MOV R4,#100
MOV A,4
;A=0
MOV A,R4
;A=100=64H
–
–
–
–
RS1=PSW.4=0 & RS0=PSW.3=1  register bank 0
Initially, the content of RAM is 00H.
R4 has RAM address 0CH.
RAM 0CH has the value 100.
22
SFR(Special Function Register)
• There are many special functions registers in the
8051. We call them SFR.
– Example:A, B, PSW, and DPTR
• The 8051 Assembler provides that the SFR can be
accessed by their name or by their addresses.
• See Table 5-1 for SFR addresses
• The SFR have addresses between 80H and FFH.
• Not all the address space of 80 to FF is used by the
SFR.
23
Table 5-1: Special Function Register (SFR)
Addresses(1/2)
Symbol
ACC*
B*
PSW*
SP
DOTR
DPL
DPH
P0*
P1*
P2*
P3*
IP*
IE*
TMOD
Name
Accumulator
B register
Program status word
Stack pointer
Data pointer 2 bytes
Low byte
High byte
Port 0
Port 1
Port 2
Port 3
Interrupt priority control
Interrupt enable control
Timer/counter mode control
Address
0E0H
0F0H
0D0H
81H
82H
83H
80H
90H
0A0H
0B0H
0B8H
0A8H
89H
24
Table 5-1: Special Function Register (SFR)
Addresses (2/2)
Symbol
Name
TCON*
Timer/counter control
T2CON*
Timer/counter 2 control
T2MOD
Timer/counter mode control
TH0
Timer/counter 0 high byte
TL0
Timer/counter 0 low byte
TH1
Timer/counter 1 high byte
TL1
Timer/counter 1 low byte
TH2
Timer/counter 2 high byte
TL2
Timer/counter 2 low byte
RCAP2H
T/C 2 capture register high byte
RCAP2L
T/C 2 capture register low byte
SCON*
Serial control
SBUF
Serial data buffer
PCON
Power control
*bit addressable (discussed further in Chapter 8)
Address
88H
0C8H
0C9H
8CH
8AH
8DH
8BH
0CDH
0CCH
0CBH
0CAH
98H
99H
87H
25
ACC and Its Address
• ACC has SFR address 0E0H.
1 0000 75 E0 55
2 0003 74 55
3 0005 D2 E1
MOV 0E0H,#55H
MOV A,#55H
SETB A.1
– Compare their code size and execution time.
• “ACC*”, * means this register is bit
addressable. You can access each bit of ACC
independently.
SFC addr. 0E7 0E6
ACC
A.7
A.6
0E5 0E4
0E3
A.5
A.3
A.4
0E2 0E1 0E0
A.2
A.1
A.0
26
Example 5-1
Write code to send 55H to ports P1 and P2, using
(a) their names
(b) their addresses.
Solution:
(a) MOV A,#55H
;A=55H
MOV P1,A
;P1=55H
MOV P2,A
;P2=55H
(b)
From Table 5-1, P1 address = 80H; P2 address = A0H
MOV A,#55H
;A=55H
MOV 80H,A
;P1=55H
MOV 0A0H,A
;P2=55H
27
Stack
• Another major use of direct addressing mode is
the stack.
• In the 8051 family, only direct addressing mode is
allowed for pushing onto the stack.
28
Example 5-2(1/2)
Show the code to push R5, R6, and A onto the stack and then pop
them back them into R2, R3, and B.
We want:B = A, R2 = R6, and R3 = R5.
Solution:
PUSH
PUSH
PUSH
POP
POP
POP
05
06
0E0H
0F0H
02
03
;push R5 onto stack
;push R6 onto stack
;push register A onto stack
;pop top of stack into register B
;pop top of stack into R2
;pop top of stack into R3
29
Example 5-2(1/2)
• Different assembler provide different instruction
for the stack.
• In our simulation tools, they are the same:
1 0000 C0 05
2 0002 C0 06
3 0004 C0 E0
PUSH R5
PUSH R6
PUSH A
1 0000 C0 05
2 0002 C0 06
3 0004 C0 E0
PUSH 05
PUSH 06
PUSH 0E0H
30
Addressing Mode 4
1. immediate - the operand is a constant
MOV A,#01FH
2. register - the operand is in a register
MOV A,R0
3. direct - access the data in the RAM with address
MOV A,01FH
4. register indirect - the register holds the RAM
address of the data
MOV A,@R0
5. indexed - for on-chip ROM access
MOVC A,@A+DPTR
31
Register Indirect Addressing Mode
• In the register indirect addressing mode, a register
is used as a pointer to the data.
– That is, this register holds the RAM address of the data.
• Only registers R0 and R1 can be used to hold the
address of an operand located in RA.
– Usually, R0 and R1 are denoted by Ri.
• When R0 and R1 hold the addresses of RAM
locations, they must be preceded by the “@” sign.
32
Example of Register Indirect Mode(1/2)
• Register Indirect Mode:
1 0000 75 20 64
2 0003 78 20
3 0005 E6
MOV 20H,#100
MOV R0,#20H
MOV A,@R0
RAM
2. let R0 be the
data address
R0
20H
3. copy the content in
addr. R0=20H to A
A
64H
1E
1F
20
21
22
23
00
00
64
00
00
:
1. put 64H to
addr. 20H
33
Example of Register Indirect Mode(2/2)
• Register Indirect Mode:
1 0000 75 F0 80
2 0003 79 31
3 0005 A7 F0
MOV B,#080H
MOV R1,#31H
MOV @R1,B
RAM
3. copy B to the RAM
2F
location with addr.
R1=31H
30
2. let R0 be the
data address
1. let B=80H
R1
31H
B
80H
31
32
33
34
00
00
80
00
00
:
34
Example 5-3 (1/3)
Write a program to copy the value 55H into RAM memory
locations 40H to 45H using
(a) direct addressing mode,
(b) register indirect addressing mode without a loop,
(c) with a loop.
RAM
Solution of (a) :
MOV A,#55H
40 55
MOV 40H,A
copy A to the RAM
41 55
location of addr. 43H
MOV 41H,A
42 55
43 55
MOV 42H,A
A 55H
44 00
MOV 43H,A
45 50
MOV 44H,A
35
Example 5-3 (2/3)
Solution of (b) register indirect addressing mode without a loop
MOV A,#55H ;load A with value 55H
MOV R0,#40H ;load the pointer. R0=40H
MOV @R0,A
;copy A to RAM location where R0
; points to
INC R0
;increment pointer. Now R0=41H
MOV @R0,A
RAM
INC R0
;R0=42H
MOV @R0,A
40 55
INC R0
;R0=43H
41 55
MOV @R0,A
42 55
R0 43H
INC R0
43 00
44 00
MOV @R0,A
45 00
A 55H
36
Example 5-3 (3/3)
Solution of (c) with a loop:
MOV A,#55H
MOV R0,#40H
MOV R2,#05H
AGAIN: MOV @R0,A
;A=55H
;load pointer. R0=40H,
;load counter, R2=5
;copy 55 to RAM location
;
R0 points to
INC R0
;increment R0 pointer
DJNZ R2,AGAIN ;loop until counter = 0
37
Advantage of Register Indirect Addressing
Mode
• One of the advantages of register indirect
addressing mode is that it makes accessing data
dynamic rather than static.
• Solution (c) in Example 5-3 is the most efficient
and is possible only because of register indirect
addressing mode.
– Looping is not possible in direct addressing mode.
– See Examples 5-4, 5-5, too.
• Their use is limited to accessing any information
in the internal RAM.
38
Example 5-4
Write a program to clear 16 RAM locations starting at RAM address
60H.
Solution:
CLR
MOV
MOV
AGAIN: MOV
A
R1,#60H
R7,#16
@R1,A
;A=0
;load pointer. R1=60H
;load counter, R7=10H
;clear RAM location R1
; points to
INC R1
;increment R1 pointer
DJNZ R7,AGAIN ;loop until counter = 0
39
Example 5-5
Write a program to copy a block of 10 bytes of data from RAM
locations starting at 35H to RAM locations starting at 60H.
Solution:
MOV
MOV
MOV
BACK: MOV
MOV
INC
INC
R0,#35H
R1,#60H
R3,#10
A,@R0
@R1,A
R0
R1
;source pointer
;destination pointer
;counter
;get a byte from source
;copy it to destination
;increment source pointer
;increment destination
; pointer
DJNZ R3,BACK ;keep doing it 10 times
40
Addressing Mode 5
1. immediate - the operand is a constant
MOV A,#01FH
2. register - the operand is in a register
MOV A,R0
3. direct - access the data in the RAM with address
MOV A,01FH
4. register indirect - the register holds the RAM
address of the data
MOV A,@R0
5. indexed - for on-chip ROM access
MOVC A,@A+DPTR
41
Indexed Addressing Mode
• Indexed addressing mode is widely used in
accessing data elements of look-up table entries
located in the program ROM space of the 8051.
– A look-up table is a ROM block where the data is given
previously (then you can access it frequently).
– The instruction used for this purpose is MOVC.
• DPTR can be used to access memory externally
connected to the 8051. See Chapter 14.
• Another register used in indexed addressing mode
is the PC. See Appendix A.
42
MOVC
• Copy the source operand to the destination
operand.
MOVC A, @A+DPTR
– The “C” means code (program code in on-chip ROM).
– A+DPTR is the address of the data element stored in
on-chop ROM.
– Put the ROM value to A.
43
Example of MOVC
• Register Indexed addressing Mode:
1
2
3
4
5
5
0000
0003
0004
0005
0006
0008
90 00 06
E4
93
F8
80 FE
55 53 41
MOV DPTR,#MYDATA
CLR A
MOVC A,@A+DPTR
MOV R0,A
HERE: SJMP HERE
MYDATA: DB "USA“
A 55H
– DPTR=#MYDATA=0008H
– A+DPTR=0008H
ROM
00
01
02
03
90
00
06
E4
:
08 55
09 53
0A 41
44
Example 5-6 (1/2)
In this program, assume that the word “USA” is burned into ROM
locations starting at 200H, and that the program is burned into
ROM locations starting at 0. Analyze how the program works and
state where “USA” is stored after this program is run.
Solution:
ROM
DPTR
02H
00H
A+DPTR= 0200H
0000
0001
0002
0003
90
02
00
E4
:
R0
R1
R2
55H
00H
00H
A
55H
0200
0201
0202
55
53
41
U
S
A
45
Example 5-6 (2/2)
ORG 0000H
MOV DPTR,#200H
CLR A
MOVC A,@A+DPTR
MOV R0,A
INC DPTR
CLR A
MOVC A,@A+DPTR
MOV R1,A
INC DPTR
CLR A
MOVC A,@A+DPTR
MOV R2,A
HERE:SJMP HERE
ORG 200H
MYDATA: DB “USA”
END
;burn into ROM from 0
;DPTR=200H
;clear A(A=0)
;get the char space
;save it in R0
;DPTR=201
;clear A(A=0)
;get the next char
;save it in R1
;DPTR=202
;clear A(A=0)
;get the next char
;save it in R2
;stay here
;end of program
46
Example 5-7 (1/2)
Assuming that ROM space starting at 250H contains “America”, write
a program to transfer the bytes into RAM locations starting at 40H.
Solution of (a) This method uses a counter:
ORG
MOV
MOV
MOV
BACK:
CLR
MOVC
MOV
INC
INC
DJNZ
HERE:
SJMP
ORG
MYDATA: DB
END
0000
DPTR,#MYDATA ;Initialization
R0,#40H
ROM
R2,#7
A
0000 90
A,@A+DPTR
0001 02
0002 50
@R0,A
0003 78
DPTR
A 41
R0
:
R2,BACK
0250 41
HERE
0251 4D
250H
0252 45
R0 40
“AMERICA”
0253 52
RAM
40
41
42
43
44
45
46
47
DPTR 02
41
4D
45
52
49
43
41
4E
50
A
M
E
R
I
C
A
N
47
Example 5-7 (2/2)
Solution of (b) This method uses null char for end of string:
ORG 0000
MOV DPTR,#MYDATA
MOV R0,#40H
;No “MOV R2,#7”
BACK:
CLR A
MOVC A,@A+DPTR
JZ
HERE
;if A=0
MOV @R0,A
;leave the block
INC DPTR
INC R0
SJMP BACK
HERE:
SJMP HERE
ORG 250H
MYDATA: DB
“AMERICA”,0 ;notice null char
;for end of string
END
48
Example 5-8
Write a program to get the x value from P1 and send x2 to P2,
continuously.
Solution:
ORG 0
MOV DPTR,#XSQR_TABLE
MOV A,#0FFH
MOV P1,A
;P1 as INPUT PORT
BACK:
MOV A,P1
;GET X
MOVC A,@A+DPTR ;Count the addr.
MOV P2,A
;Issue it to P2
SJMP BACK
ORG 300H
XSQR_TABLE:
DB
0,1,4,9,16,25,36,49,64,81
END
49
Example 5-9
Answer the following questions for Example 5-8.
(a) Indicate the content of ROM locations 300-309H.
(b) At what ROM location is the square of 6, and what value should
be there?
(c) Assume that P1 has a value of 9: what value is at P2 (in binary)?
Solution:
(a) All values are in hex.
300 = (00) 301 = (01) 302 = (04) 303 = (09)
304 = (10) 4×4=16=10H
305 = (19) 5×5=25=19H
306 = (24) 6×6=36=24H
307 = (31) 308 = (40) 309 = (51)
(b) ROM Addr.=306H; the value 24H=36
(c) P2 = 01010001B=51H=81 in decimal.
50
You are able to
• List the 5 addressing modes of the 8051
microcontroller
• Contrast and compare the addressing modes
• Code 8051 Assembly language instructions using
each addressing mode
• List the SFR(special function registers)address
• Discuss how to access the SFR
• Manipulate the stack using direct addressing mode
• Code 8051 instructions to manipulate a look-up
table
51
Homework
• Chapter 5 Problems:2,3,8,11,12,13
• Note:
– Please write and compile the program of Problems
8,11,12,13.
52