Bài giảng Đo lường và điều khiển bằng máy tính - Chương 7: Giap tiếp qua cổng nối tiếp

Chöông  
7
GIAO TIEÁP QUA COÅNG NOÁI TIEÁP  
7.1 CAÁU TRUÙC COÅNG COM  
Coång noái tieáp treân maùy tính, thöôøng goïi laø coång COM, ñöôïc  
söû duïng ñeå truyeàn döõ lieäu hai chieàu giöõa maùy tính vaø ngoaïi vi, coù  
caùc öu ñieåm sau:  
- Khoaûng caùch truyeàn daøi hôn so vôùi coång song song. Coång  
noái tieáp truyeàn möùc 1 töø 3V ñeán 25V vaø möùc 0 töø +3V ñeán  
+25V neân tính choáng nhieãu cao hôn, cho pheùp khoaûng caùch truyeàn  
xa hôn.  
- Soá daây keát noái ít, toái thieåu ba daây.  
- Coù theå gheùp vôùi ñöôøng daây ñieän thoaïi, cho pheùp khoaûng  
caùch truyeàn chæ bò giôùi haïn bôûi maïng toång ñaøi ñieän thoaïi.  
- Coù theå truyeàn khoâng daây duøng tia hoàng ngoaïi.  
- Gheùp noái deã daøng vôùi vi ñieàu khieån hay PLC.  
- Cho pheùp noái maïng.  
Caùc thieát bò gheùp noái noái tieáp chia laøm hai loaïi DTE (Data  
Terminal Equipment) vaø DCE (Data Communication Equipment)  
DCE laø caùc thieát bò trung gian nhö modem, coøn DTE laø caùc thieát  
bò nhö maùy tính, vi ñieàu khieån, PLC, laø nguoàn taïo ra döõ lieäu hay  
tieáp nhaän döõ lieäu ñeå xöû lyù. Coù theå gheùp noái DTE vôùi DTE hoaëc  
DCE, DCE vôùi DTE hoaëc DCE. Tín hieäu truyeàn noái tieáp theo  
daïng xung chuaån RS 232 cuûa EIA (Electronics Industry  
Associations), möùc logic 0 coøn goïi laø Space giöõa +3 vaø +25V, möùc  
logic 1 coøn goïi laø Mark, ôû giöõa 3V vaø 25V.  
Töø DTE tín hieäu ñöôïc truyeàn giöõa hai daây TXD vaø GND theo  
khuoân daïng H.7.1 sau:  
Chöông 7: GIAO TIEÁP QUA COÅNG NOÁI TIEÁP  
Trang 176  
Khi khoâng truyeàn ñöôøng daây seõ ôû traïng thaùi Mark, khi baét  
ñaàu truyeàn, xung Start ñöôïc truyeàn (+10 V) sau ñoù laø 8 bit döõ lieäu,  
bit D0 ñöôïc truyeàn tröôùc, neáu bit döõ lieäu logic 0 thì ñieän aùp  
ñöôøng daây töông öùng laø +10V, sau caùc bit döõ lieäu laø bit kieåm tra  
chaün leû roài bit stop ôû logic 1(-10V), DTE nhaän tín hieäu truyeàn  
ngöôïc trôû laïi theo ñöôøng RXD. Neáu noái hai DTE vôùi nhau thì  
duøng sô ñoà H.7.2a.  
Tröôøng hôïp noái DTE vôùi DCE thì chaân TXD cuûa DCE nhaän  
tín hieäu coøn chaân RXD phaùt tín hieäu (noái 1-1) (H.7.2b).  
Hình 7.2  
Coång COM coù hai daïng ñaàu noái ñöïc D-25 vaø D-9 .  
Baûng 7.1  
D-25  
D-9  
3
Teân tín hieäu  
TD, TXD, truyeàn döõ lieäu  
RD, RXD, nhaän döõ lieäu  
RTS, Request to send  
Chieàu  
xuaát  
YÙù nghóa  
Xuaát döõ lieäu noái tieáp  
Nhaäp döõ lieäu noái tieáp  
2
3
4
2
nhaäp  
xuaát  
7
DTE saün saøng trao ñoåi döõ  
lieäu  
5
8
CTS, Clear to send  
nhaäp  
Modem saün saøng trao ñoåi döõ  
lieäu  
6
7
8
6
5
1
DSR, Data set ready  
SG, Signal grourd  
nhaäp  
Mass  
nhaäp  
Modem saün saøng keát noái  
CD, Carrier detect, phaùt giaùc  
soùng mang  
Phaùt giaùc coù tín hieäu treân  
ñöôøng daây  
20  
22  
4
9
DTR, Data terminal Ready  
RI, Ring Indicator  
xuaát  
DTE saün saøng keát noái  
nhaäp  
Modem phaùt giaùc tín hieäu  
chuoâng  
Thaønh phoá Hoà Chí Minh, thaùng 4 naêm 2006  
Taùc giaû: TS Nguyeãn Ñöùc Thaønh  
Trang 177  
Thöôøng söû duïng caùc sô ñoà keát noái (H.7.3):  
Hình 7.3: a) Keát noái tröïc tieáp; b) Keát noái qua modem  
Tín hieäu truyeàn noái tieáp döôùi daïng caùc bit, soá bit trong moät  
giaây ñöôïc goïi laø baud, vaän toác truyeàn thoâng duïng laø 300, 600,  
1200, 2400, 4800, 9600, 19200… baud. Neáu duøng vaän toác 9600  
baud vaø khung truyeàn 8, E, 2 (8 bit döõ lieäu, 1 bit kieåm tra chaün, 2  
bit stop) thì truyeàn moät byte chieám 12 bit vaäy moät giaây truyeàn  
ñöôïc 800 byte, thôøi gian truyeàn 1 bit laø ~ 0,1msec. Caùc modem  
ñôøi môùi coù theå ñaït toác ñoä 56000 baud, tuy nhieân caùc vi maïch  
truyeàn noái tieáp coù theå ñaït toác ñoä cao hôn ñeán 115200 baud (vi  
maïch 16550) 230400 baud (16C650) vì vaäy caùc modem phaûi neùn  
tín hieäu tröôùc khi truyeàn treân ñöôøng. Keát noái giöõa maùy tính  
(DTE) vaø modem (DCE) thöïc hieän theo nguyeân taéc caùc chaân cuøng  
teân noái vôùi nhau. Coøn khi keát noái DTE vaø DTE thöôøng duøng sô  
ñoà sau:  
D9  
3
D25  
2
D25  
3
D9  
2
TD  
RD  
RD  
TD  
2
3
2
3
5
7
SG  
SG  
7
5
4
20  
6
DTR  
DSR  
CD  
DTR  
DSR  
CD  
20  
6
4
6
6
1
8
8
1
7
4
RTS  
CTS  
RTS  
CTS  
4
7
8
5
5
8
Chöông 7: GIAO TIEÁP QUA COÅNG NOÁI TIEÁP  
Trang 178  
Khi DTE caàn truyeàn döõ lieäu thì DTR tích cöïc ñöa veà DSR cho  
bieát phía nhaän saün saøng, ñöa veà CD cho bieát ñaõ nhaän ñöôïc soùng  
mang cuûa modem aûo. Hai DTE coù cuøng khung truyeàn neân RTS vaø  
CTS noái vôùi nhau. Ñoâi khi coù theå boû ñöôøng noái DTR vôùi DSR vaø CD.  
Khi keát noái DTE vôùi DCE, do vaän toác truyeàn khaùc nhau, caàn  
ñieàu khieån löu löôïng. Coù hai caùch laø duøng phaàn cöùng vaø phaàn  
meàm. Khi duøng phaàn cöùng söû duïng hai daây RTS vaø CTS. Neáu  
DTE muoán truyeàn seõ cho RTS taùc ñoäng, neáu DCE chaáp nhaän seõ  
gôûi trôû veà CTS vaø maùy tính seõ gôûi döõ lieäu, neáu maùy tính khoâng  
nhaän ñöôïc CTS seõ khoâng gôûi döõ lieäu. Ñieàu khieån löu löôïng baèng  
phaàn meàm duøng hai kyù töï Xon vaø Xoff. Khi modem muoán maùy  
tính ngöøng truyeàn seõ gôûi ñi kyù töï Xoff (ASCII 19) coøn khi modem  
raûnh noù seõ gôûi kyù töï Xon (ASCII 17).  
Vieäc trao ñoåi döõ lieäu cuûa maùy tính ñöôïc thöïc hieän thoâng qua  
vi maïch UART (Universal Asynchronous Receiver Transmitter)  
coøn vôùi vi ñieàu khieån hay PLC thì coù caùc vi maïch chuyeân duïng  
hoaëc ñöôïc tích hôïp trong vi xöû lyù. Caùc maùy tính ñôøi môùi duøng  
coâng ngheä ASIC söû duïng chip ña naêng laøm nhieàu nhieäm vuï giao  
tieáp noái tieáp, song song, coång troø chôi, ñieàu khieån ñóa, tuy nhieân  
phaàn giao tieáp noái tieáp thieát keá töông hôïp vôùi caùc vi maïch UART  
rôøi. Caùc loaïi vi maïch UART thöôøng gaëp laø 8250, 8250A, 16450,  
16550, 16650, 16750, … 6402  
Caùc coång noái tieáp ñöôïc ñaùnh soá COM 1, COM 2, COM 3, COM  
4. Baûng 7.2 cho ñòa chæ goác coång COM vaø caùc thoâng tin khaùc  
Baûng 7.2  
Teân Ñòa chæ goác Ngaét Nôi chöùa ñòa chæ  
COM 1  
COM 2  
COM 3  
COM 4  
3F8  
2F8  
3E8  
2E8  
4
3
4
3
0000 : 0400  
0000 : 0402  
0000 : 0404  
0000 : 0406  
Thaønh phoá Hoà Chí Minh, thaùng 4 naêm 2006  
Taùc giaû: TS Nguyeãn Ñöùc Thaønh  
Trang 179  
Hình 7.4a: Card giao tieáp LPT/COM phaàn ñeäm  
Chöông 7: GIAO TIEÁP QUA COÅNG NOÁI TIEÁP  
Trang 180  
Hình 7.4b: Card giao tieáp LPT/COM phaàn LPT  
Thaønh phoá Hoà Chí Minh, thaùng 4 naêm 2006  
Taùc giaû: TS Nguyeãn Ñöùc Thaønh  
Trang 181  
Chöông 7: GIAO TIEÁP QUA COÅNG NOÁI TIEÁP  
Trang 182  
Hình 7.4c: Card giao tieáp LPT/COM phaàn COM  
Hình 7.4 cung caáp sô ñoà card giao tieáp LPT/COM cuûa maùy  
XT giuùp ta coù khaùi nieäm veà caùch gheùp bus ISA vôùi UART. Caùc  
chaân cuûa UART coù möùc TTL neân caàn maïch chuyeån möùc ñeå gheùp  
vôùi möùc RS232. Hình 7.5 cho sô ñoà chaân cuûa moät soá UART thoâng  
duïng. Baûng 7.3 cung caáp yù nghóa caùc chaân cuûa 16550  
Hình 7.5: Sô ñoà chaân UART  
Baûng 7.3: YÙ nghóa chaân UART16650  
Chaân  
1:8  
9
Teân  
D0:D7  
RCLK  
RD  
YÙ nghóa  
Data Bus  
Xung nhòp vaøo,taàn soá = Baud Rate *16  
10  
RXD  
TXD  
11  
TD  
12..14  
15  
CS0,CS1,/CS2 Ba chaân choïn chip  
/BAUDOUT  
XIN  
Xung nhòp ra, taàn soá = Baud Rate *16  
16  
Dao ñoäng vaøo boä chia taàn  
Dao ñoäng ra  
17  
XOUT  
/WR  
18  
Ghi döõ lieäu, ñaûo  
Ghi döõ lieäu, khoâng ñaûo  
Mass  
19  
WR  
20  
VSS  
21  
/RD  
Ñoïc döõ lieäu, ñaûo  
Thaønh phoá Hoà Chí Minh, thaùng 4 naêm 2006  
Taùc giaû: TS Nguyeãn Ñöùc Thaønh  
Trang 183  
22  
23  
RD  
DDIS  
Ñoïc döõ lieäu, khoâng ñaûo  
Driver Disable, caám driver  
Transmitter Ready, saün saøng phaùt  
Address Strobe. Caøi ñòa chæ  
Choïn thanh ghi  
24  
/TXRDY  
/ADS  
25  
26..28  
29  
A2, A1, A0  
/RXRDY  
INTR  
Receive Ready  
30  
Interrupt Output, yeâu caàu ngaét  
User Output 2  
31  
nOUT2  
/RTS  
32  
Request to Send  
33  
/DTR  
Data Terminal Ready  
User Output 1  
34  
/OUT1  
MR  
35  
Master Reset  
36  
/CTS  
Clear To Send  
37  
/DSR  
Data Set Ready  
38  
nDCD  
nRI  
Data Carrier Detect  
Ring Indicator  
39  
40  
VDD  
+ 5 Volts  
Chöông 7: GIAO TIEÁP QUA COÅNG NOÁI TIEÁP  
Trang 184  
Baûng 7.4 Caùc thanh ghi cuûa UART  
Ñòa chæ goác DLAB Ñoïc/Ghi Teân  
Chöùc naêng  
Transmitter Holding Register  
Thanh ghi giöõ thoâng tin truyeàn  
Receiver Buffer Register  
Thanh ghi ñeäm thu  
0
0
1
Ghi  
THR  
RBR  
+ 0  
Ñoïc  
Baud Rate Divisor Latch  
Caøi soá chia byte thaáp  
Ñoïc/Ghi BRDL  
Ñoïc/Ghi IER  
Interrupt Enable Register  
Thanh ghi cho pheùp ngaét  
0
1
+ 1  
+ 2  
Ñoïc/Ghi BRDH Caøi soá chia byte cao  
Interrupt Identification Register  
Thanh ghi nhaän daïng ngaét  
FIFO Control Register  
Ñoïc  
Ghi  
IIR  
FCR  
Line Control Register  
+ 3  
+ 4  
+ 5  
Ñoïc/Ghi LCR  
Ñoïc/Ghi MCR  
Thanh ghi ñieàu khieån ñöôøng daây  
Modem Control Register  
Thanh ghi ñieàu khieån modem  
Line Status Register  
Ñoïc  
LSR  
Thanh ghi traïng thaùi ñöôøng daây  
Modem Status Register  
Thanh ghi traïng thaùi Modem  
Scratch Register  
+ 6  
+ 7  
Ñoïc  
MSR  
Ñoïc/Ghi  
Baûng 7.5  
Baud Rate BRDH BRDL  
4800  
9600  
00  
00  
00  
00  
00  
00  
18  
0C  
06  
03  
02  
01  
19200  
38400  
57600  
115200  
Thaønh phoá Hoà Chí Minh, thaùng 4 naêm 2006  
Taùc giaû: TS Nguyeãn Ñöùc Thaønh  
Trang 185  
Baûng 7.6: Thanh ghi cho pheùp ngaét  
D5 Cho pheùp kieåu coâng suaát thaáp (16750)  
D4 Cho pheùp kieåu nguû (16750)  
D3 Cho pheùp ngaét khi coù loãi modem  
D2 Cho pheùp ngaét khi coù loãi truyeàn, thu  
D1 Cho pheùp ngaét khi THR troáng (ñaõ truyeàn döõ lieäu)  
D0 Cho pheùp ngaét khi RBR ñaày (ñaõ nhaän döõ lieäu)  
Baûng 7.7: Thanh ghi nhaän daïng ngaét IIR  
D6 D7  
Bit 6 - 7  
0
0
1
0
1
1
Khoâng coù FIFO  
Cho pheùp FIFO nhöng khoâng duøng  
Cho pheùp FIFO  
Bit 5  
Bit 4  
Bit 3  
Cho pheùp FIFO 64 byte (16750)  
Khoâng duøng  
0
1
Khoâng duøng  
Ngaét heát thôøi gian (16550)  
Bit 1 - 2 Bit 2 Bit 1  
0
0
1
1
0
1
0
1
Ngaét traïng thaùi modem, xoùa khi ñoïc MSR  
Ngaét THR troáng, xoùa khi ghi vaøo THR  
Ngaét RBR ñaày, xoùa khi ñoïc RBR  
Loãi truyeàn thu  
Bit 0  
0
1
Coù ngaét  
Khoâng coù ngaét  
DLAB (Divisor latch access bit) laø bit 7 cuûa LCR, khi DLAB =  
1 cho pheùp ñaët boä chia taàn trong UART ñeå ñöôïc vaän toác baud  
mong muoán.  
UART duøng tinh theå dao ñoäng 1,8432 MHz chia cho 16 ñöôïc  
taàn soá 115200Hz. Taàn soá naøy ñöôïc chia bôûi boä ñeám laäp trình ñöôïc  
16 bit, soá chia chöùa trong hai thanh ghi ñòa chæ goác +1 (byte cao)  
vaø goác +0 (byte thaáp) ñöôïc söû duïng khi DLAB = 1.  
Neáu muoán vaän toác truyeàn 9600 thì soá chia laø 12 hay 000CH,  
Chöông 7: GIAO TIEÁP QUA COÅNG NOÁI TIEÁP  
Trang 186  
byte cao laø 00H, byte thaáp laø 0CH  
Khi DLAB = 0 ghi vaøo ñòa chæ goác +0 ñeå truyeàn ñi 8 bit noái  
tieáp, ñoïc ñòa chæ goác +0 nhaän ñöôïc 8 bit döõ lieäu truyeàn ñeán.  
Thanh ghi IER (goác +1) cho pheùp ngaét vi xöû lyù khi coù bieán coá  
treân ñöôøng truyeàn.  
Khi coù ngaét xaûy ra, bit 0 cuûa IIR ôû möùc 0, loaïi ngaét chæ bôûi  
bit 1 vaø 2, ngaét loãi truyeàn thu coù öu tieân cao nhaát coøn ngaét do  
modem öu tieân thaáp nhaát.  
Baûng 7.8: Thanh ghi ñieàu khieån ñöôøng truyeàn LCR  
xaùc ñònh khung truyeàn  
Bit 7  
1 : caøi ñaët soá chia DLAB  
0 : truy xuaát RBR, THR, IER  
Bit 6 Khi baèng 1 cho pheùp truyeàn tín hieäu BREAK, ñöôøng daây ôû möùc 0 (+12V) trong thôøi  
gian lôùn hôn moät khung  
Bit 3 ÷  
Bit 5  
Bit 4  
Bit  
3
5
Khoâng kieåm tra côø chaün/leû  
X
0
0
1
1
0
1
X
0
1
0
1
0
1
Khi leû  
Khi chaün  
1
1
Bit kieåm tra côø chaün leû laø 1  
Bit kieåm tra côø chaün leû laø 0  
Moät bit stop  
1
Bit 2  
Hai bit stop khi soá bit döõ lieäu laø 6, 7, 8. Khi soá bit döõ lieäu laø 5 thì duøng 1,5  
bit stop  
Bit 0,  
1
Bit 1  
Bit 0  
0
0
1
1
0
1
0
1
5 bit döõ lieäu  
6 bit döõ lieäu  
7 bit döõ lieäu  
8 bit döõ lieäu  
Baûng 7.9: Thanh ghi ñieàu khieån modem MCR  
Bit 5 Duøng cho 16750  
Bit 4 Mode loopback duøng ñeå kieåm tra hoaït ñoäng UART  
Bit 3 Ñieàu khieån ngoõ ra Aux Output 2  
Thaønh phoá Hoà Chí Minh, thaùng 4 naêm 2006  
Taùc giaû: TS Nguyeãn Ñöùc Thaønh  
Trang 187  
Bit 2 Ñieàu khieån ngoõ ra Aux Output 1  
Bit 1 Cho RTS leân 1  
Bit 0 Cho DTR leân 1  
Baûng 7.10: Thanh ghi traïng thaùi ñöôøng daây LSR  
Bit 7 Sai trong FIFO  
Bit 6 Thanh ghi giöõ truyeàn THR vaø thanh ghi dôøi troáng  
Bit 5 THR troáng  
Bit 4 Ngaét Break, ñöôøng truyeàn ôû logic 0 thôøi gian daøi hôn truyeàn moät byte  
Bit 3 Sai khung truyeàn, bit cuoái khoâng phaûi laø bit stop  
Bit 2 Sai parity  
Bit 1 Khi döõ lieäu tôùi khoâng ñoïc kòp laøm ghi choàng leân RBR  
Bit 0 Baùo coù döõ lieäu ôû RBR  
Baûng 7.11: Thanh ghi traïng thaùi modem MSR  
Bit 7 Logic cuûa CD, baùo coù soùng mang  
Bit 6 Logic cuûa RI, baùo coù chuoâng  
Bit 5 Logic cuûa DSR  
Bit 4 Logic cuûa CTS  
Bit 3 Möùc 1 khi coù CD ñoåi traïng thaùi  
Bit 2 Möùc 1 khi RI ñoåi töø thaáp leân cao  
Bit 1 Möùc 1 khi DSR thay ñoåi  
Bit 0 Möùc 1 khi CTS thay ñoåi  
7.2 MAÏCH CHUYEÅN MÖÙC  
Khi gheùp coång COM maùy tính vôùi vi ñieàu khieån hay maïch TTL  
caàn phaûi coù maïch chuyeån möùc TTL Æ 232 vaø ngöôïc laïi. Caùc vi  
maïch thöôøng duøng laø caäp MC1488-MC1489, MAX232 (Maxim) hoaëc  
DS275 (Dallas) (Hình 7.6), SN75150- SN75154 (Hình 7.4). Loaïi  
MAX232 thoâng duïng hôn caû vì chæ caàn nguoàn 5V, nguoàn ±10V do  
maïch dao ñoäng 16KHz beân trong cung caáp.  
Chöông 7: GIAO TIEÁP QUA COÅNG NOÁI TIEÁP  
Trang 188  
Thaønh phoá Hoà Chí Minh, thaùng 4 naêm 2006  
Taùc giaû: TS Nguyeãn Ñöùc Thaønh  
Trang 189  
Hình 7.6: Moät soá vi maïch chuyeån ñoåi TTL ---RS232 thoâng duïng  
7.3 CARD MÔÛ ROÄNG NOÁI TIEÁP  
Trong tröôøng hôïp caàn coù theâm coång noái tieáp coù theå duøng sô ñoà  
Hình 7.4c. Caùc tín hieäu ôû beân traùi laáy töø raõnh caém cuûa maùy tính  
sau khi qua maïch ñeäm vaø caùc maïch logic khaùc phuø hôïp. Tín hieäu  
ra DTR, RTS, TX qua maïch ñeäm 75150 ñoåi sang möùc ñieän aùp  
±12V. Caùc tín hieäu vaøo cuûa coång noái tieáp qua maïch ñeäm 75154 ñoåi  
töø möùc ñieän aùp ±12V ra möùc ñieän aùp TTL. Treân card coù theå gaén  
nhieàu vi maïch 8250 löïa choïn chip nhôø CS2, nhôø vaäy coù theå taïo  
nhieàu coång COM. Moät soá haõng baùn card môû roäng ISA, PCI cho  
theâm coång COM vaø coång LPT (xem chöông 3).  
Chöông 7: GIAO TIEÁP QUA COÅNG NOÁI TIEÁP  
Trang 190  
7.4 MAÏCH GIAO TIEÁP COÅNG NOÁI TIEÁP  
Söû duïng vi maïch CDP6402 ta coù theå chuyeån ñoåi soá lieäu song  
song ôû ngoaïi vi ra tín hieäu noái tieáp vaø ngöôïc laïi ñeå gheùp noái vôùi  
coång noái tieáp. Vi maïch naøy chuyeån ñoåi döõ lieäu song song ra noái  
tieáp vaø ngöôïc laïi theo chuaån RS232. Coù hai tuyeán döõ lieäu song  
song rieâng cho phaàn thu vaø phaùt.  
Tín hieäu TXD töø coång COM ñöôïc ñoåi sang möùc TTL nhôø vi  
maïch MAX 232 ñöa vaøo chaân RRI (Receiver Register In) cuûa 6402  
vaø ñoåi thaønh tín hieäu song song 8 bit RBR1 ÷ RBR8 (Receiver  
Register) Tín hieäu song song 8 bit TBR1 ÷ TBR8 (Transmitter  
Buffer Register) ñöôïc ñoåi thaønh tín hieäu noái tieáp ra chaân TRO  
(Transmitter Register Out) sau ñoù nhôø MAX 232 ñoåi sang ñieän aùp  
thích hôïp vaøo chaân RXD. Vaän toác truyeàn ñöôïc xaùc ñònh bôûi taàn soá  
tín hieäu ôû chaân RRC (Receiver Register Clock), TRC (Transmitter  
Register Clock). Nhôø vi maïch dao ñoäng chia taàn 74HC4060 coù theå  
thay ñoåi caùc vaän toác truyeàn khaùc nhau.  
Khuoân daïng truyeàn ñöôïc xaùc ñònh bôûi caùc chaân PI (Parity  
Inhibit) SBS (Stop Bit Select) CLS1, 2 (Character Length Select)  
vaø EPE (Even Parity Select), caùc tín hieäu vaøo ñöôïc caøi bôûi CRL  
(Control Register Load)  
Hình 7.7:  
UART CDP6402  
Thaønh phoá Hoà Chí Minh, thaùng 4 naêm 2006  
Taùc giaû: TS Nguyeãn Ñöùc Thaønh  
Trang 191  
Khi moät byte ñöôïc truyeàn tôùi vi maïch 6402 töø TXD, chaân DR  
(Data Received) seõ chuyeån sang möùc 1, byte truyeàn tôùi ñöôïc xuaát  
ra song song ôû RBR1 ÷ RBR8, muoán xoùa DR ta cho DRR (Data  
Received Reset) ôû möùc 0. Chaân TBRL (Transmitter Buffer  
Register Load) ôû möùc 0 seõ naïp data song song ôû TBR1÷TBR8 vaøo  
thanh ghi ñeäm truyeàn, khi chaân naøy chuyeån sang möùc cao seõ  
truyeàn döõ lieäu ñi noái tieáp ôû TRO.  
Baûng 7.13: Traïng thaùi boä truyeàn thu noái tieáp  
thoâng baùo ra ngoaøi nhôø caùc chaân  
PE Côø loãi  
1 Coù loãi  
OE Overrun error  
1 Ñaõ nhaän döõ lieäu nhöng DRR chöa taùc ñoäng  
1 Caám caùc côø baùo  
SFD Status flag disable  
TRE Transmitter Register empty  
DR Data received  
1 Thanh ghi truyeàn troáng  
1 Ñaõ nhaän döõ lieäu  
TBRE Transmitter buffer Register emply 1 Thanh ghi ñeäm truyeàn troáng  
Trong sô ñoà Hình 7.8, moät vi maïch ADC0804 1 keânh 8 bit  
ñöôïc duøng ñeå ñoåi aùp töông ñoàng ra soá 8 bit ñöa vaøo TBR1÷TBR8,  
khi 6402 nhaän 1 byte töø TXD noù seõ cho DR ôû möùc cao ñöa vaøo  
chaân WR cuûa ADC0804 baét ñaàu chuyeån ñoåi AD. Ñoåi xong INTR  
taùc ñoäng ñöa vaøo TBRL naïp 8 bit ñaõ ñoåi vaøo thanh ghi ñeäm  
truyeàn vaø truyeàn ñi noái tieáp, ñoàng thôøi ñöa vaøo DRR laøm xoùa DR  
ngöng ñoåi cho ñeán khi coù moät byte môùi vaøo RRI.  
Chöông trình sau vieát baèng ngoân ngöõ C minh hoïa hoaït ñoäng  
cuûa maïch.  
/* Chöông trình ñoåi AD noái tieáp */  
#include <dos.h>  
#include <stdio.h>  
#include <conio.h>  
#define PORT1 0x3F8  
#define INTVECT 0x0C  
int bufferin = 0;  
int bufferout = 0;  
unsigned char ch;  
char buffer [1025];  
void interrupt (*oldport1isr) ();  
void interrupt PORT1INT /*IRS cho PORT1 */  
Chöông 7: GIAO TIEÁP QUA COÅNG NOÁI TIEÁP  
Trang 192  
{
int c;  
do  
{c = inportb(PORT1 +5);  
Hình 7.8: Chuyeån ñoåi AD duøng coång noái tieáp 9600, 8, E, 1  
if (c & 1) buffer[bufferin] = inportb(PORT1);  
{
bufferin++;  
if (bufferin == 1024) {bufferin = 0;}}  
while (c & 1);  
}
outportb (0x10, 0x20);  
}
void main (void)  
{
int c;  
outportb (PORT1 + 1, 0);  
/* Caám ngaét port 1 */  
oldport1isr = getvect (INTVECT);  
setvect (INTVECT, PORT1INT);  
/*PORT 1 - Ñaët cheá ñoä*/  
outportb (PORT1 + 3, 0x80); /* SET DLAB ON */  
outportb (PORT1 + 0, 0x0C); /* ñaët Baud rate 9600 BPS */  
outportb (PORT1 + 1, 0x00);  
outportb (PORT1 + 3, 0x03); /* 8 bits, No Parity, 1 Stop Bit */  
outportb (PORT1 + 2, 0xC7); /*FIFO Control Register*/  
outportb (PORT1 + 4, 0x0B); /*Cho DTR, RTS, vaø OUT2 ON*/  
outportb (0x21, (inportb (0x21) & 0xEF);  
Thaønh phoá Hoà Chí Minh, thaùng 4 naêm 2006  
Taùc giaû: TS Nguyeãn Ñöùc Thaønh  
Trang 193  
outportb (PORT1 + 1, 0x01); /* Interrupt khi nhaän data */  
printf (“\n\chöông trình ñoåi ADC noái tieáp. Nhaán ESC ñeå thoaùt \n”);  
do  
{
if (bufferin ! == bufferout) {ch = buffer[bufferout];  
bufferout++;  
if (bufferout == 1024) {bufferout = 0;}  
print(“%u\n”, ch);  
printf(“%f volts\n”, (float) ch/256*5);}  
if (kbhit () {c = getch();  
outportb(PORT1, c);}  
} while (c != 27);  
outportb (PORT1 + 1, 0);  
outportb (0x21, (inportb (0x21) 0x20));  
setvect (INTVECT, oldport1isr);  
}
/* Chöông trình truyeàn noái tieáp duøng ngoân ngöõ C  
/* Xuaát kyø töï nhaän ñöôïc ra maøn hình vaø ñoïc kyù töï töø baøn phím gôûi noái tieáp */  
#include <dos.h>  
#include <stdio.h>  
#include<conio.h>  
#define PORT1 0x3F8  
/* COM 1 0x3F8 */  
/* COM 2 0x2F8 */  
/* COM 3 0x3E8 */  
/* COM 4 0x2E8 */  
void main (void)  
{
int C;  
int ch;  
outportb (PORT1 + 1, 0); /* Caám ngaét Port 1 */  
/* Ñaët caáu hình PORT 1 */  
outportb (PORT1 + 3, 0x80); /* SET DLAB ON */  
outportb (PORT1 + 0, 0x03); /* Set Baud rate - Divisor Latch Low Byte */  
/* Default 0x03 = 38,400 BPS */  
/* 0x01 = 115,200 BPS */  
/* 0x02 = 56,700 BPS */  
/* 0x06 = 19,200 BPS */  
/* 0x0C = 9,600 BPS */  
/* 0x18 = 4,800 BPS */  
/* 0x30 = 2,400 BPS */  
outportb (PORT1 + 1 , 0x00); /* Set Baud rate - Divisor Latch Hight Byte */  
outportb (PORT1 + 3 , 0x03); /* 8 Bits, No Parity, 1 Stop Bit */  
outportb (PORT1 + 2 , 0xC7); /* FIFO Control Register */  
outportb (PORT1 + 4 , 0x0B); /* Turn on DTR, RTS, and OUT2 */  
printf (“\n. Press ESC to quit \n”);  
do  
{ c = inportb (PORT1 + 5); /* Xem coù nhaän ñöôïc kyù töï khoâng. */  
Chöông 7: GIAO TIEÁP QUA COÅNG NOÁI TIEÁP  
Trang 194  
if (c & 1) {ch = inportb (PORT1);  
printf (“%c” ch);} /* Xuaát kyù töï ra maøn hình */  
if (kbhit ()) {ch = getch (); /* Ñoïc phím baám */  
outportb (PORT1, ch);} /* Gôûi kyù töï */  
} while (ch != 27);  
}
/* Chöông trình giao tieáp noái tieáp duøng ngaét*/  
#include <dos.h>  
#include <stdio.h>  
#include <conio.h>  
#define PORT1 0x2E8  
#define INTVECT 0x08 /* Com Port’s IRQ here */  
int bufferin = 0;  
int bufferout = 0;  
char ch;  
char buffer [1025];  
void interrupt (*oldport1isr) ();  
void interrupt PORT1INTO () /* Interrupt Service Routine (IRS) for PORT 1 */  
{
int c;  
do {c = inportb (PORT1 + 5);  
if (c & 1) {buffer [bufferin] = inportb (PORT1);  
bufferin++;  
if (bufferin == 1024) bufferin = 0;}  
} while (c & 1);  
outportb (0x20, 0x20);  
}
void main (void)  
{
int c;  
outportb (PORT1 + 1 , 0);  
oldport1isr = getvect (INTVECT); /* caát vectô ngaét cuõ */  
setvect (INTVECT, PORT1INT); /* ñaët vectô ngaét môùi */  
/* COM 1 - 0x0C */  
/* COM 2 - 0x0B */  
/* COM 3 - 0x0C */  
/* COM 4 - 0x0B */  
outportb (PORT1 + 3 , 0x80); /* SET DLAB ON */  
outportb (PORT1 + 0 , 0x03); /* Set Baud rate - Divisor Latch Low Byte */  
/* Default 0x03 = 38,400 BPS */  
/* 0x01 = 115,200 BPS */  
/* 0x20 = 56,700 BPS */  
/* 0x06 = 19,200 BPS */  
/* 0x0C = 9,600 BPS */  
/* 0x18 = 4,800 BPS */  
/* 0x30 = 2,400 BPS */  
outportb (PORT1 + 1, 0x00); /* Set Baud rate - Divisor Latch Hight Byte */  
Thaønh phoá Hoà Chí Minh, thaùng 4 naêm 2006  
Tải về để xem bản đầy đủ
pdf 38 trang Thùy Anh 27/04/2022 6560
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Đo lường và điều khiển bằng máy tính - Chương 7: Giap tiếp qua cổng nối tiếp", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_do_luong_va_dieu_khien_bang_may_tinh_chuong_7_giap.pdf