Các chế độ đánh địa chỉ của 8051
CPC có thể truy cập dữ liệu theo nhiều cách khác nhau. Dữ liệu có 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ọi là các 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ử lý được xác định như nó được thiết kế và do vậy người lập trình không 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 nó 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 có thể được dùng để nạp thông tin vào bất kỳ thanh ghi nào kể cả thanh ghi con trỏ dữ liệu DPTR.
10 trang |
Chia sẻ: tlsuongmuoi | Lượt xem: 2237 | Lượt tải: 2
Bạn đang xem nội dung tài liệu Các chế độ đánh địa chỉ của 8051, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Ch¬ng 5
C¸c chÕ ®é ®¸nh ®Þa chØ cña 8051
CPC cã thÓ truy cËp d÷ liÖu theo nhiÒu c¸ch kh¸c nhau. D÷ liÖu cã 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äi lµ c¸c 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ö lý ®îc x¸c ®Þnh nh nã ®îc thiÕt kÕ vµ do vËy ngêi lËp tr×nh kh«ng 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 nã th× khi mét lÖnh ®îc hîp dÞch to¸n h¹ng ®i tøc thi ngay sau m· lÖnh. Lu ý r»ng tríc d÷ liÖu tøc thêi ph¶i ®îc ®Æt dÊu (#) chÕ ®é ®¸nh ®Þa chØ nµy cã thÓ ®îc dïng ®Ó n¹p th«ng tin vµo bÊt kú thanh ghi nµo 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ã còng cã thÓ ®îc truy cËp nh 2 thanh ghi 8 bit DPH vµ DPL trong ®ã DPH lµ byte cao vµ DPL lµ byte thÊp. XÐt ®o¹n m· díi ®©y:
MOV DPTR, #2550H
MOV A, #50H
MOV DPH, #25H
Còng lu ý 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 cã thÓ dï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”
Lu ý r»ng ta còng cã thÓ sö dông chÕ ®é ®¸nh ®îc chØ tøc thêi ®Ó göi d÷ liÖu ®Õn c¸c cæng cña 8051.
VÝ dô “MOV P1, #55H” lµ 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¸c vÝ dô 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 ; Lu néi dung thanh ghi A vµo thanh ghi R6
Còng nªn lu ý r»ng c¸c thanh ghi nguån vµ ®Ých ph¶i phï hîp vÒ kÝch thíc. Hay nãi c¸ch kh¸c, nÕu viÕt “ MOV DPTR, A” sÏ cho mét lçi v× 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 cã thÓ chuyÓn d÷ liÖu gi÷a thanh ghi tÝch luü A vµ thanh ghi Rn (n tõ 0 ®Õn 7) nhng 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µ kh«ng hîp lÖ.
Trong hai chÕ ®é ®¸nh ®Þa chØ ®Çu tiªn, c¸c to¸n h¹ng cã thÓ hoÆc ë bªn trong mét trong c¸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ö lý thêng ë trong mét sè ng¨n cña bé nhí RAM hoÆc trong kh«ng gian mµ cña ROM. Cã rÊt nhiÒu c¸ch ®Ó truy cËp d÷ liÖu nµ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 ®· nã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 vµ ®îc ph©n chia nh sau:1. C¸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 ®Ó lu c¸c d÷ liÖu 1 bit.
3. C¸c ng¨n nhí tõ 30H ®Õn 7FH lµ kh«ng gian ®Ó lu d÷ liÖu cã kÝch thíc 1byte.
MÆc dï toµn bé byte cña bé nhí RAM cã thÓ ®îc truy cËp b»ng chÕ ®é ®¸nh ®Þa chØ trùc tiÕp, nhng 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 lµ 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 lµ R0 - R7 cßn c¸c ng¨n nhí kh¸c cña RAM th× kh«ng cã tª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 vµ ®Þa chØ nµy ®îc cho nh lµ mét phÇn cña lÖnh. Kh¸c víi chÕ ®é ®¸nh ®Þa chØ tøc th× mµ to¸n h¹ng tù nã ®îc cÊp víi lÖnh. DÊu (# 0 lµ sù ph©n biÖt gi÷a hai chÕ ®é ®¸nh ®Þa chØ. XÐt c¸c vÝ dô díi ®©y vµ lu ý r»ng c¸c lÖnh kh«ng cã dÊu (#):
MOV R0, 40H ; Lu néi dung cña ng¨n nhí 40H cña RAM vµo R0
MOV 56H, A ; Lu 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 nµy cã 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
MOV 7,2 ; Sao néi dung thanh ghi R7 v× lÖnh “MOV R7, R2” lµ 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 nhng c¸c ng¨n nhí 30H ®Õn 7FH cña RAM kh«ng thÓ ®îc truy cËp theo bÊt kú c¸ch nµo kh¸c lµ theo ®Þa chØ cña chóng v× chóng kh«ng cã tªn.
5.2.2 c¸c thanh ghi SFSR vµ c¸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¸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 vµ DPTR lµ mét bé phËn cña nhãm c¸c thanh ghi nh×n chung ®îc gäi lµ c¸c thanh ghi ®Æc biÖt SFR (Special Funtion Register). Cã rÊt nhiÒu thanh ghi víi chøc n¨ng ®Æc biÖt vµ 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¸c ®Þa chØ cña chóng. VÝ dô ®Þa chØ cña thanh ghi A lµ EOH vµ thanh ghi B lµ FOH nh cho ë trong b¶ng 5.1. H·y ®Ó ý ®Õn nh÷ng cÆp lÖnh cã 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 chóng. CÇn ph¶i lu ý ®Õn hai ®iÓm sau vÒ c¸c ®Þa chØ cña SFR:
1. C¸c thanh ghi SFR cã ®Þa chØ nµm gi÷a 80H vµ FFH c¸c ®Þa chØ nµy ë trªn 80H, v× c¸c ®Þa chØ tõ 00 ®Õn 7FH lµ ®Þ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 SFR sö dông, nhng vÞ trÝ ng¨n nhí tõ 80H ®Õn FFH cha dïnglµ ®Ó d÷ tr÷ vµ lËp tr×nh viªn 8051 còng kh«ng ®îc sö dông.
B¶ng 5.1: C¸c ®Þa chØ cña thanh ghi chøc n¨ng ®Æc biÖt SFR
LÖnh
Tª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 DPTR
83H
P0*
Cæng 0
80H
P1*
Cæng 1
90H
P2*
Cæng 2
0A0H
P3*
Cæng 3
0B0H
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 lu ý 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¸c vÞ trÝ ng¨n nhí cña RAM vµ c¸c thanh ghi víi ®Þa chØ ®îc cho bªn trong 8051.
VÝ 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 vµ P2 lµ 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 lµ 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 “PUSH 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µ “PUSH 03”. ChÕ ®é ®¸nh ®Þa chØ trùc tiÕp ph¶i ®îc sö dông cho c¶ lÖnh POP. V× dô “POP 04” sÏ kÐo ®Ønh cña ng¨n xÕp vµo thanh ghi R4 r·nh 0.
VÝ dô 5.2:
Tr×nh bµy m· ®Ó ®Èy thanh ghi R5, R6 vµ A vµo ng¨n xÕp vµ 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 ë bªn trong CPU th× chØ c¸c thanh ghi R0 vµ 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ña c¸c 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 cã ®Þa chØ trong RO vµ A
MOV @ R1, B ; ChuyÓn néi dung cña B vµo ng¨n nhí RAM cã ®Þa chØ ë R1
Lu ý r»ng R0 còng nh R1 lu«n cã dÊu “@” ®øng tríc. Khi kh«ng cã dÊu nµy th× ®ã lµ lÖnh chuyÓn néi dung c¸c thanh ghi Ro vµ R1 chø kh«ng ph¶i d÷ liÖu ng¨n nhí mµ ®Þa chØ cã trong R0 vµ R1.
VÝ dô 5.3:
ViÕt ch¬ng tr×nh ®Ó sao chÐp gi¸ trÞ 55H vµo ng¨n nhí RAM t¹i ®Þa chØ 40H ®Õn 44H sö dông:
a) ChÕ ®é ®¸nh ®Þa chØ trùc tiÕp
b) ChÕ ®é ®¸nh ®Þa chØ gi¸n tiÕp thanh ghi kh«ng dïng vßng lÆp
c) ChÕ ®é b cã dïng vßng lÆp
Lêi gi¶i:
MOV A, #55H ; N¹p A gi¸ trÞ 55H
MOV 40H, A ; Sao chÐp A vµo ng¨n nhí RAM 40H
MOV 41H, A ; Sao chÐp A vµo ng¨n nhí RAM 41H
MOV 42H, A ; Sao chÐp A vµo ng¨n nhí RAM 42H
MOV 43H, A ; Sao chÐp A vµo ng¨n nhí RAM 43H
MOV 44H, A ; Sao chÐp A vµo ng¨n nhí RAM 44H
b)
MOV A, # 55H ; N¹p vµo A gi¸ trÞ 55H
MOV R0, #40H ; N¹p con trá R0 = 40 H
MOV @R0, A ; Sao chÐp A vµo vÞ trÝ ng¨n nhí RAM do R0 chØ ®Õn
INC R0 ; T¨ng con trá. B©y g× R0 = 41H
MOV @R0, A ; Sao chÐp A vµo vÞ trÝ ng¨n nhí RAM do R0 chØ
INC R0 ; T¨ng con trá. B©y giê R0 = 42H
MOV @R0,A ; Sao chÐp Avµo vÞ trÝ ng¨n nhí RAM do R0 chØ
INC R0 ; T¨ng con trá. B©y giê R0 = 43H
MOV @R0, A ; Sao chÐp A vµo vÞ trÝ ng¨n nhí RAM do R0 chØ
MOV @R0, A ;T¨ng con trá. B©y gê R0 = 44H
MOV @R0, A
c)
MOV A, # 55H ; N¹p vµo A gi¸ trÞ 55H
MOV R0, #40H ; N¹p con trá ®Þa chØ ng¨n nhí RAM R0 = 40H
MOV R2, #05 ; N¹p bé ®Õm R2 = 5
AGAIN: MOV @R0, A ; Sao chÐp A vµo vÞ trÝ ng¨n nhí RAM do Ro chi ®Õn
INC ; T¨ng con trá Ro
DJNZ R2, AGAIN ; LÆp l¹i cho ®Õn khi bé ®Õm = 0.
5.2.5 u ®iÓm cña chÕ ®é ®¸nh ®Þa chØ gi¸n tiÕp thanh ghi.
Mét trong nh÷ng u ®iÓm cña chÕ ®é ®¸nh ®Þa chØ gi¸n tiÕp thanh ghi lµ nã lµm cho viÖc truy cËp d÷ liÖu n¨ng ®éng h¬n so víi chÕ ®é ®¸nh ®Þa chØ trùc tiÕp.
VÝ dô 5.3 tr×nh bµy trêng hîp sao chÐp gi¸ trÞ 55H vµo c¸c vÞ trÝ ng¨n nhí cña RAM tõ 40H ®Õn 44H .
Lu ý r»ng lêi gi¶i b) cã hai lÖnh ®îc lÆp l¹i víi mét sè lÇn. Ta cã thÓ t¹o ra vßng lÆp víi hai lÖnh nµy nh ë lêi gi¶i c). Lêi gi¶i c) lµ hiÖu qu¶ nhÊt vµ chØ cã thÓ khi sö dông chÕ ®é ®¸nh ®Þa chØ gi¸n tiÕp qua thanh ghi. Vßng lÆp lµ kh«ng thÓ trong chÕ ®é ®¸nh ®Þa chØ trùc tiÕp. §©y lµ sù kh¸c nhau chñ yÕu gi÷a ®¸nh ®Þa chØ trùc tiÕp vµ gi¸n tiÕp.
VÝ dô 5.4:
H·y viÕt ch¬ng tr×nh ®Ó xo¸ 16 vÞ trÝ ng¨n nhí RAM b¾t ®Çu t¹i ®Þa chØ 60H.
Lêi gi¶i:
CLR A ; Xo¸ A=0
MOV R1, #60H ; N¹p con trá. R1= 60H
MOV R7, #16H ;N¹p bé ®Õm, R7 = 1 6 (10 H d¹ng hex)
AGAIN: MOV @R1, A ; Xo¸ vÞ trÝ ng¨n nhí RAM do R1 chØ ®Õn
INC R1 ; T¨ng R1
DJNZ R7, AGAiN ; LÆp l¹i cho ®Õn khi bé ®Õm = 0
Mét vÝ dô vÒ c¸ch sö dông c¶ R0 vµ R1 trong chÕ ®é ®¸nh ®Þa chØ gi¸n tiÕp thanh ghi khi truyÒn khèi ®îc cho trong vÝ dô 5.5.
VÝ dô 5.5:
H·y viÕt ch¬ng tr×nh ®Ó sao chÐp mét khèi 10 byte d÷ liÖu tõ vÞ trÝ ng¨n nhí RAM b¾t ®Çu tõ 35H vµo c¸c vÞ trÝ ng¨n nhí RAM b¾t ®Çu tõ 60H
Lêi gi¶i:
MOV R0, # 35H ; Con trá nguån
MOV R1, #60H ; Con trá ®Ých
MOV R3, #10 ; Bé ®Õm
BACK: MOV A, @R0 ; LÊy 1byte tõ nguån
MOV @R1, A ; Sao chÐp nã ®Õn ®Ých
INC R0 ; T¨ng con trá nguån
INC R1 ; T¨ng con trá ®Ých
DJNZ R3, BACK ; LÆp l¹i cho ®Õn khi sao chÐp hÕt 10 byte
5.2.6 H¹n chÕ cña chÕ ®é ®¸nh ®Þa chØ gi¸n tiÕp thanh ghi trong 8051.
Nh ®· nãi ë phÇn tríc r»ng R0 vµ R1 lµ c¸c thanh ghi duy nhÊt cã thÓ ®îc dïng ®Ó lµm c¸c con trá trong chÕ ®é ®¸nh ®Þa chØ gi¸n tiÕp thanh ghi. V× R0 vµ R1 lµ c¸c thanh ghi 8 bit, nªn viÖc sö dông cña chóng bÞ h¹n chÕ ë viÖc truy cËp mäi th«ng tin trong c¸c ng¨n nhí RAM bªn trong (c¸c ng¨n nhí tõ 30H ®Õn 7FH vµ c¸c thanh ghi SFR). Tuy nhiªn, nhiÒu khi ta cÇn truy cËp d÷ liÖu ®îc c¾t trong RAM ngoµi hoÆc trong kh«ng gian m· lÖnh cña ROM trªn chip. HoÆc lµ truy cËp bé nhí RAM ngoµi hoÆc ROM trªn chÝp th× ta cÇn sö dông thanh ghi 16 bit ®ã lµ DPTR. 5.2.7 ChÕ ®é ®¸nh ®Þa chØ theo chØ sè vµ truy cËp bé nhí ROM trªn chÝp.
ChÕ ®é ®¸nh ®Þa chØ theo chØ sè ®îc sö dông réng r·i trongviÖc truy cËp c¸c ph©n tö d÷ liÖu cña b¶ng trong kh«ng gian ROM ch¬ng tr×nh cña 8051. LÖnh ®îc dïng cho môc ®Ých nµy lµ “Move A, @ A + DPTR”. Thanh ghi 16 bit DPTR lµ thanh ghi A ®îc dïng ®Ó t¹o ra ®Þa chØ cña ph©n tö d÷ liÖu ®îc lu cÊt trong ROM trªn chÝp. Do c¸c ph©n tö d÷ liÖu ®îc cÊt trong kh«ng gian m· (ch¬ng tr×nh) cña ROM trªn chip cña 8051, nã ph¶i dïng lÖnh Move thay cho lÖnh Mov (chñ C ë cuèi lÖnh lµ chØ mµ lÖnh Code). Trong lÖnh nµy th× néi dung cña A ®îc bæ xung vµo thanh ghi 16 bit DPTR ®Ó t¹o ra ®Þa chØ 16 bit cña d÷ liÖu cÇn thiÕt. XÐt vÝ dô 5.6.
VÝ dô 5.6:
Gi¶ sö tõ “VSA” ®îc lu trong ROM cã ®Üa chØ b¾t ®Çu tõ 200H vµ ch¬ng tr×nh ®îc ghi vµo ROM b¾t ®Çu tõ ®Þa chØ 0. H·y ph©n tÝch c¸ch ch¬ng tr×nh ho¹t ®éng vµ h·y ph¸t biÓu xem tõ “VSA” sau ch¬ng tr×nh nµy ®îc cÊt vµo ®©u?
Lêi gi¶i:
ORG 0000H ; B¾t ®Çu ®èt ROM t¹i ®Þa chØ 00H
MOV DPTR, #200H ; §Þa chØ b¼ng tr×nh bµy DPTR = 200H
CLA A ; Xo¸ thanh ghi A (A = 0)
MOVC A, @A + DPTR ; LÊy ký tù tõ kh«ng gian nhí ch¬ng tr×nh
MOV R0, A ; CÊt nã vµo trong R0
INC DPTR ; DPTR = 201, chØ ®Õn ký tù kÕ tiÕp
CLR A ; Xo¸ thanh ghi A
MOVC A, @A + DPTR ; LÊy ký tù kÕ tiÕp
MOV R1, A ; CÊt nã vµo trong R1
INC DPTR ; DPTR = 202 con trá chØ ®Õn ký tù sau ®ã
CLA A ; Xo¸ thanh ghi A
MOVC A, @A + DPTR ; NhËn ký tù kÕ tiÕp
MOV R2, A ; C¾t nã vµo R2
HERE: SJMP HERE ; Dõng l¹i ë ®©y.
; D÷ liÖu ®îc ®èt trong kh«ng gian m· lÖnh t¹i ®Þa chØ 200H
ORG 200H
MYDATA: DB “VSA”
END ; KÕt thóc ch¬ng tr×nh
ë trong ch¬ng tr×nh nãi trªn th× c¸c vÞ trÝ ng¨n nhí ROM ch¬ng tr×nh 200H - 2002H cã c¸c néi dung sau:
200 = (‘U’); 201= (‘S’) vµ 202 = (‘A’).
Chóng ta b¾t ®Çu víi DPTR = 200H vµ A = 0.LÖnh “MOVC A, @ A + DPTR chuyÒn néi dung cña vÞ trÝ nhí 200H trong ROM (200H + 0 = 200H) vµo A.
Thanh ghi A chøa gi¸ trÞ 55H lµ gi¸ trÞ mµ ASC cña ký tù “U”. ký tù nµy ®îc cÊt vµo R0. KÕ ®ã, DPTR ®îc t¨ng lªn t¹o thµnh DPTR = 201H. A l¹i ®îc xo¸ vÒ 0 ®Ó lÊy néi dung cña vÞ trÝ nhí kÕ tiÕp trong ROM lµ 201H cha ký tù “S”. Sau khi ch¬ng tr×nh nµy ch¹y ta cã R0 = 55H, R1 = 53H vµ R2 = 41H lµ c¸c m· ASCII cña c¸c ký tù “U”, “S” vµ “A”.
VÝ dô 5.7:
Gi¶ sö kh«ng gian ROM b¾t ®Çu tõ ®Þa chØ 250H cã chøa “America”, h·y viÕt ch¬ng tr×nh ®Ó truyÒn c¸c byte vµo c¸c vÞ trÝ ng¨n nhí RAM b¾t ®Çu tõ ®Þa chØ 40H.
Lêi gi¶i
; (a) Ph¬ng ph¸p nµy sö dông mét bé ®Õm
ORG 000
MOV DPTR, # MYDATA ; N¹p con trá ROM
MOV R0, #40H ; N¹p con trá RAM
MOV R2, #7 ; N¹p bé ®Õm
BACK: CLR A ; Xo¸ thanh ghi A
MOVC A, @A + DPTR ;ChuyÓn d÷ liÖu tõ khong gian m·
MOV R0, A ;CÊt nã vµo ng¨n nhí RAM
INC DPTR ; T¨ng con trá ROM
INC R0 ; T¨ng con trá RAM
DJNZ R2, BACK ; LÆp l¹i cho ®Õnkhi bé ®Õm = 0
HERE: SJMP HERE
;-------------- -- kh«ng gian m· cña ROM trªn chÝp dïng ®Ó cÊt d÷ liÖu ORG 250H
MYDATA: DB “AMER1CA”
END
;(b) ph¬ng ph¸p nµy sö dông ký tù null ®Ó kÕt thóc chuçi
ORG 000
MOV DPTR, #MYDATA ; N¹p con trá ROM
MOV R0, #40 ; N¹p con trá RAM
BACK: CLR A S ; Xo¸ thanh ghi A(A=0)
MOVC A, @A + DPTR ; ChuyÓn d÷ liÖu tõ kh«ng gian m·
JZ HERE ; Tho¸t ra nÕu cã ký tù Null
MOV DPTR, #MYDATA ; CÊt nã vµo ng¨dn nhí cña RAM
INC @R0, A ; T¨ng con trá ROM
INC R0 ; T¨ng con trá RAM
SJM BACK ; LÆp l¹i
HERE: SJMP HERE
;------------------ kh«ng gian m· cña ROM trªn chÝp dïng ®Ó cÊt d÷ liÖu ORG 250H
MYADTA: DB “AMER1CA”, 0 ; Ký tù Null ®Ó kÕt thóc chuçi END
Lu ý ®Õn c¸ch ta sö dông lÖnh JZ ®Ó ph¸t hiÖn ký tù NOLL khi kÕt thóc chuçi
5.2.8 B¶ng x¾p xÕp vµ sö dông chÕ ®é ®¸nh ®Þa chØ theo chØ sè.
B¶ng x¾p xÕ lµ kh¸i niÖm ®îc sö dông rÊt réng r·i trong lËp tr×nh c¸c bé vi xö lý. Nã cho phÐp truy cËp c¸c phÇn tõ cña mét b¶ng thêng xuyªn ®îc sö dông víi thao t¸c cùc tiÓu. Nh mét vÝ dô, h·y gi¶ thiÕt r»ng ®èi víi mét øng dông nhÊt ®Þnh ta cÇn x2 gi¸ trÞ trong ph¹m vi 0 ®Õn 9. Ta cã thÓ sö dông mét b¶ng x¾p xÕp thay cho viÖc tÝnh to¸n nã. §iÒu nµy ®îc chØ ra trong vÝ dô 5.8.
VÝ dô 5.8
H·y viÕt mét ch¬ng tr×nh ®Ó lÊy x gi¸ trÞ cèng P1 vµ göi gi¸ trÞ x2 tíi cæng P2 liªn tôc.
Lêi gi¶i:
ORG 000
MOV DPTR, #300 H ; N¹p ®Þa chØ b¶ng x¾p xªlps
MOV A, #0FFH ; N¹p A gi¸ trÞ FFH
MOV P1, A ; §Æt cæng P1 lµ ®Çu vµo
BACK: MOV A, P1 ; LÊy gi¸ trÞ X tõ P1
MOVC A, @A + DPTR ; LÊy gi¸ trÞ X tõ b¶ng XSDQ-TABLE
MOV P2, A ; XuÊt nã ra cæng P2
SJMP BACK ; LÆp l¹i
ORG 300H
XSQR - TABLE:
DB 0, 1, 4, 9, 16, 25, 36, 49, 64, 81
END
Lu ý b¶ng lÖnh ®Çu tiªn cã thÓ thay b»ng “MOV DPTR, #XSQR - TABLE”.
VÝ dô 5.9:
Tr¶ lêi c¸c c©u hái sau cho vÝ dô 5.8.
a) H·y chØ ra néi dung c¸c vÞ trÝ 300 - 309H cña ROM
b) T¹i vÞ trÝ nµo cña ROM cã gi¸ trÞ 6 vµ gi¸ trÞ bµo nhiªu
c) Gi¶ sö P1 cã gi¸ trÞ lµ 9 th× gi¸ trÞ P2 lµ bao nhiªu (ë d¹ng nhÞ ph©n)?
Lêi gi¶i:
a) C¸c gi¸ trÞ trong c¸c ng¨n nhí 300H - 309H cña ROM lµ:
300 = (00) 301 = (01) 302 = (04) 303 = (09)
304 = (10) 4 ´ 4 = 16 = 10 in hex
305 = (19) 5 ´ 5 = 25 = 19 in hex
306 = (24) 6 ´ 6 = 36 = 24H
307 = (31) 308 = (40) 309 = (51)
b) vÞ trÝ chøa gi¸ trÞ 306H vµ gi¸ trÞ lµ 24H
c) 01010001B lµ gi¸ trÞ nhÞ ph©n cña 51H vµ 81 (92 = 81)
Ngoµi viÖc sö dông DPTR ®Ó truy cËp kh«ng gian bé nhí ROM ch¬ng tr×nh th× nã cßn cã thÓ ®îc sö dông ®Ó truy cËp bé nhí ngoµi nèi víi 8051 (ch¬ng 14).
Mét thanh ghi kh¸c n÷a ®îc dïng trong chÕ ®é ®¸nh ®Þa chØ theo chØ sè lµ bé ®Õm ch¬ng tr×nh (AppendixA).
Trong nhiÒu vÝ dô trªn ®©y th× lÖnh MOV ®· ®îc sö dông ®Ó ®¶m b¶o ®Ýnh râ rµng, mÆc dï ta cã thÓ sö dông bÊt kú lÖnh nµo kh¸c chõng nµo nã hç trî cho chÕ ®é ®¸nh ®Þa chØ. VÝ dô lÖnh “ADD A, @R0” sÏ céng néi dung ng¨n nhí cho RO chØ ®Õn vµo néi dung cña thanh ghi A.
Các file đính kèm theo tài liệu này:
- chuong5-che do dia chi.DOC