Điều khiển và giám sát nhà cao tầng dùng vi xử lý 89c51

MỤC LỤC PHẦN I: GIỚI THIỆU ĐỀ TÀI Chương I: Tổng quan về đề tài và phương án thiết kế thi công I. Yêu cầu của đề tài II. Hướng thực hiện đề tài III. Vấn đề kết nối mạng Chương II: Sơ lược cảm biến báo cháy I. Chuyển đổi nhiệt điện 1. Chuyển đổi cặp nhiệt điện 2. Các loại cảm biến nhiệt II. Mạch phát hiện khói ( dùng cảm biến quang hay cảm biến ion ) 1. Mạch phát hiện khói dùng phương pháp quang( cảm biến quang) 2. Mạch phát hiện khói dùng nguyên lý ion (cảm biến ion) III. Mạch phát hiện cháy 1. Tế bào quang điện 2. Quang điện trở 3. Photo diode IV. Đo nhiệt độ bằng thạch anh 1. Cộng hưởng cơ của thạch anh 2. Độ nhạy nhiệt 3. Cách thực hiện nhiệt kế và đo PHẦN II: THIẾT KẾ MẠCH ĐIỀU KHIỂN VÀ GIÁM SÁT NHÀ CAO TẦNG DÙNG VI XỬ LÝ 89C51 A. Thiết kế phần cứng I. Tổng quan về đề tài 1. Sơ lược về đề tài 2. Các khối chức năng II. Thiết kế phần cứng 1. Cảm biến quang 2. Mạch mô phỏng cảm biến quang phát hiện người 3. Mạch động lực đóng cắt thiết bị 4. Mạch nguồn cung cấp 5. Mạch hiển thị nhiệt độ bằng LED 7 đoạn 6. Công tắc đóng ngắt thiết bị theo yêu cầu 7. Mạch chuông 8. Mạch giao tiếp máy tính qua mạng RS-485 9. Mạch cảm biến đo nhiệt độ dùng IC LM335 10. Thiết kế mạch 89C51 trên sơ đồ các chân và chức năng của chúng 10.1. Giới thiệu vi xử lý 89C51 10.2. Tổ chức và sử dụng các chân ra của 89C51 B. Lưu đồ giải thuật C. Chương trình vi xử ly D. Giới thiệu các IC dùng trong đề tài PHẦN III: GIAO TÍÊP MÁY TÍNH VỚI VI XỬ LÝ Chương I: Sơ lược về mạng máy tính và giao thức truyền A. Tổng quan về mạng máy tính I. Các yếu tố của mạng máy tính II. Phân loại mạng máy tính III. Đường truyền vá các thiết bị dùng trong mạng máy tính8 B. Giao tiếp nối tiếp I. Đặc điểm các chuẩn RS-232, RS-422, RS-485 1. RS-232 2. RS-422 3. RS-485 II. Các phương thức truyền thông III. Truyền thông tuần tư Chương II: Giao tiếp máy tính với vi xử ly A. Điều khiển thu phát dữ liệu thông qua cổng Com I. Cổng RS-232 II. Chip thu phát bất đồng bộ-Vi mạch UART (Universal Asynchronous Receiver) 8250A/16450 III. Truyền nhận dữ liệu qua cổng nối tiếp Chương III: chương trình truyền thông bằng ngôn ngữ visual basic 6.0 I. Tổng quan về Visual Basic II. Truyền thông nối tiếp dùng visual basic III. Phần giao diện

