Ch ng 5ươ
Các ch đ đánh đ a ch c a 8051ế
CPC th truy c p d li u theo nhi u cách khác nhau. D li u th
trong m t thanh ghi ho c trong b nh ho c đ c cho nh m t giá tr t c th i các ượ ư
cách truy c p d li u khác nhau đ c g ic ch đ đánh đ a ch . Ch ng này ượ ế ươ
chúng ta bàn lu n v các ch đ đánh đ a ch c a 8051 trong ph m vi m t s ví d . ế
Các ch đ đánh đ a ch khác nhau c a b vi x đ c xác đ nh nh ế ượ ư
đ c thi t k do v y ng i l p trình kng th đánh đ a ch khác nhau là:ượ ế ế ườ
1. t c th i 2. Theo thanh ghi 3. Tr c ti p ế
4. gián ti p qua thanh ghi 5. Theo ch sế
5.1 Các ch đ đánh đ a ch t c th i và theo thanh ghiế
5.1.1 Ch đ đánh đ a ch t c th i ế
Trong ch đ đánh đ a ch này toán h ng ngu n là m t h ng s . Và nh tênế ư
g i c a thì khi m t l nh đ c h p d ch toán h ng đi t c thi ngay sau mã l nh. ượ
L u ý r ng tr c d li u t c th i ph i đ c đ t d u (#) ch đ đánh đ a ch nàyư ướ ượ ế
th đ cng đ n p thông tin vào b t kỳ thanh ghio k c thanh ghi con tr ượ
d li u DPTR. Ví d :
MOV A, # 25H ; N p giá tr 25H vào thanh ghi A
MOV R4, #62 ; N p giá tr 62 th p phân vào R4
MOV B, #40H ; N p giá tr 40 H vào thanh ghi B
MOV DPTR, #4521H ; N p 4512H vào con tr d li u DPTR
M c dù thanh ghi DPTR là 16 bit nó ng có th đ c truy c p nh 2 thanh ượ ư
ghi 8 bit DPH và DPL trong đó DPH là byte cao DPL byte th p. Xét đo n
d i đây:ướ
MOV DPTR, #2550H
MOV A, #50H
MOV DPH, #25H
ng l u ý r ng l nh d i đây có th t o ra l i vì giá tr n p vào DPTR l nư ướ
h n16 bit:ơ
MOV DPTR, # 68975 ; Giá tri không h p l > 65535 (FFFFH)
Ta th ng ch l nh Eqw đ truy c p d li u t c th i nh sau ư
COUNT EDU 30
... ...
MOV R4, #COUNT ; R4 = 1E (30 = 1EH)
MOV DPTR, #MYDATA ; DPTR = 200H
ORG 200H
MYDATA: DB “America”
L u ý r ng ta cũngth s d ng ch đ đánh đ c ch t c th i đ g i dư ế ượ
li u đ n các c ng c a 8051. ế
d “MOV P1, #55H” m t l nh h p l .
5.1.2 ch đ đánh đ a ch theo thanh ghi:ế
Ch đ đánh đ a ch theo thanh ghi liên quan đ n vi c s d ng các thanh ghiế ế
đ d li u c n đ c thao tác cácd v đánh đ a ch theo thanh ghi nh sau: ượ ư
MOV A, RO ; Sao n i dung thanh ghi RO vào thanh ghi A
MOV R2, A ; Sao n i dung thanh ghi A vào thanh ghi R2
ADD A; R5 ; C ng n i dung thanh ghi R5 vào thanh ghi A
ADD A, R7 ; C ng n i dung thanh ghi R7 vào thanh ghi A
MOV R6, A ; L u n i dung thanh ghi A vào thanh ghi R6ư
ng n l u ý r ng các thanh ghi ngu n đích ph i phù h p v chư
th c. Hay nói cách khác, n u vi t MOV DPTR, A s cho m t l i ngu n làướ ế ế
thanh ghi 8 bit và đích l i là thanh ghi 16 bit. Xét đo n mã sau:
MOV DPTR, #25F5H
MOV R7, DPL
MOV R6, DPH
Đ ý r ng ta th chuy n d li u gi a thanh ghi ch lu A thanh ghi
Rn (n t 0 đ n 7) nh ng vi c chuy n d li u gi a các thanh ghi Rn thì không đ c ế ư ượ
phép. Ví d , l nh “MOV R4, R7” là kng h p l .
Trong hai ch đ đánh đ a ch đ u tiên, các toán h ng th ho c bênế
trong m t trong c thanh ghi ho c đ c g n li n v i l nh. Trong h u h t các ượ ế
ch ng trình d li u c n đ c x th ng trong m t s ngăn c a b nhươ ượ ườ
RAM ho c trong không gian mà c a ROM.r t nhi u cách đ truy c p d li u
y mà ph n ti p theo s xét đ n. ế ế
5.2 Truy c p b nh s d ng các ch đ đánh đ a ch khác nhau. ế
5.2.1 Ch đ đánh đ a ch tr c ti p.ế ế
Nh đãi ch ng 2 trong 8051 có 128 byte b nh RAM. B nh RAMư ươ
đ c gán các đ a ch t 00 đ n FFH đ c phân chia nh sau:ượ ế ượ ư
1. c ngăn nh t 00 đ n 1FH đ c gán cho các băng thanh ghi và ngăn x p. ế ượ ế
2. Các ngăn nh t 20H đ n 2FH đ c dành cho không gian đánh đ a ch theo bit đ ế ượ
l u các d li u 1 bit.ư
3. c ngăn nh t 30H đ n 7FH là kng gian đ l u d li u có ch th c 1byte. ế ư ướ
M c dù toàn b byte c a b nh RAM th đ c truy c p b ng ch đ ượ ế
đánh đ a ch tr c ti p, nh ng ch đ này th ng đ c s d ng nh t đ truy c p ế ư ế ườ ượ
các ngăn nh RAM t 30H đ n 7FH. Đây do m t th c t là các ngăn nh dành ế ế
cho băng ghi đ c truy c p b ng thanh ghi theo các tên g i c a chúng R0 - R7ượ
n các ngăn nh khác c a RAM thì không n nh v y. Trong ch đ đánh đ a ư ế
ch tr c ti p thì d li u trong m t ngăn nh RAM mà đ a ch c a nó đ c bi t ế ượ ế
đ a ch này đ c cho nh m t ph n c a l nh. Kc v i ch đ đánh đ a ch ượ ư ế
t c thì mà toán h ng t đ c c p v i l nh. D u (# 0 s pn bi t gi a hai ượ
ch đ đánh đ a ch . Xét các d d i đây l u ý r ng các l nh không d uế ướ ư
(#):
MOV R0, 40H ; L u n i dung c a ngăn nh 40H c a RAM vào R0ư
MOV 56H, A ; L u n i dung thanh ghi A vào ngăn nh 56H c a RAMư
MOV R4, 7FH ; Chuy n nôi dung ngănnh 7FH c a RAM vào R4
Nh đã nói tr c thì các ngăn nh tr 0 đ n 7 c a RAM đ c c p choư ướ ế ượ
b ng 0 c a các thanh ghi R0 - R7. Các thanh ghi y th đ c truy c p theo 2 ượ
cách nh sau:ư
MOV A, 4 ; Hai l nh này gi ng nhau đ u sao n i dung thanh ghi R4 vào A
MOV A, R4
MOV A, 7 ; Hai l nh này đ u nh nhau là sao n i dung R7 vào thanh ghi A ư
MOV A,R7
Đ nh n m nh s quan tr ng c a d u (#) trong các l nh c a 8051. Xét các
mã cho sau đây:
MOV R2, #05 ; Gán R2=05
MOV A, 2 ; Sao n i dung thanh ghi R2 vào A
MOV B, 2 ; Sao n i dung thanh ghi R2 vào B
MOC 7,2 ; Sao n i dung thanh ghi R7l nh “MOV R7, R2” không h p
l .
M c dù s d ng các tên R0 - R7 d h n các đ a ch b nh c a chúng nh ng ơ ư
các ngăn nh 30H đ n 7FH c a RAM không th đ c truy c p theo b t kỳ cách ế ượ
o kc là theo đ a ch c a chúngchúng không tên.
5.2.2c thanh ghi SFSR c đ a ch c a chúng.
Trong các thanh ghi đ c nói đ n t tr c đ n gi ta th y r ng c thanhượ ế ướ ế
ghi R0 - R7 là m t ph n trong 128 byte c a b nh RAM. V y còn các thanh ghi A,
B, PSW DPTR m t b ph n c a nm các thanh ghi nhìn chung đ c g i ượ
các thanh ghi đ c bi t SFR (Special Funtion Register). r t nhi u thanh ghi v i
ch c năng đ c bi t chúng đ c s d ng r t r ng rãi mà ta s trình bày các ượ
ch ng sáu. Các thanh ghi FR có th đ c truy c p theo tên c a chúng (mà d h nươ ượ ơ
r t nhi u) ho c theo c đ a ch c a chúng. d đ a ch c a thanh ghi A EOH
và thanh ghi B là FOH nh cho trong b ng 5.1. Hãy đ ý đ n nh ng c p l nh cóư ế
ng ý nghĩa d i đây:ướ
MOV 0E0H, #55H ; N p 55H vào thanh ghi A(A=55H)
MOV A, #55H ;
MOV 0F0H, #25H ; N p 2SH vào thanh ghi B ( B = 25)
MOV 3, #25H ;
MOV 0E0H ; Sao n i dung thanh ghi R2 vào A
MOV A, R2 ;
MOV 0F0 ; Sao n i dung thanh ghi R0 vào B
MOV B, R0 ;
B ng 5.l d i đây li t kê các thanh ghi ch c năng đ c bi t SFR c a 8051 và ướ
các đ a ch c a cng. C n ph i l u ý đ n hai đi m sau v các đ a ch c a SFR: ư ế
1. c thanh ghi SFR có đ a ch nàm gi a 80H và FFH các đ a ch y trên 80H,
các đ a ch t 00 đ n 7FH đ a ch c a b nh RAM bên trong 8051. ế
2. không ph i t t c m i đ a ch t 80H đ n FFH đ u do SFH s d ng, nh ng v ế ư
trí ngăn nh t 80H đ n FFH ch a nglà đ d tr l p trình viên 8051 cũng ế ư
không đ c s d ng.ượ
B ng 5.1:c đ a ch c a thanh ghi ch c năng đ c bi t SFR
L nhTên Đ a ch
ACC* Thanh ghi tích lu (thanh ghi t ng ) A 0E0H
B* Thanh ghi B 0F0H
PSW* T tr ng thái ch ng trình ươ 0D0H
SP Con tr ngăn x p ế 81H
DPTR Con tr d li u hai byte
DPL Byte th p c a DPTR 82H
DPH Byte cao c a DPTR83H
P0* C ng 080H
P1* C ng 190H
P2* C ng 20A0H
P3* C ng 30B0H
IP* Đi u khi n u tiên ng t ư 0B8H
IE* Đi u khi n cho phép ng t A08H
TMOD Đi u khi n ch đ b đ m/ B đ nh th i ế ế 89H
TCON* Đi u khi n b đ m/ B đ nh th i ế 88H
T2CON* Đi u khi n b đ m/ B đ nh th i 2 ế 0C8H
T2MOD Đi u khi n ch đ b đ m/ B đ nh th i 2 ế ế 0C9H
TH0 Byte cao c a b đ m/ B đ nh th i 0 ế 8CH
TL0 Byte th p c a b đ m/ B đ nh th i 0 ế 8AH
TH1 Byte cao c a b đ m/ B đ nh th i 1 ế 8DH
TL1 Byte th p c a b đ m/ B đ nh th i 1 ế 8BH
TH2 Byte cao c a b đ m/ B đ nh th i 2 ế 0CDH
TL2 Byte th p c a b đ m/ B đ nh th i 2 ế 0CCH
RCAP2H Byte cao c a thanh ghi b đ m/ B đ nh th i 2 ế 0CBH
RCAP2L Byte th p c a thanh ghi b đ m/ B đ nh th i 2 ế 0CAH
SCON* Đi u khi n n i ti p ế 98H
SBUF B đ m d li u n i ti p ế 99H
PCON Đi u khi n công su t 87H
*Các thanh ghi có th đánh đ a ch theo bit.
Xét theo ch đ đánh đ a ch tr c ti p thì c n ph i l u ý r ng giá tr đ a chế ế ư
đ c gi i h n đ n 1byte, 00 - FFH. Đi u này có nghĩa là vi c s d ng c a ch đượ ế ế
đánh đ a ch này b gi i h n b i vi c truy c p c v trí ngăn nh c a RAM và c
thanh ghi v i đ a ch đ c cho n trong 8051. ượ
d 5.1:
Vi t ch ng trình đ g i 55H đ n c ng P1 và P2 s d ng ho c ế ươ ế
a) Tên các c ng
b) Ho c đ a ch các c ng
L i gi i:
a) MOV A, #55H ; A = 55H
MOV P1, A ; P1 = 55H
MOV P2, A ; P2 = 55H
b) T b ng 5.1 ta l y đ i ch c ng P1 là 80H P2 A0H
MOV A, #55H ; A = 55H
MOV 80H, A ; P1 = 55H
MOV 0A0H, A ; P2 = 55H
5.2.3 Ngăn x p và ch đ đánh đ a ch tr c ti p. ế ế ế
M t công d ng chính khác c a ch đ đánh đ a ch tr c ti p ngăn x p. ế ế ế
Trong h 8051 ch có ch đ đánh đ a ch tr c ti p là đ c phép đ y vào ngăn x p. ế ế ượ ế
Do v y, m t l nh nh “PVSH A” là không h p l . Vi c đ y thanh ghi A vào ngăn ư
x p ph i đ c vi t d i d ng “PVAH 0E0H” v i 0E0H là đ a ch c a thanh ghi A.ế ượ ế ướ
T ng t nh v y đ đ y thanh ghi R3 rãnh 0 vào ngăn x p ta ph i vi t là “PVSHươ ư ế ế
03”. Ch đ đánh đ a ch tr c ti p ph i đ c s d ng cho c l nh POP. dế ế ượ
“POP 04” s kéo đ nh c a ngăn x p vào thanh ghi R4 rãnh 0. ế
d 5.2:
Trình bày đ đ y thanh ghi R5, R6 A o ngăn x p sau đó kéo ế
chùng ng c tr l i R2, R3 và B t ng ng.ượ ươ
L i gi i:
PUSH 05 ; Đ y R5 vào ngăn x p ế
PUSH 06 ; Đ y R6 vào ngăn x p ế
PUSH 0E0H ; Đ y thanhghi A vào ngăn x p ế
POP 0F0H ; Kéo đ nh ngăn x p cho vào thanh ghi B ế
; Bây gi B = A
POP 02 ; Kéo đ nh ngăn x p cho vào thanh ghi R2 ế
; Bây gi R2= R6
POP 03 ; Kéo đ nh ngăn x p cho vào thanh ghi ế
; Bây gi R3 = R5
5.2.4 ch đ đánh đ a ch gián ti p thanh ghi.ế ế
Trong ch đ này, m t thanh ghi đ c s d ng nh m t con tr đ n dế ượ ư ế
li u. N u d li u n trong CPU thì ch các thanh ghi R0 R1 đ c s d ng ế ượ
cho m c đích này. Hay nói cách khác các thanh ghi R2 - R7 không có th dùng đ c ượ
đ gi đ a ch c a toán h ng n m trong RAM khi s d ng ch đ đánh đ a ch này ế
khi Ro và R1 đ c dùng nh các con tr , nghĩa là khi chúng gi các đ a ch c acượ ư
ngăn nh RAM thì tr c chúng ph i đ t d u (@) nh ch ra d i đây. ướ ư ướ
MOV A, @ R0 ; Chuy n n i dung c a ngăn nh RAM đ a ch trong
RO và A