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 i thiÕt 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 liÖu. C¸c m¹ch phèi ghÐp vµo/ra ®· tr×nh y tr−íc ®©y 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 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 thÓ ph©n thµnh c¸c ph−¬ng ph¸p thÓ
h¬n lµ:
§ång (Kh«ng ®iÒu kiÖn kh«ng héi tho¹i)
Sau khi ®· khëi ®éng (khëi t¹o) thiÕt ngo¹i vi, CPU
(vµ thiÕt ngo¹i vi) kh«ng –quan t©m– tíi viÖc thiÕt
ngo¹i vi s½n sµng cho viÖc trao ®æi liÖu hay kh«ng.
lu«n thùc hiÖn c¸c lÖnh trao ®æi 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 liÖu cña CPU thiÕt ngo¹i vi phï hîp nhau (TBNV
cã tèc ®é lµm viÖc nhanh).
VÝ dô, trong mét ®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 ®−îc biÕn ®æi thµnh tÝn hiÖu råi ®−îc ®äc vµo 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 nhiÖt ®é mét
®¹i l−îng biÕn ®æi t chËm so i tèc ®é cña m¸y tÝnh cïng víi , CPU ng cã
thÓ bÊt lóc nµo ®−a liÖu hiÓn thÞ ®o ®ã. §©y gäi qtr×nh o/ra ®ång
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 thiÕt bÞ ngo¹i vi chØ trao ®æi liÖu khi tÝn hiÖu mãc nèi 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ê kiÓm tra tr¹ng th¸i s½n 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 liÖu
cña c¸c bªn (CPU vµ thiÕt bÞ ngo¹i vi) rÊt kh«ng b»ng nhau
nã cã mét sè ®Æc ®iÓm sau:
ViÖc trao ®æi th«ng tin tin cËy chØ trao ®æi khi thiÕt
bÞ ngo¹i vi s½n sµng.
Tèn thêi gian CPU 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 thèng kh«ng ®ßi hái cao 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 liÖu ®iÒu khiÓn b»ng ng¾t ch−¬ng tr×nh (ng¾t vi
Interrupt): B×nh th−êng m¸y tÝnh thùc
hiÖn t ch−¬ng tr×nh (c«ng viÖc) nµo ®ã.
Khi thiÕt ngo¹i vi yªu cÇu trao ®æi
liÖu, 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 cho
trao ®æi liÖu th«ng qua tÝn hiÖu yªu cÇu
ng¾t IRQ (Interrupt Request) 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 ®−a ra xung
INTA x¸c nhËn tíi thiÕt ngo¹i vi, sau ®ã
CPU t×m ch−¬ng tr×nh con phôc ng¾t
t−¬ng øng hiÖu ng¾t thùc hiÖn . §ã chÝnh ch−¬ng tr×nh con thùc hiÖn trao
®æi (vµo/ra) liÖu do thiÕt 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 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 liÖu b»ng ch−¬ng
tr×nh trªn, liÖu ph¶i ®−îc chuyÓn qua l¹i nhí ®Õn CPU råi ®Õn thiÕt
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 tham gia cña c thanh ghi. liÖu cña mçi n vËn chuyÓn byte
hoÆc word (2 byte), tèc ®é trao ®æi liÖu phô thuéc rÊt nhiÒu vµo tèc ®é thùc hiÖn
c¸c lÖnh trao ®æi liÖu trªn. Nãi chung, c ®é trao ®æi liÖu kh«ng thÓ
nhanh ®−îc. Víi c¸c thiÕt lµm viÖc i nkhèi nh− mµn h×nh, æ ®Üa, ... yªu
cÇu trao ®æi m¶ng liÖu tph−¬ng ph¸p vµo/ra liÖu b»ng ch−¬ng tr×nh
kh«ng phîp. Khi ®ã ng−êi ta nghÜ ®Õn viÖc ®iÒu khiÓn liÖu vµo/ra trùc tiÕp
nhí ®Õn thiÕt bÞ ngo¹i vi hoÆc ng−îc l¹i kh«ng th«ng qua CPU b»ng nh÷ng
lÖnh trao ®æi liÖu nh− MOV, IN hoÆc OUT. §ã ph−¬ng ph¸p vµo/ra 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 liÖu, ®ã DMAC – DMA Controller. Chi tiÕt ph−¬ng ph¸p nµy ®−îc
tr×nh bµy kü trong phÇn sau.
Qua viÖc tr×nh bµy l−îc c ph−¬ng ph¸p ®iÒu khiÓn viÖc vµo/ra liÖu trªn ta
thÊy mçi ph−¬ng ph¸p nh÷ng ®Æc ®iÓm kh¸c nhau (−u nh−îc ®iÓm), chóng ®−îc øng
dông phîp trong nh÷ng hoµn ch thÓ kh¸c nhau. Mét trong nh÷ng ph−¬ng ph¸p
®iÒu khiÓn ®¬n gi¶n nhÊt chóng ta xem xÐt trong ch−¬ng nµy 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 liÖu b»ng c¸ch th¨m
tr¹ng th¸i s½n sµng a thiÕt ngo¹i vi
ph−¬ng ph¸p ®iÒu khiÓn vµo/ra d÷ liÖu ng
ch−¬ng tr×nh héi tho¹i. TÝn hiÖu héi tho¹i
(handshaking signal) ë ®©y 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 liÖu trë nªn rÊt
®¬n gi¶n nÕu thiÕt ngo¹i vi lóc nµo còng s½n
sµng chê lµm viÖc (trao ®æi liÖu) víi CPU
Nh− ®· ®Ò cËp ®Õn trong phÇn giíi thiÖu ®ã
ph−¬ng ph¸p vµo/ra liÖu ®ång (trùc tiÕp
kh«ng héi tho¹i). Tuy nhiªn trong thùc kh«ng
ph¶i lóc nµo CPU còng lµm viÖc víi c¸c thiÕt
ngo¹i vi –liªn tôc s½n sµng– nh− trªn, tèc ®é
lµm viÖc cña thiÕt ngo¹i vi CPU rÊt chªnh
lÖch. Th«ng th−êng khi CPU muèn trao ®æi liÖu
víi mét thiÕt ngo¹i vi nµo ®ã, th«ng qua ch−¬ng
tr×nh liªn tôc kiÓm tra tr¹ng th¸i s½n sµng a
thiÕt ngo¹i ®Ó xem yªu cÇu trao ®æi liÖu
(yªu cÇu phôc vô) hay kh«ng? §Õn khi mét
thiÕt ngo¹i vi nµo ®ã yªu cÇu trao ®æi liÖu
(tøc tÝn hiÖu b¸o tr¹ng th¸i s½n sµng
readly) th× ch−¬ng tr×nh chuyÓn sang thùc hiÖn
viÖc trao ®æi liÖu (c«ng viÖc trao ®æi nµy thÓ
c¸c lÖnh ngay trong ch−¬ng tr×nh chÝnh hoÆc
mét ch−¬ng tr×nh con phôc hoÆc ISR) råi l¹i
tiÕp tôc kiÓm tra thiÕt ngo¹i vi 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 ®Ç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
liÖu ph¶i liªn tôc kiÓm tra tr¹ng th¸i s½n
sµng cña thiÕt 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 m¹ch phèi
ghÐp, do ng−êi thiÕt m¹ch o ra ®Ó cho
ch−¬ng tr×nh cã thÓ kiÓm tra nã. ViÖc nµy ®−îc tÝnh
to¸n ®ång khi x©y dùng m¹ch 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 chøc phÇn cøng phÇn mÒm nh−ng
gÆp ph¶i nh−îc ®iÓm khi l−îng thiÕt ngo¹i vi t¨ng n th× lµm l·ng phÝ thêi gian
CPU cho viÖc kiÓm tra tr¹ng th¸i s½n sµng kh¶ n¨ng ®¸p øng tøc thêi víi phôc cña
CPU lµ rÊt thÊp.
H×nh 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 mét thiÕt ngo¹i vi nµo ®ã thiÕt lËp mét
tr¹ng th¸i thÝch hîp (th«ng th−êng b»ng mét m¹ch lËt tr¹ng th¸i bëi xung STB cña thiÕt
ngo¹i vi). vi kiÓm tra tr¹ng th¸i nµy thùc hiÖn modul ch−¬ng tr×nh
trao ®æi liÖu khi tr¹ng th¸i b¸o r»ng thiÕt ngo¹i vi s½n sµng cho viÖc trao ®æi
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 mét c¸ch o tÝn hiÖu mãc i trong chøc phÇn cøng l−u ®å
thuËt to¸n (ch−¬ng tr×nh ®iÒu khiÓn) dïng cho viÖc trao ®æi liÖu gi÷a CPU thiÕt
ngo¹i vi.
§Ó ®¬n gi¶n, trong dô nµy
ta gi¶ thiÕt CPU chØ lµm viÖc i 1
thiÕt ngo¹i vi 1 thiÕt
ngo¹i vi ra. ViÖc chøc phèi ghÐp
phÇn cøng ®−îc thùc hiÖn trªn c¸c
vi m¹ch (IC) võa ®Ó theo dâi
c¸c tÝn hiÖu.
Mét cæng vµo ®Þa chØ 00
®−îc dïng ®Ó ®äc tr¹ng th¸i s½n
sµng cña thiÕt ngo¹i vi sè 1
2. (TB1: vµo; TB2: ra). TÝn hiÖu
b¸o s½n sµng cña thiÕt ngo¹i vi
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 ngo¹i vi 2 (cã ®Þa chØ 02)
®−îc ®Æt vµo biit D1 cña bus
liÖu. C¸c bit tÝn hiÖu nµy gi¸
trÞ b»ng 1 khi thiÕt ngo¹i vi t−¬ng
øng ë tr¹ng th¸i s½n sµng trao ®æi
liÖu víi CPU chóng ®−îc
®−a vµo bus liÖu khi CPU ®äc
b»ng lÖnh ®äc cæng ®Þa chØ
00. Ch−¬ng tr×nh ®iÒu khiÓn trao
®æi liÖu kiÓm tra c bit b¸o
s½n ng nµy c ®¸p øng
thÝch hîp.
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 thèng, ®−a ra xung STB ®Ó cho phÐp m¹ch chèt 8 bit chèt lÊy
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. vi xö (CPU) th«ng qua lÖnh ®äc cæng 00 ®Ó th¨m 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
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
ngo¹i vi 1 th«ng qua bit D0. Khi thÊy D0 = 1, ®äc 1 byte 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 nh− y ta tthÊy ®−îc ho¹t ®éng cña phÇn m¹ch ra liÖu thiÕt
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 liÖu
mçi khi cæng
01 b¸o s½n
sµng råi
hiÓn thÞ byte
liÖu ®ã.
Gi¶ thiÕt
100 byte
liÖu ph¶i ®ä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 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 ngo¹i vi vµo/ra ho¹t ®éng theo c¸ch kh¸c: i khi 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 nh¸nh ®i
theo ®−êng nÐt ®øt trªn l−u ®å. Khi nµy ta cÇn thiÕt söa ®æi c chøc phÇn cøng
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