doc110 trang | Chia sẻ: banmai | Lượt xem: 2328 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Điều khiển và giám sát nhà cao tầng dùng vi xử lý 89c51, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
truyeàn döõ lieäu, chuû yeáu ñöôïc thöïc hieän thoâng qua maïng ñieän thoaïi, phaûi tuaân theo nhöõng nguyeân taéc nhaát ñònh, vaø thöôøng laø duøng caùc chuaån truyeàn ñöôïc quoác teá hoùa. Coù nhieàu chuaån truyeàn thoâng khaùc nhau, trong ñoù coù caùc chuaån thuoäc hoï RS- ( ngaøy nay ñaõ ñoåi thaønh hoï EIA- ) cuûa EIA ( Electronics Industries Association ) ñöôïc söû duïng raát phoå bieán laø: RS-232C, RS-422A, RS-423, RS-485. Chuùng ta seõ laàn löôït khaûo saùt töøng chuaån treân. I. Ñaëc ñieåm cuûa caùc chuaån truyeàn thoâng RS-232C, RS-422A, RS-485: Thoâng soá RS-232C RS-422 RS-423 RS-485 Chieàu daøi caùp Length (max) 15m (50 ft) 1.2km (4000ft ) 1.2km (4000ft) 1.2km (4000ft) Baud rate (Toác ñoä Baud) 20Kbs/15m 10M bs/12m 1Mbs/120m 100Kbs/1.2km 100Kbs/9m 10Kbs/90m 1Kbs/1.2km 10Mbs/12m 1Mbs/120m 100Kbs/1.2km Mode Unbalanced Balanced Differential Balanced Differential Balanced Differential Driver No. 1 1 1 32 Receiver 1 10 10 32 Logic 0 +3V->+25V +2V->+5V +3.6V->+6V +1.5V->+5V Logic 1 -3V ->-25V -2V-> -5V -3.6V ->-6V -1.5V ->-5V Community 2V 1.8V 3.4V 1.3V Cable/signal 1 2 2 2 Methode Simplex Simplex Simplex Simplex Phöông thöùc Half-duplex Full-duplex Half-duplex Full-duplex Half-duplex Full-duplex Half-duplex Full-duplex Short circuit current 500mA 150 mA 150mA 150mA 1. Chuaån RS-232C : Laø chuaån cuûa EIA nhaèm ñònh nghóa giao dieän vaät lyù giöõa DTE vaø DCE (ví duï nhö giöõa moät maùy tính vaø moät modem ). Chuaån naøy söû duïng ñaàu noái 25 chaân, tuy nhieân chæ coù moät soá ít chaân laø thöïc söï caàn thieát cho vieäc lieân keát. Veà phöông dieän ñieän , chuaån naøy quy ñònh caùc möùc logic 0 vaø 1 töông öùng vôùi caùc ñieän theá nhoû hôn -3V vaø lôùn hôn +3V. Toác ñoä ñöôøng truyeàn khoâng ñöôïc vöôït quaù 20Kbs vaø khoaûng caùch nhoû hôn 15m. Chuaån RS-232C coù theå chaáp nhaän phöông thöùc truyeàn song coâng ( full-duplex ). Moät trong nhöõng yeâu caàu quan troïng cuûa RS-232C laø thôøi gian chuyeån töø möùc logic naøy sang möùc logic khaùc khoâng vöôït quaù 4% thôøi gian toàn taïi cuûa moät bit. Giaû söû vôùi toác ñoä truyeàn 19200 baud thì thôøi gian chuyeån möùc logic phaûi nhoû hôn 0.04/19200 = 2.1ms. Ñieàu naøy laøm giôùi haïn chieàu daøi ñöôøng truyeàn. Vôùi toác ñoä 19200baud ta coù theå truyeàn xa nhaát laø 50ft (15.24m ). Moät trong nhöõng vaán ñeà quan troïng caàn chuù yù laø khi söû duïng RS-232C laø maïch thu phaùt khoâng caân baèng ( ñôn cöïc ), töùc laø tín hieäu vaøo vaø ra ñöôïc so vôùi ñaát. 2. Chuaån RS-422A: Moät caûi tieán quan troïng cuûa chuaån RS-232C laø chuaån RS-422A. Chuaån naøy söû duïng vieäc truyeàn döõ lieäu sai leäch differential data ) treân nhöõng ñöôøng truyeàn caân baèng. Moät döõ lieäu sai leäch caàn hai daây, moät cho döõ lieäu khoâng ñaûo (non-inverted) vaø moät ñöôøng cho döõ lieäu ñaûo (inverted). Döõ lieäu ñöôïc truyeàn treân ñöôøng daây caân baèng, thöôøng laø caëp daây xoaén vôùi moät trôû ôû ñaàu cuoái. Moät IC laùi (driver) seõ bieán ñoåi caùc möùc logic thoâng thöôøng thaønh moät caëp tín hieäu sai leäch ñeå truyeàn. Beân nhaän seõ coù moät maïch chuyeån ñoåi tín hieäu sai leäch thaønh caùc möùc logic töông öùng. Caùc IC laùi RS-422A haàu heát hoaït ñoäng vôùi nguoàn +5V nhö caùc chip logic khaùc. Vôùi chuaån môùi naøy, toác ñoä cuõng nhö khoaûng caùch truyeàn ñöôïc caûi thieän raát nhieàu. 3. Chuaån RS-485 : Giao tieáp EIA RS-485 laø moät caûi tieán cuûa chuaån RS-422A. Ñaëc tính ñieän cuûa noù gioáng nhö chuaån RS-422A. RS-485 laø chuaån truyeàn vi sai, söû duïng hai daây caân baèng. Vôùi RS-485 toác ñoä truyeàn coù theå ñaït ñeán 10Mbs vaø chieàu daøi caùp coù theå leân ñeán 1.2km. Ñieän aùp vi sai ngoõ ra töø +1.5V-> +5V neáu laø logic möùc 0 vaø möùc logic 1 seõ laø töø -1.5V-> -5V. Moät ñaëc ñieåm quan troïng cuûa RS-485 laø coù theå cung caáp ñeán 32 drivers vaø receivers treân cuøng moät ñöôøng truyeàn. Ñieàu naøy cho pheùp taïo thaønh moät maïng cuïc boä. Ñeå coù khaû naêng nhö vaäy, ngoõ ra driver RS-485 phaûi laø ngoõ ra 3 traïng thaùi. Vaø do ñoù moät slave seõ ôû traïng thaùi toång trôû cao khi noù khoâng ñöôïc choïn ñeå giao tieáp cuøng vôùi master. Chæ coù moät traïm ñöôïc choïn laøm master, caùc traïm coøn laïi ñeàu laø slave. Master ñöôïc quyeàn truyeàn baát cöù luùc naøo, noù seõ chæ ñònh moät slave baát kì giao tieáp vôùi noù. Slave chæ coù theå truyeàn sau khi nhaän ñöôïc leänh cuûa master. Moïi slave coù moät ñòa chæ rieâng treân ñöôøng truyeàn vaø seõ khoâng ñöôïc pheùp truyeàn neáu khoâng coù yeâu caàu töø master. II. Caùc phöông thöùc truyeàn thoâng: Coù 3 phöông phaùp truyeàn ñöôïc duøng trong muïc ñích truyeàn thoâng tin: Ñôn coâng, baùn song coâng, vaø song coâng. Ta seõ laàn löôït khaûo saùt caùc phöông phaùp truyeàn treân. Ñôn coâng: Ñöôøng truyeàn ñôn coâng coù khaû naêng truyeàn döõ lieäu chæ theo moät höôùng. Nguyeân nhaân khoâng phaûi do tính chaát cuûa ñöôøng daây ñôn giaûn chæ vì moät ñaàu cuoái chæ coù moät maùy phaùt vaø ñaàu cuoái kia cuõng chæ coù moät maùy thu. Caáu hình naøy ít ñöôïc söû duïng trong caùc maùy tính vì khoâng coù caùch naøo ñeå maùy thu phaùt tín hieäu nhaän bieát tôùi maùy phaùt cho bieát thoâng ñieäp ñaõ nhaän ñuùng. Phaùt thanh vaø truyeàn hình laø moät trong nhöõng thí duï veà ñôn coâng. Baùn song coâng(Half-duplex Communication): Ñöôøng truyeàn baùn song coâng coù theå phaùt vaø nhaän döõ lieäu theo caû hai höôùng khoâng ñoàng thôøi. Trong suoát moät cuoäc truyeàn, moät modem laø maùy phaùt vaø modem coøn laïi seõ laø maùy thu. Ví duï nhö moät thieát bò A laø maùy phaùt gôûi döõ lieäu ñeán thieát bò B laø maùy thu, sau ñoù A vaø B ñoåi vai troø cho nhau, B laø maùy phaùt gôûi tín hieäu baùo döõ lieäu nhaän ñöôïc coù loãi hay khoâng ñeán maùy thu A. Neáu khoâng coù loãi thì A vaø B seõ laïi ñoåi vai troø cho nhau vaø A tieáp tuïc gôûi döõ lieäu ñeán maùy thu B. Neáu maùy thu B baùo döõ lieäu coù loãi thì maùy phaùt A seõ gôûi laïi döõ lieäu cuõ cho ñeán khi B baùo laø döõ lieäu khoâng coù loãi. Nhöôïc ñieåm cuûa phöông phaùp naøy laø thôøi gian caàn ñeå chuyeån ñöôøng truyeàn baùn song coâng töø höôùng naøy sang höôùng khaùc coù theå daøi gaáp nhieàu laàn thôøi gian truyeàn moät kí töï. Söï chuyeån ñoäng cuûa xe treân ñöôøng ray laø moät thí duï veà phöông phaùp naøy. Song coâng ( Full-duplex Communication): Ngöôïc laïi so vôùi truyeàn baùn song coâng, ñöôøng truyeàn song coâng coù khaû naêng phaùt vaø nhaän döõ lieäu ñoàng thôøi theo caû hai höôùng. Moät caùch khaùi quaùt, ñöôøng truyeàn song coâng töông ñöông vôùi 2 ñöôøng truyeàn ñôn coâng, moät ñöôøng cho moãi höôùng. Vì hai ñöôøng truyeàn coù theå tieán haønh song song, moät ñöôøng cho moãi höôùng, neân truyeàn song coâng coù theå phaùt nhieàu thoâng tin hôn truyeàn baùn song coâng vôùi cuøng toác ñoä truyeàn döõ lieäu. Truyeàn song coâng khoâng maát thôøi gian ñeå thay ñoåi höôùng truyeàn. III. Truyeàn thoâng tuaàn töï: Haàu heát caùc maùy tính löu tröõ döõ lieäu vaø thao taùc döõ lieäu theo caùch song song. Nghóa laø khi gôûi moät byte töø boä nhaän naøy tôùi boä nhaän khaùc cuûa maùy tính, noù khoâng truyeàn töøng bit moät maø moät luùc moät byte treân nhöõng caùp sôïi song song nhau. Soá caùc bit truyeàn ñi cuøng moät luùc thay ñoåi tuøy thuoäc vaøo töøng maùy tính nhöng thoâng thöôøng laø 8 hoaëc boäi cuûa 8. Tuy nhieân vieäc truyeàn döõ lieäu töø maùy tính naøy ñeán maùy tính hay moät thieát bò khaùc thì xaûy ra theo kieåu tuaàn töï, nghóa laø döõ lieäu ñöôïc gôûi ñi töøng bit moät. Moät boä giao tieáp tuaàn töï seõ ñaûm nhaän nhieäm vuï chuyeån ñoåi döõ lieäu töø song song sang noái tieáp tröôùc khi chuùng gôûi ñi hoaëc ñoåi töø noái tieáp sang song song khi chuùng nhaän veà. Coù hai hình thöùc truyeàn thoâng tuaàn töï: truyeàn thoâng ñoàng boä vaø khoâng ñoàng boä. Truyeàn thoâng baát ñoàng boä ( Asynchronous communication): Khoaûng thôøi gian giöõa hai kí töï truyeàn ñi khoâng coá ñònh, maëc duø khoaûng thôøi gian giöõa hai bit lieân tieáp trong moät kí töï laø khoâng thay ñoåi nhöng khoaûng thôøi gian giöõa hai kí töï lieân tieáp khoâng phaûi laø haèng soá. Söï bieán thieân toác ñoä naøy laøm naûy sinh vaán ñeà laø phaûi laøm sao maùy thu phaân bieät ñöôïc giöõa bit 0 vaø khoâng coù döõ lieäu. Ñeå giaûi quyeát vaán ñeà treân , ngöôøi ta phaùt tröïc tieáp moät bit start ngay tröôùc moät kí töï vaø moät hoaëc hai stop bit ngay sau moãi kí töï ñöôïc truyeàn ñi. Ñeå kieåm tra loãi ñöôøng truyeàn, ngöôøi ta söû duïng bit chaün leû( parity bit), töùc kieåm tra toång soá bit trong 1 byte döõ lieäu ñöôïc truyeàn. Phöông thöùc naøy thöôøng ñöôïc söû duïng trong caùc maùy tính PC vì tính ñôn giaûn cuûa noù. Haïn cheá cuûa phöông phaùp naøy laø toác ñoä truyeàn thaáp do phaûi truyeàn theâm moät soá bit start, bit stop vaø bit parity. Truyeàn thoâng ñoàng boä ( Synchronous Communications): Phöông thöùc truyeàn naøy khoâng duøng caùc bit start, stop ñeå ñoùng khung moãi kí töï maø cheøn caùc kí töï ñaëc bieät nhö SYN ( Synchronization), EOT (End Of Transmission) hoaëc moät côø giöõa caùc döõ lieäu cuûa ngöôøi söû duïng ñeå baùo hieäu cho beân nhaän bieát raèng coù döõ lieäu ñang ñeán hay ñaõ ñeán. Truyeàn ñoàng boä thöôøng ñöôïc tieán haønh ôû toác ñoä döôùi 4800Bps,9600Bps hoaëc thaäm chí coøn cao hôn. Trong phöông phaùp naøy, moät khi ñaõ ñoàng boä, caùc modem vaãn tieáp tuïc gôûi caùc kí töï ñeå duy trì ñoàng boä, ngay caû luùc khoâng phaùt döõ lieäu. Moät kí töï “idle” ñöôïc gôûi ñi khi khoâng coù döõ lieäu phaùt. Trong phöông phaùp truyeàn ñoàng boä khoâng gioáng nhö phöông phaùp truyeàn baát ñoàng boä, khoaûng thôøi gian giöõa hai kí töï luoân baèng nhau. Truyeàn thoâng ñoàng boä ñoøi hoûi caùc xung clock trong maùy phaùt vaø thu phaûi duy trì ñoàng boä nhöõng khoaûng thôøi gian daøi. Thôøi gian truyeàn coù theå tieáp tuïc laâu maø khoâng coù söï taùi ñoàng boä cuûa maùy thu vôùi pha cuûa maùy phaùt tuøy thuoäc vaøo söï oån ñònh cuûa xung clock. Chöông II GIAO TIEÁP MAÙY TÍNH VÔÙI VI XÖÛ LYÙ Ñieàu khieån thu phaùt döõ lieäu qua coång Com: Maùy tính vaø ngoaïi vi muoán lieân keát ñöôïc vôùi nhau caàn phaûi ñöôïc keát noái vôùi nhau theo moät chuaån nhaát ñònh. Coù nhieàu kieåu keát noái ngoaïi vi vôùi maùy tính, trong ñoù caùc caùch thöôøng duøng laø gaén vaøo slot treân Mainboard, qua coång maùy in vaø thoâng qua coång noái tieáp( coång Com). Moãi kieåu ñeàu coù nhieàu öu vaø khuyeát ñieåm khaùc nhau, tuøy theo yeâu caàu maø ta coù theå choïn nhöõng phöông caùch khaùc nhau. Coång noái tieáp ñöôïc söû duïng cho vieäc truyeàn tín hieäu theo daïng noái tieáp. Coång noái tieáp truyeàn möùc logic 1 ôû taàm ñieän aùp töø –3V ñeán –25V vaø möùc logic 0 laø töø +3V ñeán +25V. Trong khi ñoù, vôùi coång song song, möùc logic 0 laø 0V logic 1 laø +5V. Vì vaäy coång noái tieáp coù theå coù möùc cheânh leäch ñieän aùp toái ña laø 50V so vôùi 5V cuûa coång song song vaø do ñoù vaán ñeà ñieän aùp rôi treân ñöôøng daây ôû ñöôøng truyeàn noái tieáp khoâng nghieâm troïng hôn so vôùi ñöôøng truyeàn song song. Do ñoù truyeàn tín hieäu theo kieåu noái tieáp khoâng bò aûnh höôûng nhieãu nhieàu nhö kieåu coång song song. Giao tieáp noái tieáp chæ söû duïng 3 ñöôøng daây cho TXD, RXD vaø GND vaø do ñoù yeâu caàu cho thieát bò giao tieáp vôùi noù coù ít chaân hôn so vôùi 19 hay 25 daây trong vieäc giao tieáp song song vaø yeâu caàu ít nhaát laø 9 chaân cho giao tieáp noái tieáp,ñieàu naøy laøm phöùc taïp theâm coâng ngheä cheá taïo vaø giaù thaønh saûn xuaát ñoái vôùi caùc thieát bò giao tieáp song song. Giôùi thieäu coång noái tieáp RS-232C: Coång giao RS-232C laø giao dieän phoå bieán roäng raõi nhaát. Gioáng nhö coång maùy in, coång noái tieáp RS-232C ñöôïc söû duïng möùc caùch thuaän tieän cho muïc ñích ño löôøng vaø ñieàu khieån. Vieäc truyeàn döõ lieäu qua coång RS-232C ñöôïc tieán haønh theo caùch noái tieáp, nghóa laø caùc bit döõ lieäu ñöôïc gôûi ñi noái tieáp nhau treân cuøng möùc ñöôøng truyeàn daãn. Coång noái tieáp RS-232C khoâng phaûi laø moät heä thoáng bus, noù cho pheùp deã daøng taïo ra lieân keát döôùi hình thöùc ñieåm-ñieåm giöõa hai maùy tính caàn trao ñoåi thoâng tin vôùi nhau. Moät thaønh vieân thöù 3 khoâng theå tham gia vaøo cuoäc trao ñoåi naøy. Möùc logic 0 seõ naèm giöõa +3V-> +25v. Möùc logic 1 töø -3V -> -25V. Khoaûng töø –3V -> +3V laø traïng thaùi maëc ñònh. Ñieän aùp hôû maïch phaûi nhoû hôn 25V. Doøng ngaén maïch khoâng vöôït quaù 500mA. Coù hai loaïi Jack caém noái tieáp RS-232C laø loaïi 9 chaân vaø 25 chaân. Chuùng khaùc vôùi coång maùy in ôû choã coång maùy in laø loaïi oå caém coøn ñaây laø Jack nhieàu chaân. Caùc Jack caém RS-232C coù toång coäng 8 ñöôøng daãn chöa keå ñöôøng noái ñaát. Vieäc truyeàn döõ lieäu xaûy ra ôû treân hai ñöôøng daây TXD vaø RXD. Maùy tính nhaän döõ lieäu töø caùc thieát bò khaùc thoâng qua ñöôøng TXD vaø noù duøng ñöôøng RXD ñeå truyeàn döõ lieäu ñeán caùc thieát bò kia. 9 chaân 25 chaân Chöùc naêng 1 8 DCD- data Carrier Detect (In) 2 3 RXD- Receive data (In) 3 2 TXD-Transmit Data (Out) 4 20 DTR – Data Terminal Ready(Out) 5 7 GND-Ground(Mass) 6 6 DSR-Data Set Ready (In) 7 4 RTS- Request to Send(Out) 8 5 CTS- Clear To Send (In) 9 22 RI- Ring Indicator(In) Kyù hieäu Teân Chöùc naêng TD Transmit data Ñöôøng truyeàn döõ lieäu RD Receive Data Ñöôøng nhaân döõ lieäu CTS Clear To Send Baùo modem ñaõ saün saøng cho vieäc trao ñoåi döõ lieäu DCD Data Carrier detect DCD seõ tích cöïc khi modem nhaän ñöôïc döõ lieäu. DSR Data Set Ready Baùo cho UART laø modem ñaõ saün saøng cho vieäc thieát laäp ñöôøng truyeàn. TDR Data Terminal Ready Baùo cho modem bieát laø UART ñaõ saün saøng cho vieäc keát noái. RTS Request To Send Thoâng baùo cho modem bieát laø UART ñaõ saün saøng cho vieäc truyeàn nhaän döõ lieäu. RI Ring Indicator Leân möùc tích cöïc khi modem nhaän ñöôïc tín hieäu. Baûng chöùc naêng caùc chaân trong RS-232C . Name Address IRQ Name Address IRQ COM1 3F8 4 COM 3 3E8 4 COM 2 2F8 3 COM 4 2E8 3 Baûng ñòa chæ caùc coång. Vieäc truyeàn döõ lieäu giöõa maùy tính vaø ngoaïi vi ñöôïc ñieàu khieån bôûi caùc boä ñieàu khieån thu phaùt ñoàng boä hay baát ñoàng boä. II. Chip thu phaùt baát ñoàng boä-Vi maïch UART (Universal Asynchronous Receiver) 8250A/16450: Toång quan: Vi maïch 8250A cuûa Intel laø moät UART ñöôïc duøng raát roäng raõi.UART 8250A coù caùc chöùc naêng sau: _ Bieán ñoåi döõ lieäu song song töø CPU thaønh daïng noái tieáp ñeå truyeàn ñi ñoàng thôøi thu doøng döõ lieäu noái tieáp, ñoåi chuùng thaønh döõ lieäu daïng song song vaø gôûi chuùng ñeán CPU. _ Theâm caùc bit start, stop vaø parity vaøo töøng kí töï tröôùc khi phaùt ñi vaø taùch caùc bit naøy ra khoûi kí töï nhaän ñöôïc. _ Baûo ñaûm caùc bit döõ lieäu ñöôïc truyeàn ñi vôùi toác ñoä ñöôïc laäp trình tröôùc, kieåm tra ñeå phaùt hieän loãi. _ Set tín hieäu baét tay phaàn cöùng vaø cho bieát traïng thaùi cuûa tín hieäu. Caùc thanh ghi UART: _ Thanh ghi ñieàu khieån ñöôøng truyeàn (Line Control Register – LCR): Duøng ñaët caùc thoâng soá truyeàn. _ Thanh ghi ñieàu khieån Modem(Modem Control Register- MCR): Ñieàu khieån tín hieäu baét tay töø UART. _ Thanh ghi cho pheùp ngaét( Interrput Enable Register-IER): Thanh ghi naøy cho pheùp/caám caùc nguyeân nhaân gaây ngaét khaùc nhau töông öùng vôùi caùc bit trong thanh ghi. Caùc bit cuûa thanh ghi naøy ôû möùc 1 laø cho pheùp, möùc 0 laø caám ngaét. _ Thanh ghi traïng thaùi( Status Register –SR):Thoâng baùo cho CPU bieát traïng thaùi hoaït ñoäng cuûa UART: _ Thanh ghi traïng thaùi ñöôøng truyeàn (Line Status Register-LSR): Chöùa thoâng tin veà truy xuaát döõ lieäu. _ Thanh ghi traïng thaùi modem( Modem Status Register-MSR): Chöùa thoâng tin lieân quan veà traïng thaùi cuûa nhöõng ñöôøng truyeàn baét tay. _ Thanh ghi ñònh danh ngaét( Interrupt Identification Register-IIR): Thanh ghi nhaän daïng nguoàn ngaét laø moät thanh ghi chæ ñoïc ( read only). Traïng thaùi caùc bit trong thanh ghi naøy seõ thay ñoåi khi coù söï thay ñoåi traïng thaùi cuûa caùc thanh ghi khaùc trong UART. CPU seõ ñoïc bit IR0 ñeå xem coù yeâu caàu ngaét hay khoâng vaø kieåm tra nguoàn ngaét töø caùc bit IR1-IR0. Caùc vi maïch UARTS: 8250: Laø vi maïch UART ñaàu tieân. 8250A laø phieân baûn caûi tieán hôn cuûa 8250 vôùi toác ñoä ñöôïc caûi tieán nhieàu. 8250A: Toác ñoä nhanh hôn so vôùi 8250, coù cuøng chöùc naêng nhö 16450. 16450: Caûi tieán cuûa 8250, hoaït ñoäng toát ôû toác ñoä 38.4bps, hieän naøy vaãn coøn ñöôïc söû duïng roäng raõi. 16550: Laø theá heä ñaàu tieân cuûa hoï UART coù buffer. Coù hai loaïi buffer. Tuy nhieân 16550 khoâng ñöôïc söû duïng nhieàu vaø bò thay theá bôûi 16550A. 16550A: Laø vi maïch UART thoâng duïng nhaát söû duïng cho muïc ñích giao tieáp vôùi toác ñoä cao nhö 14.4k vaø 28.8k modem . 16650/16750: Thuoäc UART theá heä môùi chöùa 32/64 byte FIFO, hoã trôï Power management. III .Truyeàn nhaän döõ lieäu qua coång noái tieáp: Vieäc truyeàn nhaän döõ lieäu qua coång noái tieáp ñöôïc thöïc hieän bôûi UART. Nguyeân taéc chip UART hoaït ñoäng cho vieäc truyeàn vaø nhaän moät kí töï nhö sau: Ñeå truyeàn moät kí töï, ñaàu tieân kí töï ñoù seõ ñöôïc ñöa vaøo thanh ghi ñôïi truyeàn ( Transmit Holding Register), sau ñoù ñöôïc ñöa vaøo thanh ghi dòch cuûa boä phaùt ( Transmit Shift Register). Sau khi kí töï tröôùc ñaõ ñöôïc truyeàn xong, töøng bit cuûa kí töï ñöôïc truyeàn seõ ñöôïc dòch vaøo keânh döõ lieäu. Khi nhaän moät kí töï, ñaàu tieân caùc bit cuûa noù laàn löôït ñöôïc naïp vaøo thanh ghi döõ lieäu cuûa boä thu( Receive Shift Register ), sau ñoù chuùng ñöôïc ñöa vaøo thanh ghi döõ lieäu cuûa boä thu ( Receive Data Register ) sau khi ñaõ loaïi boû caùc bit start, stop vaø parity. X Thu phaùt döõ lieäu : Coù hai phöông phaùp ñeå thu phaùt döõ lieäu qua UART. Phöông phaùp thöù nhaát laø phöông phaùp hoûi voøng ñeå chôø döõ lieäu ñöôïc phaùt xong hoaëc nhaän xong. Phöông phaùp thöù hai laø phöông phaùp taïo ra moät trình ñieàu khieån ngaét. Phöông phaùp hoûi voøng chaäm hôn nhieàu so vôùi phöông phaùp kia. Toác ñoä cao nhaát coù theå ñaït cuûa phöông phaùp hoûi voøng laø 34.8Kbps trong khi phöông phaùp taïo ngaét coù theå ñaït ñöôïc toác ñoä 115,2Kbps. Ôû ñaây ta choïn phöông phaùp hoûi voøng ñeå ñieàu khieån vieäc thu phaùt döõ lieäu. X Ñeå phaùt moät kí töï: Vôùi phöông phaùp hoûi voøng UART, khi gôûi moät kí töï ta phaûi kieåm tra xem thanh ghi ñôïi truyeàn coù roãng khoâng baèng caùch xem bit 6 cuûa LCR coù baèng 1 hay khoâng . X Ñeå thu moät kí töï: ñeå bieát khi naøo kí töï thu vaøo hay chöa ta kieåm tra bit 0 cuûa thanh ghi LCR. Neáu noù baèng 1 thì ñaõ coù 1 kí töï ñöôïc nhaän vaøo. Chöông III : CHÖÔNG TRÌNH TRUYEÀN THOÂNG BAÈNG NGOÂN NGÖÕ VISUAL BASIC 6.0 I. Toång quan veà Visual Basic : Visual Basic laø ngoân ngöõ laäp trình treân moâi tröôøng Windows ra ñôøi sôùm nhaát, vaø ñaõ thöïc söï taïo neân moät cuoäc caùch maïng trong coâng ngheä phaàn meàm .cho neân khi phaùt haønh Visual Basic 1.0 vaøo naêm 1991, oâng Bill Gates, chuû tòch haõng Microsoft ñaõ goïi Visual Basic laø moät saûn phaåm “ñaùng neå”, coøn caùc nhaân vaät noåi tieáng khaùc trong giôùi coâng ngheä phaàn meàm cuõng khoâng tieác lôøi khen ngôïi coâng cuï laäp trình tröïc quan naøy. Neáu ñaõ töøng caûm thaáy thöïc söï thích thuù khi chuyeån töø vieäc söû duïng heä ñieàu haønh MS-DOS sang Windows thì ta cuõng deã hieåu nhöõng lôøi khen ngôïi naøy. Tröôùc ñaây, khi laøm vieäc trong moâi tröôøng DOS, khoâng ít ngöôøi ñaõ caûm thaáy thöïc söï khoù khaên vôùi vieäc phaûi nhôù nhöõng caâu leänh ñeå nhaäp vaøo töø daáu nhaéc DOS. Windows ñaõ giaûi quyeát khoù khaên naøy cho ngöôøi duøng baèng caùch söû duïng moät giao dieän ñoà hoïa vôùi nhöõng nuùt leänh, hoäp thoaïi chuaån, caùc menu ñeå choïn löïa…Tuy nhieân tröôùc khi Visual Basic ra ñôøi thì ñeå taïo ñöôïc moät öùng duïng trong Windows, caùc laäp trình vieân söû duïng C phaûi toán raát nhieàu coâng söùc daønh cho vieäc taïo giao dieän cho chöông trình. Chæ coù vieäc taïo moät nuùt leänh khoâng thoâi ñaõ caàn phaûi duøng ñeán haøng traêm doøng ma. Vôùi VisualBasic, coâng vieäc taïo giao dieän ñaõ trôû neân deã daøng hôn bao giôø heát. Chæ vôùi moät vaøi thao taùc click – drag ñôn giaûn, ta ñaõ coù theå boå sung vaøo caùc cöûa soå coøn troáng caùc leänh ñôn, caùc hoäp vaên baûn, caùc nuùt leänh, caùc nuùt tuøy choïn, caùc nhaõn, caùc hoäp kieåm…Sau khi taïo giao dieän thì coâng vieäc cuûa ta chæ laø vieát maõ cho caùc ñoái töôïng naøy (goïi laø caùc ñieàu khieån : Control). Nhö vaäy, coù theå noùi, vôùi Visual Basic coâng vieäc taïo giao dieän ñoà hoïa cho öùng duïng ñaõ ñöôïc Visual Basic ñaûm nhaän. Visual Basic cho pheùp öùng duïng taïo ra lieân keát vôùi caùc öùng duïng Windows khaùc raát deã daøng, cho pheùp deã daøng taïo ra caùc öùng duïng thieân veà quaûn lyù döõ lieäu vaø maïng. Visual Basic cho pheùp ngöôøi söû duïng giao tieáp vôùi thö vieän lieân keát ñoäng DLL. Ñieàu naøy giuùp giaûm kích côõ chöông trình, taäp tin thöïc thi vaø ñaëc bieät laø laøm cho chöông trình coù khaû naêng ñöôïc naâng caáp deã daøng hôn. Visual Basic coøn cung caáp moät soá phöông phaùp baãy loãi trong öùng duïng. Ñaây laø moät coâng cuï raát maïnh cuûa Visual Basic. II. Truyeàn thoâng noái tieáp duøng visual basic: Do söï phaùt trieån ngaøy caøng taêng cuûa caùc öùng duïng truyeàn thoâng qua coång noái tieáp ,töø phieân baûn 4.0 cuûa Visual Basic ,ñieàu khieån truyeàn thoâng ñaõ ñöôïc hoaøn chænh ñeå söû duïng cho vieäc laäp trình gheùp noái maùy tính qua coång noái tieáp .Trong phaàn naøy ta seõ tìm hieåu veà ñieàu khieån naøy . 1. Ñieàu khieån truyeàn thoâng: Bình thöôøng khi chaïy phaàn meàm Visual Basic ta chæ thaáy coù moät soá thaønh phaàn quen thuoäc treân hoäp coâng cuï (toolbox) .Nhöng Visual Basic cho pheùp nhieàu thaønh phaàn coù theå ñöôïc boå sung theâm vaøo .Ñieàu khieån truyeàn thoâng Mscomm cuûa Visual Basic laø moät trong soá caùc ñoái töôïng coù theå ñöôïc boå sung ñeå tham gia vaøo moät soá öùng duïng caàn vieäc chuyeån nhaän döõ lieäu qua coång noái tieáp . Trong Visual Basic 5.0 vaø 6.0 ta coù theå boå sung thaønh phaàn Mscomm ñeà caäp ôû treân nhö sau : Choïn Project => Components (Ctrl – T) ,cöûa soå sau seõ xuaát hieän. Ñieàu khieån truyeàn thoâng cung caáp hai khaû naêng ñeå trao ñoåi thoâng tin : Ñieàu khieån söï kieän : Truyeàn thoâng ñieàu khieån söï kieän laø phöông phaùp toát nhaát ñöôïc söû duïng trong quaù trình ñieàu khieån vieäc trao ñoåi thoâng tin noái tieáp khi noù giaûi phoùng maùy tính ñeå laøm caùc coâng vieäc khaùc .Trong nhieàu tình huoáng, ta caàn ñöôïc thoâng baùo veà söï thay ñoåi. Thí duï nhö ta caàn bieát khi coù kyù töï göûi ñeán hoaëc söï thay ñoåi xaûy ra treân ñöôøng DCD (Data Carrier Detect ) hoaëc ñöôøng RTS (Request To Send). Ñeå laøm ñieàu ñoù ta seõ söû duïng söï kieän truyeàn thoâng OnComm ñeå baãy vaø ñieàu khieån caùc söï kieän. Ñieàu khieån truyeàn thoâng coøn phaùt hieän vaø ñieàu khieån caùc loãi truyeàn thoâng. Hoûi Voøng (Polling): Ta cuõng coù theå hoûi voøng caùc söï kieän vaø loãi baèng caùch kieåm tra giaù trò cuûa ñaëc tính ComEvent sau moãi chu kyø cuûa chöông trình ñeå xaùc ñònh xem lieäu moät söï kieän hoaëc moät loãi ñaõ xuaát hieän. Chaúng haïn, chöông trình coù theå taïo voøng laëp ñeå chôø moät kyù töï caàn ñöôïc nhaän. Cöù moãi laàn nhö vaäy, kyù töï ñöôïc ñoïc töø boä ñeäm nhaän. Thoâng thöôøng phöông phaùp naøy ñöôïc söû duïng khi chöông trình coù thôøi gian ñeå tieán haønh hoûi voøng boä nhaän thoâng tin, hay noùi caùch khaùc laø trong caùc öùng duïng khoâng lôùn. Visual Basic söû duïng caùc boä ñieàu khieån cöûa soå chuaån cho caùc coång truyeàn tin noái tieáp (nhö serialui.dll vaø serial.vxd ). Ñieàu khieån truyeàn thoâng ñöôïc boå sung cho öùng duïng cuûa moät coång noái tieáp, noùi khaùc ñi moãi ñieàu khieån truyeàn thoâng maø ta duøng chæ coù theå ñieàu khieån moät coång noái tieáp. Neáu caàn truy nhaäp nhieàu coång trong öùng duïng thì ta phaûi duøng nhieàu ñieàu khieån truyeàn thoâng. Ñòa chæ coång vaø ñòa chæ ngaét coù theå thay ñoåi nhôø Control Panel trong Windows .Caùc tham soá (nhö toác ñoä truyeàn theo bit ,chaün leû ,…) ñeàu coù theå ñöôïc thay ñoåi baèng caùch löïa choïn: Control Panel => System => Device Manager => Port (COM vaø LPT) =>Port Settings. Vieäc thieát laäp caùc coång truyeàn thoâng (IRQ vaø ñòa chæ coång) coù theå thay ñoåi baèng caùch löïa choïn Control Panel => System => Device Manager => Port (COM vaø LPT) => Resources. 2 .Thuoäc tính (property): Thaønh phaàn Comm ñöôïc boå sung vaøo bieåu maãu ( Form ) baát cöù luùc naøo caàn ñeán vieäc truyeàn thoâng noái tieáp. Theo maëc ñònh, coång thöù nhaát taïo ra ñoái töôïng coù teân MSComm1, ñoái töôïng öùng vôùi coång thöù hai ñöôïc goïi laø MSComm2,…Coù theå nhìn thaáy caùc ñaëc tính chính cuûa ñoái töôïng laø: CommPort, DTREnable, EOFEnable, HandShaking ,InBufferSize, Index, InputLen, Inputmode, Left, Name, NullDiscard, OutBufferSize, ParityReplace, Rthreshold, RTSEnable, Settings, SThreshold, Tag, Top. Ta thaáy ñieàu khieån truyeàn thoâng coù nhieàu thuoäc tính, nhöng ñeå coù theå laøm vieäc vôùi ñieàu khieån truyeàn thoâng, tröôùc heát ta caàn hieåu kyõ caùc thuoäc tính chính ñöôïc lieät keâ trong baûng sau . Caùc thuoäc tính Söï moâ taû CommPort Ñaët vaø traû laïi soá coång truyeàn thoâng Input(nhaäp vaøo) Traû laïi vaø loaïi boû caùc kyù töï khoûi boä ñeäm nhaän Output(xuaát ra) Vieát moät xaâu kyù töï tôùi vaøo boä ñeäm truyeàn PortOpen Môû/Ñoùng moät coång (tuøy thuoäc vaøo thoâng soá) vaø ñaët thoâng soá cho coång . Settings Ñaët vaø traû laïi caùc tham soá truyeàn thoâng nhö :toác ñoä truyeàn theo bit ,chaün leû ,soá caùc bit döõ lieäu ,… Thí duï sau ñaây chæ ra caùch truyeàn thoâng qua coång noái tieáp coù theå ñöôïc tieán haønh nhö theá naøo baèng caùch söû duïng moät Modem. Private sub Form_load() ‘bieán ñeå löu giöõ chuoãi nhaäp vaøo Dim Instring as String ‘söû duïng COM1 Mscomm11.ComPort = 1 ‘9600 baud ,no parity ,8 bit data ,1 stop bit Mscomm11.Settings = ”9600 ,N,8,1” ‘ra leänh cho ñieàu khieån Mscomm1 ñoïc heát boä ñeäm nhaän khi duøng ‘leänh Input Mscomm11.InputLen = 0 ‘môû coång Mscomm11.PortOpen = True ‘göûi leänh attention tôùi MODEM Mscomm11.Output = “ATV1Q0” & Chr$(13) ‘ñeå chaéc raèng ‘MODEM traû lôøi “OK” ‘ñôïi döõ lieäu traû lôøi göûi veà coång noái tieáp Do DoEvents Buffer$ = Buffer$ & MSComm1.Input Loop Until InStr(Buffer$ , “OK” &vbCRLF) ‘ñoïc döõ lieäu traû lôøi “OK” ‘ñoùng coång noái tieáp Mscomm11.PortOpen = False End Sub Sau ñaây ta seõ laàn löôït tìm hieåu moät soá thuoäc tính quan troïng cuûa ñieàu khieån truyeàn thoâng . É Thuoäc tính Settings Thuoäc tính Settings ñaët vaø traû laïi caùc thoâng soá truyeàn thoâng cho coång RS-232, nhö toác ñoä baud, tính chaün leû, soá bit döõ lieäu vaø soá caùc bit döøng. Cuù phaùp cuûa caâu leänh laø : [form.]Mscomm1.Settings [=paramString$] Neáu paramString$ khoâng hôïp leä (valid) thì khi môû coång, ñieàu khieån truyeàn thoâng seõ phaùt sinh loãi 380 ( loãi giaù trò thuoäc tính khoâng hôïp leä ). ParamString$ laø moät chuoãi chöùa 4 thoâng soá thieát laäp cho coång truyeàn thoâng RS-232 vaø coù daïng nhö sau : “BBBB ,P ,D ,S” ÔÛ ñaây BBBB xaùc ñònh toác ñoä baud, P laø bit chæ tính chaün leû, D laø soá bit döõ lieäu vaø S laø soá caùc bit döøng (stop bits). Giaù trò maëc ñònh cuûa paramString$ laø : “9600, N, 8,1” Baûng sau ñaây lieät keâ caùc giaù trò baud hôïp leä : Thoâng soá toác ñoä baud 110 2400 19200 57600 300 4800 28800 115200 600 9600 38400 128000 1200 14400 56000 256000 Soá bit döõ lieäu hôïp leä trong moät laàn truyeàn (khung truyeàn) laø : 4 ,5 ,6 ,7 ,8 (default) Soá bit Stop hôïp leä laø : 1 ,1.5 ,2. Thí duï sau cho pheùp ñaët thoâng soá cho coång truyeàn ôû toác ñoä baud laø 4800,khoâng kieåm tra bit chaün leû ,8 bit döõ lieäu ,1 bit döøng : Mscomm11.Settings =”4800 ,N ,8 ,1” Kieåu döõ lieäu cuûa Mscomm11.Settings laø : String . É Thuoäc tính CommPort : Thuoäc tính naøy ñaët vaø traû laïi soá coång truyeàn thoâng .Cuù phaùp cuûa caâu leänh laø : [form.].CommPort [=portnumber%] Trong khi thieát keá (design time) ta coù theå ñaët Portnumber% baèng moät giaù trò naèm trong khoaûng töø 1 ñeán 16 (giaù trò maëc ñònh laø 1). Tröôùc khi duøng leänh PortOpen phaûi thieát laäp coång baèng CommPort. Neáu ta duøng thuoäc tính PortOpen tröôùc khi thieát laäp coång baèng CommPort thì ñieàu khieån truyeàn thoâng sinh ra loãi 68 (coång khoâng toàn taïi). Kieåu döõ lieäu : Integer É Thuoäc tính PortOpen : Thuoäc tính PortOpen ñaët vaø traû laïi traïng thaùi cuûa coång truyeàn thoâng (ñoùng hoaëc môû). Thuoäc tính naøy khoâng coù trong thôøi gian thieát keá chöông trình. Cuù phaùp cuûa caâu leänh laø : [form.] MSComm.PortOpen [={True/ False}] Thoâng soá thieát laäp laø True ñeå môû coång, coøn False ñeå ñoùng (giaûi phoùng) coång vaø xoùa noäi dung caùc boä ñeäm nhaän vaø truyeàn MSComm töï ñoäng ñoùng coång noái tieáp khi öùng duïng keát thuùc (Terminated). Tröôùc khi duøng thuoäc tính naøy (PortOpen), phaûi ñaët thoâng soá coång baèng thuoäc tính CommPort vôùi moät giaù trò hôïp leä, neáu ta queân ñi thuoäc tính naøy loãi 68 seõ phaùt sinh. Thí duï sau ñaây môû coång truyeàn thoâng soá 1 (COM1) vôùi toác ñoä baud laø 4800 baud, khoâng kieåm tra tính chaün leû, 8 bit döõ lieäu, 1 bit stop: MSComm1.Settings = “4800 ,N ,8 ,1” MSComm1.CommPort=1 MSComm1.PortOpen=True Kieåu döõ lieäu : Boolean. É Caùc thuoäc tính phuïc vuï vieäc nhaäp döõ lieäu (Input ,InBufferCount vaø InBufferSize) a. Thuoäc tính Input : Thuoäc tính Input traû laïi vaø xoùa boû moät chuoãi kyù töï töø boä ñeäm nhaän. Thuoäc tính naøy khoâng saün coù trong khi thieát keá vaø laø chæ ñoïc (Read_only) khi chaïy chöông trình. Cuù phaùp cuûa caâu leänh laø : [form.] MSComm.Input Thuoäc tính InputLen quy ñònh soá kyù töï ñöôïc ñoïc bôûi caâu leänh Input. Ñeå xaùc ñònh soá caùc kyù töï trong boä ñeäm, thuoäc tính InBufferCount ñöôïc kieåm tra. Ñaët InputLen laø 0 ñeå ñoïc toaøn boä noäi dung cuûa boä ñeäm nhaän. Thuoäc tính InputMode quyeát ñònh kieåu döõ lieäu thu veà qua thuoäc tính Input. Neáu thuoäc tính naøy ñöôïc set laø CommInputModeText thì thuoäc tính Input seõ traû veà döõ lieäu kieåu text vaøo 1 bieán Variant. Neáu InputMode laø comInputModeBinary thì Input seõ traû veà döõ lieäu nhò phaân trong moät maûng caùc byte vaøo moät bieán Variant . Thí duï döôùi ñaây chæ ra caùch ñoïc döõ lieäu töø boä ñeäm nhaän. MSComm1.InputLen= 0 ‘ñoïc toaøn boä noäi dung cuûa boä ñeäm ‘nhaän ‘kieåm tra coù döõ lieäu hay khoâng If MSComm1.InbufferCount then ‘ñoïc döõ lieäu InString$ = MSComm1.Input End if Kieåu döõ lieäu Variant. b. Thuoäc tính InBufferSize: Thuoäc tính InBufferSize ñaët vaø traû laïi kích thöôùc boä ñeäm nhaän, tính theo soá byte. Cuù phaùp cuûa caâu leänh laø : [form.]MSComm .InBufferSize [=numbyte%] Thuoäc tính naøy coù lieân quan ñeán kích thöôùc boä ñeäm nhaän. Giaù trò maëc ñònh laø 1024 bytes. Kích thöôùc cuûa boä ñeäm phaûi ñöôïc ñaët sao cho coù theå caát giöõ ñöôïc soá lôùn nhaát cuûa caùc kyù töï seõ ñöôïc nhaän tröôùc khi chöông trình öùng duïng coù theå ñoïc chuùng töø boä ñeäm, tröø khi ta laøm vieäc ôû cheá ñoä baét tay (handshaking). Kieåu döõ lieäu cuûa thuoäc tính naøy laø Integer. c. Thuoäc tính InBufferCount: Thuoäc tính InBufferCount traû laïi soá kyù töï trong boä ñeäm nhaän. Noù cuõng coù theå ñöôïc söû duïng ñeå xoùa boä ñeäm baèng caùch ñaët soá cuûa caùc kyù töï baèng 0. Thuoäc tính naøy khoâng coù trong thôøi gian thieát keá chöông trình (design time). Cuù phaùp caâu leänh nhö sau: [form.]MSComm.InBufferCount [=count%] Ta coù theå xoùa boä ñeäm nhaän baèng caùch ñaët thuoäc tính InBufferCount = 0. Kieåu döõ lieäu cuûa thuoäc tính naøy laø Integer. É Caùc thuoäc tính phuïc vuï vieäc xuaát döõ lieäu (Output ,OutBufferCount vaø OutBufferSize ) a. Thuoäc tính Output: Thuoäc tính Output seõ vieát moät chuoãi kyù töï vaøo boä ñeäm truyeàn, thuoäc tính naøy khoâng coù trong thôøi gian thieát keá chöông trình. Cuù phaùp caâu leänh laø : [form.]MSComm.Output [=outstring$] Thí duï sau ñaây cho bieát caùch göûi caùc kyù töï maø ngöôøi duøng goõ vaøo töø baøn phím: Private Sub Form_load (KeyAscii as Integer) MSComm1.Outport =Chr$(KeyAscii) End Sub Thuoäc tính Output coù theå xuaát döõ lieäu daïng text hay daïng binary. Ñeå göûi döõ lieäu text, ta phaûi khai baùo moät bieán kieåu Variant vaø cho noù chöùa chuoãi muoán göûi, sau ñoù gaùn bieán naøy cho thuoäc tính Output. Ñeå göûi döõ lieäu daïng binary, ta phaûi truyeàn moät bieán Variant chöùa moät maûng caùc byte cho thuoäc tính Output . Thoâng thöôøng, neáu ta göûi moät chuoãi theo chuaån ANSI tôùi öùng duïng, ta coù theå göûi döõ lieäu daïng text. Neáu ta coù döõ lieäu maø chöùa caùc kyù töï ñieàu khieån ñöôïc nhuùng (embedded) nhö caùc kyù töï NULL,… thì ta seõ truyeàn döõ lieäu theo daïng binary. Kieåu döõ lieäu cuûa thuoäc tính naøy laø Variant. b. Thuoäc tính OutBufferSize : Thuoäc tính OutBufferSize ñaët vaø traû laïi kích thöôùc cuûa caùc kyù töï trong boä ñeäm truyeàn. Cuù phaùp cuûa caâu leänh laø : [form.] MSComm.OutBufferSize [=numbyte%] Giaù trò maëc ñònh cuûa thuoäc tính naøy laø 512 bytes. Khoâng neân nhaàm laãn giöõa hai thuoäc tính OutBufferCount vaø OutBufferSize vôùi nhau. Thuoäc tính OutBufferCount noùi leân soá bytes hieän ñang coù trong boä ñeäm truyeàn, coøn OutBufferSize quy ñònh toång kích thöôùc cuûa boä ñeäm truyeàn. Khoâng neân ñeå kích thöôùc boä ñeäm truyeàn quaù lôùn. Tuy nhieân neáu ñeå quaù nhoû thì seõ xaûy ra hieän töôïng traøn döõ lieäu (tröø khi laøm vieäc ôû cheá ñoä baét tay). Thoâng thöôøng neân baét ñaàu vôùi kích thöôùc boä ñeäm truyeàn laø 512 bytes. Neáu loãi traøn xaûy ra thì phaûi taêng kích thöôùc boä ñeäm cho thích hôïp vôùi öùng duïng hieän taïi. Kieåu döõ lieäu cuûa thuoäc tính naøy Integer. c. Thuoäc tính OutBufferCount : Thuoäc tính OutBufferCount traû laïi soá kyù töï trong boä ñeäm truyeàn. Nhôø thuoäc tính naøy ta coù theå xoùa noäi dung boä ñeäm truyeàn baèng caùch ñaët giaù trò cuûa OutBufferCount=0. Cuù phaùp cuûa caâu leänh laø : [form.]MSComm.OutBufferCount [=value%] Kieåu döõ lieäu cuûa thuoäc tính naøy laø Integer. d. Thuoäc tính RTSEnable : Thuoäc tính naøy xaùc ñònh xem lieäu coù cho pheùp ñöôøng RTS hay khoâng. Thoâng thöôøng tín hieäu RTS (Request To Send) ñöôïc göûi töø maùy tính tôùi MODEM ñeå yeâu caàu söï cho pheùp truyeàn döõ lieäu. Cuù phaùp caâu leänh nhö sau: [form.]Mscomm1.RTSEnable [=(True | False)] Ta xaùc laäp giaù trò naøy laø True ñeå ñaët ñöôøng RTS leân möùc cao neáu coång ñang môû vaø xuoáng möùc thaáp neáu coång ñang ñoùng. Ñöôøng RTS ñöôïc söû duïng khi coù baét tay phaàn cöùng söû duïng RTS/CTS. Thuoäc tính RTSEnable cho pheùp hoûi voøng ñöôøng RTS neáu ta caàn xaùc ñònh traïng thaùi cuûa noù. Kieåu döõ lieäu cuûa thuoäc tính naøy : Boolean. e. Thuoäc tính CommEvent : Thuoäc tính naøy traû laïi haàu heát söï kieän hoaëc loãi truyeàn thoâng gaàn nhaát. Thuoäc tính naøy khoâng coù saün trong khi thieát keá vaø laø chæ ñoïc khi chaïy chöông trình. Cuù phaùp caâu leänh laø: [form.]Mscomm1.CommEvent Maëc duø söï kieän OnComm ñöôïc phaùt sinh moãi khi coù moät söï kieän hay loãi truyeàn thoâng xaûy ra nhöng thuoäc tính CommEvent laïi chöùa maõ soá cuûa söï kieän hay laø loãi truyeàn thoâng ñoù .Nhö vaäy ñeå xaùc ñònh xem ñieàu gì ñaõ xaûy ra thì ta phaûi kieåm tra thuoäc tính CommEvent . Caùc loãi truyeàn thoâng bao goàm : Haèng soá Giaù trò Moâ taû comEventBreak 1001 Ñaõ nhaän ñöôïc tín hieäu Break comEventFrame 1004 Phaàn cöùng phaùt hieän moät loãi khung truyeàn comEventOverrun 1006 Traøn coång .Phaàn cöùng khoâng theå ñoïc ñöôïc kyù töï naøy tröôùc khi kyù töï keá göûi ñeán vaø bò maát comEventRxOver 1008 Traøn boä ñeäm nhaän .Heát choã trong boä ñeäm nhaän comEventRxParity 1009 Phaàn cöùng phaùt hieän ra moät loãi chaün leû comEventTxFull 1010 Boä ñeäm truyeàn ñaày .Boä ñeäm truyeàn bò ñaày khi coá ñöa theâm kyù töï vaøo haøng ñôïi comEventDCB 1011 Moät loãi xuaát hieän ôû boä ñieàu khieån döõ lieäu(Data Control Block) cuûa port Caùc söï kieän truyeàn thoâng bao goàm: Haèng soá Giaù trò Moâ taû ComEvSend 1 Coù ít hôn soá kyù töï ñònh bôûi SThreshold trong boä ñeäm truyeàn comEvReceive 2 Ñaõ nhaän soá kyù töï baèng vôùi soá kyù töï ñònh bôûi Rthreshold .Söï kieän naøy ñöôïc phaùt ra lieân tuïc cho ñeán khi ta duøng thuoäc tính Input ñeå chuyeån döõ lieäu khoûi boä ñeäm nhaän . ComEvCTS 3 Coù söï thay ñoåi treân ñöôøng CTS ComEvDSR 4 Coù söï thay ñoåi treân ñöôøng DSR .Söï kieän naøy chæ phaùt sinh khi DSR chuyeån töø 1 veà 0 ComEvCD 5 Coù söï thay ñoåi treân ñöôøng CD (Carrier Detect) ComEvRing 6 Phaùt hieän tieáng chuoâng (goïi). Moät soá vi maïch UART khoâng hoã trôï vieäc naøy. ComEvEOF 7 Kyù töï EOF (Maõ ASCII 26) ñöôïc nhaän. Kieåu döõ lieäu cuûa thuoäc tính naøy : Integer f. Thuoäc tính InputLen Ñaët vaø traû laïi soá kyù töï maø thuoäc tính Input ñoïc ñöôïc töø boä ñeäm nhaän .Giaù trò maëc ñònh cuûa thuoäc tính naøy laø baèng 0 .Ñaët InputLen =0 ñeå ñieàu khieån truyeàn thoâng ñoïc heát noäi dung boä ñeäm nhaän .Cuù phaùp caâu leänh nhö sau : [form.] Mscomm1.InputLen [=numchars%] Thuoäc tính naøy raát coù höõu ích khi ñoïc döõ lieäu töø caùc maùy coù loái ra ñöôïc ñònh daïng coá ñònh veà chieàu daøi khoái döõ lieäu . Kieåu döõ lieäu cuûa thuoäc tính naøy : Integer g. Thuoäc tính ParityReplace Ñaët vaø traû laïi kyù töï duøng thay theá kyù töï khoâng hôïp leä trong doøng döõ lieäu khi loãi chaün leû xaûy ra .Cuù phaùp : [form.]Mscomm1.ParityReplace [=char$] Bit chaün leû laø bit ñöôïc truyeàn cuøng vôùi caùc bit döõ lieäu vaø ñöôïc duøng cho vieäc kieåm tra loãi .Khi duøng bit chaün leû ,ñieàu khieån truyeàn thoâng seõ coäng taát caû caùc bit coù giaù trò baèng 1 vaø kieåm tra toång soá caùc bit ñoù xem laø chaün hay leû (töông öùng vôùi vieäc xaùc laäp bit chaün leû khi môû coång ) .Theo maëc ñònh ,ñieàu khieån duøng daáu chaám hoûi (?) ñeå thay theá caùc kyù töï khoâng hôïp leä .Ñaët ParityReplace laø “ “ ñeå boû khaû naêng thay theá kyù töï khi loãi chaün leû xuaát hieän .Söï kieän OnComm vaãn ñöôïc phaùt sinh vaø thuoäc tính CommEvent ñöôïc ñaët thaønh comEventRxParity . Kieåu döõ lieäu cuûa thuoäc tính naøy : String h. Thuoäc tính Rthreshold Ñaët vaø traû laïi soá kyù töï seõ nhaän tröôùc khi ñieàu khieån Mscomm1 ñaët thuoäc tính comEvent thaønh comEvReceive vaø phaùt sinh söï kieän OnComm .Cuù phaùp : [form.] Mscomm1.Rthreshold [=numchar%] Xaùc laäp baèng 0 ñeå laøm maát khaû naêng phaùt sinh söï kieän OnComm khi nhaän caùc kyù töï .Xaùc laäp baèng 1,chaúng haïn, ñeå laøm phaùt sinh söï kieän OnComm moãi khi coù 1 kyù töï ñöôïc nhaän vaøo boä ñeäm nhaän Kieåu döõ lieäu cuûa thuoäc tính naøy : Integer § Haøm ComInput Traû laïi vaø xoùa chuoãi kyù töï ôû boä ñeäm nhaän .Cuù phaùp nhö sau : ComInput(ByVal hwnd As Integer ,LpData as Any ,ByVal do Data as Integer ) As Integer Haøm naøy töông töï nhö thuoäc tính Input nhöng traû laïi soá byte nhaän ñöôïc . § Haøm ComOutput Vieát moät chuoãi kyù töï vaøo boä ñeäm truyeàn .Cuù phaùp nhö sau : ComOutput(ByVal hwnd As Integer ,LpData as Any ,ByVal do Data as Integer ) As Integer Haøm naøy töông töï nhö thuoäc tính Output nhöng traû laïi soá byte kyù töï ñöôïc göûi ñi 3. Söï kieän Oncomm Söï kieän OnComm ñöôïc phaùt sinh vaøo baát cöù khi naøo giaù trò cuûa thuoäc tính CommEvent thay ñoåi . Cuù phaùp söï kieän : Private Sub [form.]Mscomm1_OnComm() Thuoäc tính CommEvent chöùa maõ soá cuûa loãi hay söï kieän phaùt sinh bôûi söï kieän OnComm. Neáu ñaët caùc thuoäc tính Rthreshold hoaëc SThreshold baèng 0 seõ voâ hieäu baãy söï kieän Receive vaø Send . 4. Hoûi voøng ôû coång RS-232 : Thöôøng khi laøm vieäc vôùi ñieàu khieån Mscomm1, ta duøng phöông phaùp ñieàu khieån theo söï kieän .Nhöng ta cuõng coù theå söû duïng kyõ thuaät hoûi voøng ñeå thoâng tin qua coång RS-232. Chöông trình ví duï sau ñaây söû duïng COM2 ñeå göûi thoâng baùo “Hello” vaø sau ñoù chôø chuoãi nhaän. Kyõ thuaät naøy quy ñònh laø seõ nhaän ñöôïc ñaùp öùng baèng caùch kieåm tra lieân tuïc soá caùc kyù töï nhaän ñöôïc trong boä ñeäm nhaän (InBufferCount). Khi coù nhieàu hôn moät kyù töï trong boä ñeäm loái vaøo thì kyù töï naøy seõ ñöôïc ñoïc. Chöông trình nhö sau : Private Sub Form_Load() Dim Str as String ‘chuoãi ñeå chöùa döõ lieäu nhaäp Mscomm11.ComPort =2 ‘duøng COM2 Mscomm11.Settings=”9600 ,N ,8 ,1” ‘9600 baud ,khoâng ‘parity ,8 bits data ,1 ‘stop bit Mscomm11.InputLen=0 ‘ñoïc heát boä ñeäm loái vaøo khi Input ñaõ ñöôïc duøng Mscomm11.PortOpen=True ‘môû coång Text1.text=”Sending : Hello” Mscomm11.Output=”Hello” ‘göûi thoâng baùo Do ‘chôø ñaùp öùng töø coång DoEvents Loop Until Mscomm11.InBufferCount>=2 Str = Mscomm11.Input ‘ñoïc boä ñeäm Input Text2.Text=”Received:” +Str Mscomm11.PortOpen=False ‘ñoùng coång noái tieáp End Sub 5. Caùc thoâng baùo loãi (Error Messages Code) Soá loãi Moâ taû Soá loãi Moâ taû 380 Giaù trò thuoäc tính khoâng hôïp leä 8009 Loãi ôû caùc thoâng soá maëc ñònh 383 Thuoäc tính laø chæ ñoïc, comSetNotSupport 8010 Phaàn cöùng khoâng saün duøng (bò khoùa bôûi thieát bò khaùc) 394 Thuoäc tính laø chæ ñoïc, comGetNotSupport 8011 Khoâng theå ñònh vò ñöôïc haøng ñôïi (queues) 8000 Taùc ñoäng khoâng hôïp leä leân coång ñaõ môû 8012 Coång chöa môû 8001 Giaù trò timeout caàn phaûi lôùn hôn Zero 8013 Coång ñaõ môû roài 8002 Soá coång khoâng hôïp leä 8014 Khoâng theå cho pheùp khai baùo(nitification)comm 8003 Thuoäc tính chæ coù khi chaïy chöông trình 8015 Khoâng ñaët traïng thaùi cho comm ñöôïc 8004 Thuoäc tính laø chæ ñoïc khi chaïy chöông trình 8016 Khoâng ñaët maët naï söï kieän comm ñöôïc 8005 Coång ñaõ môû roài 8018 Taùc ñoäng chæ hôïp leä khi coång ñaõ môû 8006 Soá nhaän daïng thieát bò laø khoâng hôïp leä hoaëc khoâng ñöôïc hoã trôï 8019 Thieát bò baän 8007 Giaù trò Baud xaùc ñònh laø khoâng hôïp leä 8020 Loãi ñoïc thieát bò truyeàn thoâng 8008 Kích thöôùc byte xaùc ñònh laø khoâng hôïp leä 8021 Loãi beân trong lieân quan khoái ñieàu khieån thieát bò cuûa port III. Phaàn giao dieän : Chöông trình giao tieáp noái tieáp duøng ngoân ngöõ Visual Basic nhö sau: ‘Phaàn khai baùo bieán toaøn cuïc trrong module public LenhT, DiaChi As String 'bien chua ma lenh dua ve cho vi xu ly Public GTNhan As Variant ' bien chua data tu vi xu ly gui len Public Byte1, Byte2, Byte3, Byte4 As String 'la 4 byte nhan duoc tu vi xu ly 'byte1 chua dia chi cua vxl 'byte2 chua gia tri nhiet do 'byte3 chua so nguoi trong phong 'byte4 trang thai den va quat Public Byte21, Byte22, Byte23, Byte24 As String 'cac bien cho phong 2 Public Const AnNinh = "Khong co nguoi la xam nhap" Public Const KAnNinh = "Canh bao co nguoi la xam nhap" ‘ ham truyen du lieu toi cac vi xu li Public Sub TRUYEN(GIATRI As String) Dim i As Integer frmchinh.MSComm1.RTSEnable = True frmchinh.MSComm1.Output = GIATRI For i = 0 To 10000 i = i + 1 Next i frmchinh.MSComm1.RTSEnable = False End Sub ‘ Ham nhan du lieu tu vi xu li Public Sub NHAN() Dim i, thongbao As Integer Dim Test As String frmchinh.MSComm1.RTSEnable = False For i = 1 To 30000 i = i + 1 Next i Do DoEvents Loop Until (frmchinh.MSComm1.InBufferSize >= 4) Or (i >= 30000) GTNhan = frmchinh.MSComm1.Input 'thuc hien gan gia tri cho bytei (i=1-4) Test = Left$(GTNhan, 1) If Test = "A" Then Byte1 = Left$(GTNhan, 1) Byte2 = Mid$(GTNhan, 2, 1) Byte3 = Mid$(GTNhan, 3, 1) Byte4 = Right$(GTNhan, 1) Else If Test = "B" Then Byte21 = Left$(GTNhan, 1) Byte22 = Mid$(GTNhan, 2, 1) Byte23 = Mid$(GTNhan, 3, 1) Byte24 = Right$(GTNhan, 1) Else thongbao = MsgBox("So lieu truyen ve bi loi.Can xem lai duong truyen", vbOKOnly, "Loi duong truyen") End If End If End Sub ‘******************************************************** ‘Chuong trinh trong Frmchinh ‘******************************************************* Dim ToanCuc As Variant Dim Dem, i, j As Integer Dim NHAN As String Private Sub ChkP01_Click() If ChkP01.Value = 1 Then frmP01.Show If ChkP01.Value = 0 Then Unload frmP01 End If '****************************** End Sub Private Sub ChkP02_Click() If ChkP02.Value = 1 Then frmP02.Show If ChkP02.Value = 0 Then Unload frmP02 End If '*************************** End Sub Private Sub Command1_Click() End End Sub Private Sub Form_Load() Dim i1, i2 As Integer ChkP03.Enabled = False ChkP04(1).Enabled = False LblTThai.Caption = "Binh thuong" TxtChinh = CStr(2) OptAuto.Value = True '********************************* 'PHAN GIA DINH BIEN Byte2 = "!" Byte3 = "!" Byte4 = "O" Byte22 = "!" Byte23 = "!" Byte24 = "O" LenhT = "a" '********************************* 'KHOI DONG COM If MSComm1.PortOpen = True Then MSComm1.PortOpen = False MSComm1.CommPort = 1 MSComm1.Settings = "9600,n,8,1" MSComm1.PortOpen = True 'cho thu du lieu dua ve tu vi xu ly frmP02.Timer1.Enabled = True frmP01.Timer1.Enabled = True 'hien thi so nguoi len frmchinh frmchinh.Timer1 = True End Sub Private Sub OptAuto_Click() With frmP01 frmP01.fraDkP01.Enabled = False frmP01.OptTdenP01.Enabled = False frmP01.OptMdenP01.Enabled = False frmP01.OptTquatP01.Enabled = False frmP01.OptMquatP01.Enabled = False frmP01.Frame1.Enabled = False frmP01.Frame2.Enabled = False End With With frmP02 frmP02.FraDkP02.Enabled = False frmP02.OptTdenP02.Enabled = False frmP02.OptMdenP02.Enabled = False frmP02.OptTquatP02.Enabled = False frmP02.OptMquatP02.Enabled = False frmP02.Frame2.Enabled = False frmP02.Frame3.Enabled = False End With frmP01.cmdDongYP01.Enabled = False frmP02.cmDongYP02.Enabled = False '*********************************** End Sub Private Sub OptDenChinh_Click() FrmDkDen.Show End Sub Private Sub OptManual_Click() With frmP01 frmP01.fraDkP01.Enabled = True frmP01.OptTdenP01.Enabled = True frmP01.OptMdenP01.Enabled = True frmP01.OptTquatP01.Enabled = True frmP01.OptMquatP01.Enabled = True frmP01.Frame1.Enabled = True frmP01.Frame2.Enabled = True End With With frmP02 frmP02.FraDkP02.Enabled = True frmP02.OptTdenP02.Enabled = True frmP02.OptTquatP02.Enabled = True frmP02.OptMdenP02.Enabled = True frmP02.OptMquatP02.Enabled = True frmP02.Frame2.Enabled = True frmP02.Frame3.Enabled = True End With frmP01.cmdDongYP01.Enabled = True frmP02.cmDongYP02.Enabled = True '************************************ End Sub Private Sub OptQuatChinh_Click() FrmDkQuat.Show End Sub Private Sub Timer1_Timer() ' xuat so nguoi ra frmchinh i1 = Val(frmP01.TxtSoNguoiP01.Text) i2 = Val(frmP02.TxtSoNguoiP02.Text) TxtChinh.Text = CStr(i1 + i2) End Sub Private Sub cmdDongYP01_Click() Dim Test As String 'xac dinh lenh hoat dong cho vxl If (OptMdenP01.Value = False And OptMquatP01.Value = False) Then LenhT = "C" If (OptMdenP01.Value = False And OptMquatP01.Value = True) Then LenhT = "D" If (OptMdenP01.Value = True And OptMquatP01.Value = False) Then LenhT = "F" If (OptMdenP01.Value = True And OptMquatP01.Value = True) Then LenhT = "G" 'xac dinh dia chi truyen la vxl 1 DiaChi = "A" Test = LenhT 'goi ham truyen LenhT cho vi xu ly Call TRUYEN(DiaChi) Call TRUYEN(Test) Stop End Sub Private Sub cmdThoatP01_Click() Unload Me frmchinh.ChkP01.Value = False End Sub Private Sub Option1_Click() End Sub Private Sub Form_Load() If frmchinh.OptAuto.Value = True Then With frmP01 frmP01.fraDkP01.Enabled = False frmP01.OptTdenP01.Enabled = False frmP01.OptMdenP01.Enabled = False frmP01.OptTquatP01.Enabled = False frmP01.OptMquatP01.Enabled = False frmP01.Frame1.Enabled = False frmP01.Frame2.Enabled = False End With With frmP02 frmP02.FraDkP02.Enabled = False frmP02.OptTdenP02.Enabled = False frmP02.OptMdenP02.Enabled = False frmP02.OptTquatP02.Enabled = False frmP02.OptMquatP02.Enabled = False frmP02.Frame2.Enabled = False frmP02.Frame3.Enabled = False End With End If '************************************** 'KHOI DONG COM If frmchinh.MSComm1.PortOpen = True Then frmchinh.MSComm1.PortOpen = False frmchinh.MSComm1.CommPort = 1 frmchinh.MSComm1.Settings = "9600,n,8,1" frmchinh.MSComm1.PortOpen = True 'Cap nhat trang thai cua phong frmP01.Timer1.Enabled = True End Sub Private Sub CapnhatP01() Dim NhietdoP01, SoNguoiP01, i As Integer Dim thongbao As String NhietdoP01 = Asc(Byte2) txtNhietDoP01.Text = Val(NhietdoP01) 'hien thi nhiet do SoNguoiP01 = Asc(Byte3) TxtSoNguoiP01.Text = Val(SoNguoiP01) 'hien thi so nguoi If Byte4 = "O" Then txtDenP01.Text = "OFF" txtQuatP01.Text = "OFF" frmchinh.LblTThai = AnNinh End If If Byte4 = "P" Then txtDenP01.Text = "OFF" txtQuatP01.Text = "OFF" frmchinh.LblTThai = KAnNinh End If If Byte4 = "Q" Then txtDenP01.Text = "OFF" txtQuatP01.Text = "ON" frmchinh.LblTThai = AnNinh End If If Byte4 = "R" Then txtDenP01.Text = "OFF" txtQuatP01.Text = "ON" frmchinh.LblTThai = KAnNinh End If If Byte4 = "S" Then txtDenP01.Text = "ON" txtQuatP01.Text = "OFF" frmchinh.LblTThai = AnNinh End If If Byte4 = "T" Then txtDenP01.Text = "ON" txtQuatP01.Text = "OFF" frmchinh.LblTThai = AnNinh End If If Byte4 = "U" Then txtDenP01.Text = "ON" txtQuatP01.Text = "ON" frmchinh.LblTThai = AnNinh End If If Byte4 = "X" Then txtDenP01.Text = "ON" txtQuatP01.Text = "ON" frmchinh.LblTThai = KAnNinh End If 'BAO LOI TRUYEN (lenh truyen ve sai) Select Case Byte4 Case "O" GoTo TB Case "P" GoTo TB Case "Q" GoTo TB Case "R" GoTo TB Case "S" GoTo TB Case "T" GoTo TB Case "U" GoTo TB Case "X" GoTo TB End Select thongbao = MsgBox("Ban can kiem tra lai he thong.Chu trong cac he thong chong trom", vbOKOnly, "Loi dieu khien") TB: i = i + 1 End Sub Private Sub Timer1_Timer() Dim Kich As String Kich = "E" Call TRUYEN(DiaChi) Call TRUYEN(Kich) Call CapnhatP01 End Sub

Các file đính kèm theo tài liệu này:

  • docContents.doc
  • docCover.doc
  • docIndex.doc
  • docReference.doc
  • docReport.doc
  • docThanks.doc