Giáo trình vi điều khiển 8051 P4
Lập trình cho cổng vào - ra I / 0
Mặc dù các thành viên của họ 8051 đều có các kiểu đóng vỏ khác nhau , chẳng hạn như hai hàng chân DIP dạng vỏ dẹt vuông QFP và dạng chíp không có chân đỡ LLC
ch¬ng 4
LËp tr×nh cho cæng vµo - ra I/0
4.1 M« t¶ ch©n cña 8051.
MÆc dï c¸c thµnh viªn cña hä 8051 (vÝ dô 8751, 89C51, DS5000) ®Òu cã c¸c
kiÓu ®ãng vá kh¸c nhau, ch¼ng h¹n nh hai hµng ch©n DIP (Dual In-Line Pakage)
d¹ng vá dÑt vu«ng QFP (Quad Flat Pakage) vµ d¹ng chÝp kh«ng cã ch©n ®ì LLC
(Leadless Chip Carrier) th× chóng ®Òu cã 40 ch©n cho c¸c chøc n¨ng kh¸c nhau nh
vµo ra I/0, ®äc RD , ghi WR , ®Þa chØ, d÷ liÖu vµ ng¾t. CÇn ph¶i lu ý r»ng mét sè
h·ng cung cÊp mét phiªn b¶n 8051 cã 20 ch©n víi sè cæng vµo-ra Ýt h¬n cho c¸c øng
dông yªu cÇu thÊp h¬n. Tuy nhiªn, v× hÇu hÕt c¸c nhµ ph¸t triÓn chÝnh sö dông chÝp
®ãng vá 40 ch©n víi hai hµng ch©n DIP nªn ta chØ tËp chung m« t¶ phiªn b¶n nµy.
P1.0 1 40 Vcc
P1.1 2 39 P0.0 (AD0)
P1.2 3 38 P0.1 (AD1)
P1.3 4 37 P0.2 (AD2)
P1.4 5 36 P0.3 (AD3)
P1.5 6 35 P0.4 (AD4)
P1.6 7 34 P0.5 (AD5)
P1.7 8 8051 33 P0.6 (AD6)
RST 9 32 P0.6 (AD6)
(RXD) P3.0 10 (8031) 31 EA/CPP
(TXD) P3.1 11 30 ALE/PROG
(NT0) P3.2 12 29 PSEN
(NT1) P3.3 13 28 P2.7 (A15)
(T0) P3.4 14 27 P2.6 (A14)
(T1) P3.5 15 26 P2.5 (A13)
(WR) P3.6 16 25 P2.4(A12)
(RD) P3.7 17 24 P2.3 (A11)
XTAL2 18 23 P2.2 (A10)
XTAL1 19 22 P2.1 (A9)
GND 20 21 P2.0 (AB)
H×nh 4.1: S¬ ®å bè trÝ ch©n cña 8051.
Trªn h×nh 4.1 lµ s¬ ®å bè trÝ ch©n cña 8051. Ta thÊy r»ng trong 40 ch©n th× cã
32 ch©n dµnh cho c¸c cæng P0, P1, P2 vµ P3 víi mçi cæng cã 8 ch©n. C¸c ch©n cßn
l¹i ®îc dµnh cho nguån VCC, ®Êt GND, c¸c ch©ngiao ®éng XTAL1 vµ XTAL2 t¸i
lËp RST cho phÐp chèt ®Þa chØ ALE truy cËp ®îc ®Þa chØ ngoµi EA , cho phÐp cÊt
ch¬ng tr×nh PSEN . Trong 8 ch©n nµy th× 6 ch©n VCC , GND, XTAL1, XTAL2, RST
vµ EA ®îc c¸c hä 8031 vµ 8051 sö dông. Hay nãi c¸ch kh¸c lµ chóng ph¶i ®îc
nèi ®Ó cho hÖ thèng lµm viÖc mµ kh«ng cÇn biÕt bé vi ®iÒu khiÓn thuéc hä 8051 hay
8031. Cßn hai ch©n kh¸c lµ PSEN vµ ALE ®îc sö dông chñ yÕu trong c¸c hÖ thèng
dùa trªn 8031.
1. Ch©n VCC: Ch©n sè 40 lµ VCC cÊp ®iÖn ¸p nguån cho chÝp. Nguån ®iÖn ¸p lµ
+5V.
2. Ch©n GND: Ch©n GND: Ch©n sè 20 lµ GND.
3. Ch©n XTAL1 vµ XTAL2:
8051 cã mét bé giao ®éng trªn chÝp nhng nã yªu cÇu cã mét xung ®ång hå
ngoµi ®Ó ch¹y nã. Bé giao ®éng th¹ch anh thêng xuyªn nhÊt ®îc nèi tíi c¸c ch©n
®Çu vµo XTAL1 (ch©n 19) vµ XTAL2 (ch©n 18). Bé giao ®éng th¹ch anh ®îc nèi
tíi XTAL1 vµ XTAL2 còng cÇn hai tô ®iÖn gi¸ trÞ 30pF. Mét phÝa cña tô ®iÖn ®îc
nèi xuèng ®Êt nh ®îc tr×nh bµy trªn h×nh 4.2a.
CÇn ph¶i lu ý r»ng cã nhiÒu tèc ®é kh¸c nhau cña hä 8051. Tèc ®é ®îc coi
nh lµ tÇn sè cùc ®¹i cña bé giao ®éng ®îc nèi tíi ch©n XTAL. VÝ dô, mét chÝp
12MHz hoÆc thÊp h¬n. T¬ng tù nh vËy th× mét bé vi ®iÒu khiÓn còng yªu cÇu mét
tinh thÓ cã tÇn sè kh«ng lín h¬n 20MHz. Khi 8051 ®îc nèi tíi mét bé giao ®éng
tinh thÓ th¹ch anh vµ cÊp nguån th× ta cã thÓ quan s¸t tÇn sè trªn ch©n XTAL2 b»ng
m¸y hiÖn sãng. NÕu ta quyÕt ®Þnh sö dông mét nguån tÇn sè kh¸c bé giao ®éng
th¹ch anh ch¼ng h¹n nh lµ bé giao ®éng TTL th× nã sÏ ®îc nèi tíi ch©n XTAL1,
cßn ch©n XTAL2 th× ®Ó hë kh«ng nèi nh h×nh 4.2b.
C2
XTAL2
NC XTAL2
C1 EXTERRNAL
XTAL1 OSCILLATAOR XTAL1
30pF SIGNAL
GND GND
H×nh 4.2: a) Nèi XTAL tíi 8051 b) Nèi XTAL tíi nguån ®ång bé ngoµi.
4. Ch©n RST.
Ch©n sè 9 lµ ch©n t¸i lËp RESET. Nã lµ mét ®Çu vµo vµ cã møc tÝch cùc cao
(b×nh thêng ë møc thÊp). Khi cÊp xung cao tíi ch©n nµy th× bé vi ®iÒu khiÓn sÏ t¸i
lËp vµ kÕt thóc mäi ho¹t ®éng. §iÒu nµy thêng ®îc coi nh lµ sù t¸i bËt nguån. Khi
kÝch ho¹t t¸i bËt nguån sÏ lµm mÊt mäi gi¸ trÞ trªn c¸c thanh ghi. B¶ng 4.1 cung cÊp
mét c¸ch liÖt kª c¸c thanh ghi cña 8051 vµ c¸c gi¸ trÞ cña chóng sau khi t¸i bËt
nguån.
B¶ng 4.1: Gi¸ trÞ mét sè thanh ghi sau RESET.
Register Reset Value
PC 0000
ACC 0000
B 0000
PSW 0000
SP 0000
DPTR 0007
0000
Lu ý r»ng gi¸ trÞ cña bé ®Õm ch¬ng tr×nh PC lµ 0 khi t¸i lËp ®Ó Ðp CPU n¹p
m· lÖnh ®Çu tiªn tõ bé nhí ROM t¹i vÞ trÝ ng¨n nhí 0000. §iÒu nµy cã nghÜa lµ ta
ph¶i ®Æt dßng ®Çu tiªn cña m· nguån t¹i vÞ trÝ ng¨n nhí 0 cña ROM v× ®©y lµ m·
CPU tÜnh thøc vµ t×m lÖnh ®Çu tiªn. H×nh 4.3 tr×nh bµy hai c¸ch nèi ch©n RST víi
m¹ch bËt nguån.
Vcc Vcc
------------------------ 31
30mF EA/Vpp
+ 10mF EA/Vpp
10mF 31
19 X1 X1
11.0592 MHz
8.2K 30mF 18
X2
X2
RST
9 RST
9
8.2K
H×nh 4.3: a) M¹ch t¸i bËt nguån RESET.
b) M¹ch t¸i bËt nguån víi Debounce.
Nh»m lµm cho ®Çu vµo RESET cã hiÖu qu¶ th× nã ph¶i cã tèi thiÓu 2 chu kú
m¸y. Hay nãi c¸ch kh¸c, xung cao ph¶i kÐo dµi tèi thiÓu 2 chu kú m¸y tríc khi nã
xuèng thÊp.
Trong 8051 mét chu kú m¸y ®îc ®Þnh nghÜa b»ng 12 chu kú dao ®éng nh
®· nãi ë ch¬ng 3 vµ ®îc tr×nh bµy t¹i vÞ trÝ 4.1.
5. Ch©n EA :
C¸c thµnh viªn hä 8051 nh 8751, 98C51 hoÆc DS5000 ®Òu cã ROM trªn
chÝp lu cÊt ch¬ng tr×nh. Trong c¸c trêng hîp nh vËy th× ch©n EA ®îc nèi tíi
VCC. §èi víi c¸c thµnh viªn cñ hä nh 8031 vµ 8032 mµ kh«ng cã ROM trªn chÝp th×
m· ch¬ng tr×nh ®îc lu cÊt ë trªn bé nhí ROM ngoµi vµ chóng ®îc n¹p cho
8031/32. Do vËy, ®èi víi 8031 th× ch©n EA ph¶i ®îc nèi ®Êt ®Ó b¸o r»ng m·
ch¬ng tr×nh ®îc cÊt ë ngoµi. EA cã nghÜa lµ truy cËp ngoµi (External Access) lµ
ch©n sè 31 trªn vá kiÓu DIP. Nã lµ mét ch©n ®Çu vµo vµ ph¶i ®îc nèi hoÆc víi VCC
hoÆc GND. Hay nãi c¸ch kh¸c lµ nã kh«ng ®îc ®Ó hë.
ë ch¬ng 14 chóng ta sÏ tr×nh bµy c¸ch 8031 sö dông ch©n nµy kÕt hîp víi
PSEN ®Ó truy cËp c¸c ch¬ng tr×nh ®îc cÊt trªn bé nhí ROM ë ngoµi 8031. Trong
c¸c chÝp 8051 víi bé nhí ROM trªn chÝp nh 8751, 89C51 hoÆc DS5000 th×
EA ®îc nèi víi VCC.
VÝ dô 4:
H·y t×m chu kú m¸y ®èi víi a) XTAL = 11.0592MHz b) XTAL = 16MHz.
Lêi gi¶i:
a) 11.0592MHz/12 = 921.6kHz.
Chu kú m¸y = 1/921.6kHz = 1.085ms.
b) 16MHz/12 = 1.333MHz
Chu kú m¸y = 1/1.333MHz = 0.75ms.
C¸c ch©n m« t¶ trªn ®©y ph¶i ®îc nèi mµ kh«ng cÇn thµnh viªn nµo ®îc sö
dông. Cßn hai ch©n díi ®©y ®îc sö dông chñ yÕu trong hÖ thèng dùa trªn 8031 vµ
sÏ ®îc tr×nh bµy chi tiÕt ë ch¬ng 11.
6. Ch©n PSEN :
§©y lµ ch©n ®Çu ra cho phÐp cÊt ch¬ng tr×nh (Program Store Enable) trong
hÖ thèng dùa trªn 8031 th× ch¬ng tr×nh ®îc cÊt ë bé nhí ROM ngoµi th× ch©n nµy
®îc nèi tíi ch©n OE cña ROM. Chi tiÕt ®îc bµn ë ch¬ng 14.
7. Ch©n ALE:
Ch©n cho phÐp chèt ®Þa chØ ALE lµ ch©n ®Çu ra vµ ®îc tÝch cùc cao. Khi nèi
8031 tíi bé nhí ngoµi th× cæng 0 còng ®îc cÊp ®Þa chØ vµ d÷ liÖu. Hay nãi c¸ch
kh¸c 8031 dån ®Þa chØ vµ d÷ liÖu qua cæng 0 ®Ó tiÕt kiÖm sè ch©n. Ch©n ALE ®îc sö
dông ®Ó ph©n kªnh ®Þa chØ vµ d÷ liÖu b»ng c¸ch nèi tíi ch©n G cña chÝp 74LS373.
§iÒu nµy ®îc nãi chi tiÕt ë ch¬ng 14.
8. C¸c ch©n cæng vµo ra vµ c¸c chøc n¨ng cña chóng.
Bèn cæng P0, P1, P2 vµ P3 ®Òu sö dông 8 ch©n vµ t¹o thµnh cæng 8 bÝt. TÊt c¶
c¸c cæng khi RESET ®Òu ®îc cÊu h×nh nh c¸c ®Çu ra, s½n sµng ®Ó ®îc sö dông
nh c¸c cæng ®Çu ra. Muèn sö dông cæng nµo trong sè c¸c cæng nµy lµm ®Çu vµo th×
nã ph¶i ®îc lËp tr×nh.
9. Cæng P0.
Cæng 0 chiÕm tÊt c¶ 8 ch©n (tõ ch©n 32 ®Õn 39). Nã cã thÓ ®îc dïng nh
cæng ®Çu ra, ®Ó sö dông c¸c ch©n cña cæng 0 võa lµm ®Çu ra, võa lµm ®Çu vµo th×
mçi ch©n ph¶i ®îc nèi tíi mét ®iÖn trë kÐo bªn ngoµi 10kW. §iÒu nµy lµ do mét
thùc tÕ lµ cæng P0 lµ mét mµng më kh¸c víi c¸c cæng P1, P2 vµ P3. Kh¸i niÖm m¸ng
më ®îc sö dông trong c¸c chÝp MOS vÒ chõng mùc nµo ®ã nã gièng nh C«-lec-t¬
hë ®èi víi c¸c chÝp TTL. Trong bÊt kú hÖ thèng nµo sö dông 8751, 89C51 hoÆc
DS5000 ta thêng nèi cæng P0 tíi c¸c ®iÖn trë kÐo, Xem h×nh 4.4 b»ng c¸ch nµy ta
cã ®îc c¸c u ®iÓm cña cæng P0 cho c¶ ®Çu ra vµ ®Çu vµo. Víi nh÷ng ®iÖn trë kÐo
ngoµi ®îc nèi khi t¸i lËp cæng P0 ®îc cÊu h×nh nh mét cæng ®Çu ra. VÝ dô, ®o¹n
m· sau ®©y sÏ liªn tôc göi ra cæng P0 c¸c gi¸ trÞ 554 vµ AAH.
MOV A, #554
BACK: MOV P0, A
ACALL DELAY
CPL A
SJMP BACK
Vcc
10K
P0.0
DS5000 P0.1
8751
Port 0
P0.2
8951 P0.3
P0.4
P0.5
P0.6
P0.7
H×nh 4.4: Cæng P0 víi c¸c ®iÖn trë kÐo.
a) Cæng P0 ®Çu vµo: Víi c¸c ®iÖn trë ®îc nèi tíi cæng P0 nh»m ®Ó t¹o nã thµnh
cæng ®Çu vµo th× nã ph¶i ®îc lËp tr×nh b»ng c¸ch ghi 1 tíi tÊt c¶ c¸c bit.
§o¹n m· díi ®©y sÏ cÊu h×nh P0 lóc ®Çu lµ ®Çu vµo b»ng c¸ch ghi 1 ®Õn nã
vµ sau ®ã d÷ liÖu nhËn ®îc tõ nã ®îc göi ®Õn P1.
b)
MOV A,#FFH ; G¸n A = FF d¹ng Hex
MOV P0, A ; T¹o cæng P0 lµm cæng ®Çu vµo b»ng c¸ch
; Ghi tÊt c¶ c¸c bit cña nã.
BACK: MOV A, P0 ; NhËn d÷ liÖu tõ P0
MOV P1, A ; Göi nã ®Õn cæng 1
SJMP BACK ; LÆp l¹i
b) Vai trß kÐp cña cæng P0: Nh tr×nh bµy trªn h×nh 4.1, cæng P0 ®îc g¸n AD0 -
AD7 cho phÐp nã ®îc sö dông võa cho ®Þa chØ, võa cho d÷ liÖu. Khi nèi 8051/31 tíi
bé nhí ngoµi th× cæng 0 cung cÊp c¶ ®Þa chØ vµ d÷ liÖu 8051 dån d÷ liÖu vµ ®Þa chØ
qua cæng P0 ®Ó tiÕt kiÖm sè ch©n. ALE b¸o nÕu P0 cã ®Þa chØ hay d÷ liÖu khi ALE -
0 nã cÊp d÷ liÖu D0 - D7. Do vËy, ALE ®îc sö dông ®Ó t¸ch ®Þa chØ vµ d÷ liÖu víi
sù trî gióp cña chèt 74LS373 mµ ta sÏ biÕt cô thÓ ë ch¬ng 14.
10. Cæng P1.
Cæng P1 còng chiÕm tÊt c¶ 8 ch©n (tõ ch©n 1 ®Õn ch©n 8) nã cã thÓ ®îc sö
dông nh ®Çu vµo hoÆc ®Çu ra. So víi cæng P0 th× cæng nµy kh«ng cÇn ®Õn ®iÖn trë
kÐo v× nã ®· cã c¸c ®iÖn trë kÐo bªn trong. Trong qu¸ tr×nh t¸i l¹p th× cæng P1 ®îc
cÊu h×nh nh mét cæng ®Çu ra. VÝ dô, ®o¹n m· sau sÏ göi liªn tôc c¸c gi¸ trÞ 55 vµ
AAH ra cæng P1.
MOV A, #55H
BACK: MOV P1, A
ACALL DELAY
SJMP BACK
Cæng P1 nh ®Çu vµo: §Ó biÕn cæng P1 thµnh ®Çu vµo th× nã ph¶i ®îc lËp
tr×nh b»ng c¸ch ghi mét ®Õn tÊt c¶ c¸c bit cña nã. Lý do vÒ ®iÒu nµy ®îc bµn ë môc
lôc Appendix C.2. Trong ®o¹n m· sau, cæng P1 lóc ®Çu ®¬c cÊu h×nh nh cæng ®Çu
vµo b»ng c¸ch ghi 1 vµo c¸c bit cña nã vµ sau ®ã d÷ liÖu nhËn ®îc tõ cæng nµy ®îc
cÊt vµo R7, R6 vµ R5.
MOV A, #0FFH ; N¹p A = FF ë d¹ng hex
MOV P1, A ; T¹o cæng P1 thµnh cæng ®Çu vµo b»ng
; c¸ch ghi 1 vµo c¸c bit cña nã.
MOV A, P1 ; NhËn d÷ liÖu tõ P1
MOV R7, A ; CÊt nã vµo thanh ghi R7
ACALL DELAY ; Chê
MOV A, P1 ; NhËn d÷ liÖu kh¸c tõ P1
MOV R6, A ; CÊt nã vµo thanh ghi R6
ACALL DELAY ; Chê
MOV A, P1 ; NhËn d÷ liÖu kh¸c tõ cæng P1
MOV R5, A ; CÊt nã vµo thanh ghi R5
11. Cæng P2:
Cæng P2 còng chiÕm 8 ch©n (c¸c ch©n tõ 21 ®Õn 28). Nã cã thÓ ®îc sö dông
nh ®Çu vµo hoÆc ®Çu ra gièng nh cæng P1, cæng P2 còng kh«ng cÇn ®iÖn trë kÐo v×
nã ®· cã c¸c ®iÖn trë kÐo bªn trong. Khi t¸i lËp, th× cæng P2 ®îc cÊu h×nh nh mét
cæng ®Çu ra. VÝ dô, ®o¹n m· sau sÏ göi liªn tôc ra cæng P2 c¸c gi¸ trÞ 55H vµ AAH.
§ã lµ tÊt c¶ c¸c bit cña P2 lªn xuèng liªn tôc.
MOV A, #55H
BACK: MOV P2,A
ACALL DELAY
CPL A
SJMP BACK
a) Cæng P2 nh ®Çu vµo.
§Ó t¹o cæng P2 nh ®Çu vµo th× nã ph¶i ®îc lËp tr×nh b»ng c¸ch ghi c¸c sè 1
tíi tÊt c¶ c¸c ch©n cña nã. §o¹n m· sau ®©y ®Çu tiªn cÊu hinh P2 lµ cæng vµo b»ng
c¸ch ghi mét ®Õn tÊt c¶ c¸c ch©n cña nã vµ sau ®ã d÷ liÖu nhËn ®îc tõ P2 ®îc göi
liªn tôc ®Õn P1.
MOV A, 0FFH ; G¸n A gi¸ trÞ FF d¹ng Hex
MOV P2, A ; T¹o P2 lµ cæng ®Çu vµo b»ng c¸ch
; ghi mét ®Õn c¸c ch©n cña nã
BACK: MOV A, 2 ; NhËn d÷ liÖu tõ P2
MOV P1, A ; Göi nã ®Õn P1
SJMP BACK ; LÆp l¹i
b) Vai trß kÐp cña P2.
Trong c¸c hÖ thèng dùa trªn 8751, 89C51 vµ DS5000 th× P2 ®îc dïng nh
®Çu ra ®¬n gi¶n. Tuy nhiªn trong hÖ thèng dùa trªn 80312 th× cæng P2 ph¶i ®îc
dïng cïng víi P0 ®Ó t¹o ra ®Þa chØ 16 brt ®èi víi bé nhí ngoµi. Nh chØ ra trªn h×nh
4.1 cæng P2 còng ®îc chØ ®Þnh nh lµ A8 - A15 b¸o chøc n¨ng kÐp cña nã. V× mét
bé 8031 cã kh¶ n¨ng trung cËp 64k byte bé nhí ngoµi, nã cÇn mét ®êng ®Þa chØ 16
bÝt. Trong khi P.0 cung cÊp 8 bit thÊp qua A0 - A7. C«ng viÖc cña P2 lµ cung cÊp
c¸c bÝt ®Þa chØ A8 - A15. Hay nãi c¸ch kh¸c khi 8031®îc nèi tíi bé nhí ngoµi th×
P2 ®îc dïng cho 8 bÝt cña ®Þa chØ 16 bit vµ nã kh«ng thÓ dïng cho vµo ra. §iÒu nµy
sÏ ®îc tr×nh bµy chi tiÕt ë ch¬ng 14.
Tõ nh÷ng tr×nh bµy trªn ®©y ta cã thÓ kÕt luËn r»ng trong c¸c hÖ thèng dùa
trªn c¸c bé vi ®iÒu khiÓn 8751, 89C51 hoÆc DS5000 th× ta cã 3 cèng P0, P1vµ P2 cho
c¸c thao t¸c vµo ra vµ nh thÕ lµ cã thÓ ®ñ cho c¸c øng dông víi hÇu hÕt c¸c bé vi
®iÒu khiÓn. Cßn cÊp P3 lµ®Ó dµnh cho ng¾t vµ ta sÏ cïng bµn díi ®©y.
11 - Cæng P3:
Cæng P3 chiÕm tæng céng lµ 8 ch©n tõ ch©n 10 ®Õn ch©n 17. Nã cã thÓ ®îc
sö dông nh ®Çu vµo hoÆc ®Çu ra. Cèng P3 kh«ng cÇn c¸c ®iÖn trë kÐo còng nh P1
vµ P2. MÆc dï cèng P3 ®îc cÊu h×nh nh mét cèng ®Çu ra khi t¸i lËp, nhng ®©y
kh«ng ph¶i lµ c¸ch nã ®îc øng dông phæ biÕn nhÊt. Cèng P3 cã chøc n¨ng bæ xung
lµ cung cÊp mét sè tÝn hiÖu quan träng ®Æc biÖt ch¼ng h¹n nh c¸c ng¾t. B¶ng 4.2
cung cÊp c¸c chøc n¨ng kh¸c cña cèng P3. Th«ng tin nµy ¸p dông cho c¶ 8051 vµ
8031.
B¶ng 4.2: C¸c chøc n¨ng kh¸c cña cèng P3
BÝt cña cèng P3 Chøc n¨ng ch©n sè
P3.0 NhËn d÷ liÖu (RXD) 10
P3.1 Ph¸t d÷ liÖu (TXD) 11
P3.2 Ng¾t 0(INT0) 12
P3.3 Ng¾t 1(INT1) 13
P3.4 Bé ®Þnh thêi 0 (TO) 14
P3.5 1 Bé ®Þnh thêi 1(T1) 15
P3.6 Ghi (WR) 16
P3.7 §äc (RD) 17
C¸c bit P3.0 vµ P3.1 ®îc dïng cho c¸c tÝn hiÖu nhËn vµ ph¸t d÷ liÖu trong
truyÒn th«ng d÷ liÖu nèi tiÕp. Xem ch¬ng 10 ®Õt biÕt c¸c chóng ®îc nèi ghÐp nh
thÕ nµo. C¸c bit P3.2 vµ P3.3 ®îc dµnh cho c¸c ng¾t ngoµi vµ chóng ®îc tr×nh bµy
chi tiÕt ë ch¬ng 11. Bit P3.4 vµ P3.5 ®îc dïng cho c¸c bé ®Þnh thªm 0 vµ 1vµ chi
tiÕt ®îc tr×nh bµy ë ch¬ng 9. Cuèi cïng c¸c bit P3.6 vµ P3.7 ®îc cÊp cho c¸c tÝn
hiÖu ghi vµ ®äc c¸c bé nhí ngoµi ®îc nèi tíi c¸c hÖ thèng dùa trªn 8031. Ch¬ng
14 sÏ tr×nh bµy c¸ch chóng ®îc sö dông nh thÕ nµo trong c¸c hÖ thèng dùa trªn
8031. Trong c¸c hÖ thèng dùa trªn 8751, 89C51 hoÆc D35000 th× c¸c ch©n P3.6 vµ
P3.7 ®îc dïng cho vµo - ra cßn c¸c ch©n kh¸c cña P3 ®îc sö dông b×nh thêng
trong vai trß chøc n¨ng thay ®æi.
4.2 LËp tr×nh vµo - ra: thao t¸c bit.
4.2.1 c¸c c¸ch kh¸c nhau ®Ó truy cËp toµn bé 8 bit.
Trong ®o¹n mµ díi ®©y còng nh trong nhiÒu vÝ dô vµo ra tríc ®©y toµn bé
8 bit cña cæng P1 ®îc cËp.
BACK: MOV A, # 55H
MOV P1,A
ACALL DELAY
MOV A, #0AAH
MOV P1, A
ACALL DELAY
SJMP BACK
§o¹n mµ trªn chèt mçi bit cña P1 mét c¸ch liªn tôc. Chóng ta ®· th¾ng mét
biÕn thÕ cña ch¬ng tr×nh trªn tríc ®ã. B©y giê ta cã thÓ viÕt l¹i ®o¹n m· trªn theo
c¸ch hiÖu qu¶ h¬n b»ng c¸ch truy cËp trùc tiÕp cæng mµ kh«ng qua thanh ghi tæng
nh sau:
BACK: MOV P1, # 55H
ACALL DELAY
MOV P1, #00H
CALL DELAY
SJMP BACK
Ta cã thÓ viÕt mét d¹ng kh¸c cña ®o¹n mµ trªn b»ng kü thuËt ®äc - söa ®æi
ghi nh ë môc 4.2.2 díi ®©y.
4.2.2 §Æc ®iÓm §äc- söa ®æi - ghi (Read - Modify – Write).
C¸c cèng trong 8051 cã thÓ ®îc truy cËp b»ngkü thuËt ®îc gäi lµ §äc-söa
®æi-ghi. §Æc ®iÓm nµy tiÕt kiÖm rÊt nhiÒu dßng lÖnh b»ng c¸ch kÕt hîp tÊt c¶ 3 thao
t¸c: 1®äc cèng, 2 söa ®æi nãvµ 3 ghi nã ra cèng vµo mét lÖnh ®¬n. §o¹n mµ díi ®©y
tríc hÕt ®Æt 01010101(nhÞ ph©n) vµo cèng 1. Sau ®ãlÖnh “XLR P1, #0FFH” thùc
hiÖn phÐp l«-gÝch OR lo¹i trõ lµ XOR trªn cèng p1 víi 1111 1111 ( nhÞ ph©n ) vµ sau
®ã ghi kÕt qu¶ trë l¹i cèng P1.
MOV P1, #55H ; P1 = 01010101
AGAIN: XLR P1,# 0FFH ; EX - 0R P1 víi 1111 1111
ACALL DELAY
SJMP AGAIN
Lu ý r»ng lÖnh X0R cña 55H vµ FFH sÏ cho kÕt qu¶ lµ AAH. T¬ng tù nh
vËy lÖnh X0R cña AAH víi FFH l¹i cho gi¸ trÞ kÕt qu¶ lµ 55H. C¸c lÖnh l«-gÝch
®îc tr×nh bµy ë ch¬ng 7.
4.2.3. Kh¶ n¨ng ®¸nh ®Þa chØ theo bÝt cña c¸c cèng
Cã nhiÒu lóc chóng ta cÇn truy cËp chØ 1 hoÆc2 bÝt cña cèng thay v× truy cËp
c¶ 8 bit cña cæng. Mét ®iÓm m¹nh cña c¸c cæng 8051 lµ chóng cã kh¶ n¨ng truy cËp
tõng bÝt riªng rÏ mµ kh«ng lµm thay ®æi c¸c bÝt cßn l¹i trong cæng ®ã vÝ dô, ®o¹n mµ
díi ®©y chèt bit P1.2 liªn tôc:
BACK: CPL P1.2 ; LÊy bï 2 chØ riªng bit P1.2
ACALL DELAY
SJMP BACK
Mét biÕn thÓ kh¸c cña ®o¹n m· trªn lµ:
AGACN: SETB P1.2 ; ChØ thay ®æi bÝt P1.2 lªn cao
ACALL DELAY
CLR P1.2 ; Xo¸ bÝt P1.2 xuèng thÊp
ACALL DELAY
SJMP AGAIN
Lu ý r»ng bÝt P1.2 lµ bÝt thø 3 cña cæng P1, v× bÝt thø nhÊt lµ P1.0 vµ bit thø
hai lµ P1.1 v.v...
B¶ng 4.3 tr×nh bµy c¸c bÝt cña c¸c cæng vµo ra cña 8051. Xem vÝ dô 4.2 vÒ
thao t¸c bÝt cña c¸c bÝt vµo - ra. Lu ý r»ng trong vÝ dô 4.2 c¸c bit kh«ng dïng ®Õn
lµ kh«ng bÞ ¶nh hëng. §©y lµ kh¶ n¨ng ®¸nh ®Þa chØ theo bit cña c¸c cæng vµo - ra
vµ lµ mét trong nh÷ng ®iÓm m¹nh nhÊt cña bé vi ®iÒu khiÓn 8051.
VÝ dô 4.2: h·y viÕt ch¬ng tr×nh thùc hiÖn c¸c c«ng viÖc sau:
a) Duy tr× hiÓn thÞ bit P1.2 cho ®Õn khi nã lªn c¸p
b) Khi P1.2 lªn cao, h·y ghi gi¸ trÞ 45H vµo cæng P0
c) Göi mét xung cao xuèng thÊp (H-to-L) tíi P2.3
Lêi gi¶i:
SET P1.2 ; T¹o bit P1.2 lµ ®Çu vµo
MOV A, #45H ; G¸n A = 45H
AGAIN: JNB P1.2, AGAIN ; Tho¸t khi P1.2 = 1
MOV P0, A ; XuÊt A tíi cæng P0
SETB P2.3 ; §a P2.3 lªn cao
CLR P2.3 ; T¹o P2.3 xuèng thÊp ®Ó cã xung H-T0-L
Trong ch¬ng tr×nh nµy lÖnh “JNB P1.2, AGCN” (JNB cã nghÜa lµ nh¶y nÕu
kh«ng bit) ë l¹i vßng lÆp cho ®Õn khi P1.2 cha lªn cao. Khi P1.2 lªn cao nã tho¸t ra
khái vßng lÆp ghi gi¸ trÞ 45H tíi cæng P0 vµ t¹o ra xung H-to-L b»ng chuçi c¸c lÖnh
SETB vµ CLR.