CHÆÅNG 6 VAÌ O RA DÆÎ LIÃÛ U BÀÒ NG CAÏ CH THÀM DOÌ 1. Giåï i thiãû u chung vãö caï c phæång phaï p âiãö u kiãø n vaì o/ra dæî liãû u Sau khi âaî trçnh baì y vãö caï c maû ch thæåì ng duì ng cho viãû c phäú i gheï p CPU våï i thiãú t ngoaû i vi ta seî tiãú n haì nh nghiãn cæï u caï c phæång thæï c âiãö u khiãø n viãû c trao âäø i dæî liãû u. Caï c maû ch phäú i gheï p vaì o / ra âaî trçnh baì y træåï c âáy coï thãø âæåü c æï ng duû ng âãø phuû c vuû cho muû ch âêch naì y. Noï i chung ngæåì i ta phán biãû t ra 3 phæång phaï p âiãö u khiãø n vaì o/ra dæî liãû u: • vaì o/ra dæî liãû u âiãö u khiãø n bàò ng caï ch thàm doì traû ng thaï i sàô n saì ng cuí a thiãú t bë ngoaû i vi. • vaì o/ra dæî liãû u âiãö u khiãø n bàò ng caï ch ngàõ t bäü vi xæí lyï . • vaì o/ra dæî liãû u âiãö u khiãø n bàò ng pháö n cæï ng phuû âãø thám nháû p træû c tiãú p vaì o bäü nhåï . Mäù i phæång phaï p âiãö u khiãø n vaì o/ra dæî liãû u noï i trãn coï nhæî ng âàû c âiãø m khaï c nhau vaì seî âæåü c æï ng duû ng trong caï c hoaì n caí nh khaï c nhau. Mäü t trong nhæî ng caï ch âiãö u khiãø n âån giaí n nháú t maì chuï ng ta xem xeï t trong chæång naì y laì phæång phaï p thàm doì (polling) traû ng thaï i sàô n saì ng laì m viãû c cuí a thiãú t bë ngoaû i vi træåï c khi thæû c hiãû n vaì o/ra dæî liãû u. Caï c phæång phaï p âiãö u khiãø n vaì o ra dæî liãû u khaï c seî âæåü c giåï i thiãû u trong caï c chæång sau. 2. Vaì o/ra dæî liãû u bàò ng phæång phaï p thàm doì . Váú n âãö âiãö u khiãø n vaì o/ra dæî liãû u seî tråí thaì nh ráú t âån giaí n nãú u thiãú t bë ngoaû i vç luï c naì o cuî ng sàô n saì ng chåì âãø laì m viãû c våï i CPU. Vê duû , bäü pháû n do nhiãû t âäü säú (nhæ laì mäü t thiãú t bë vaì o) làõ p sàô n trong mäü t hãû thäú ng âiãö u khiãø n luï c naì o cuî ng coï thãø cung cáú p säú âo vãö nhiãû t âäü cuí a âäú i tæåü ng cáö n âiãö u chènh, coì n mäü t bäü âeì n LED 7 neï t (nhæ laì mäü t thiãú t bë ra) duì ng âãø chè thë mäü t giaï trë naì o âoï cuí a mäü t âaû i læåü ng váû t lyï nháú t âënh trong hãû thäú ng noï i trãn thç luï c naì o cuî ng coï thãø biãø u hiãû n thäng tin âoï . Nhæ váû y khi CPU muäú n coï thäng tin vãö nhiãû t âäü cuí a hãû thäú ng thç noï chè viãû c âoü c cäø ng phäú i gheï p våï i bäü âo nhiãû t âäü , vaì nãú u CPU muäú n biãø u diãù n thäng tin væì a âoü c âæåü c trãn âeì n LED thç noï chè viãû c âæa tên hiãû u âiãö u khiãø n tåï i âoï maì khäng cáö n phaí i kiãø m tra xem caï c thiãú t bë naì y coï âang sàô n saì ng laì m viãû c hay khäng. Tuy nhiãn trong thæû c tãú khäng phaí i luï c naì o CPU cuî ng laì m viãû c våï i caï c âäú i tæåü ng "liãn tuû c sàô ng saì ng" nhæ trãn. Thäng thæåì ng khi CPU muäú n laì m viãû c våï i mäü t âäú i tæåü ng naì o âoï , træåï c tiãn noï phaí i kiãø m tra xem thiãú t bë âoï coï âang
åí traû ng thaï i sàô n saì ng laì m viãû c hay khäng nãú u coï thç noï måï i thæû c hiãû n vaì o viãû c trao âäø i dæî liãû u. Nhæ váû y, nãú u laì m viãû c theo phæång thæï c thàm doì thç thäng thæåì ng CPU phaí i âæåü c daì nh riãng cho viãû c trao âäø i dæî liãû u vç noï phaí i liãn tuû c kiãø m tra traû ng thaï i sàô n saì ng cuí a thiãú t bë ngoaû i vi thäng qua caï c tên hiãû u moï c näú i (handshake signal). Caï c tên hiãû u naì y âæåü c láú y tæì caï c maû ch phäú i, do ngæåì i thiãú t kãú taû o ra, âãø cho chæång trçnh thàm doì hoaû t âäü ng trãn âoï . Sau âáy laì thê duû mäü t caï ch taû o ra tên hiãû u moï c näú i vaì læu âäö thuáû t toaï n cuí a chæång trçnh duì ng cho viãû c trao âäø i dæî liãû u giæî a CPU vaì thiãú t bë ngoaû i vi (hçnh 6.1) Trong thê duû naì y âãø cho váú n âãö âån giaí n, ta giaí thuyãú t CPU chè laì m viãû c våï i 1 thiãú t bë vaì o vaì 1 thiãú t bë ra. Viãû c täø chæï c phäú i gheï p âæåü c thæû c hiãû n trãn caï c maû ch IC cåî væì a âãø ta âãø theo gioí i caï c tên hiãû u. Mäü t cäø ng vaì o säú 0 (coï âëa chè 00) âæåü c duì ng âãø âoü c traû ng thaï i sàô n saì ng cuí a 2 thiãú t bë ngoaû i vi noï i trãn. Tên hiãû u saî n saì ng cuí a thiãú t bë ngoaû i vi säú 1 (cäø ng vaì o 01) âæåü c âàû t vaì o bit D0, tên hiãû u sàô n saì ng cuí a thiãú t bë ngoaû i vi säú 2 (cäø ng ra 02) âæåü c âàû t vaì o bit D1. Caï c bit naì y seî coï giaï trë 1 khi thiãú t bë ngoaû i vi tæång æï ng åí traû ng thaï i sàô n saì ng laì m viãû c våï i CPU vaì chuï ng seî âæåü c âæa vaì o bus dæî liãû u khi CPU âoü c noï bàò ng lãû nh âoü c cäø ng vaì o säú 0. Chæång trçnh trao âäø i dæî liãû u seî kiãø m tra caï c bit baï o sàô n saì ng naì y vaì seî coï caï c âaï p æï ng phuì håü p. Mä taí hoaû t âäü ng cuí a pháö n maû ch vaì o dæî liãû u Khi thiãú t bë vaì o säú 1 coï byte säú liãû u cáö n trao âäø i, noï âæa ra xung STB âãø cho pheï p maû ch chäú t 8 bit láú y byte dæî liãû u âoï âäö ng thåì i kêch cho maû ch láû t D (maû ch taû o tên hiãû u sàô n saì ng ) laì m viãû c. CPU seî thàm doì traû ng thaï i sàô n saì ng cuí a thiãú t bë vaì o säú 1 qua bit DO khi noï âoü c cäø ng 00. Âãú n khi CPU âoü c 1 byte dæî liãû u vaì o thç âäö ng thåì i noï xoï a luän maû ch taû o traû ng thaï i sàô n saì ng âãø chuáø n bë cho láö n laì m viãû c tåï i våï i 1 byte dæî liãû u khaï c. Tæång tæû ta cuî ng coï thãø deî daì ng tháú y âæåü c caï ch hoaû t âäü ng cuí a pháö n maû ch thæï hai cuí a hçnh 6.1 våï i chæï c nàng âæa dæî liãû u ra thiãú t bë säú 2. Læu âäö thuáû t toaï n cho chæång trçnh vaì o/ra dæî liãû u cuí a cäø ng säú 01/02 theo så âäö moï c näú i trãn hçnh 6.2 âæåü c thãø hiãû n åí hçnh 6.2 a) vaì b) âæåì ng liãö n neï t. • Vê duû Láû p chæång trçnh theo læu âäö trãn hçnh 6.2 âãø thæû c hiãû n viãû c âoü c vaì o dæî liãû u mäù i khi cäø ng 01 baï o sàô n saì ng räö i sæí lyï säú liãû u âoï . Coï 100 säú liãû u phaí i âoü c nhæ váû y (giaí thuyãú t coï sàô n chæång trçnh con xæí lyï dæî liãû u coï tãn Xuly) Giaí i
Cæï mäù i láö n nháû n âæåü c tên hiãû u baï o sàô n saì ng cuí a cäø ng 01 ta goü i chæång trçnh con Xuly. Thán cuí a chæång trçnh hoaì n thaì nh cäng viãû c noï i trãn (theo læu âäö trãn hçnh 6.2a âæåì ng liãö n neï t) coï thãø coï cáú u truï c sau : MOV CX, 100 ; säú dæî liãû u phaí i âoü c trong cx Lap : IN AL, 0 ; âoü c cäø ng 00 âãø kiãø m tra cåì sàô n saì ng TEST AL, 1 ; thiãú t bë säú 01 sàô n saì ng? JZ Lap ; chæa, quay laû i thàm doì tiãú p IN AL, 1 ; sàô n saì ng, âoü c cäø ng 01 CALL xuly ; xæí lyï dæî liãû u LOOP Lap ; chæa hãú t, quay laû i thàm doì tiãú p Ra:........ Trong træåì ng håü p thiãú t bë vaì o/ra hoaû t âäü ng theo caï ch khaï c : cåì sàô n saì ng âãø baï o cho CPU âoü c/ghi nhiãö u byte dæî liãû u cuì ng 1 luï c thç ta coï nhaï nh chæång trçnh âi theo âæåì ng âæï t quaî ng. Luï c naì y ta phaí i sæî a âäø i âäi chuï t caí trong pháö n maû ch taû o ra tên hiãû u moï c näú i láù n trong pháö n chæång trçnh âãø cho toaì n hãû thäú ng laì m viãû c âuï ng. Trong thê duû trãn, nãú u thay vç caï c maû ch IC cåî væì a (caï c maû ch cäø ng 3 traû ng thaï i vaì chäú t 8 bit) ta duì ng maû ch 8255A âãø phäú i gheï p CPU våï i thiãú t bë ngoaû i vi. Viãû c âoü c (thàm doì ) traû ng thaï i cuí a caï c tên hiãû u moï c näú i chè âån giaí n laì âoü c caï c bêt tæång æï ng cuí a cäø ng PC. Trãn hçnh 6.3 laì thê duû mäü t æï ng duû ng cuí a 8255A âãø phäú i gheï p våï i CPU 8088 trong viãû c vaì o/ra dæî liãû u theo kiãø u thàm doì traû ng thaï i sàô n saì ng cuí a thiãú t bë ngoaû i vi. Trong thê duû naì y ta chæa sæí duû ng âãú n chæï c nàng cuí a caï c tên hiãû u moï c näú i INTR naì y âæåü c näú i vaì o chán INTR cuí a 8088 thç ta coï khaí nàng thæû c hiãû n mäü t kiãø u phäú i gheï p khaï c âãø vaì o/ra dæî liãû u. Âoï laì âiãö u khiãø n vaì o/ra dæî liãû u bàò ng caï ch ngàõ t CPU. Caï ch âiãö u khiãø n vaì o/ra dæî liãû u kiãø u naì y seî âæåü c trçnh baì y åí chæång sau. Hçnh 6.3. Maû ch 8255A duì ng âãø phäú i gheï p vaì o/ra åí chãú âäü thàm do