
Tr−êng ®¹i häc kü thuËt C«ng NghiÖp
NguyÔn TiÕn Duy – Trung t©m Kü thuËt m¸y tÝnh – Bé m«n Kü thuËt m¸y tÝnh
86
http://
www.ebook.edu.vn
Ch−¬ng 5 Vµo ra d÷ liÖu b»ng c¸ch th¨m dß
1. Giíi thiÖu chung vÒ c¸c ph−¬ng ph¸p ®iÒu khiÓn vµo/ra d÷ liÖu
Qua ch−¬ng 4, chóng ta ®· t×m hiÓu vÒ mét sè m¹ch th−êng dïng cho viÖc phèi ghÐp
CPU víi thiÕt bÞ ngo¹i vi. Ta ®· tiÕn hµnh c¸c ph−¬ng ph¸p (ph−¬ng thøc) ®iÒu khiÓn viÖc
trao ®æi d÷ liÖu. C¸c m¹ch phèi ghÐp vµo/ra ®· tr×nh bµy tr−íc ®©y cã thÓ ®−îc øng dông
®Ó phôc vô cho môc ®Ých nµy.
M¸y tÝnh trao ®æi th«ng tin (vµo/ra d÷ liÖu) víi thieets bÞ ngo¹i vi theo mét trong 2 chÕ
®é sau:
Víi c¸ch vµo/ra d÷ liÖu theo ch−¬ng tr×nh cã thÓ ph©n thµnh c¸c ph−¬ng ph¸p cô thÓ
h¬n lµ:
§ång bé (Kh«ng ®iÒu kiÖn – kh«ng héi tho¹i)
Sau khi ®· khëi ®éng (khëi t¹o) thiÕt bÞ ngo¹i vi, CPU
(vµ thiÕt bÞ ngo¹i vi) kh«ng –quan t©m– tíi viÖc thiÕt bÞ
ngo¹i vi cã s½n sµng cho viÖc trao ®æi d÷ liÖu hay kh«ng. Nã
lu«n thùc hiÖn c¸c lÖnh trao ®æi d÷ liÖu (IN, OUT) mét
c¸ch trùc tiÕp. Ph−¬ng ph¸p nµy yªu cÇu:
ThiÕt bÞ ngo¹i vi lu«n s½n sµng trao ®æi d÷ liÖu.
Tèc ®é trao ®æi d÷ liÖu cña CPU vµ thiÕt bÞ ngo¹i vi lµ phï hîp nhau (TBNV
cã tèc ®é lµm viÖc nhanh).
VÝ dô, trong mét hÖ ®o nhiÖt ®é ghÐp nèi víi m¸y tÝnh, ®iÖn ¸p trªn cÆp nhiÖt ®iÖn
®−îc khuÕch ®¹i lªn, tiÕp theo lµ ®−îc biÕn ®æi thµnh tÝn hiÖu sè råi ®−îc ®äc vµo m¸y
tÝnh. Ta thÊy r»ng tÝn hiÖu nµy lóc nµo còng s½n sµng cho CPU ®äc v× nhiÖt ®é lµ mét
®¹i l−îng biÕn ®æi rÊt chËm so víi tèc ®é cña m¸y tÝnh vµ cïng víi nã, CPU còng cã
thÓ bÊt kú lóc nµo ®−a sè liÖu hiÓn thÞ sè ®o ®ã. §©y gäi lµ qu¸ tr×nh vµo/ra ®ång bé
hay kh«ng cã mãc nèi (kh«ng cã héi tho¹i).
Kh«ng ®ång bé (Cã ®iÒu kiÖn – cã héi tho¹i)
Polling: CPU vµ thiÕt bÞ ngo¹i vi chØ trao ®æi d÷ liÖu khi cã tÝn hiÖu mãc nèi b¸o
s½n sµng (Ready/Akc) cña c¸c phÝa. Sau khi m¸y tÝnh khëi ®éng thiÕt bÞ ngo¹i vi (khèi
Vµo/ra
d÷ liÖu
Vµo/ra theo ch−¬ng tr×nh:
Kh«ng héi tho¹i (trùc tiÕp)
Cã héi tho¹i
Th¨m dß (pollin
g)
Ng¾t (Interrupt)
Truy nhËp trùc tiÕp bé nhí (DMA
–
Direct Memorry Access

Tr−êng ®¹i häc kü thuËt C«ng NghiÖp
NguyÔn TiÕn Duy – Trung t©m Kü thuËt m¸y tÝnh – Bé m«n Kü thuËt m¸y tÝnh
87
http://
www.ebook.edu.vn
ghÐp nèi), m¸y tÝnh lu«n chê vµ kiÓm tra tr¹ng th¸i s½n sµng cña thiÕt bÞ ngo¹i vi gåm
c¸c b−íc:
(1) §äc th«ng tin vÒ tr¹ng th¸i s½n sµng cña thiÕt bi ngo¹i
vi
(2) KiÓm tra: NÕu thiÕt bÞ ngo¹i vi s½n sµng th× trao ®æi d÷
liÖu, ng−îc l¹i th× vÒ b−íc (1) ®Ó kiÓm tra l¹i.
Ph−¬ng ph¸p nµy ®−îc dïng khi tèc ®é trao ®æi d÷ liÖu
cña c¸c bªn (CPU vµ thiÕt bÞ ngo¹i vi) rÊt kh«ng b»ng nhau vµ
nã cã mét sè ®Æc ®iÓm sau:
ViÖc trao ®æi th«ng tin lµ tin cËy v× chØ trao ®æi khi thiÕt
bÞ ngo¹i vi s½n sµng.
Tèn thêi gian CPU v× ph¶i kiÓm tra tr¹ng th¸i s½n sµng
cña thiÕt bÞ ngo¹i vi (viÖc kiÓm tra nµy co CPU ®¶m
nhiÖm) nªn gi¶m hiÖu suÊt cña hÖ thèng.
Phï hîp víi nh÷ng hÖ thèng kh«ng ®ßi hái cao vÒ tèc
®é trao ®æi d÷ liÖu, hÖ thèng cã Ýt thiÕt bÞ ngo¹i vi.
Chóng ta sÏ xem xÐt cô thÓ ph−¬ng ph¸p vµo/ra nµy trong phÇn sau.
Vµo/ra d÷ liÖu ®iÒu khiÓn b»ng ng¾t ch−¬ng tr×nh (ng¾t bé vi xö lý –
Interrupt): B×nh th−êng m¸y tÝnh thùc
hiÖn mét ch−¬ng tr×nh (c«ng viÖc) nµo ®ã.
Khi thiÕt bÞ ngo¹i vi cã yªu cÇu trao ®æi d÷
liÖu, nã sÏ göi tÝn hiÖu yªu cÇu ng¾t
CPU dõng c«ng viÖc hiÖn t¹i, phôc vô cho
trao ®æi d÷ liÖu th«ng qua tÝn hiÖu yªu cÇu
ng¾t IRQ (Interrupt Request) t¸c ®éng vµo
ch©n INTR (ch©n tiÕp nhËn yªu cÇu
ng¾t) cña CPU. CPU nhËn ®−îc yªu cÇu
ng¾t, nÕu chÊp nhËn nã sÏ ®−a ra xung
INTA x¸c nhËn tíi thiÕt bÞ ngo¹i vi, sau ®ã
CPU t×m ch−¬ng tr×nh con phôc vô ng¾t
t−¬ng øng sè hiÖu ng¾t vµ thùc hiÖn nã. §ã chÝnh lµ ch−¬ng tr×nh con thùc hiÖn trao
®æi (vµo/ra) d÷ liÖu do thiÕt bÞ ngo¹i vi yªu cÇu. Khi trao ®æi xong (ISR – Interrupt
Service Routine) kÕt thóc th× CPU tiÕp tôc c«ng viÖc (ch−¬ng tr×nh) ®· bÞ gi¸n ®o¹n.
Vµo/ra d÷ liÖu ®iÒu khiÓn b»ng phÇn cøng phô ®Ó th©m nhËp trùc tiÕp bé nhí (DMA
– Direct Memorry Access): Trong c¸c ph−¬ng ph¸p vµo/ra d÷ liÖu b»ng ch−¬ng
tr×nh kÓ trªn, d÷ liÖu ph¶i ®−îc chuyÓn qua l¹i tõ bé nhí ®Õn CPU råi ®Õn thiÕt bÞ
ngo¹i vi hoÆc ng−îc l¹i b»ng viÖc thùc hiÖn tõng lÖnh (MOV, IN hoÆc OUT) cña
CPU víi sù tham gia cña c¸c thanh ghi. D÷ liÖu cña mçi lÇn vËn chuyÓn lµ byte
hoÆc word (2 byte), tèc ®é trao ®æi d÷ liÖu phô thuéc rÊt nhiÒu vµo tèc ®é thùc hiÖn
c¸c lÖnh trao ®æi d÷ liÖu kÓ trªn. Nãi chung, tèc ®é trao ®æi d÷ liÖu lµ kh«ng thÓ
nhanh ®−îc. Víi c¸c thiÕt bÞ lµm viÖc víi bé nhí khèi nh− mµn h×nh, æ ®Üa, ... yªu
cÇu trao ®æi c¶ m¶ng d÷ liÖu th× ph−¬ng ph¸p vµo/ra d÷ liÖu b»ng ch−¬ng tr×nh lµ
kh«ng phï hîp. Khi ®ã ng−êi ta nghÜ ®Õn viÖc ®iÒu khiÓn d÷ liÖu vµo/ra trùc tiÕp tõ
bé nhí ®Õn thiÕt bÞ ngo¹i vi hoÆc ng−îc l¹i mµ kh«ng th«ng qua CPU b»ng nh÷ng
lÖnh trao ®æi d÷ liÖu nh− MOV, IN hoÆc OUT. §ã lµ ph−¬ng ph¸p vµo/ra d÷ liÖu
b»ng c¸ch truy nhËp trùc tiÕp bé nhí (DMA – Direcr Memory Access). Trong tr−êng
TNNV s½n
sµng?
§äc th«ng tin
Vµo/ra d÷ liÖu
F
T
Yªu cÇu ng¾
t
Ch−¬ng tr×nh con
phôc vô ng¾t
(trao ®æi d÷ liÖu)
Ch−¬ng tr×nh
hiÖn t¹i cña CPU

Tr−êng ®¹i häc kü thuËt C«ng NghiÖp
NguyÔn TiÕn Duy – Trung t©m Kü thuËt m¸y tÝnh – Bé m«n Kü thuËt m¸y tÝnh
88
http://
www.ebook.edu.vn
hîp nµy CPU trao quyÒn ®iÒu khiÓn cho mét m¹ch phÇn cøng phô ®iÒu khiÓn viÖc
vµo/ra d÷ liÖu, ®ã lµ DMAC – DMA Controller. Chi tiÕt vÒ ph−¬ng ph¸p nµy sÏ ®−îc
tr×nh bµy kü trong phÇn sau.
Qua viÖc tr×nh bµy s¬ l−îc vÒ c¸c ph−¬ng ph¸p ®iÒu khiÓn viÖc vµo/ra d÷ liÖu trªn ta
thÊy mçi ph−¬ng ph¸p cã nh÷ng ®Æc ®iÓm kh¸c nhau (−u nh−îc ®iÓm), chóng ®−îc øng
dông phï hîp trong nh÷ng hoµn c¶ch cô thÓ kh¸c nhau. Mét trong nh÷ng ph−¬ng ph¸p
®iÒu khiÓn ®¬n gi¶n nhÊt mµ chóng ta xem xÐt trong ch−¬ng nµy lµ ph−¬ng ph¸p trao ®æi
kh«ng ®ång bé (cã héi tho¹i) hay gäi lµ ph−¬ng ph¸p th¨m dß tr¹ng th¸i s½n sµng cña thiÕt
bÞ ngo¹i vi (polling) tr−íc khi thùc hiÖn vµo/ra d÷ liÖu.
2. Vµo/ra d÷ liÖu b»ng c¸ch th¨m dß tr¹ng th¸i s½n sµng cña thiÕt bÞ
Ph−¬ng ph¸p vµo/ra d÷ liÖu b»ng c¸ch th¨m
dß tr¹ng th¸i s½n sµng cña thiÕt bÞ ngo¹i vi lµ
ph−¬ng ph¸p ®iÒu khiÓn vµo/ra d÷ liÖu b»ng
ch−¬ng tr×nh – cã héi tho¹i. TÝn hiÖu héi tho¹i
(handshaking signal) ë ®©y lµ tÝn hiÖu b¸o tr¹ng
th¸i s½n sµng cña thiÕt bÞ ngo¹i vi.
ViÖc ®iÒu khiÓn vµo/ra d÷ liÖu sÏ trë nªn rÊt
®¬n gi¶n nÕu thiÕt bÞ ngo¹i vi lóc nµo còng s½n
sµng chê lµm viÖc (trao ®æi d÷ liÖu) víi CPU –
Nh− ®· ®Ò cËp ®Õn trong phÇn giíi thiÖu – ®ã lµ
ph−¬ng ph¸p vµo/ra d÷ liÖu ®ång bé (trùc tiÕp –
kh«ng héi tho¹i). Tuy nhiªn trong thùc tÕ kh«ng
ph¶i lóc nµo CPU còng lµm viÖc víi c¸c thiÕt bÞ
ngo¹i vi –liªn tôc s½n sµng– nh− trªn, v× tèc ®é
lµm viÖc cña thiÕt bÞ ngo¹i vi vµ CPU lµ rÊt chªnh
lÖch. Th«ng th−êng khi CPU muèn trao ®æi d÷ liÖu
víi mét thiÕt bÞ ngo¹i vi nµo ®ã, th«ng qua ch−¬ng
tr×nh nã liªn tôc kiÓm tra tr¹ng th¸i s½n sµng cña
thiÕt bÞ ngo¹i ®Ó xem cã yªu cÇu trao ®æi d÷ liÖu
(yªu cÇu phôc vô) hay kh«ng? §Õn khi cã mét
thiÕt bÞ ngo¹i vi nµo ®ã cã yªu cÇu trao ®æi d÷ liÖu
(tøc lµ cã tÝn hiÖu b¸o tr¹ng th¸i s½n sµng –
readly) th× ch−¬ng tr×nh sÏ chuyÓn sang thùc hiÖn
viÖc trao ®æi d÷ liÖu (c«ng viÖc trao ®æi nµy cã thÓ
lµ c¸c lÖnh ngay trong ch−¬ng tr×nh chÝnh hoÆc lµ
mét ch−¬ng tr×nh con phôc vô – hoÆc ISR) råi l¹i
tiÕp tôc kiÓm tra thiÕt bÞ ngo¹i vi kÕ tiÕp. Qu¸ tr×nh
nµy ®−îc thùc hiÖn tiÕp tôc ®Õn thiÕt bÞ ngo¹i vi
cuèi cïng råi l¹i ®−îc lÆp l¹i tõ ®Çu. VËy, nÕu lµm
viÖc theo ph−¬ng ph¸p th¨m dß th× th«ng th−êng
CPU ph¶i ®−îc dµnh riªng cho c«ng viÖc trao ®æi
d÷ liÖu v× nã ph¶i liªn tôc kiÓm tra tr¹ng th¸i s½n
sµng cña thiÕt bÞ ngo¹i vi th«ng qua c¸c tÝn hiÖu
mãc nèi. C¸c tÝn hiÖu nµy ®−îc lÊy tõ m¹ch phèi
ghÐp, do ng−êi thiÕt kÕ m¹ch t¹o ra ®Ó cho
ch−¬ng tr×nh cã thÓ kiÓm tra nã. ViÖc nµy ®−îc tÝnh
to¸n ®ång bé khi x©y dùng m¹ch vµ ch−¬ng tr×nh
®iÒu khiÓn.
TNNV1
s½n sµng?
Vµo/ra d÷ liÖu víi
TBNV1
Ch−¬ng tr×nh
®iÒu khiÓn
T
TNNV1
s½n sµng?
Vµo/ra d÷ liÖu víi
TBNV1
F
TNNV1
s½n sµng?
Vµo/ra d÷ liÖu víi
TBNV1
T
F
T
F
...
H×nh vÐ: L−u ®å ®iÒu khiÓn cña
Ph−¬ng ph¸p th¨m dß tr¹ng th¸i s½n sµng

Tr−êng ®¹i häc kü thuËt C«ng NghiÖp
NguyÔn TiÕn Duy – Trung t©m Kü thuËt m¸y tÝnh – Bé m«n Kü thuËt m¸y tÝnh
89
http://
www.ebook.edu.vn
Nãi chung, ph−¬ng ph¸p nµy ®¬n gi¶n trong tæ chøc phÇn cøng vµ phÇn mÒm nh−ng
gÆp ph¶i nh−îc ®iÓm lµ khi sè l−îng thiÕt bÞ ngo¹i vi t¨ng lªn th× sÏ lµm l·ng phÝ thêi gian
CPU cho viÖc kiÓm tra tr¹ng th¸i s½n sµng vµ kh¶ n¨ng ®¸p øng tøc thêi víi phôc vô cña
CPU lµ rÊt thÊp.
H×nh vÏ cho thÊy l−u ®å cña ch−¬ng tr×nh ®iÒu khiÓn theo ph−¬ng ph¸p th¨m dß khi
sè l−îng sè thiÕt bÞ ngo¹i vi > 1.
NÕu th«ng tin ®−îc ph¸t hoÆc nhËn tõ mét thiÕt bÞ ngo¹i vi nµo ®ã sÏ thiÕt lËp mét cê
tr¹ng th¸i thÝch hîp (th«ng th−êng lµ b»ng mét m¹ch lËt tr¹ng th¸i bëi xung STB cña thiÕt
bÞ ngo¹i vi). Bé vi xö lý sÏ kiÓm tra cê tr¹ng th¸i nµy vµ sÏ thùc hiÖn modul ch−¬ng tr×nh
trao ®æi d÷ liÖu khi cê tr¹ng th¸i b¸o r»ng thiÕt bÞ ngo¹i vi s½n sµng cho viÖc trao ®æi d÷
liÖu. Nã nh− mét tÝn hiÖu yªu cÇu phôc vô (thô ®éng) cho viÖc vµo/ra d÷ liÖu.
Sau ®©y lµ mét vÝ dô vÒ c¸ch t¹o tÝn hiÖu mãc nèi trong tæ chøc phÇn cøng vµ l−u ®å
thuËt to¸n (ch−¬ng tr×nh ®iÒu khiÓn) dïng cho viÖc trao ®æi d÷ liÖu gi÷a CPU vµ thiÕt bÞ
ngo¹i vi.
§Ó ®¬n gi¶n, trong vÝ dô nµy
ta gi¶ thiÕt CPU chØ lµm viÖc víi 1
thiÕt bÞ ngo¹i vi vµ vµ 1 thiÕt bÞ
ngo¹i vi ra. ViÖc tæ chøc phèi ghÐp
phÇn cøng ®−îc thùc hiÖn trªn c¸c
vi m¹ch (IC) cì võa ®Ó dÔ theo dâi
c¸c tÝn hiÖu.
Mét cæng vµo cã ®Þa chØ 00
®−îc dïng ®Ó ®äc tr¹ng th¸i s½n
sµng cña thiÕt bÞ ngo¹i vi sè 1 vµ
sè 2. (TB1: vµo; TB2: ra). TÝn hiÖu
b¸o s½n sµng cña thiÕt bÞ ngo¹i vi
sè 1 (cã ®Þa chØ 01) ®−îc ®Æt vµo
bit D0 vµ tÝn hiÖu b¸o s½n sµng cña
thiÕt bÞ ngo¹i vi sè 2 (cã ®Þa chØ 02)
®−îc ®Æt vµo biit D1 cña bus d÷
liÖu. C¸c bit tÝn hiÖu nµy sÏ cã gi¸
trÞ b»ng 1 khi thiÕt bÞ ngo¹i vi t−¬ng
øng ë tr¹ng th¸i s½n sµng trao ®æi
d÷ liÖu víi CPU vµ chóng sÏ ®−îc
®−a vµo bus d÷ liÖu khi CPU ®äc
nã b»ng lÖnh ®äc cæng cã ®Þa chØ
00. Ch−¬ng tr×nh ®iÒu khiÓn trao
®æi d÷ liÖu sÏ kiÓm tra c¸c bit b¸o
s½n sµng nµy vµ cã c¸c ®¸p øng
thÝch hîp.
Cô thÓ ho¹t ®éng cña phÇn
m¹ch vµo d÷ liÖu nh− sau: Khi thiÕt
bÞ vµo (TB1) cã (1 byte) d÷ liÖu cÇn
(trao ®æi) ®−a vµo hÖ thèng, nã ®−a ra xung STB ®Ó cho phÐp m¹ch chèt 8 bit chèt lÊy d÷
liÖu ®ã ®ång thêi kÝch cho m¹ch lËt D (m¹ch t¹o tÝn hiÖu s½n sµng) lµm viÖc ®Çu ra Q =
1. Bé vi xö lý (CPU) th«ng qua lÖnh ®äc cæng 00 ®Ó th¨m dß tr¹ng th¸i s½n sµng cña thiÕt
M¹ch
3 tr¹ng
th¸i
/OC
M¹ch
chèt
8 bit
/G
Input
Device
(1)
pr
Q D
lck
clr
+5V
M¹ch
Chèt
8 bit
/G
M¹ch
3 tr¹ng
th¸i
/OC
Output
Device
(2)
pr
Q D
lck
clr
+5V
Bus
d÷
liÖu
D0
D1
...
D7
ISP01
ISP00
ISP01
S
TB
ACK
OSP02
OSP00
OSP02
H×nh vÏ: S¬ ®å m¹ch phÇn cøng t¹o tÝn hiÖu mãc nèi

Tr−êng ®¹i häc kü thuËt C«ng NghiÖp
NguyÔn TiÕn Duy – Trung t©m Kü thuËt m¸y tÝnh – Bé m«n Kü thuËt m¸y tÝnh
90
http://
www.ebook.edu.vn
bÞ ngo¹i vi sè 1 th«ng qua bit D0. Khi thÊy D0 = 1, nã ®äc 1 byte d÷ liÖu vµo ®ång thêi xo¸
lu«n Q (Q = 0, thiÕt bÞ ngo¹i vi kh«ng s½n sµng) ®Ó chuÈn bÞ lÇn ®äc byte d÷ liÖu kh¸c.
T−¬ng tù nh− vËy ta cã thÓ thÊy ®−îc sù ho¹t ®éng cña phÇn m¹ch ra d÷ liÖu – thiÕt bÞ
ngo¹i vi sè 2.
Yªu
cÇu: LËp
tr×nh theo
l−u ®å (a) –
®−êng nÐt
liÒn ®Ó thùc
hiÖn viÖc
®äc vµo mét
byte d÷ liÖu
mçi khi cæng
01 b¸o s½n
sµng råi
hiÓn thÞ byte
d÷ liÖu ®ã.
Gi¶ thiÕt cã
100 byte d÷
liÖu ph¶i ®äc
vµ cã s½n
thñ tôc thùc
hiÖn hiÓn thÞ
gi¸ trÞ trong
thanh ghi al
lªn mµn
h×nh cã tªn
lµ hien_thi.
–
Mov cx, 100
;Sè byte d÷ liÖu c©n ®äc tro
LÆp: In al, 0 ;§äc cæng 00
Test al, 1 ;D0 = 1?
Jz LÆp ;kh«ng, ®äc l¹i cæng 00
In al, 1 ;ph¶i, ®äc cæng 01
Call Hien_thi ;hiÓn thÞ kÕt qu¶
Loop LÆp ;ch−a hÕt d÷ liÖu, quay l¹i
Ra: –
Trong tr−êng hîp thiÕt bÞ ngo¹i vi vµo/ra ho¹t ®éng theo c¸ch kh¸c: mçi khi cê b¸o
tr¹ng th¸i s½n sµng, cho phÐp CPU ®äc/ghi nhiÒu byte d÷ liÖu cïng lóc th× ta cã nh¸nh ®i
theo ®−êng nÐt ®øt trªn l−u ®å. Khi nµy ta cÇn thiÕt söa ®æi c¶ tæ chøc phÇn cøng vµ
ch−¬ng tr×nh ®Ó hÖ thèng ho¹t ®éng chÝnh x¸c.
H×nh vÐ: L−u ®å ®iÒu khiÓn vµo/ra d÷ liÖu
D0=1?
§äc cæng
00
Begin
HÕt d÷ liÖu?
End
§äc cæng
01
T
F
T
F
(a) L−u ®å ®äc d÷ liÖu tõ cæng 01
D1=1?
§äc cæng
00
Begin
HÕt d÷ liÖu?
End
Ghi cæng
01
T
F
T
F
(a) L−u ®å ghi d÷ liÖu vµo 02