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
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 đủ
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:
- bai_giang_do_luong_va_dieu_khien_bang_may_tinh_chuong_7_giap.pdf