Tài liệu Bàn phím thu thập số liệu RS-485: ... Ebook Bàn phím thu thập số liệu RS-485
161 trang |
Chia sẻ: huyen82 | Lượt xem: 1804 | Lượt tải: 0
Tóm tắt tài liệu Bàn phím thu thập số liệu RS-485, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
I.1 Sô löôïc veà PC vaø öùng duïng PC trong Ñieàu Khieån Töï Ñoäng:
Vaøo nhöõng naêm 40 cuûa theá kyû XX, moät söï kieän quan troïng trong lónh vöïc
ñieän toaùn ñaõ xaûy ra ñoù laø söï ra ñôøi cuûa chieác maùy tính chöõ soá chaïy baèng ñieän ñaàu tieân ra ñôøi vaø ñöôïc bieát ñeán döôùi caùi teân goïi “Aniac”. “Aniac” toång coäng phaûi duøng ñeán 18000 chi tieát ñieän ñieän töû, ngoaøi ra coøn coù 1500 chi tieát ñieän vaø caùc loaïi linh kieän khaùc, toång theå tích khoaûng 90 m3 , naêng 30 taán, chieám dieän tích 170 m2 . Neáu ñem so saùnh vôùi maùy tính ngaøy nay thì noù laø moät coã maùy khoång loà. Cuõng chính vì theá maø vaøo thôøi ñieåm ñoù ngöôøi ta chöa theå thaáy heát ñöôïc taàm quan troïng cuûa söï vieäc naøy. Nhöng ñeán thaùng 12 naêm 1981, khi IBM coâng boá veà chieác maùy tính caù nhaân ñaàu tieân cuûa hoï. Maùy ñöôïc thieát keá nhö laø moät maùy tính ñeå baøn vöøa phaûi, duøng boä vi xöû lyù Intel 8088. Model chuaån döôïc baùn vôùi giaù $3000. Maùy goàm 64K RAM (boä nhôù truy caäp ngaãu nhieân) treân baûn maïch chính, coù theå môû roäng leân tôùi 256 K treân baûn maïch heä thoáng, vaø 40K ROM (boä nhôù chæ ñoïc). Phaàn lôùn ROM naøy ñöôïc thieát keá ñeå löu moät chöông trình hoã trôï heä thoáng ñöôïc goïi laøheä thoáng nhaäp/xuaát cô baûn, hay BIOS. Maùy PC ñaàu tieân coù moät oå ñóa maät ñoä keùp moät maët. Caùc oå ñóa ñöôïc ñòng daïng coù khaû naêng löu tröõ 180K döõ lieäu. Phaàn meàm heä ñieàu haønh ban ñaàu ñöôïc cung caáp bôûi haõng Microsoft Corporation. Vaø töø ñoù ñeán nay, trong moät khoaûng thôøi gian ngaén, maùy tính – PC – ñaõ trôû thaønh moät thieát bò quan troïng haøng ñaàu trong taát caû caùc lónh vöïc kinh teá, saûn xuaát, sinh hoaït vaø ñaëc bieät laø trong caùc ngaøng coâng nghieäp hieän ñaïi.
Trong lónh vöïc ñieàu khieån töï ñoäng cuûa chuùng ta thì maùy tính laïi ñaëc bieät
quan troïng hôn nöõa. Noù hoaëc tröïc tieáp hoaëc giaùn tieáp laø nhöõng “oâng chuû”, hay nhöõng “giaùm saùt vieân” trong moät daây truyeàn töï ñoäng hoaëc moät quy trình saûn xuaát. Nhöng ñeå laøm ñöôïc nhöõng ñieàu ñoù PC caàn phaûi ñöôïc laäp trình tröôùc hay noùi caùch khaùc laø nhöõng ngöôøi bieát söû duïng noù.
Moät trong nhöõng yeáu toá quan troïng haøng ñaåu trong vieäc ñöa PC vaøo caùc daây truyeàn töï ñoäng laø ta phaûi “giao tieáp” ñöôïc vôùi noù. Coù nghóa laø ta phaûi laäp trình ñeå cho PC coù theå trao ñoåi döõ lieäu vôùi caùc thieát bò ngoaïi vi khaùc. Ñeå töø ñoù ta môùi coù theà duøng PC ñeå ñieàu khieån caùc thieát bò ngoaïi vi ñoù. Caùc thieát bò ngoaïi vi ôû ñaây coù theå laø moät hay moät maïng NuDam, vi xöû lyù(uP), PLC hay cuõng coù theå laø moät maïng caùc PC khaùc…
Coù nhieàu phöông thöùc ñeå giao tieáp maùy tính voùi caùc thieái bò gheùp noái beân ngoaøi, moãi caùch ñeàu coù nhöõng öu, nhöôïc ñieåm khaùc nhau. Tuøy theo muïc ñích, ñieàu kieän söû duïng maø ngöôøi ta coù theå söû duïng nhöõng phöông caùch khaùc nhau sao cho coù hieäu quûa nhaát. Sau ñaây laø ba phöông thöùc ñöôïc söû duïng phoå bieán .
Keát noái maùy tính baèng caùch söû duïng caùc card giao tieáp ñuôïc caém tröïc tieáp leân caùc slot ôû treân mainboard cuøa maùy tính. Coù nhieàu loaïi Bus khaùc nhau vaø moãi loaïi Bus coù nhöõng öu ñieåm khaùc nhau, nhöõng loaïi bus ñang ñöôïc söû duïng phoå bieán : ISA, PCIø, AGP, PC, MCA, EISA… . Phöông phaùp naøy coù öu ñieåm noåi baät laø coù theå trao ñoåi döõ lieäu vôùi dung löôïng lôùn, toác ñoä cao. Nhöng coù nhöôïc ñieåm laø can thieäp nhieàu vaøo phaån cöùng cuûa PC deã “nguy hieåm” linh kieän töông ñoá ñaét tieàn. Moät nhöôïc ñieåm nöõa laø khi heä thoáng ñang vaän haønh ta khoù coù theå can thieäp ñöôïc vaøo phaàn cöùng.
Keát noái maùy tính thoâng qua coång song song hay coång maùy in. Loaïi naøy cuõng coù öu ñieåm laø quùa trình giao tieáp trao ñoåi döõ lieäu vôùi toác ñoä cao neáu so saùnh vôùi phöông phaùp truyeàn noái tieáp. Nhöng phöông phaùp naøy coù moät nhöôïc ñieåm lôùn laø khaû naêng troáng nhieãu raát thaáp, khoâng theå truyeàn ñi xa ñöôøc.
Keát noái maùy tính thoâng qua coång noái tieáp hay coång COM. Loaïi naøy coù nhöôïc dieåm laø trao ñoåi döõ lieäu vôùi toác ñoä khoâng cao laém. Nhöng laïi coù öu ñieåm noåi baät laø phöông thöùc giao tieáp ñôn giaûn deã söû duïng. Linh kieän laép ñaët raát phaûi chaêng vaø raát deã mua. Khoâng can thieäp nhieàu vaøo phaàn cöùng cuûa maùy tính coù theå thaùo laép deã daøng khi heä thoáng ñang hoaït ñoäng. Khaû naêng choán gnhieãu so vôùi phuông thöùc truyeàn song song laø cao hôn nhieàu. Phöông thöùc naøy cuõng coù theå truyeàn ñi töông ñoái xa.
Trong ba phöông thöùc treân, phöông thöùc giao tieáp maùy tính qua coång noái
tieáp hieän ñang ñaùp öùng ñöôïc yeâu caàu cuûa lónh vöïc ñieàu khieån töï ñoäng. Ñoù laø söï ñoøi hoûi phaûi chính xaùc, ñöôïc ñaët haøng ñaàu, ñôn giaûn trong lónh vöïc vaän haønh.
I.2 Chuaån RS-485 vaø ñeà taøi ñöôïc giao:
Trong vieäc giao tieáp noái tieáp hay coøn goïi laø truyeàn thoâng noái tieáp cuõng coù nhieàu phöông caùch khaùc nhau. Ñöôïc söû duïng roäng raõi nhaát hieän nay laø caùc chuaån giao tieáp cuûa EIA(Electronics Industries Association) ñöôïc goïi taét döôùi caùc teân RS-232,RS-422,RS-423,RS-485…Trong ñoù chuaån RS-485 coù nhieàu öu ñieåm :
Chuaån RS-485 ñöôïc phaùt trieån daønh cho heä thoáng multi-droped, noù coù theå giao tieáp ôû moät toác ñoä cao ôû moät khoaûng caùch daøi. Chuaån RS-485 coù theå hoaït ñoäng ôû moät toác ñoä leân ñeán 10Mbps treân moät chieàu daøi cable laø 1.200m (4000feet).
RS-485 coù theå hoã trôï ñeán 32 boä ñieàu khieån vaø boä nhaän treân cuøng moät ñöôøng
truyeàn. Ñieàu naøy cho pheùp duøng caùc öùng duïng maïng treân cuøng heä thoáng ngang nhau (multi-drop)...
Chính nhôø nhöõng öu ñieåm ñoù, RS-485 ñaõ ñöôïc söû duïng roäng raõi trong nhieàu daây truyeàn töï ñoäng khaùc nhau. RS-485 cuõng laø ñeà taøi chính ñöôïc nghieân cöùu trong luaän vaên cuûa em. Nhö ñaõ ñeà caäp treân, RS-485 khoâng coøn xa laï vôùi taát caû nhöõng ngöôøi thuoäc lónh vöïc “Ñieàu Khieån Töï Ñoäng”. Nhöng vôùi nhöõng öu ñieåm vöôït troäi cuûa noù thì ñaây cuõng laø ñeà taøi khoâng bao giôø cuõ. Coù theå noùi ñaây cuõng laø moät trong nhöõng haønh trang caàn thieát cho moãi kyõ sö nghaønh Töï Ñoäng khi ra tröôøng . Chính vì theá em ñaõ troïn RS-485 laøm chuû ñeà chính cho luaän vaên cuûa mình. Vieäc öùng duïng giao tieâp giöõa maùy tính vôùi kit vi xöû lyù duøng chuaån RS-485 ñeå laøm moät coâng vieäc minh hoïa cuõng muoân hình muoân veû. Coù raát nhieàu ñeà taøi cuûa caùc anh chò ñi tröôùc ñaõ laøm, neáu laøm laïi khoâng traùnh khoûi söï truøng laëp, nghieân cöùu ñeà taøi môùi vôùi thôø gian cho pheùp khoâng daøi cuûa laø vieäc maïo hieåm . Vieäc öùng duïng laøm moät baøn phím ña naêng cuûa em veà maët lyù thuyeát khoâng coù gì môùi. Nhöng vôùi 40 phím minh hoïa, trong ñoù coù nhieàu phím tröùc naêng ñaëc bieät ñeå giao tieáp ñoäc laäp vôùi maùy tính thì vaán ñeà veà thöïc haønh laø raát quan troïng. Ñeå hoaøn thaønh toát ñöôïc coâng vieäc thì caàn phaûi söû duïng thaønh thaïo laäp trình döôùi vi xöû lyù vaø moät ngoân ngöõ laäp trình treân maùy tính ñeå töø ñoù keát hôïp thaät toát giuõa maùy tính vôùi kit vi xöû lyù thoâng qua RS-485.
II Coâng Vieäc Ñöôïc Giao:
Do ñieàu kieän saûn xuaát cuûa xöông thöû bình gas aåm öôùt, oàn ñoä rung ñoäng lôùn… khoâng theå ñeå maùy tính quaûn lyù döõ lieäu taïi xöôûng ñöôïc leân coâng ty Saøi Goøn Petro caàn moät heä thoáng quaûn lyù soá lieäu sôn, thöû bình ga. Heä thoáng bao goàm :
_Baøn phím:Bao goàm ba baøn phím duøng ñeå truy xuaát soá lieäu bình ga(soá seâri, taûi troïng, haõng saûn xuaát…) ñaët taïi phaân xöôûng laøm vieäc ñöôïc keát noái vôùi maùy tính.
_Maùy tính ñaët taïi vaên phoøng quaûn lyù soá lieäu caùch phaân xöôûng quaûn lyù khoaûng 100 m. Maùy tính coù nhieäm vuï thoáng keâ vaø taïo 01 bieåu maãu daïng nhö “lyù lòch bình ga”. Thoáng keâ vaø ñöa ra baûng bieåu baát kyø moät thoâng soá quaûn lyù naøo khi ñöôïc yeâu caàu.
Kieåm tra vaø caûnh baùo khi coù nhöõng thoâng soá baát thöôøng khi ñöôïc laäp trình saün…
III Chi tieát kyõ thuaät cuûa thieát bò :
Baøn phím coù soá löôïng toái ña khoaûng 45 phím, boä chæ thò hieån thò led coù 2 led matraän duøng ñeå hieån thò thoâng soá nhaäp, 8 led dôn duøng ñeå hieån thò soá lieäu cuûa thoâng soá nhaäp
Caùc soá lieäu treân baûng kieåm tra vaø thöû bình ga goàm coù caùc thoâng soá:
Nhoùm thoâng soá cuûa bình ga: Ngaøy thaùng thöû, sôû höõu chuû, dung tiùch
thöû laàn thöù, soá seâri, naêm saûn xuaát, noi saûn xuaát, khoái löôïng bì, chieàu daøy.
Nhoùm kieåm tra tình traïng cuûa bình ñaït,khoâng ñaït: coå, khoái löôïng, caét
ñuïc ñaøo loõm, phình ra , aên moøn, chieàu daøy , roø ræ, chaùy.
Nhoùm tình traïng kieåm ñònh vaø loaïi bình : Ñeán haïn kieåm ñònh, chöa
ñeán haïn kieåm ñònh chæ yeâu caàu sôn , loaïi 12kg loaïi 50 kg.
IV Moâ taû hoaït ñoäng cuûa heä thoáng
Nhaäp nhoùm Thoâng Soá cuûa Bình Gas :
Nhaán phím ngaøy thaùng thöû: Nhaán phím Date, treân 2 soá ñaàu seõ hieän chöõ:DA
Nhaäp ngaøy thaùng vaøo seõ hieän lieân tuïc 6 soá theo thöù töï ngaøy thaùng naêm: 14 08 01.
Khi ñang phaäp sai soá, duøng CE ñeå xoùa soá nhaäp.
Phím CHECK duøng ñeå xem toaøn boä lyù lòch bình hieän höõu töøng doøng
moät, nhaán CHECK sau ñoù nhaán theâm phím thoâng soá naøo thì giaù trò töông öùng cuûa thoâng soá ñoù seõ ñöôïc hieän leân. Nhaán CHECK laàn nöõa seõ thoaùt khoûi tình traïng kieåm ñònh.
Nhaán phím ENTER caùc giaù trò seõ ñöôïc truyeàn veà maùy tính.
Nhaán phím RESET seõ trôû laïi traïng thaùi saün saøng nhaäp giaù trò môùi.
Nhaäp nhoùm Tình Traïng Kieåm Ñònh :
Nhaán phím roø ræ LE [leak] treân chæ thò hieän LE
Nhaán OK laø ñaït (hieän soá 1)
Nhaán NOTOK laø khoâng ñaït (hieän soá 0)
Caùc thoâng soá khaùc nhaäp töông töï.
Tính chaát cuûa chæ thò:
Khi nhaäp soá lieäu seõ ñaåy daàn töø phaûi sang traùi, khi phaäp sai nhaán phím CE ñeå nhaäp laïi.
Ñeøn baùo hieäu saün saøng nhaäp.
Ñeøn baùo loãi ñöôøng truyeàn…
V Giaûi quyeát coâng vieäc:
Tuy thöïc teá coâng vieäc ñoøi hoûi phaûi coù ba baøn phím nhöng ba baøn phím naøy veà maët kyõ thuaät hoaøn toaøn gioáng nhau leân em chæ laøm moät baøn phím mang tính chaát moâ phoûng , moät lyù do nöõa laø laøm 3 baøn phím raát toán keùm.
Sô ñoà heä thoáng
Sô ñoà thi coâng
CHÖÔNG I:
Giôùi thieäu moät soá phöông phaùp truyeàn thoâng
A GIÔÙI THIEÄU TOÅNG QUAÙT VEÀ MAÏNG MAÙY TÍNH.
I. Toång quaùt:
Maïng maùy tính laø moät taäp hôïp caùc maùy tính ñöôïc noái vôùi nhau bôûi caùc ñöôøng truyeàn vaät lyù theo moät kieán truùc naøo ñoù. Vaø ngaøy nay maïng maùy tính ñaõ trôû thaønh moät lónh vöïc nghieân cöùu phaùt trieån vaø ngaøy caøng ñöôïc öùng duïng roäng raõi trong cuoäc soáng.
Ñuôøng truyeàn vaät lyù vaø kieán truùc maïng:
1. Ñöôøng truyeàn vaät lyù:
Ñöôøng truyeàn vaät lyù duøng ñeå truyeàn tín hieäu ñieän töû giöõa caùc maùy tính . Caùc tính hieäu ñieän töû ñoù bieåu thò caùc giaù trò döõ lieäu döôùi daïng caùc xung nhò phaân. Taát caû caùc tín hieäu ñöôïc truyeàn giöõa caùc maùy tính ñeàu thuoäc 1 daïng soùng ñieän töø naøo ñoù, traûi töø caùc taàn soá radio tôùi caùc soùng cöïc ngaén(vi ba) vaø tia hoàng ngoaïi. Tuyø theo taàn soá cuûa soùng ñieän töø coù theå duøng caùc ñöôøng truyeàn vaät lyù khaùc nhau ñeå truyeàn tín hieäu.
Caùc taàn soá radio coù theå truyeàn baèng caùp ñieän ( daây ñoâi xoaén hoaëc ñoàng truïc ) hoaëc baèng phöông tieän quaûng baù (radio broadcasting).
Soùng cöïc ngaén (vi ba) thöôøng ñöôïc duøng ñeå truyeàn giöõa caùc traïm maët ñaát vaø caùc veä tinh.
Tia hoàng ngoaïi laø lyù töôûng ñoái vôùi nhieàu loaïi truyeàn thoâng maïng. Noù coù theå duøng ñeå truyeàn giöõa hai ñieåm hay töø moät ñieåm ñeán nhieàu maùy thu.
Khi xem xeùt löïa choïn ñöôøng truyeàn chuùng ta caàn chuù yù ñeán caùc ñaëc tröng cô baûn nhö : giaûi thoâng , ñoä suy hao, vaø ñoä nhieãm töø.
2..Kieán truùc maïng:
Kieán truùc maïng maùy tính theå hieän qua caùch noái caùc maùy tính vôùi nhau ra sao vaø taäp hôïp caùc quy taéc maø taát caû caùc thöïc theå tham gia truyeàn thoâng treân maïng phaûi tuaân theo ñeå cho maïng hoaït ñoäng toát. Caùch keát noái caùc maùy tính goïi laø hình traïng(topology), quy taéc quy öôùc truyeàn thoâng thì goïi laø giao thöùc (protocol).
Topology maïng : coù hai kieåu noái maïng chuû yeáu laø point-to-point vaø quaûng baù theo kieåu point-to-point, caùc ñöôûng truyeàn noái thaønh caëp nuùt vôùi nhau vaø moãi nuùt ñeàu coù traùch nhieäm löu tröõ taïm thôøi sau ñoù chuyeån döõ lieäu ñi cho ñeán ñích.
Theo kieåu quaûng baù, taát caû caùc nuùt phaân chia chung moät ñöôøng truyeàn vaät lyù. Döõ lieäu ñöôïc gôûi ñi töø moät nuùt naøo ñoù coù theå ñöôïc tieáp nhaän bôûi taát caû caùc nuùt coøn laïi. Nôi nhaän kieåm tra xem ñòa chæ ñích gôûi ñeán coù phaûi laø cuûa mình hay khoâng ñeå coù theå tieáp tuïc thöïc hieän vieäc giao tieáp hay khoâng giao tieáp.
Giao thöùc maïng :
Vieäc truyeàn tín hieäu treân maïng cuõng caàn phaûi tuaân theo nhöõng quy taéc, quy öôùc veà nhieàu maët, töø khuoân daïng (cuù phaùp, ngöõ nghóa) cuûa döõ lieäu tôùi caùc thuû tuïc gôûi, nhaän döõ lieäu kieåm soaùt coù hieäu quaû vaø chaát löôïng truyeàn tin cuõng nhö xöû lyù caùc loãi söï coá. Taäp hôïp taát caû caùc quy taéc ñoù goïi laø giao thöùc (protocol) cuûa maïng.
Phaân loaïi maïng maùy tính:
Coù nhieàu caùch phaân loaïi maïng khaùc nhau tuyø thuoäc vaøo caùc yeáu toá chính laøm chæ tieâu phaân loaïi maïng. Neáu laáy khoaûng caùch laøm chæ tieâu phaân loaïi maïng thì ta coù caùc loaïi sau:
Maïng cuïc boä: Laø maïng ñöôïc caøi ñaët trong phaïm vi töông ñoái nhoû vôùi khoaûng caùch lôùn nhaát giöõa caùc maùy tính cuõng chæ vaøi chuïc km trôû laïi.
Moät maïng cuïc boä bao goàm caû phaàn cöùng vaø phaàn meàm. Phaàn meàm cuûa noù bao goàm chöông trình ñieàu khieån vaø heä ñieàu haønh maïng. Coøn phaàn cöùng bao goàm :
Maùy chuû (File server-FS ).
Caùc traïm laøm vieäc .
Caùc thieát bò ngoaïi vi.
Card maïng.
Maïng ñoâ thò: ( Metropolian Area Networds-MAN ) laø maïng ñöôïc söû duïng (caøi ñaët ) trong phaïm vi moät ñoâ thò hay moät trung taâm kinh teá –chính trò xaõ hoäi coù baùn kính trong phaïm vi khoaûng 100km trôû laïi.
Maïng dieän roäng: (Wide Area Networds-WAN ) Coù phaïm vi vöôït bieân giôùi cuûa moät quoác gia.
Maïng toaøn caàu: (Global Area Networds-GAN ) phaïm vi cuûa maïng traûi khaép beà maët cuûa traùi ñaát.
B Giao tieáp maùy tính vôùi ngoaïi vi:
Nhö ta ñaõ bieát, ñeå gheùp noái vôùi maùy tính ta coù ba khaû naêng ñeå troïn:
Gheùp noái qua coång maùy in hay coøn goïi laø coång song song
Gheùp noái qua raõnh caém môû roäng treân baûn maïch chính.
Gheùp noái qua coång noái tieáp.
Moãi phöông phaùp ñeàu coù nhöõng öu nhöôïc ñieåm rieâng leân ñeán baây giôø taát caû caùc phöông phaùp ñeàu toàn taïi. Tuøy theo kinh nghieäm , coâng vieäc khaùc nhau maø ta coù söï löa troïn khaùc nhau. ÔÛ phaàn naøy em chæ giôùi thieäu qua veà hai phöông phaùp ñaàu vaø ñi saâu hôn vaøo phöông phaùp thöù ba.
I Coång song song:
Caáu truùc cuûa coång song song:
Coång song song coù 2 loaïi :
OÅ caém 36 chaân
Oå caém 26 chaân
Ngaøy nay haàu heát caùc maùy tính PC ñeàu trang bò coång song song 25 chaân neân ta chæ caàn quan taâm ñeán coång 25 chaân.
ÔÛ daïng truyeàn song song, caùc bit döõ lieäu ñöôïc truyeàn ñoàng thôøi treân caùc ñöôøng khaùc nhau. Öu ñieåm lôùn nhaát cuûa vieäc truyeàn song song laø toác ñoä truyeàn cao, caùc ñöôøng daãn ñeàu töông thích TTL . Nhöôïc ñieåm laø deã bò nhieãu.
Sô ñoà chaân:
13
25
12
24
11
23
10
22
9
21
8
20
7
19
6
18
5
17
4
16
3
15
2
14
1
Baûng moâ taû söï boá trí caùc chaân ôû coång noái vôùi maùy in:
CHAÂN
KYÙHIEÄU
CHIEÀU
MOÂ TAÛ
1
STROBE
Loái ra
BYTE ñöôïc in
2 ¸ 9
D0 ¸ D7
Loái ra
Ñöôøng döõ lieäu D0 ¸ D7
10
ACK
Loái vaøo
Acknowledge (Xaùc nhaän)
11
BUSY
Loái vaøo
Logic 1: Maùy in baän
12
PE
Loái vaøo
Heát giaáy
13
SLCT
Loái vaøo
Select ( löïa choïn)
14
AF
Loái ra
Auto feed ( töï naïp)
15
ERROR
Loái vaøo
Error ( loãi)
16
INIT
Loái ra
Logic 0: Ñaët laïi maùy in
17
SLCTIN
Loái ra
Select in
18 ¸ 25
GND
Noái ñaát
Hinh 1: Baûng moâ taû söï boá trí caùc chaân ôû coång noái vôùi maùy in
Coång noái vôùi maùy in hay thöôøng goïi laø giao dieän Centronics. Coång naøy khoâng chæ noái vôùi maùy in maø coøn gheùp noái vôùi caùc thieát bò ngoaïi vi khi söû duïng maùy tính vaøo muïc ñích ño löôøng vaø ñieàu khieån.
Coång coù 25 chaân. Ngoaøi 8 bit döõ lieäu coøn coù nhöõng ñöôøng daãn tín hieäu khaùc, toång coäng coù theå trao ñoåi moät caùch rieâng bieät vôùi 17 ñöôøng daãn, goàm 12 ñöôøng daãn ra vaø 5 ñöôøng daãn vaøo. 8 ñöôøng daãn döõ lieäu D0 ¸ D7 khoâng phaûi laø ñöôøng daãn hai chieàu trong taát caû caùc loaïi maùy tính neân treân baûng moâ taû chæ xem nhö laø loái ra. Caùc loái ra kaùc nöõa laø STROBE, AUTOFED ( AF), INIT vaø SELECT IN (SLCTIN). Khi trao ñoåi thoâng tin vôùi maùy in, caùc ñöôøng daãn naøy coù nhöõng chöùc naêng xaùc ñònh. Thí duï, INIT = 0 thöïc hieän moät quaù trình khôûi ñoäng laïi (Reset) ôû maùy in, coøn STROBE coù nhieäm vuï ghi caùc bit döõ lieäu ñaõ ñöôïc göûi töø maùy in baèng moät xung Low vaøo trong boä nhôù cuûa maùy in.
Coång cuûa maùy in cuõng coù nhöõng ñöôøng daãn loái vaøo, nhôø vaäy maø söï baét (cheùo) tay giöõa maùy tính vaø maùy in ñöôïc thöïc hieän. Chaúng haïn, khi maø maùy in khoâng coøn ñuû choã trong boä nhôù thì maùy in seõ göûi ñeán maùy tính moät bit traïng thaùi (BUSY = 1); ñieàu ñoù coù nhgóa laø maùy in taïi thôøi ñieåm naøy ñang baän, khoâng neân göûi theâm caùc byte döõ lieäu khaùc ñeán nöõa.Khi heát giaáy ôû maùy in thì maùy tính seõ thoâng baùo laø PAPER EMPTY (PE). Ñöôøng daãn loái vaøo tieáp theo laø ACKNOWLEDGE (ACK), SELECT (SLCT) vaø ERROR.
Toång coäng maùy tính PC coù 5 loái vaøo höôùng tôùi maùy in.
Söï trao ñoåi vôùi caùc ñöôøng daãn tín hieäu:
Caùc tín hieäu ñöôïc trao ñoåi qua coång song song thoâng qua 3 thanh ghi:
thanh ghi döõ lieäu
thanh ghi traïng thaùi
thanh ghi ñieàu khieån.
Thanh ghi döõ lieäu
Ñöôïc ñònh vò ôû ñòa chæ cô sôû cuûa coång.
D7
D6
D5
D3
D4
D1
D2
D0
Datenregister(Basicaddress)
Pin 2
Pin 3
Pin 4
Pin 5
Pin 6
Pin 7
Pin 8
Pin 9
Thanh ghi traïng thaùi
Ñònh vò ôû ñòa chæ cô sôû cuûa +1.
Ñaây laø thanh ghi chæ ñoïc, ñöôïc CPU duøng ñeå thu traïng thaùi hieän taïi cuûa doøng tín hieäu ñi töø maùy in hay thieát bò tôùi maùy tính.
3 bit thaáp ñaàu tieân ñöôïc ñaët baèng 0. Caùc bit khaùc coøn laïi ñöôïc ñaët nhö hình veõ:
D7
D6
D5
D3
D4
0
0
0
Statsregister(Basicaddress +1)
Pin 15 (ERROR)
Pin 13 (SLCT)
Pin 12 (PE)
Pin 10 (ACK)
Pin 11 (BUSY)
Thanh ghi ñieàu khieån
Ñònh vò ôû ñòa chæ cô sôû +2.
Controlregister (Basicaddress =2)
D7
D6
D5
D3
D4
D1
D2
D0
Pin 1 (STROBE)
Pin 14 (AUTOFEED)
Pin 16 (INIT)
Pin 17 (SLCTIN)
IRQ-ENABLE
ÔÛ caùc maùy tính PC ñöôïc cheá taïo gaàn ñaây, ñòa chæ cô baûn cuûa coång maùy in ñöôïc saép xeáp nhö sau:
LPT1 (Coång maùy in thöù nhaát) Þ Ñòa chæ cô baûn = 378H.
LPT2 (Coång maùy in thöù hai) Þ Ñòa chæ cô baûn = 278H.
Caùc ñòa chæ cô baûn cuûa coång maùy incuûa maùy tính PC ñöôïc ñaët ôû nhöõng ñòa chæ boä nhôù xaùc ñònh vaø coù theå ñöôïc ñoïc ra baèng moät chöông trình vieát baèng phaàn meàm. Ñòa chæ cô baûn cuûa LPT1 ñuùng nhö giaù trò 16 bit ñöôïc caát trong boä nhôù coù ñòa chæ 408H vaø 409H, coøn 40AH vaø 40BH chöùa ñuïng ñòa chæ cô baûn cuûa LPT2.
Raõnh caém môû roäng:
Raõnh caém môû roäng ôû ñaây laø noùi ñeán caùc Bus ñaõ ñöôïc ñeå saün treân baûn maïch chính. Töø tröôùc ñeán nay ñaõ coù ñeán taùm kieåu Bus môû roäng ñöôïc söû duïng cho maùy tính caù nhaân (gaàn ñaây coù theâm bus AGV). Vieäc phaân loaïi caùc Bus môû roäng thöôøng döïa treân soâ caùc bit döõ lieäu ,aø chuùng xöû lyù ñoàng thôøi. Ñoù laø caùc bus
Bus PC(coøn goïi laø ISA 8 bit)
Bus EISA(32 bit)
Bus VESA Local(32bit)
Bus SCSI(16/32bit)
Bus ISA(16bit)
Bus MCA(32 bit)
Bus PCI(32/64 bit)
Bus PC/MCA(16 bit)
Tuy nhieân, cho tôùi nay, phaàn lôùn caùc card gheùp noái duøng trong kyõ thuaät ño löôøng vaø ñieàu khieån ñeàu ñöôïc cheá taïo theo tieâu chuaån ISA.
Raõnh caém theo tieâu chuaån ISA:
Thoâng thöôøng raõnh caém coù 62 ñöôøng tín hieäu duøng cho thoâng tin vôùi moät card caém vaøo. veà cô baûn caùc ñöôøng tín hieäu naøy chia thaønh 3 nhoùm ñöôøng tín hieäu, ñöôøng ñòa chæ vaø ñöôøng ñieàu khieån.
Raõnh caém 62 chaân:
Chöùc naêng
Caùc chaân treân card
Chöùc naêng
Phía maïch in
Phía linh kieän
GND
B01
A01
/IOCHCK
RESET DRV
B02
A02
SD7
+5V
B03
A03
SD6
IRQ2
B04
A04
SD5
-5V
B05
A05
SD4
DRQ2
B06
A06
SD3
-12V
B07
A07
SD2
DÖÏ TRÖÕ
B08
A08
SD1
+12V
B09
A09
SD0
GND
B10
A10
/OICHRDY
/SMEMW
B11
A11
AEN
/SMEMR
B12
A12
A19
/IOW
B13
A13
A18
/IOR
B14
A14
A17
/DACK3
B15
A15
A16
DRQ3
B16
A16
A15
/DACK1
B17
A17
A14
DRQ1
B18
A18
A13
/DACK0
B19
A19
A12
CLK
B20
A20
A11
IRQ7
B21
A21
A10
IRQ6
B22
A22
A9
IRQ5
B23
A23
A8
IRQ4
B24
A24
A7
IRQ3
B25
A25
A6
/DACK2
B26
A26
A5
TC
B27
A27
A4
BALE
B28
A28
A3
+5V
B29
A29
A2
OSC
B30
A30
A1
GND
B31
A31
A0
Veà sau, maùy tính PC/AT ra ñôøi, chuùng coù theâm moät raõnh thöù hai naèm thaúng haøng vôùi raõnh 8 bit keå treân vaø coù 36 chaân.
Treân raõnh coù chöùa tín hieäu 16 bit neân raõnh naøy ñöôïc goïi chung laø raõnh 16 bit.
Ngoaøi ra, sau naøy ngöôøi ta coøn cheá taïo theâm caùc raõnh caém töø 32 bit trôû leân. Raõnh naøy duøng ñeå gheùp theâm vaøo nhöõng card coù chaát löôïng cao.
Raõnh caém 16 bit bao goàm raõnh caém 8 bit vaø coù theâm moät raõnh caém thöù hai.
Sau ñaây laø söï saép xeáp chaân cuûa raõnh caém thöù hai:
Raõnh caém 8 bit môû roäng:
Chöùc naêng
Chaân
Phía maïch in
Chaân
Phía linh kieän
Chöùc naêng
/MEMCS16
D01
C01
SBHE
/IOCS16
D02
C02
LA23
IRQ10
D03
C03
LA22
IRQ11
D04
C04
LA21
IRQ12
D05
C05
LA20
IRQ13
D06
C06
LA19
IRQ14
D07
C07
LA18
/DACK0
D08
C08
LA17
DRQ0
D09
C09
/MEMR
/DACK5
D10
C10
/MEMW
DRQ5
D11
C11
SD8
/DACK6
D12
C12
SD9
DRQ6
D13
C13
SD10
/DACK7
D14
C14
SD11
DRQ7
D15
C15
SD12
+5V
D16
C16
SD13
/MASTER
D17
C17
SD14
GND
D18
C18
SD15
Chöùc naêng vaø yù nghóa cuûa caùc ñöôøng tín hieäu treân raõnh:
A0 ¸ A19 : caùc ñöôøng tín hieäu ñòa chæ, xuaát ñòa chæ vaø ñònh ñòa chæ bus heä thoáng gaùn vaøo thieát bò oâ nhôù vaø I/O, cho pheùp truy caäp 1Mbyte boä nhôù khi BALE ôû möùc cao vaø ñöôïc caøi oû caïnh xuoáng cuûa BALE. Baèng caùch söû duïng caùc leänh xuaát nhaäp, boä xöû lyù coù theå ñònh ñòa chæ 64K ñòa chæ coång I/O. Do caùc ñöôøng töø A10 ¸ A16 khoâng duøng, PC chæ duøng caùc ñöôøng töø A0 ¸ A9 ñeå ñònh vò ñòa chæ coång neân ñòa chæ hôïp leä ñoái vôùi bus heä thoáng cuûa PC laø 300H ¸ 3F1H.
LA17 ¸ LA23 : ñöôøng ñòa chæ coù giaù trò khi BALE ôû möùc cao, keát hôïp vôùi caùc ñöôøng dòa chæ A0 ¸ A19 truy caäp 16 Mbyte boä nhôù.
RESET DRV : khôûi ñoäng maùy khi baät nguoàn hay nhaán RESET.
SD0 ¸ SD15 : caùc ñöôøng döõ lieäu 16 bit, truyeàn 2 chieàu.
BALE : Bus Address Latch Enable cho pheùp caøi ñòa chæ.
AEN : do DMA phaùt ra duøng ngaên caûn caùc Slave khi DMA dieãn ra.
CLK : xung ñoàng hoà (6/8MHz vaø 14.3MHz).
ALE : choát ñòa chæ hôïp leä.
/IOW : cho pheùp xuaát döõ lieäu ra I/O.
/IOR : cho pheùp ñoïc döõ lieäu veà töø I/O.
/IOCHCK : kieåm tra loãi xuaát nhaäp (parity).
/OCHRDY : baùo keânh I/O saün saøng.
/MEMW, /MEMR : ghi vaø ñoïc boä nhôù nhoùm tín hieäu phaân xöû bus.
/SMEMW, /SMEMR : ghi vaø ñoïc boä nhôù, taùc ñoäng ôû vuøng nhôù < 1Mb.
SBHE : Bus High Enable _ baùo truyeàn döõ lieäu 8 bit cao.
DRQ0 ¸ DRQ3 : Direct Memory Access Request _ yeâu caàu DMA DRQ5 ¸ DRQ7 truyeàn döõ lieäu tröïc tieáp vôùi boä nhôù.
/DACK : DMA Acknoledge _ khi DRQ yeâu caàu, maùy tính traû lôøi qua /DACK.
MASTER : chaân ñieàu khieån ñeå ngoaïi vi chieám tuyeán cuûa CPU.
/MEMCS16 : baùo ñang ôû chu kyø truy caäp boä nhôù 16 bit data.
/IOCS16 : baùo ñang ôû chu kyø truy caäp ngoaïi vi 16 bit data.
TC : ñeám keát thuùc do DMA phaùt ra _ Terminal Count.
OSC : boä dao ñoäng duøng cho öùng duïng ñònh thì toång quaùt.
IRQ : taïo yeâu caàu ngaét cho CPU. Öu tieân IRQ 9¸ IRQ12, IRQ 14¸ IRQ15, IRQ 3¸ IRQ7.
/REFRESH : baùo ñang ôû chu kyø laøm töôi boä nhôù ñoäng.
OWS : Zero Wait State _ baùo khoâng caàn theâm chu kyø chôø.
Caùc chu kyø bus:
Chu kyø ñoïc coång I/O
Trong kyø ñoïc coång I/O, caùc ñöôøng /MEMR, /MEMW, /IOW khoâng tích cöïc.
Chu kyø ñoïc baèng 4 laàn chu kyø xung CLOCK.
Giaûn ñoà thôøi gian:
CLOCK
ALE
A0¸A9
Valid memmory address
MEMR
MEMW
IOR
IOW
D0¸D7
Valid Data
Chu kyø ghi coång I/O:
Chu kyø ghi coång I/O baèng 5 laàn chu kyø bit.
Giaûn ñoà thôøi gian:
CLOCK
A0¸A9
Valid port address
Valid data to a port
IOW
D0¸D7
ALE
Coång noái tieáp:
Gheùp noái tieáp qua coång RS-232 laø moät trong nhöõng kyõ thuaätñöôïc söû duïng roäng raõi nhaát ñeå gheùp noái caùc thieát bò ngoaïi vi vôùi maùy tính. Qua coång noái tieáp coù theå gheùp noái chuoät, moñem, maùy in, boâ bieán ñoåi A/D, caùc thieát bò ño löôøng… Soá löôïng vaø chuûng loaïi caùc thieát bò ngoaïi vi gheùp noá qua coång noái tieáp ñöùng haøng ñaàu trong soá caùc khaû naêng gheùp noái vôùi maùy tính. Em seõ giôùi thieäu cuï theå veà coång noái tieáp ôû chöông sau.
CHÖÔNG II:
Truyeàn Thoâng Qua Coång Noái Tieáp
Vaøi neùt veà nguoàn goác :
Sau moät thôøi gian löu haønh khoâng chính thöùc, ñeán naêm 1962, Hieäp hoäi caùc Nhaø Coâng nghieäp Ñieän Töû (EIA: The Electronics Industries Association) ñaõ ban haønh tieâu chuaån RS-232 aùp duïng cho coång noái tieáp. Caùc chöõ RS vieát taét töø Recommended Standard(Tieâu chuaån ñaõ giôùi thieäu)
Coù 2 phieân baûn RS-232 ñöôïc löu haønh trong thôøi gian töông ñoái daøi laø RS-232B va RS-232C. Cho ñeán nay chæ coøn RS-232C coøn toàn taïi maø chuùng ta quen goïi laø RS-232. Ngaøy nay, haàu heát caùc maùy tính ñeàu trang bò moät hoaëc hai coång noái tieáp RS-232, vaø taát caû ñeàu coù khaû naêng söû duïng RS-232, ít nhaát laø nhö moät khaû naêng tuøy choïn töø nhaø saûn xuaát maùy tính hoaëc töø phía ngöôøi söû duïng maùy tính. Töø chuaån RS-232 ban ñaàu ñoù cho ñeán nay EIA ñaê phaùt haønh theâm nhieàu chuaån truyeàn thoâng khaùc mang hoï RS nhö RS-422, RS-423, RS-485, caùc giao dieän naøy ñeàu coù nhöõng öu nhöôïc khaùc nhau maø tuøy theo ñieàu kieän saûn xuaát maø coù nhöõng aùp duïng khaùc nhau. Do ñoù taát caû caùc chuaån naøy vaãn toàn taïi song song.
II Ñaëc tính giöõa caùc chuaån RS-232C, RS-422, RS-423, RS-485 :
1. Baûng thoâng soá:
Thoâng soá
RS-232
RS-422
RS-423
RS-485
Cable
Length(max)
15m
(50ft)
1.2km
(4000ft)
1.2km
(4000ft)
1.2km
(4000ft)
Baud Rate
(toác ñoä baud)
20Kbps/15m
10Mbps/12m
1Mbps/120m
100Kbps/1.2m
100Kbps/9m
10Kbps/90m
1Kbps/1.2m
10Mbps/12m
1Mbps/120m
100Kbps/1.2km
Mode
Unbalanced
Balance
Differential
Unbalanced
Differential
Balance
Differential
Driver No.
1
1
1
32
Receiver No.
1
10
10
32
Logic 0
+5"+15
+2"+5
+3.6"+6
+1.5"+5
Logic 1
-5"-15
-2"-5
-3.6"-6
-1.5"-5
Communiy
2V
1.8V
3.4V
1.3V
Cable/Signal
(Caùp /tín hieäu)
1
2
2
2
Methode
(Phöông thöùc)
Simplex
Half-Duplex
Full- Duplex
Simplex
Half-Duplex
Full- Duplex
Simplex
Half-Duplex
Full- Duplex
Simplex
Half-Duplex
Full- Duplex
Short circuit
Current
500mA
150mA
150mA
150mA
Chuaån RS-232C :
Laø chuaån cuûa EIA ( Electronics Industries Association ) nhaèm ñònh nghóa giao ñieän vaät lyù giöõa DTE ( Data terminal Equipment : thieát bò ñaàu cuoái döõ lieäu ) vaø DCE ( Data Communications Equipment : thieát bò cuoái keânh döõ lieäu ) (ví duï giöõa 1 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ù 1 soá ít chaân laø caàn thieát cho vieäc lieân keát. Veà phöông dieän ñieän, chuaån naøy quy ñònh möùc logic 1 vaø möùc logic 0 töông öùng vôùi caùc möùc ñieän aùp nhoû hôn –3V vaø lôùn hôn +3V. Toác ñoä ñöôøng truyeàn khoâng vöôït quaù 20Kb/saûn phaåm vôùi khoaûng caùch döôùi 15m.
Chuaån RS-232 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-232 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 1 bit. Giaû söû vôùi toác ñoä truyeàn 19200 baud thì thôøi gian chuyeån möùc logíc phaûi nhoû hôn 0.04/19200=2.1µs,ñieàu naøy laøm giôùi haïn chieàu daøi ñöôøng truyeàn .Vôùi toác ñoä 19200 baud ta coù truyeàn toái ña 50ft (Gaàn baèng 15.24m).
1 1 0 1 0 0 1 1
Start bit
Stop bit
D0 D1
D2
D3
D4 D5
D6 D7
+12V
-12V
Moät trong nhöõng vaán ñeà caàn löu yù khi söû duïng RS-232 laø maïch thu phaùt khoâng caân baèng ( ñôn cöïc, töùc laø ñieän aùp vaøo so vôùi ñaát ).
Chuaån RS-489 vaø RS-423A : Vaøo naêm 1978-1979, EIA ñöa ra 2 chuaån giao tieáp môùi ñeå khaéc phuïc caùc nhöôït ñieåm treân cuûa RS-232 laø RS-444 ( caân baèng ) vaø RS-423 (khoâng caân baèng).
Söï choïn löïa giöõa truyeàn caân baèng vaø khoâng caân baèng ñöôïc quyeát ñònh bôûi toác ñoä truyeàn tín hieäu. Khi toác ñoä truyeàn vöôït quaù 20Kbps thì haàu heát caùc maïch söû duïng truyeàn caân baèng, ngöôïc laïi ta söû duïng truyeàn khoâng caân baèng. Vôùi chuaån RS-449, toác ñoä truyeàn coù theå treân 20Kbps.
Vôùi chuaån RS-423, toác ñoä truyeàn coù theå leân tôùi 100Kbps vaø khoaûng caùch truyeàn leân ñeán 1km. Tieâu chuaån naøy söû duïng caùc IC kích phaùt, thu MC3488 vaø MC3486.
Chuaån RS-422A : Moät caûi tieán nöõa cuûa chuaån RS-232 laø chuaån RA-422A. Vôùi chuaån naøy ñoä lôïi ñöôïc gia taêng vaø söû duïng vieäc truyeàn tín hieäu sai bieät ( Differential data ) treân nhöõng ñöôøng truyeàn caân baèng. Moät döõ lieäu sai bieät yeâu caàu hai daây, moät cho döõ lieäu khoâng ñaûo (noninverted ), moät 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 ñieän trôû ôû ñaàu cuoái. Moät IC laùi ( Driver ) bieán ñoåi caùc möùc logic thoâng thöôøng thaønh moät caëp tín hieäu sai bieät ñeå truyeàn. Moät boä phaän bieán ñoåi tín hieäu sai bieät ngöôïc laïi thaønh caùc möùc logíc. Döõ lieäu nhaän laø phaàn khaùc nhau giöõa tín hieäu khoâng ñaûo ( A ) vaø tín hieäu ñaûo ( ). Chuù yù raèng khoâng caàn noái ñaát giöõa thieát bò thu vaø thieát bò phaùt. Caùc IC laùi RS-422A haàu heát hoaït ñoäng vôùi ñieän aùp nguoàn +5V nhö caùc chip logic. Vôùi chuaån naøy toác ñoä truyeàn, khoaûng caùch truyeàn ñöôïc caûi thieän raát nhieàu.
Chuaån RS-485 : Giao tieáp EIA RS_485 döïa treân chuaån RS-422A , noù laø moät caûi tieán cuûa chuaån naøy. Ñaëc tính ñieän cuûa noù gioáng nhö RS_422A . RS-485 laø chuaån truyeàn vi sai, söû duïng hai daây caân baèng, coù theå ñaït toác ñoä 10Mbps vaø chieàu daøi truyeàn thoâng co._.ù theå leân tôùi 4000 feet (khoaûng 1.2km). Ñieän aùp vi sai ngoõ ra khoaûng +1.5 ñeán +5V neáu laø logic “0” va töø –3V ñeán –1.5V cho möùc logic “1”. Moät söï khaùc bieät quan troïng cuûa RS-485 laø noù cung caáp ñeán 32 drivers. Vaø 32 reicever treân cuøng 1 ñöôøng truyeàn. Ñieàu naøy cho pheùp taïo ra moät maïng cuïc boä. Ñeå coù khaû naêng nhö vaäy thì ngoõ ra cuûa driver RS-485 laø ngoõ ra traïng thaùi. Noù coù theå ôû möùc toång trôû cao ñeå bus khoâng bò chaäp khi coù moät driver truyeàn.
Card giao tieáp RS_485 vôùi PC ñöôïc cheá taïo saún vaø söû duïng keát noái DB9 nhö chuaån RS-422A. Treân car coù 1 tín hieäu ñieàu khieån ñeå treo ngoõ ra cuûa driver leân möùc toång trôû cao khi noù nhöôøng ñöôøng truyeàn cho 1 driver khaùc. Thoâng thöôøng ngöôøi ta duøng tín hieäu DTR ñeå laøm vieäc naøy khi ñöôøng tín DTR khoâng ñöôïc duøng ñeå giao tieáp beân ngoaøi. Ñoàng thôøi moät giao thöùc meàm ñöïôc söû duïng ñeå xaùc ñònh ñòa chæ moät driver ñöôïc pheùp truyeàn taïi moät thôøi ñieåm, caùc driver ôû traïng thaùi toång trôû cao.
Chuaån RS-485 thöôøng ñöôïc duøng trong maïng coù quan heä Master-Slave. Chæ coù duy nhaát moät traïm laø Master ( boä ñieàu khieån maïng ), coøn nhöõng traïm khaùc laø caùc Slave. Master ñöôïc tryuyeàn baát cöù luùc naøo, noù seõ chæ ñònh moät Slave baát kyø giao tieáp vôùi noù taïi moät thôøi ñieåm. Slave chæ coù theå truyeàn khi nhaän moät leänh thích hôïp töø Master. Moãi Slaver coù moät ñòa chæ treân ñöôøng truyeàn vaø seõ khoâng ñöôïc pheùp truyeàn neáu khoâng ñöôïc Master yeâu caàu.
III. Caùc phöông phaùp truyeàn thoâng :
1. Ñôn coâng :( Simplex Communication ) truyeàn thoâng moät chieàu, döõ lieäu chæ coù theå truyeàn theo moät chieàu töø maùy tính tôùi thieát bò ngoaïi vi maø khoâng coù chieàu ngöôïc laïi.
â
Khoái döõ lieäu
Maùy tính Ngoaïi vi
2. Baùn song coâng: ( Full-duplex Communication ) thoâng tin ñöôïc truyeàn theo hai böôùc. Böôùc 1 thoâng tin ñöôïc truyeàn töø maùy tính ñeán ngoaïi vi. Böôùc hai nhaän döõ lieäu töø ngoaïi vi ñeán maùy tính. Cho pheùp truyeàn hai chieàu.
Böôùc 1-phaùt
â
CRC Khoái döõ lieäu
ACK/NAK
á
Maùy tính Böôùc 2-thu Ngoaïi vi
3. Song coâng : (Full-duplex Communication ) phaùt thu ñoàng thôøi.
Ñeå thöïc hieän vieäc thoâng tin caàn coù caùc nghi thöùc ñieàu khieån :
ACK ( Acknowledge ) tín hieäu baùo xaùc nhaän, maùy thu xaùc nhaän döõ lieäu ñöôïc truyeàn.
NAK ( Not Acknowledge ) maùy thu gôûi tín hieäu khoâng xaùc nhaän neáu döõ lieäu sai.
CRC ( Cyclic Redundence Check ) kieåm tra dö thöøa chu kyø. Söû duïng caùc thoâng tin thöøa ñeå phaùt hieän vaø söûa loãi. Ví duï duøng ba phaàn töû cuøng thöïc hieän moät chöùc naêng, neáu ñaàu ra cuûa moät phaàn töû khaùc ñaàu ra cuûa hai phaàn töø coøn laïi thì phaùt hieän sai vaø phaûi loaïi boû.
RCR Khoái Ack CRC Khoái döõ lieäu
Khoái döõ lieäu RCR Khoái Ack CRC
Phaùt vaø thu
â
á
Maùy tính Ngoaïi vi
Truyeàn thoâng tuaàn töï :
Haàu heát caùc maùy tính löu tröõ vaø thao taùc vaø löu tröõ döõ lieäu theo kieåu song song. Nghóa laø khi gôûi 1 byte töø boä phaän naøy tôùi boä phaän khaùc cuûa maùy tính, khoâng phaûi truyeàn tuaàn töï töøng bít maø truyeàn ñoàng thôøi nhieàu bít treân cuøng caùc maïch daây song song. Soá caùc bit gôûi ñi cuøng moät luùc thay ñoåi tuyø theo moãi loaïi maùy tính khaùc nhau nhöng thöôøng laø 8 hoaëc boäi cuûa 8. Vì theá maùy tính laøm vieäc thöôøng nhieàu byte cuøng luùc, ít nhaát laø moät byte.
Nhöng truyeàn thoâng töø maùy tính ñeán moät maùy tính khaùc hay thieát bò ngoaïi vi thì ñöôïc laøm tuaàn töï, döõ lieäu ñöôïc gôûi töøng bit. Boä giao tieáp tuaàn töï nhaän nhöõng byte treân nhöõng maïch daây song song vaø gôûi caùc bít ñi moät caùch rieâng bieät.
Döõ lieäu treân ñöôøng truyeàn chæ ôû traïng thaùi ñieän theá döông( MARK ) hoaëc ñieän theá aâm ( SPACE ). Baát kyø döõ lieäu ñöôïc truyeàn naøo, tröôùc tieân phaûi chuyeån thaønh 1 daõy thöù töï caùc MARK vaø SPACE, MARK töông öùng vôùi logic 1, SPACE töông öùng vôùi logic 0.
Coù hai hình thöùc truyeàn thoâng tuaàn töï
Truyeàn thoâng baát ñoàng boä : ( Asynchronous Communication )
Kyù töï ñöôïc truyeàn theo caùc Frame, moãi frame goàm caùc start bit, caùc bít döõ lieäu cuûa kyù töï ñöôïc truyeàn, parity bit ( ñeå kieåm tra loãi ñöôøng truyeàn), stop bit. Xöû lyù truyeàn vaø nhaän döõ lieäu theo phöông thöùc naøy söû duïng caùc vi maïch thu phaùt khoâng ñoàng boä vaïn naêng UART ( Universal Asynchronous Receiver Transmitter ). Nhöôït ñieåm cuûa phöông phaùp naøy laø toác ñoä truyeàn khaù chaäm vì phaûi truyeàn theâm caùc bit start , bit stop, parity. Muoán loaïi boû caùc bit naøy ñeå naâng cao soá bit döõ lieäu ñöôïc truyeàn, ngöôøi ta söû duïng phöông thöùc truyeàn döõ lieäu ñoàng boä (Synchronous ).
Chieàu cuûa doøng döõ lieäu
Luoân ôû möùc thaáp Luoân ôû möùc cao
Start D0 D1 D2 D3 D4 D5 D6 D7 Parity Stop Stop
Traïng thaùi noåi
Hình veõ treân minh hoïa giao thöùc truyeàn döõ lieäu khoâng ñoàng boä ( Asynchronouns Transmission Protocol). Neáu keânh truyeàn khoâng coù kyù töï naøo ñöôïc truyeàn , noù seõ ôû möùc cao. Khi coù kyù töï ñöôïc truyeàn, keânh truyeàn seõ ñöôïc haï xuoáng möùc thaáp ( Start bit ) ñeå baùo cho phía thu laø coù 1 kyù töï ñöôïc truyeàn tôùi, tieáp ñoù laø caùc bít cuûa kyù töï ( coù theå laø 5,6 ,7 hay 8 bit – trong ví duï treân laø 8 bit )
Ñeå kieåm tra loãi ñöôøng truyeàn ngöôøi ta söû duïng bít chaún leû ( parity bit ), töùc laø kieåm tra chaún leû soá bit 1. Neáu kieåm tra chaún, nghóa laø toång soá bit 1 trong kyù töï ( töø D0 " D7 ) vaø bít chaún leû phaûi chaún. Ngöôïc laïi neáu kieåm tra soá bit 1 trong kyù töï laø leû thì bit chaún leû phaûi leû. Bit stop ñöôïc söû duïng ñeå baùo cho phía thu bieát raèng vieäc truyeàn kyù töï ñaõ keát thuùc. Soá bit stop thöôøng ñöôïc duøng laø 1, 1.5, 2 bit. Nhö vaäy trong phöông phaùp truyeàn baát ñoàng boä, caùc bit döõ lieäu seõ ñöôïc ñoùng khung cuøng vôùi caùc bit start, stop, vaø bit parity taïo thaønh 1 Frame.
Truyeàn thoâng ñoàng boä : ( Synchronous communications )
Phöông thöùc truyeàn naøy khoâng duøng caùc bít start, stop ñeå ñoùng khung moãi kyù töï maø cheøn caùc kyù töï ñaëc bieät nhö SYN ( Synchronization ), EOT ( End of Transmission ) hoaëc 1 côø giöõa caùc döõ lieäu cuûa ngöôøi söû duïng ñeå baùo hieäu cho ngöôøi nhaän döõ lieäu bieát raèng döõ lieäu ñaõ hoaëc ñang ñeán.
Truyeàn thoâng ñoàng boä thöôøng ñöôïc tieán haønh vôùi toác ñoä 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 kyù töï ñeå duy trì ñoàng boä, ngay caû luùc khoâng phaùt döõ lieäu. Moät kyù töï ‘IDLE’ ñöôïc gôûi ñi khi khoâng coù döõ lieäu phaùt. Phöông phaùp truyeàn ñoàng boä khaùc phöông phaùp truyeàn baát ñoàng boä ôû khoaûng thôøi gian truyeàn giöõa hai kyù töï luoân gioáng nhau.
Truyeàn ñoàng boä ñoøi hoûi caùc xung clock trong maùy thu vaø phaùt phaûi duy trì ñoàng boä nhöõng khoaûng thôøi gian daøi.
Trong phöông phaùp truyeàn ñoàng boä caùc kyù töï truyeàn seõ ñöôïc keøm theo moät kyù töï ñoàng boä SYN (maõ ASCII laø 22 ). Xöû lyù truyeàn vaø nhaän laø caùc vi maïch USART ( Universal Synchronous Asynchronous Receiver Transmitter ), vi maïch naøy cho pheùp hoaït ñoäng trong caû hai cheá ñoä truyeàn.
SOH
Header
SXT
Text
EXT
BCC
Thoâng tin ñieàu khieån döõ lieäu
SOH (Start of header ) : Phaàn baét ñaàu cuûa 1 ñôn vò thoâng tin chuaån.
SXT ( Start of text ) : Chæ söï keát thuùc cuûa header vaø baét ñaàu phaàn döõ lieäu.
EXT (End of text ): kyù töï keát thuùc phaàn döõ lieäu hay vaên baûn.
BCC ( Block check character ) : kyù töï kieåm tra khoái.
TEXT : thaân döõ lieäu hay vaên baûn.
HEADER : phaàn ñaàu.
CHÖÔNG III:
Vi maïch UART ( Universal Asynchronous Receiver ) 8250A, 16450.
I. Ñòa chæ Port vaø IRQ’s:
1. Baûng ñòa chæ PORT tieâu chuaån : trình baøy ôû döôùi :
Teân
Ñòa chæ
IRQ
COM 1
3F8H
4
COM 2
2F8H
3
COM 3
3E8H
4
COM4
2E8H
3
ÔÛ treân laø baûng ñòa chæ chuaån. Neáu coù vaán ñeà veà thu phaùt khi söû ñòa chæ caùc coång Com treân chuùng ta coù theå xem töø vuøng heä thoáng BIOS .
2. Baûng ñòa chæ coång Com trong vuøng döõ lieäu BIOS : trình baøy ôû döôùi.
Ñòa chæ
Chöùc naêng
0000:0400
Ñòa chæ neàn cuûa Com 1
0000:0402
Ñòa chæ neàn cua Com 2
0000:0404
Ñòa chæ neàn cua Com 3
0000:0406
Ñòa chæ neàn cua Com 4
Baûng treân trình baøy cuûa coång Com maø chuùng ta coù theå tìm thaáy trong vuøng döõ lieäu BIOS cuûa PC. Moãi ñòa chæ goàm hai Byte.
II. Toång quan :
Vi maïch 8250A ( hoaëc 16450 ) cuûa Intel laø moät UART ñöôïc duøng raát roäng raõi trong caùc PC. UART 8250A coù caùc chöùc naêng chính nhö 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 vaø ñoåi chuùng thaønh caùc kyù töï song song. Sau ñoù gôûi ñeán vi xöû lyù (µp).
Theâm caùc bit Start, stop, parity vaøo töøng kyù töï tröôùc khi phaùt ñi vaø taùch caùc bit naøy ra khoûi kyù töï nhaän ñöôïc.
Baûo ñaõm caùc bit kyø töï 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 töông öùng : loãi kyù töï, loãi parity.
Set tín hieäu baét tay phaàn cöùng thích hôïp vaø cho bieát traïng thaùi cuûa tín hieäu.
1. Caùc thanh ghi cuûa UART :
Caùc thanh ghi ñieàu khieån chính (Control Register : CR ) nhaän ñöôïc leänh töø CPU.
Thanh ghi ñieàu khieån ñöôøng truyeàn ( Line Control Register : LCR ): duøng ñeå ñaët caùc thoâng soá truyeàn .
Thanh ghi ñieàu khieån Modem ( Mode Control Register : MCR ) : ñieàu khieån tín hieäu baét tay gôûi töø UART.
Thanh ghi cho pheùp ngaét ( Interrupt Enable Register : IER ) :
Thanh ghi traïng thaùi ( Status Register : SR ) : thoâng baùo cho CPU bieát 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 veà traïng thaùi cuûa nhöõng ñöôøng baét tay.
Thanh ghi ñònh danh ngaét ( Interrupt Identification Register : IIR ) : chöùa thoâng tin veà traïng thaùi hieän taïi cuûa ngaét gôûi ñeán.
Thanh ghi ñeäm ( Buffer Register : BR ) : phuïc vuï cho vieäc trao ñoåi döõ lieäu.
Thanh ghi giöõ phaùt ( Transmitter Holding Register : THR ) : giöõ döõ lieäu keá tieáp tröôùc khi phaùt ñi.
Thanh ghi ñeäm thu ( Receiver Buffer Register : RBR ) : giöõ kí töï thu ñöôïc sau cuøng.
ÔÛ baûng döôùi ñòa chæ neàn coù theå laø ( 2F8H, 3F8H, 2E8H, 3E8H ) tuyø theo caùch choïn cuûa ngöôøi laäp trình.
Ñòa chæ neàn
DLAB
A2
A1
A0
Choïn ra
+0
0
0
0
0
Thanh ghi ñeäm thu (RBR ), thanh ghi giöõ phaùt (THR)
+1
0
0
0
1
Thanh ghi cho pheùp taïo yeâu caàu ngaét (IER).
+0
1
0
0
0
Thanh ghi cho soá chia phaàn thaáp (LSB).
+1
1
0
0
1
Thanh ghi cho soá chia phaàn cao (MSB).
+2
X
0
1
0
Thanh ghi nhaän daïng nguoàn goác yeâu caàu ngaét(IIR).
+3
X
0
1
1
Thanh ghi ñieàu khieån ñöôøng daây (LCR ).
+4
X
1
0
0
Thanh ghi ñieàu khieån Modem (MCR ).
+5
X
1
0
1
Thanh ghi traïng thaùi ñöôøng daây(LSR ).
+6
X
1
1
0
Thanh ghi traïng thaùi Modem ( MSR ).
+7
0
1
1
1
Thanh ghi nhaùp (daønh cho CPU, ít khi söû duïng ).
Trong baûng treân baïn phaûi chuù yù coät DLAB . Khi DLAB ñaët leân ‘0’
hoaëc’1’ thì moät vaøi thanh ghi seõ thay ñoåi. Coù theå thaáy nhö theá naøy, UART cho pheùp 12 thanh ghi, trong khi ñoù chæ coù 8 port ñòa chæ. DLAB duøng truy caäp bit choát chia, khi DLAB ñaët leân’1’ trong thanh ghi ñieàu khieån ñöôøng truyeàn (bit thöù 7 cuøa thanh ghi naøy), thì hai thanh ghi trôû neân coù giaù trò ( Divisor Latch Low Byte : ‘Reg+0’, Divisor Latch High Byte : ‘Reg +1’ ), sau ñoù chuùng ta duøng hai thanh ghi naøy duøng cho vieäc ñaët toác ñoä truyeàn thoâng. Ví duï nhö sau :
Toác ñoä
( Baud )
Divisor
Byte choát chia cao(DLHB)
Byte choát chia thaáp(DLLB)
50
2304
09H
00H
300
384
01H
80H
600
192
00H
C0H
2400
48
00H
30H
4800
24
00H
18H
9600
12
00H
0CH
19200
6
00H
06H
38400
3
00H
03H
57600
2
00H
02H
115200
1
00H
01H
3. Vi maïch 8250A ñöôïc theå hieän treân hình veõ ôû döôùi:
Vi maïch 8250A coù 3 tín hieäu choïn chip ñeå taïo ñieàu kieän thuaän lôïi cho ngöôøi söû duïng trong vieäc giaûi maõ ñòa chæ cô baûn. Caùc chaân ñòa chæ cô baûn A1, A2, A0, giuùp ta choïn caùc thanh ghi beân trong cuûa UART ( xem baûng ôû döôùi)
Master
Ñeäm bus
döõ lieäu
Logic ñieàu khieån ghi ñoïc
A2
CS2
A0
A1
A0
CS1
Ñeäm phaùt
Ñieàu khieån
Thu
Phaùt
Vaø
modem
Ñeäm thu
Xtal
RxClk
RLSD
RI
INTRPT
D0…D7
Baûng choïn thanh ghi trong vi maïch 8250A.
X-tal laø caùc chaân ñeå caém thaïch anh duøng cho maïch dao ñoäng beân trong cuûa 8250A. Trong tröôøng hôïp söû duïng tín hieäu ñoàng hoà chuaån töø beân ngoaøi thì ta ñöa xung ñoàng hoà vaøo chaân X-tal vaø boû löûng chaân X-tal. Chaân RLSD ( receiver line signal detect ) chính laø chaân tìm thaáy soùng mang ( hoaëc cho tieâu chuaån RS-232C hoaëc Syndet cuûa 8251A ), töùc laø thieát laäp ñöôïc ñöôøng truyeàn. Tín hieäu ( Ring indicator ), cuõng laø tín hieäu chuaån cuûa RS-232C, ñeå modem thoâng baùo laø coù xung reùo chuoâng. Tín hieäu INTRPT laø tín hieäu yeâu caàu ngaét CPU. Caùc ñaàu ra phuï vaø daønh cho ngöôøi söû duïng trong trong tröôøng hôïp khoâng töông thích vôùi chuaån RS-232C. Chaân MS (Master reset) laø choã noái vaøo cuûa tín hieäu reset cuûa heä thoáng coù taùc duïng xoùa taát caû caùc thanh ghi trong vi maïch 8250A, tröø thanh ghi ñeäm thu, thanh ghi ñeäm phaùt vaø caùc thanh ghi MSB vaø LSB cuûa soá chia.
Toác ñoä truyeàn ñöôïc tính nhôø vaøo vieäc choïn xung ñoàng hoà vaøo X-tal vaø vieäc choïn soá chia cuûa taàn soá naøy( ñeå taïi thanh ghi MSB vaø LSB ). Ví duï, neáu ta duøng taàn soá 1.8432 Mhz taïi X-tal, ta muoán toác ñoä phaùt laø 9600 baud ta tìm soá chia ñeå ghi vaøo LSB vaø MSB nhö sau :
Soá chia = taàn soá vaøo /( toác ñoä phaùt x 16) = 1.8432x10 /(9600x16) =12.
Thanh ghi ñieàu khieån ñöôøng truyeàn : (Line control register : LCR )
Thanh ghi naøy coù teân laø thanh ghi ñònh daïng döõ lieäu vì noù quyeát ñònh khuoân daïng döõ lieäu cuûa truyeàn thoâng treân ñöôøng daây. Daïng thöùc cuûa thanh ghi LCR ñöôïc bieåu dieãn nhö hình ôû döôùi :
D7 D6 D5 D4 D3 D2 D1 D0
Bit ñieàu khieån giaùn ñoaïn.
1: buoäc Soun=0.
0:khoâng hoaït ñoäng.
Bit truy caäp soá
1: truy nhaäp soá chia.
0: Truy nhaäp IER,THR ,RBR
1 : ñaûo parity.
0: khoâng hoaït ñoäng
Kieåm tra chaún leû.
1: parity chaún.
0: parity leû.
Soá bit stop.
0: 1bit.
1:1.5 bit
2 bit
Choïn ñoä daøi töø.
00: 5bit
01: 6bit.
10: 7 bit.
11: 8bit
Cho pheùp taïo, kieåm tra parity.
1: cho pheùp.
0: caám.
DLAB
SBCB
SP
EPS
PEN
STB
WSL1
WSL0
Trong thanh ghi ñieàu khieån ñöôøng truyeàn LCR caàn chuù yù ñeán vaán ñeà sau : vieäc quy ñònh soá bit stop khoâng chæ phuï thuoäc vaøo bit D2 maø coøn phuï thuoäc vaøo maõ choïn ñoä daøi kyù töï. Cuï theå laø : neáu D2=1 maø maõ naøy laø 00( D1D0 )thì seõ taïo /kieåm tra 1.5 bit stop, neáu maõ naøy laø 6, 7, 8 bit thì seõ taïo / kieåm tra 2 bit stop.
Thanh ghi ñeäm phaùt : (Transmitter holding register : THR)
Kyù töï caàn phaùt ñi phaûi ñöôïc ghi töø CPU vaøo thanh ghi naøy tröôùc khi phaùt ñi trong khi bit DLAB=0. Sau ñoù , khi truyeàn ñi 8255A laáy döõ lieäu töø thanh ghi naøy, ñoùng khung noù nhö ñaõ ñònh, sau ñoù laàn löôït ñöa töøng bít ra coång.
Thanh ghi ñeäm thu (Receiver buffer register : RBR ) : Khi 8250A nhaän ñöôïc 1 kyù töï qua chaân , noù thaùo boû khung kyù töï vaø giöõ kyù töï taïi thanh ghi ñeäm thu ñeå CPU ñoïc, CPU chæ ñoïc kyù töï naøy khi bit DLAB=0.
Thanh ghi cho pheùp taïo yeâu caàu ngaét( Interrupt enable register : IER ): thanh ghi naøy duøng ñeå cho pheùp hay caám ngaét. Trong khi maïch 8250A hoaït ñoäng, coù theå taùc ñoäng ñeán CPU thoâng qua chaân INTRPT cuûa UART. Moãi bit trong caùc bit D3, D2, D1, D0 ôû möùc cao seõ cho pheùp caùc traïng thaùi öùng vôùi bit ñoù ñöa ra yeâu caàu ngaét ñoái vôùi CPU. Bieåu dieãn thanh ghi IER ôû hình döôùi :
0
0
0
0
Modem
Rline
Txemty
RXRDY
1:Cho pheùp thay ñoåi traïng thaùi cuûa modem gaây ngaét
1: cho pheùp ngaét khi ñeäm giöõ phaùt roãng.
1: cho pheùp gaây ngaét khi ñeäm thu ñaày.
D7 D6 D5 D4 D3 D2 D1 D0
1: Cho pheùp caùc tín hieäu traïng thaùi ñöôøng daây thu ngaét.
Thanh ghi nhaän daïng nguoàn yeâu caàu ngaét: (Interrupt Identification Register : IIR ):
Thanh ghi nhaän daïng ngaét chæ duøng ñeå ñoïc, chöùa maõ öu tieân cao nhaát cuûa yeâu caàu ngaét ( taïi chaân INTRPT cuûa 8250A ) ñang chôø ñöôïc phuïc vuï. Do ñoù khi caàn xöû lyù caùc yeâu caàu ngaét theo kieåu thaêm doø, CPU chæ caàn ñoïc bit 0 cuûa thanh ghi naøy ñeå bieát laø coù yeâu caàu ngaét, vaø caàn xeùt caùc bit ( Bit 1, bit 2 ) ñeå xaùc ñònh nguoàn goác cuûa yeâu caàu ngaét. Thöù töï öu tieân ngaét töø thaáp ñeán cao theo thöù töï töø treân xuoáng döôùi theo baûng ôû döôùi :
Bit
Ghi chuù
Bit 6:7
Bit 6
Bit 7
Cho traïng thaùi boä ñeäm vaøo tröôùc ra tröôùc.
0
0
Khoâng vaøo tröôùc ra tröôùc.
0
1
Cho pheùp vaøo tröôùc ra tröôùc nhöng khoâng duøng.
1
1
Cho pheùp vaøo tröôùc ra tröôùc .
Bit 5
Cho pheùp vaøo tröôùc ra tröôùc 64 byte ( chæ 16750).
Bit 4
Bit 3
0
1
Bit 1: 2
Bit 2
Bit 1
0
0
Ngaét traïng thaùi modem.
0
1
Ngaét khi ñeäm giöõ phaùt roãng.
1
0
Ñeäm thu ñaày.
1
1
Ngaét traïng thaùi ñöôøng truyeàn thu.
Bit 0
0
Coù yeâu caàu ngaét .
1
Khoâng coù.
Thanh ghi ñieàu khieån Modem: ( Modem control register : MCR ) : Thanh ghi ñieàu khieån modem laø thanh ghi ñoïc ghi. Thanh ghi coøn ñöôïc goïi laø thanh ghi ñieàu khieån caùc tín hieäu ra cuûa modem bôûi vì noù cho pheùp ta ñieàu khieån caùc tín hieäu taïi caùc chaân vaø cuûa maïch UART. Daïng thöùc cuûa noù ñöôïc bieåu ñieãn nhö sau:
Bit
Ghi chuù
Bit 7
Reserved
Bit 6
Reserved
Bit 5
Cho pheùp ñieàu khieån töï ñoäng traøn (chæ 16750).
Bit 4
Noái voøng cuïc boä
1: noái voøng
0: bình thöôøng
Bit 3
OUT 2
Bit 2
OUT 1
Bit 1
RST( force reques to send)
1: ñöa =0.
0: ñöa =1.
Bit 0
DTR (Force Data Terminal Ready).
1: ñöa DTR=1.
0: ñöa =0.
Vôùi bit 0 ta coù theå ñieàu khieån tín hieäu taïi chaân cuûa 8250A ñaït möùc tích cöïc thaáp ñeå baùo cho UART saún saøng laøm vieäc.
Vôùi bit 1 ôû möùc thaáp thì 8255A seõ baùo cho UART saún saøng phaùt kyù töï.
Baèng bit 2, bit 1 cuûa thanh ghi MCR chuùng ta coù theå ñieàu khieån chaân vaø tích cöïc hay khoâng tích cöïc.
Bit 4 cuûa thanh ghi MCR cho pheùp maïch 8250A laøm vieäc ôû cheá ñoä noái voøng cuïc boä ñeå kieåm tra chöùc naêng cuûa UART.
Caùc chaân ñieàu khieån vaøo cuûa modem (, ,, ) khoâng ñöôïc noái ra ngoaøi maø ñöôïc noái beân trong maïch vôùi caùc chaân ñieàu khieån ra cuûa modem( , , , ).
Thanh ghi traïng thaùi ñöôøng daây ( Line Status Register : LSR ) : Thanh ghi naøy laø thanh ghi chæ ñoïc, cho bieát traïng thaùi cuûa vieäc truyeàn tín hieäu treân ñöôøng daây nhö theá naøo. Daïng thöùc cuûa thanh ghi naøy bieåu dieãn nhö ôû baûng döôùi :
Bit
Ghi chuù
Bit 7
Loãi trong quaù trình thu FIFO ( Error in Receiver FIFO ).
Bit 6
Thanh ghi dòch phaùt roãng ( Empty Data Holding Register ).
Bit 5
Thanh ghi giöõ phaùt roãng ( Empty Transmitter Holding Register ).
Bit 4
Break Interrupt
Bit 3
Loãi khung( Framing error).
Bit 2
Loãi parity( parity error).
Bit 1
Loãi do ñeø thu (Overrun error)
Bit 0
Döõ lieäu saún saøng ( data Ready ).
Khi bit 6 set leân (möùc 1 ) thì caû hai thanh ghi truyeàn phaùt ( Transmitter holding register ) vaø thanh ghi dòch (shift register ) ñeàu roãng . Trong khi ñoù khi bit 5 set leân thì chæ coù thanh ghi giöõ phaùt laø troáng ( transmitter holding register ). Vaäy ñaâu laø söï khaùc nhau giöõa chuùng. Khi bit 6 set leân thì thanh giöõ phaùt roãng, ñöôøng truyeàn khoâng tích cöïc. Coøn khi bit 5 set leân thì thanh ghi truyeàn phaùt roãng nhöng bieán ñoåi noái tieáp duøng thanh ghi dòch coù theå ñang laøm vieäc.
Bit 4= 1, xaûy ra khi tín hieäu ôû ñaàu vaøo cuûa phaàn thu giöõ möùc logic 0 laâu hôn thôøi gian daønh cho 1 kyù töï, bit naøy bò xoaù khi CPU ñoïc thanh ghi LSR.
Bit 3 :
Bit 2=1, khi coù loãi parity, bit naøy ñöôïc xoaù khi CPU ñoïc thanh ghi LSR.
Bit 1=1, khi thu khoâng ñuû nhanh ( loãi thu ñeø), bit naøy ñöôïc xoaù khi CPU ñoïc thanh ghi LSR.
Bit 0 =1, khi ñaõ nhaän ñöôïc 1 kyù töï vaø ñeå noù trong thanh ghi ñeäm (RBR), bit naøy ñöôïc xoaù khi CPU ñoïc thanh ghi RBR.
Thanh ghi traïng thaùi modem ( Modem Status Register : MSR) :
Thanh ghi naøy coøn ñöôïc goïi laø thanh ghi traïng thaí vaøo töø trang thía RS-232C vì noù cho bieát traïng thaùi hieän thôøi cuûa caùc tín hieäu ñieàu khieån modem töø ñöôøng daây.
CHÖÔNG V:
Giao Tieáp Maùy Tính Vôùi Vi Xöû Lyù.
I. Truyeàn nhaän qua coång noái tieáp :
Vieäc truyeàn nhaän qua coång noái tieáp ñöôïc thöïc hieän bôûi UART. Nguyeân taéc cho chip UART hoaït ñoäng nhö sau:
Ñeå truyeàn ñi moät kyù töï, ñaàu tieân kyù töï ñoù seõ ñöôïc ñöa vaøo thanh ghi ñôïi truyeàn ( Transmit Holding Register ), sau ñoù ñöôïc ñöa qua thanh ghi dòch cuûa boä phaùt ( transmit Shift Register ). Sau khi kyù töï tröôùc ñaõ truyeàn xong, töøng bit cuûa kyù töï ñöôcï truyeàn seõ dòch vaøo keânh döõ lieäu.
Khi nhaän moät kyù töï, ñaàu tieân caùc bit cuûa noù laàn löôït ñöôïc naïp vaøo thanh ghi dòch cuûa boä thu ( Transmit 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, parity.
Ñeå thöïc hieän vieäc truyeàn döõ lieäu qua coång noái tieáp ta phaûi thöïc hieän caùc böôùc sau:
Choïn coång truyeàn Com 1, hay Com 2. Ñòa chæ cuûa Com 1 thöôøng laø 3F8H, coøn Com 2 laø 2E8H. Ñoái vôùi moät soá loaïi maùy tính thì ñòa chæ cuûa coång Com coù theå vaøo BIOS ñeå set leân, neân khi vieát chöông trình truyeàn caàn vaøo BIOS ñeå xem ñòa chæ coång Com cuï theå. Neáu ta choïn COM 1 laø 3F8 H, Com 2 laø 2F8 H thì ñòa chæ caùc thanh ghi khaùc laø:
Thanh ghi
Ñòa chæ Com 1
Ñòa chæ Com 2
Data register
3F8H
2F8H
Interrupt enable register
3F9H
2F9H
Interrupt identification register
3FAH
2FAH
Line control register
3FBH
2FBH
Modem control register
3FCH
2FCH
Line status register
3FDH
2FDH
Modem control register
3FEH
2FEH
Ñaët toác ñoä baud
Ñaët caáu hình truyeàn : data bit, stop bit, parity (em choïn 8 bit data, 1 bit stop, khoâng coù parity).
Cho pheùp ngaét neáu söû duïng.
Ñeå thöïc hieän vieäc truyeàn döõ lieäu tröôùc heát chuùng ta phaûi khôûi ñoäng coång COM, sau ñoù thöïc hieän vieäc truyeàn phaùt vôùi chöông trình truyeàn vaø phaùt trình baøy ôû döôùi ñaây döôïc vieát theo kieåu API:
Chöông trình khôûi ñoäng coång COM: Choïn Com 2 vôùi ñia chæ 2F8H ñeå thöïc hieän vieäc truyeàn döõ lieäu. Caàn chuù yù ñeán Bit DLAB.
(………………………………………………………………………….)
const
pathsl ='c:\my documents\delphi\';
com2=$2F8;
Reg2F8=com2+0;
Reg2F9=com2+1;
Reg2FA=com2+2;
Reg2FB=com2+3;
Reg2FC=com2+4;
Reg2FD=com2+5;
(………………………………………………………………………….)
procedure Tform2.Initcom;
begin
xuat(Reg2FB,$80);{DLAP=1}
xuat(Reg2F8,$30);{baudrate=2400}
xuat(Reg2F9,$00);{khong su dung ngat}
xuat(Reg2FB,$03);{8 bit data, 1 bit stop, no parity}
end;
(………………………………………………………………………….)
Nhaäp döõ lieäu vôùi haøm nhaäp vieát baèng pascal.
(………………………………………………………………………….)
function Tform2.nhap(addr:word):byte;
var
TEMP : byte;
begin
asm
PUSH Ax
PUSH DX
MOV DX,addr
IN AL,DX
MOV TEMP,AL
POP AX
POP Dx
end;
(………………………………………………………………………….)
Xuaát döõ lieäu vôùi haøm xuat:
(………………………………………………………………………….)
procedure Tform2.xuat(addr:word;data:byte);
begin
asm
PUSH AX
PUSH DX
MOV DX,addr
MOV AL,DATA
OUT DX,AL
POP AX
POP DX
end;
end;
(………………………………………………………………………….)
Trong vieäc truyeàn döõ lieäu neáu söû duïng caùc tín hieäu RTS, CTS … thì chuùng ta caàn phaûi vieát chöông trình cho chuùng . Trong vieäc truyeàn tín hieäu cho ñeà taøi cuûa em coù söû duïng tín hieäu RTS, ñöôïc vieát nhö sau:
(………………………………………………………………………….)
procedure Tform2.setRTS;
var
a: byte;
begin
a:=nhap(Reg2FC);
a:=a or $02;
xuat(Reg2FC,a);
end;
procedure Tform2.RESETRTS;
var
a : byte;
begin
a:=nhap(Reg2FC);
a:=a and $FD;
xuat(Reg2FC,a);
end;
(………………………………………………………………………….)
Coù hai phöông phaùp ñeå ñieåu khieån vieäc thu phaùt döõ lieäu qua UART: phöông phaùp hoûi voøng vaø phöông phaùp taïo ra moät trình ñieàu khieån taïo ngaét. Phöông phaùp hoûi voøng chôø döõ lieäu nhaän xong hoaëc phaùt xong, toác ñoä chaäm khoaûng 34.8 Kbps.
Phaùt kyù töï: Vôùi phöông phaùp hoûi voøng, khi gôûi ñi 1 kyù töï ta phaûi kieåm tra xem thanh ghi ñôïi truyeàn coù roãng hay khoâng baèng caùch xem Bit 6 cuûa thanh ghi LSR ( Line Status Register ) coù baèng moät hay khoâng. Chöông trình vieát cuï theå baèng Delphi 5.0 nhö sau:
(…………………………………………………………)
repeat
test3:=nhap(Reg2FD);
application.ProcessMessages;
until (test3 and $40)=$40;
xuat(Reg2F8,t);
(…………………………………………………………)
Ñeå thu moät kyù töï : Ñeå bieát coù kyù töï vaøo hay chöa kieåm bit 0 cuûa thanh ghi LSR ( Line Status Register ). Neáu baèng ‘1’ thì coù moät kyù töï nhaän vaøo. Vôùi chöông trình cuï theå vieát nhö sau:
(………………………………………………………………………….)
repeat
begin
test6:=nhap(Reg2FD);
test6:=test6 and $01;
end;
until (test6=$01);
(………………………………………………………………………….)
Tuy nhieân ta coù theå söû duïng nhuõng caùch khaùc ñeå thöïc hieän vieäc truyeàn döõ lieäu vôùi phöông phaùp ñôn giaûn hôn veà giaûi thuaät.
Sau ñaây laø moät phöông phaùp coù theå söû duïng maø em tham khaûo ñöôïc trong
giaùo trình Laäp trình gheùp noái maùy tính trong Windows cuûa taùc giaû Ngoâ Dieân Taäp
Ñeå thöïc hieän vieäc môû coång Com ta chæ vieäc goõ moät leänh ñôn giaûn laø
OpenCom(pchar(‘coøm:9600,N,8,1’));
Ñeå truyeàn döõ lieäu ñi:
SendByte();
Ñeå nhaän döõ lieäu veà:
Temp:=ReadByte;
Xuaát tröïc tieáp ra caùc ñöôøng daãn
DTR();
RTS();
…
Deå thöïc hieän ñöôïc nhuõng leänh treân trong Delphi chuùng ta phaûi coù moät teäp tin taøi nguyeân hoã trôï coù teân laø port.dll do taùc giaû cung caáp. Sau ñoù ta phaûi soaïn moät unit (ñöôïc chæ daãn raát roõ trong giaùo trình) ñeå giuùp Delphi nhaän ra ñöôïc taøi nguyeân naøy. Hôi raéc roái moät tyù nhöng maø buø laïi ta seõ gaëp raát nhieàu thuaän lôïi trong laäp trình.
Trong luaän vaên naøy, em söû duïng moät phöông phaùp khaùc ñoù laø duøng MSComm. Phöông phaùp naøy laäp trình raát ñôn giaûn vaø hoã trôï raát maïnh vaø ñöôïc nhieàu ngöôøi söû duïng. Trong Visual Basic MSComm ñaõ ñöôïc nhaø laäp trình cung caáp saün. Coøn trong Delphi muoán söû duïng thì ta phaûi” duøng keù” taøi nguyeân naøy cuûa VB baèng caùch copy teâp tin “mscom.ocs” vaøo trong system cuûa Window sau ñoù vaøo Component cuûa Delphi ñeå khai baùo.
Veà phöông phaùp khai baùo vaø söû duïng seõ ñöôc trình baøy cuï theå ôû trong phaàn phuï luïc cuûa em.
II. Caùc phöông phaùp keát noái :
1. Keát noái maùy tính vôùi moät Kit vi xöû lyù: Khi maùy tính giao tieáp vôùi moät kít vi xöû lyù thì ta chæ duøng RS-232 laø ñuû , vì noù cho pheùp chuyeån ñoåi töø +12V ñeán +5V phuø hôïp vôùi nguoàn cung caáp cho kit vi xöû lyù. Nhöng ñieåm haïn cheá cuûa phöông
phaùp naøy laø khoaûng caùch truyeàn ngaén , toái ña chæ 15 m. Bieåu dieãn giao tieáp ôû hình döôùi :
Kit vi xöû lyù
RS-232
2. Keát noái maùy tính vôùi N (toái ña N=32) kít vi xöû lyù :
Ñeå keát noái maùy tính vôùi nhieàu vi xöû lyù chuùng ta phaûi thöïc hieän caùc böôùc chuyeån ñoåi sau :
Chuyeån ñoåi töø chuaån RS-232 sang RS-485 ñeå coù theå truyeàn tín hieäu treân khoaûng caùch lôùn khoaûng 1.2km.
Chuyeån ñoåi töø RS-485 sang RS-485 sang TTL ñeå phuø hôïp vôùi aùp vaøo cuûa vi xöû lyù.
Möùc ñieän aùp:
RS-232 truyeàn theo kieåu khoâng caân baèng ( aùp leäch so vôùi ñaát ).
RS-485 truyeàn theo kieåu caân baèng ( ñieän aùp sai leäch giöõa hai daây).
RS-232 : -3V Ø -12V : möùc logic 1.
+3VØ +12V :möùc logic 0.
RS-485 : VA –Vb = -1.5V Ø-5V : möùc logic 1.
VA –VB= +1.5VØ+5V : möùc logic 0.
Hình veõ minh hoïa :
Kít vi xöû lyø
Kít vi xöû lyù
RS232/RS485
RS-485
RS-485
CHÖÔNG VI :
Chuaån RS-485
Giôùi thieäu:
Khi heä thoáng caàn truyeàn moät khoái thoâng tin nhoû ôû khoaûng caùch xa, thoâng thöôøng ngöôøi ta choïn RS-485
Maïng söû duïng chuaån RS-485 raát ña daïng: ta coù theå giao tieáp giöõa PC vôùi nhau, hoaëc giöõa PC vôùi Vi Xöû Lyù , hoaëc baát kyø thieát bò naøo truyeàn thoâng noái tieáp baát ñoàng boä. Khi so saùnh vôùi Ethernet vaø nhöõng giao dieän truyeàn thoâng theo nhöõng chuaån khaùc thì giao dieän RS-485 ñôn giaûn vaø giaù thaønh thaáp hôn nhieàu.
Theo nhaän ñònh cuûa em ( ñoái vôùi truyeàn khoái döõ lieäu nhoû ) thì chuaån RS-485 raát linh ñoäng. Ta coù theå choïn soá löôïng boä ñieàu khieån ( Master ), boä nhaän ( Slave ), chieàu daøi caùp, toác ñoä truyeàn, soá node caàn giao tieáp, vaø raát tieát kieäm naêng löôïng
Moät soá ñaët ñieåm cuûa RS-485:
Giaù thaønh thaáp:
Caùc boä ñieàu khieån ( Driver ) vaø boä nhaän ( Receiver ) khoâng ñaét vaø chæ yeâu caàu cung caáp nguoàn ñôn +5V ñeå taïo ra möùc ñieän aùp vi sai toái thieåu 1.5V ôû ngoû ra vi sai.
Khaû naêng veà maïng:
RS-485 laø moät giao dieän ña ñieåm ( multi-drop ), noù coù theå coù nhieàu Driver vaø Receiver, soá Receiver coù theå leân ñeán 256 neáu ngoõ vaøo cuûa caùc Receiver coù trôû khaùng vaøo cao
Khaû naêng keát noái:
RS-485 coù theå truyeàn xa 1200m, toác ñoä leân ñeán 10Mbps. Nhöng 2 thoâng soá naøy khoâng xaûy ra cuøng luùc. Khi toác ñoä truyeàn taêng thì toác ñoä baud giaûm xuoáng.
Ví duï: khi toác ñoä laø 90Kbps thì khoaûng caùch laø 1200m, 1Mbps thì khoaûng caùch laø 120m, coøn vôùi toác ñoä 10Mbps thì khoaûng caùch chæ coøn 15m.
Giaûi thích moät soá ñaëc tính RS-485 :
Caùc ñöôøng truyeàn caân baèng vaø khoâng caân baèng:
Sôû dæ RS-485 coù theå truyeàn treân moät khoaûng caùch lôùn laø do chuùng söû duïng ñöôøng truyeàn caân baèng. Moãi moät tín hieäu seõ truyeàn treân moät caëp daây, vôùi möùc ñieän aùp treân moät daây laø aâm hoaëc ñieän aùp buø treân daây kia. Receiver seõ ñaùp öùng phaàn hieäu giöõa caùc möùc ñieän aùp, ñöôïc minh hoaï ôû hình döôùi:
Hình: Ñöôøng truyeàn caân baèng
Hình: Ñöôøng truyeàn khoâng ._.BF9 941 DJNZ R3,BACK3
089D D0E0 942 POP ACC
089F 22 943 RET
08A0 74FE 944 Q_PHIM: MOV A,#0FEH
08A2 7C08 945 MOV R4,#8
08A4 F590 946 TEST: MOV P1,A
08A6 FF 947 MOV R7,A
08A7 E5A0 948 MOV A,P2
08A9 543F 949 ANL A,#3FH
08AB B43F07 950 CJNE A,#3FH,KEYHIT
08AE EF 951 MOV A,R7
08AF 23 952 RL A
08B0 DCF2 953 DJNZ R4,TEST
08B2 C3 954 CLR C
08B3 801A 955 SJMP EXIT
08B5 C0E0 956 KEYHIT: PUSH ACC
08B7 7408 957 MOV A,#8
08B9 C3 958 CLR C
08BA 9C 959 SUBB A,R4;8
08BB FC 960 MOV R4,A
08BC D0E0 961 POP ACC
08BE 7D06 962 MOV R5,#6
08C0 13 963 AGAIN: RRC A
08C1 500A 964 JNC DONE
08C3 0C 965 INC R4
08C4 0C 966 INC R4
08C5 0C 967 INC R4
08C6 0C 968 INC R4
08C7 0C 969 INC R4
08C8 0C 970 INC R4
08C9 0C 971 INC R4
08CA 0C 972 INC R4
08CB DDF3 973 DJNZ R5,AGAIN
08CD D3 974 DONE: SETB C
08CE EC 975 MOV A,R4
08CF 22 976 EXIT: RET
977 ;-------------------------------------------------
978 LED7SEG_TABLE:
08D0 C0 979 DB 0C0H,0F9H,0A4H,0B0H,99H
08D1 F9
08D2 A4
08D3 B0
08D4 99
08D5 92 980 DB 92H,82H,0F8H,80H,90H,0BFH
08D6 82
MCS-51 MACRO ASSEMBLER VD 01/11/:2 PAGE 19
LOC OBJ LINE SOURCE
08D7 F8
08D8 80
08D9 90
08DA BF
981 END
MCS-51 MACRO ASSEMBLER VD 01/11/:2 PAGE 20
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E A T T R I B U T E S
ACC . . . . . D ADDR 00E0H A
AGAIN . . . . C ADDR 08C0H A
AMON. . . . . C ADDR 03E2H A
BACK. . . . . C ADDR 0888H A
BACK2 . . . . C ADDR 0891H A
BACK3 . . . . C ADDR 0896H A
BCDTO7SEG . . C ADDR 0178H A
C_LED . . . . C ADDR 017DH A
C_MT1 . . . . C ADDR 0187H A
C_MT2 . . . . C ADDR 018CH A
CA. . . . . . C ADDR 06E1H A
CDDL. . . . . C ADDR 03A9H A
CE. . . . . . C ADDR 06F2H A
CHECK . . . . C ADDR 079BH A
CHECKAMON . . C ADDR 03EEH A
CHECKCD . . . C ADDR 0364H A
CHECKCDDL . . C ADDR 03B5H A
CHECKCO . . . C ADDR 037FH A
CHECKDAY. . . C ADDR 0235H A
CHECKDT . . . C ADDR 02DDH A
CHECKED . . . C ADDR 07DFH A
CHECKKD . . . C ADDR 0427H A
CHECKKLB. . . C ADDR 0349H A
CHECKKLV. . . C ADDR 039AH A
CHECKNOI. . . C ADDR 032EH A
CHECKOK . . . C ADDR 0831H A
CHECKPRA. . . C ADDR 03D0H A
CHECKRO . . . C ADDR 040CH A
CHECKSERI . . C ADDR 026BH A
CHECKSHC. . . C ADDR 02C2H A
CHECKSON. . . C ADDR 0445H A
CHECKSX . . . C ADDR 0313H A
CHECKTLT. . . C ADDR 02F8H A
CHIEUDAY. . . C ADDR 0358H A
CO. . . . . . C ADDR 0373H A
COPY. . . . . C ADDR 0727H A
DATA0 . . . . C ADDR 07FBH A
DATA1 . . . . C ADDR 0847H A
DAY . . . . . C ADDR 0226H A
DELAY2MS. . . C ADDR 0873H A
DICHCE. . . . C ADDR 06FEH A
DONE. . . . . C ADDR 08CDH A
DUNGTICH. . . C ADDR 02D1H A
ENTER . . . . C ADDR 075CH A
ER. . . . . . C ADDR 06C2H A
EXIT. . . . . C ADDR 08CFH A
EXITDATA0 . . C ADDR 081DH A
EXITETER. . . C ADDR 077AH A
EXITGM. . . . C ADDR 046CH A
EXITNS. . . . C ADDR 0491H A
EXITT_CH. . . C ADDR 0830H A
MCS-51 MACRO ASSEMBLER VD 01/11/:2 PAGE 21
N A M E T Y P E V A L U E A T T R I B U T E S
F0. . . . . . B ADDR 00D0H.5 A
GACH. . . . . C ADDR 021AH A
INCHAR. . . . C ADDR 0863H A
INHEX . . . . C ADDR 0883H A
KEYHIT. . . . C ADDR 08B5H A
KHOILV. . . . C ADDR 038EH A
KIEMDINH. . . C ADDR 041BH A
KL_BINH . . . C ADDR 033DH A
LED1. . . . . C ADDR 0036H A
LED2. . . . . C ADDR 004DH A
LED3. . . . . C ADDR 0064H A
LED4. . . . . C ADDR 007BH A
LED5. . . . . C ADDR 0092H A
LED6. . . . . C ADDR 00A9H A
LED7. . . . . C ADDR 00C0H A
LED7SEG_TABLE C ADDR 08D0H A
LED8. . . . . C ADDR 00D7H A
LOOPCA. . . . C ADDR 06EAH A
LOOPDATA. . . C ADDR 0802H A
LOOPRE. . . . C ADDR 071CH A
LOOPSAVE. . . C ADDR 0791H A
LOOPTRAIN . . C ADDR 07C5H A
MAIN. . . . . C ADDR 0015H A
MT_LED. . . . C ADDR 00EEH A
MT1 . . . . . C ADDR 00EEH A
MT2 . . . . . C ADDR 012FH A
MTL_AM. . . . C ADDR 0608H A
MTL_CD. . . . C ADDR 058CH A
MTL_CDDL. . . C ADDR 05CAH A
MTL_CO. . . . C ADDR 05ABH A
MTL_DA. . . . C ADDR 0494H A
MTL_DT. . . . C ADDR 04F1H A
MTL_KB. . . . C ADDR 056DH A
MTL_KD. . . . C ADDR 0684H A
MTL_KL. . . . C ADDR 06A3H A
MTL_NA. . . . C ADDR 052FH A
MTL_NX. . . . C ADDR 054EH A
MTL_OK. . . . C ADDR 0665H A
MTL_PR. . . . C ADDR 05E9H A
MTL_RO. . . . C ADDR 0627H A
MTL_SERI. . . C ADDR 04B3H A
MTL_SH. . . . C ADDR 04D2H A
MTL_SO. . . . C ADDR 0646H A
MTL_TL. . . . C ADDR 0510H A
N_PHIM. . . . C ADDR 0883H A
NAM_SX. . . . C ADDR 0307H A
NEW . . . . . C ADDR 0856H A
NHAPSO. . . . C ADDR 046FH A
NOI_SX. . . . C ADDR 0322H A
NOTOK . . . . C ADDR 045DH A
NOTOK1. . . . C ADDR 07D8H A
OK. . . . . . C ADDR 0454H A
OK1 . . . . . C ADDR 07D1H A
OUT_MT. . . . C ADDR 0182H A
OUTCHAR . . . C ADDR 086BH A
MCS-51 MACRO ASSEMBLER VD 01/11/:2 PAGE 22
N A M E T Y P E V A L U E A T T R I B U T E S
OUTLED. . . . C ADDR 0173H A
P1. . . . . . D ADDR 0090H A
P2. . . . . . D ADDR 00A0H A
P3. . . . . . D ADDR 00B0H A
PASTE . . . . C ADDR 0740H A
PCA . . . . . C ADDR 0241H A
PCE . . . . . C ADDR 0295H A
PCK . . . . . C ADDR 0253H A
PCP . . . . . C ADDR 0283H A
PENT. . . . . C ADDR 029EH A
PET . . . . . C ADDR 024AH A
PHIRA . . . . C ADDR 03C4H A
PPS . . . . . C ADDR 028CH A
PRS . . . . . C ADDR 0277H A
PSR . . . . . C ADDR 025CH A
Q_PHIM. . . . C ADDR 08A0H A
RESET0. . . . C ADDR 0721H A
RESETALL. . . C ADDR 0717H A
RI. . . . . . B ADDR 0098H.0 A
RO. . . . . . C ADDR 0400H A
S_LED . . . . C ADDR 0022H A
SAVE. . . . . C ADDR 0789H A
SBUF. . . . . D ADDR 0099H A
SCON. . . . . D ADDR 0098H A
SHC . . . . . C ADDR 02B6H A
SO0 . . . . . C ADDR 0196H A
SO1 . . . . . C ADDR 01A2H A
SO2 . . . . . C ADDR 01AEH A
SO3 . . . . . C ADDR 01BAH A
SO4 . . . . . C ADDR 01C6H A
SO5 . . . . . C ADDR 01D2H A
SO6 . . . . . C ADDR 01DEH A
SO7 . . . . . C ADDR 01EAH A
SO8 . . . . . C ADDR 01F6H A
SO9 . . . . . C ADDR 0202H A
SON . . . . . C ADDR 0439H A
SP. . . . . . D ADDR 0081H A
SPACE . . . . C ADDR 020EH A
TEST. . . . . C ADDR 08A4H A
TEST0 . . . . C ADDR 07A6H A
TEST1 . . . . C ADDR 07B1H A
TESTCHECK . . C ADDR 0825H A
TF0 . . . . . B ADDR 0088H.5 A
TH0 . . . . . D ADDR 008CH A
TH1 . . . . . D ADDR 008DH A
THE_END . . . C ADDR 077BH A
THULANTHU . . C ADDR 02ECH A
TI. . . . . . B ADDR 0098H.1 A
TIEP1 . . . . C ADDR 0816H A
TL0 . . . . . D ADDR 008AH A
TMOD. . . . . D ADDR 0089H A
TR0 . . . . . B ADDR 0088H.4 A
TR1 . . . . . B ADDR 0088H.6 A
TRAIN . . . . C ADDR 07BAH A
TTGM0 . . . . C ADDR 0191H A
MCS-51 MACRO ASSEMBLER VD 01/11/:2 PAGE 23
N A M E T Y P E V A L U E A T T R I B U T E S
TTGM1 . . . . C ADDR 019FH A
TTGM10. . . . C ADDR 020BH A
TTGM11. . . . C ADDR 0217H A
TTGM12. . . . C ADDR 0223H A
TTGM13. . . . C ADDR 023EH A
TTGM14. . . . C ADDR 0247H A
TTGM15. . . . C ADDR 0250H A
TTGM16. . . . C ADDR 0259H A
TTGM17. . . . C ADDR 0274H A
TTGM18. . . . C ADDR 0280H A
TTGM19. . . . C ADDR 0289H A
TTGM2 . . . . C ADDR 01ABH A
TTGM20. . . . C ADDR 0292H A
TTGM21. . . . C ADDR 029BH A
TTGM22. . . . C ADDR 02A7H A
TTGM23. . . . C ADDR 02B0H A
TTGM24. . . . C ADDR 02CBH A
TTGM25. . . . C ADDR 02E6H A
TTGM26. . . . C ADDR 0301H A
TTGM27. . . . C ADDR 031CH A
TTGM28. . . . C ADDR 0337H A
TTGM29. . . . C ADDR 0352H A
TTGM3 . . . . C ADDR 01B7H A
TTGM30. . . . C ADDR 036DH A
TTGM31. . . . C ADDR 0388H A
TTGM32. . . . C ADDR 03A3H A
TTGM33. . . . C ADDR 03BEH A
TTGM34. . . . C ADDR 03DCH A
TTGM35. . . . C ADDR 03FAH A
TTGM36. . . . C ADDR 0415H A
TTGM37. . . . C ADDR 0433H A
TTGM38. . . . C ADDR 0451H A
TTGM39. . . . C ADDR 045AH A
TTGM4 . . . . C ADDR 01C3H A
TTGM40. . . . C ADDR 0463H A
TTGM41. . . . C ADDR 046CH A
TTGM5 . . . . C ADDR 01CFH A
TTGM6 . . . . C ADDR 01DBH A
TTGM7 . . . . C ADDR 01E7H A
TTGM8 . . . . C ADDR 01F3H A
TTGM9 . . . . C ADDR 01FFH A
WAIT0 . . . . C ADDR 07A6H A
WAIT1 . . . . C ADDR 07B1H A
X_LED . . . . C ADDR 0020H A
XUAT1 . . . . C ADDR 003EH A
XUAT2 . . . . C ADDR 0055H A
XUAT3 . . . . C ADDR 006CH A
XUAT4 . . . . C ADDR 0083H A
XUAT5 . . . . C ADDR 009AH A
XUAT6 . . . . C ADDR 00B1H A
XUAT7 . . . . C ADDR 00C8H A
XUAT8 . . . . C ADDR 00DFH A
REGISTER BANK(S) USED: 0
MCS-51 MACRO ASSEMBLER VD 01/11/:2 PAGE 24
N A M E T Y P E V A L U E A T T R I B U T E S
ASSEMBLY COMPLETE, NO ERRORS FOUND
B Chöông Trình Treân Maùy Tính:
unit thu;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, OleCtrls, MSCommLib_TLB, Grids, jpeg, ComCtrls, Menus;
type
TForm1 = class(TForm)
MSComm1: TMSComm;
Timer1: TTimer;
Timer2: TTimer;
Grid: TStringGrid;
Label2: TLabel;
Label1: TLabel;
Image1: TImage;
Image2: TImage;
MainMenu1: TMainMenu;
File1: TMenuItem;
Open1: TMenuItem;
load: TMenuItem;
New1: TMenuItem;
Aurosave1: TMenuItem;
ExitCtrlQ1: TMenuItem;
Help1: TMenuItem;
Run1: TMenuItem;
Run2: TMenuItem;
Exit1: TMenuItem;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Comport1: TMenuItem;
Com11: TMenuItem;
Com21: TMenuItem;
SubMenu1: TMenuItem;
Banphim1: TMenuItem;
Thunhietdo1: TMenuItem;
Dongthoi1: TMenuItem;
Image3: TImage;
procedure FormCreate(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure lamviecClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Exit1Click(Sender: TObject);
procedure Open1Click(Sender: TObject);
procedure loadClick(Sender: TObject);
procedure Com11Click(Sender: TObject);
procedure Com21Click(Sender: TObject);
procedure Banphim1Click(Sender: TObject);
procedure New1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
rownum,new:integer;
F:TextFile;
implementation
uses Unit2;
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
MSComm1.PortOpen:=true;
rownum:=0;
end;
procedure TForm1.Timer2Timer(Sender: TObject);
begin
caption:=TimeToStr(Now());
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var temp,ketqua,kq:string;
i,n,j,t,line,k:integer ;
colNum:integer;
son,seri,sohchu,dungtich,noisx,beday,klvo,anmon:string[8];
kiemdinh,rori,ngaynhap,tlthu,namsx,klbinh,co,cddl,phira:string[8];
hoso:TextFile;
s1,s2:string[20];
function pad(data:string;len:integer):string;
var
i:integer;
begin
result:=copy(data,1,200);
i:=length(result);
while i<20 do begin
result:=result+#32;
inc(i);
end;
end;
function truyen(data:string):string;
var u,m:integer;
begin
m:=length(data);
for u:=1 to m do
begin
if data[u]='-' then
MSComm1.Output:='A'
else
if data[u]=' ' then
else
MSComm1.Output:=Chr(StrToInt(data[u]));
end;
end;
begin
// Phat tin hieu hoi
ketqua:='';
MSComm1.Output:='a';
temp:=MSComm1.input;
//*******************************************************************
//su li tin hieu nhan duoc
if temp'' then
begin
n:=Length(temp);
for i:=2 to n do
begin
if Ord(temp[i])=10 then
ketqua:=ketqua+'-'
else
if Ord(temp[i])=255 then
ketqua:=ketqua+''
else
ketqua:=ketqua+IntToStr(Ord(temp[i]));
end;
// phan loai du lieu nhan duoc
begin
// ***********************************************************
if Ord(temp[1])=99 then
new:=1
ELSE
if Ord(temp[1])=100 then
begin
for j:=0 to Grid.RowCount do
if Grid.Cells[1,j]'' then
begin
rownum:=j;
inc(rowNum);
end;
if ord(temp[9])=255 then
k:=1;
if ord(temp[9])255 then
begin
kq:='';
n:=length(temp);
for i:=2 to n-1 do
if Ord(temp[i])=255 then
kq:=kq+''
else
kq:=kq+IntToStr(Ord(temp[i]));
line:=0;
k:=0;
while line < rowNum do
begin
s1:='';
for i:=1 to length(Grid.Cells[1,line]) do
if Grid.Cells[1,line][i]=' ' then
s1:=s1+''
else
s1:=s1+Grid.Cells[1,line][i];
if kq=s1 then
begin
rowNum:=line ;
k:=1;
end
else
inc(line)
end;
inc(rownum);
end;
if k = 0 then
else
begin
// truyen du lieu kiem tra xuong kit vxl
if ord(temp[10])=7 then
begin
ngaynhap:=Grid.Cells[2,rownum-1];
truyen(ngaynhap);
end
else
if Ord(temp[10])=6 then
begin
seri:=Grid.Cells[1,rownum-1];
truyen(seri);
end
else
if Ord(temp[10])=14 then
begin
sohchu:=Grid.cells[3,rownum-1];
truyen(sohchu);
end
else
if Ord(temp[10])=15 then
begin
dungtich:=Grid.Cells[4,rownum-1];
truyen(dungtich);
end
else
if Ord(temp[10])=22 then
begin
tlthu:=Grid.Cells[5,rownum-1];
truyen(tlthu);
end
else
if Ord(temp[10])=23 then
begin
namsx:=Grid.Cells[6,rownum-1];
truyen(namsx);
end
else
if Ord(temp[10])=30 then
begin
noisx:=Grid.Cells[7,rownum-1];
truyen(noisx);
end
else
if Ord(temp[10])=31 then
begin
klbinh:=Grid.Cells[8,rownum-1];
truyen(klbinh);
end
else
if Ord(temp[10])=39 then
begin
beday:=Grid.Cells[9,rownum-1];
truyen(beday);
end
else
if Ord(temp[10])=38 then
begin
co:=Grid.Cells[10,rownum-1];
truyen(co);
end
else
if Ord(temp[10])=47 then
begin
klvo:=Grid.Cells[11,rownum-1];
truyen(klvo);
end
else
if Ord(temp[10])=32 then
begin
cddl:=Grid.Cells[12,rownum-1];
truyen(cddl);
end
else
if Ord(temp[10])=33 then
begin
phira:=Grid.Cells[13,rownum-1];
truyen(phira);
end
else
if Ord(temp[10])=34 then
begin
anmon:=Grid.Cells[14,rownum-1];
truyen(anmon);
end
else
if Ord(temp[10])=35 then
begin
rori:=Grid.Cells[15,rownum-1];
truyen(rori);
end
else
if Ord(temp[10])=36 then
begin
kiemdinh:=Grid.Cells[16,rownum-1];
truyen(kiemdinh);
end
else
if Ord(temp[10])=37 then
begin
son:=Grid.Cells[17,rownum-1];
truyen(son);
end
else
end;
end
else
//***************************************************
//***************************************************
//Save du lieu xuong teptin tren dia
if Ord(temp[1])=3 then
Begin
AssignFile(hoso,'C:\My Documents\hoso.txt');
Rewrite(hoso);
try
for i:=0 to Grid.RowCount do
begin
s1:='';
for j:=1 to length(Grid.Cells[1,i]) do
if Grid.Cells[1,i][j]=' ' then
s1:=s1+''
else
s1:=s1+Grid.Cells[1,i][j];
if s1'' then
begin
seri:=Grid.cells[1,i];
ngaynhap:=Grid.Cells[2,i];
sohchu:=Grid.Cells[3,i];
dungtich:=Grid.Cells[4,i];
tlthu:=Grid.Cells[5,i];
namsx:=Grid.Cells[6,i];
noisx:=Grid.Cells[7,i];
klbinh:=Grid.Cells[8,i];
beday:=Grid.Cells[9,i];
co:=Grid.Cells[10,i];
klvo:=Grid.Cells[11,i];
cddl:=Grid.Cells[12,i];
phira:=Grid.Cells[13,i];
anmon:=Grid.Cells[14,i];
rori:=Grid.Cells[15,i];
kiemdinh:=Grid.Cells[16,i];
son:=Grid.Cells[17,i];
t:=8 ;
Writeln(hoso,pad(seri,t),pad(ngaynhap,t),pad(sohchu,t),
pad(dungtich,t),pad(tlthu,t),pad(namsx,t),
pad(noisx,t),pad(klbinh,t),pad(beday,t),pad(co,t),
pad(klvo,t),pad(cddl,t),pad(phira,t),pad(anmon,t),
pad(rori,t),pad(kiemdinh,t),pad(son,t));
end
else
end;
finally
CloseFile(hoso);
end;
for j:=0 to Grid.RowCount do
if Grid.Cells[1,j]'' then
begin
rownum:=j;
inc(rowNum);
end;
Grid.RowCount:=rowNum;
end
else
//*******************************************************************
// phan cot du lieu
if ord(temp[1])=1 then
begin
ngaynhap:=ketqua;
Grid.Cells[2,rownum]:=ngaynhap;
end
else
if ord(temp[1])=2 then
begin
for j:=0 to Grid.RowCount do
if Grid.Cells[1,j]'' then
begin
rownum:=j;
inc(rowNum);
end;
seri:=ketqua;
line:=0;
k:=0;
while line < rowNum do
begin
s1:='';
for i:=1 to length(Grid.Cells[1,line]) do
if Grid.Cells[1,line][i]=' ' then
s1:=s1+''
else
s1:=s1+Grid.Cells[1,line][i];
if seri=s1 then
begin
k:=1;
rowNum:=line;
end
else
inc(line)
end;
if k=0 then
Grid.Cells[1,rownum]:=seri
else
if (k=1)and (new=1)then
begin
new:=0;
Grid.Cells[1,rownum]:=seri ;
end
else
MSComm1.Output:=Chr(StrToInt('9'));
end
else
if Ord(temp[1])=4 then
begin
sohchu:=ketqua;
Grid.Cells[3,rownum]:=sohchu;
end
else
if Ord(temp[1])=5 then
begin
dungtich:=ketqua;
Grid.Cells[4,rownum]:=dungtich;
end
else
if Ord(temp[1])=6 then
begin
tlthu:=ketqua;
Grid.Cells[5,rownum]:=tlthu;
end
else
if Ord(temp[1])=7 then
begin
namsx:=ketqua;
Grid.Cells[6,rownum]:=namsx;
end
else
if Ord(temp[1])=8 then
begin
noisx:=ketqua;
Grid.Cells[7,rownum]:=noisx;
end
else
if Ord(temp[1])=9 then
begin
klbinh:=ketqua;
Grid.Cells[8,rownum]:=klbinh;
end
else
if Ord(temp[1])=10 then
begin
beday:=ketqua;
Grid.Cells[9,rownum]:=beday;
end
else
if Ord(temp[1])=11 then
begin
co:=ketqua;
Grid.Cells[10,rownum]:=co;
end
else
if Ord(temp[1])=13 then
begin
cddl:=ketqua;
Grid.Cells[12,rownum]:=cddl;
end
else
if Ord(temp[1])=12 then
begin
klvo:=ketqua;
Grid.Cells[11,rownum]:=klvo;
end
else
if Ord(temp[1])=14 then
begin
phira:=ketqua;
Grid.Cells[13,rownum]:=phira;
end
else
if Ord(temp[1])=15 then
begin
anmon:=ketqua;
Grid.Cells[14,rownum]:=anmon;
end
else
if Ord(temp[1])=16 then
begin
rori:=ketqua;
Grid.Cells[15,rownum]:=rori;
end
else
if Ord(temp[1])=17 then
begin
kiemdinh:=ketqua;
Grid.Cells[16,rownum]:=kiemdinh;
end
else
if Ord(temp[1])=18 then
begin
son:=ketqua;
Grid.Cells[17,rownum]:=son;
end
else
end;
end;
end;
procedure TForm1.lamviecClick(Sender: TObject);
begin
Timer1.Enabled:=true;
Grid.Visible:=false;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Grid.Visible:=true;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Form2.ShowModal;
end;
procedure TForm1.Exit1Click(Sender: TObject);
begin
Close();
end;
procedure TForm1.Open1Click(Sender: TObject);
begin
Form2.show;
end;
procedure TForm1.loadClick(Sender: TObject);
var hoso:textFile;
cot:array[1..20]of String[20];
i:integer;
begin
AssignFile(hoso,'C:\My Documents\hoso.txt');
reset(hoso);
try
begin
While not eof(hoso) do begin
readln(hoso,cot[1],cot[2],cot[3],cot[4],cot[5],cot[6],
cot[7],cot[8],cot[9],cot[10],cot[11],cot[12],
cot[13],cot[14],cot[15],cot[16],cot[17]) ;
Grid.RowCount:=rowNum;
for i:=1 to 17 do
Grid.Cells[i,rownum]:=cot[i];
inc(rowNum);
end;
readln(hoso,cot[1],cot[2],cot[3],cot[4],cot[5],cot[6],
cot[7],cot[8],cot[9],cot[10],cot[11],cot[12],
cot[13],cot[14],cot[15],cot[16],cot[17]) ;
Grid.RowCount:=rowNum;
for i:=1 to 17 do
Grid.Cells[i,rownum]:=cot[i];
inc(rownum);
end;
finally
CloseFile(hoso);
end;
load.Enabled:=false;
new1.Enabled:=false;
Timer1.Enabled:=true;
end;
procedure TForm1.Com11Click(Sender: TObject);
var
Settings:string;
begin
begin
if MSComm1.PortOpen=true then MSComm1.PortOpen:=false;
MSComm1.CommPort:=1;
Settings:='9600,N,8,1';
MSComm1.Settings:=Settings;
MSComm1.InputLen:=0;
MSComm1.InBufferSize:=256;
MSComm1.InputMode:=comInputModetext;
MSComm1.Handshaking:=comnone;
MSComm1.OutBufferSize:=256;
MSComm1.RThreshold:=0;
MSComm1.SThreshold:=0;
MSComm1.PortOpen:=true;
end;
SubMenu1.Enabled:=true;
end;
procedure TForm1.Com21Click(Sender: TObject);
var
Settings:string;
begin
begin
if MSComm1.PortOpen=true then MSComm1.PortOpen:=false;
MSComm1.CommPort:=2;
Settings:='9600,N,8,1';
MSComm1.Settings:=Settings;
MSComm1.InputLen:=0;
MSComm1.InBufferSize:=256;
MSComm1.InputMode:=comInputModetext;
MSComm1.Handshaking:=comnone;
MSComm1.OutBufferSize:=256;
MSComm1.RThreshold:=0;
MSComm1.SThreshold:=0;
MSComm1.PortOpen:=true;
end;
SubMenu1.Enabled:=true;
end;
procedure TForm1.Banphim1Click(Sender: TObject);
begin
load.Enabled:=true;
new1.Enabled:=true;
end;
procedure TForm1.New1Click(Sender: TObject);
begin
Timer1.Enabled:=true;
Load.Enabled:=false;
end;
end .
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Grids, Menus;
type
TForm2 = class(TForm)
Grid1: TStringGrid;
MainMenu1: TMainMenu;
File1: TMenuItem;
New1: TMenuItem;
Save1: TMenuItem;
Load1: TMenuItem;
N1: TMenuItem;
Son1: TMenuItem;
Kiemdinh1: TMenuItem;
N2: TMenuItem;
Exit1: TMenuItem;
Help1: TMenuItem;
exit2: TMenuItem;
procedure Son1Click(Sender: TObject);
procedure New1Click(Sender: TObject);
procedure Kiemdinh1Click(Sender: TObject);
procedure exit2Click(Sender: TObject);
procedure N2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
uses thu, Unit3, Unit4, Unit5;
{$R *.DFM}
procedure TForm2.Son1Click(Sender: TObject);
begin
Form3.show;
end;
procedure TForm2.New1Click(Sender: TObject);
var hoso:textFile;
cot:array[1..20]of String[20];
rowNums,i,j,t:integer;
s:string;
begin
AssignFile(hoso,'C:\My Documents\hoso.txt');
reset(hoso);
rowNums:=0;
Grid1.Cells[1,0]:='So Seri';
Grid1.Cells[2,0]:='ngay nhap';
Grid1.Cells[3,0]:='so huu chu';
Grid1.Cells[4,0]:='Dung tich';
Grid1.Cells[5,0]:='Thu lan thu';
Grid1.Cells[6,0]:='Nam san xuat';
Grid1.Cells[7,0]:='Noi san xuat';
Grid1.Cells[8,0]:='Khoi luong binh';
Grid1.Cells[9,0]:='Be day';
Grid1.Cells[10,0]:='co';
Grid1.Cells[11,0]:='Khoi luong vo';
Grid1.Cells[12,0]:='Cat duc dao lom';
Grid1.Cells[13,0]:='Phi ra';
Grid1.Cells[14,0]:='an mon';
Grid1.Cells[15,0]:='Ro ri';
Grid1.Cells[16,0]:='Kiem dinh';
Grid1.Cells[17,0]:='Son';
try
begin
While not eof(hoso) do begin
readln(hoso,cot[1],cot[2],cot[3],cot[4],cot[5],cot[6],
cot[7],cot[8],cot[9],cot[10],cot[11],cot[12],
cot[13],cot[14],cot[15],cot[16],cot[17]) ;
inc(rowNums);
Grid1.RowCount:=rowNums;
Grid1.Cells[0,rowNums]:=IntToStr(rownums);
for i:=1 to 2 do
Grid1.Cells[i,rownums]:=cot[i];
Grid1.Cells[3,rownums]:='SGPETRO';
Grid1.Cells[4,rownums]:=cot[4]+'.l';
for i:=5 to 7 do
Grid1.Cells[i,rownums]:=cot[i];
Grid1.Cells[8,rownums]:=cot[8]+'.kg';
Grid1.Cells[9,rownums]:=cot[9]+'.cm';
Grid1.Cells[10,rownums]:=cot[10]+'.cm';
Grid1.Cells[11,rownums]:=cot[11]+'.kg';
for i:=12 to 15 do
if cot[i][1]='0' then
Grid1.Cells[i,rownums]:='khong dat'
else
if cot[i][1]='1' then
Grid1.Cells[i,rowNums]:='dat';
if cot[16][1]='1' then
Grid1.Cells[16,rowNums]:='khong&kd';
if cot[16][1]='0' then
Grid1.Cells[16,rowNums]:='phai&kd';
if cot[17][1]='1' then
Grid1.Cells[17,rowNums]:='khong&son';
if cot[17][1]='0' then
Grid1.Cells[17,rowNums]:='phai& son';
for j:=1 to 17 do
begin
s:='';
for t:=1 to length(Grid1.Cells[j,rownums]) do
if Grid1.Cells[j,rownums][t]=' ' then
s:=s+''
else
if Grid1.Cells[j,rownums][t]='&' then
s:=s+' '
else
s:=s+ Grid1.Cells[j,rownums][t];
Grid1.Cells[j,rownums]:=' '+s;
end;
end;
inc(rowNums);
Grid1.RowCount:=rowNums;
end;
Grid1.FixedRows:=1;
finally
CloseFile(hoso);
end;
end;
procedure TForm2.Kiemdinh1Click(Sender: TObject);
begin
Form4.show;
end;
procedure TForm2.exit2Click(Sender: TObject);
begin
close();
end;
procedure TForm2.N2Click(Sender: TObject);
begin
form5.showmodal;
end;
end.
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids, Menus;
type
TForm3 = class(TForm)
Grid1: TStringGrid;
MainMenu1: TMainMenu;
File1: TMenuItem;
New1: TMenuItem;
Save1: TMenuItem;
Exit1: TMenuItem;
Help1: TMenuItem;
procedure New1Click(Sender: TObject);
procedure Exit1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
implementation
{$R *.DFM}
procedure TForm3.New1Click(Sender: TObject);
var hoso:textFile;
cot:array[1..20]of String[20];
rowNums,i,binh:integer;
temp:string;
begin
AssignFile(hoso,'C:\My Documents\hoso.txt');
reset(hoso);
rowNums:=0;
binh:=0;
Grid1.RowCount:=rowNums;
Grid1.Cells[0,0]:='stt';
Grid1.Cells[1,0]:='so se ri';
try
begin
While not eof(hoso) do begin
readln(hoso,cot[1],cot[2],cot[3],cot[4],cot[5],cot[6],
cot[7],cot[8],cot[9],cot[10],cot[11],cot[12],
cot[13],cot[14],cot[15],cot[16],cot[17]) ;
temp:='';
for i:=1 to Length(cot[17]) do
if cot[17][i]=' ' then
temp:=temp+''
else
temp:=temp+ cot[17][i];
if temp='0' then
begin
inc(rowNums);
Grid1.RowCount:=rowNums;
Grid1.cells[1,rownums]:=cot[1];
Grid1.Cells[0,rowNums]:=IntToStr(rownums);
end
else
inc(binh);
end;
inc(rowNums);
Grid1.RowCount:=rowNums;
end;
Grid1.FixedRows:=1;
finally
CloseFile(hoso);
end;
end;
procedure TForm3.Exit1Click(Sender: TObject);
begin
close();
end;
end.
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Menus, Grids;
type
TForm4 = class(TForm)
MainMenu1: TMainMenu;
File1: TMenuItem;
New1: TMenuItem;
Save1: TMenuItem;
Load1: TMenuItem;
N1: TMenuItem;
exit1: TMenuItem;
Help1: TMenuItem;
Grid1: TStringGrid;
procedure New1Click(Sender: TObject);
procedure exit1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form4: TForm4;
implementation
{$R *.DFM}
procedure TForm4.New1Click(Sender: TObject);
var hoso:textFile;
cot:array[1..20]of String[20];
rowNums,i,binh:integer;
temp:string;
begin
AssignFile(hoso,'C:\My Documents\hoso.txt');
reset(hoso);
rowNums:=0;
binh:=0;
Grid1.RowCount:=rowNums;
Grid1.Cells[0,0]:='stt';
Grid1.Cells[1,0]:='so se ri';
try
begin
While not eof(hoso) do begin
readln(hoso,cot[1],cot[2],cot[3],cot[4],cot[5],cot[6],
cot[7],cot[8],cot[9],cot[10],cot[11],cot[12],
cot[13],cot[14],cot[15],cot[16],cot[17]) ;
temp:='';
for i:=1 to Length(cot[16]) do
if cot[16][i]=' ' then
temp:=temp+''
else
temp:=temp+ cot[16][i];
if temp='0' then
begin
inc(rowNums);
Grid1.RowCount:=rowNums;
Grid1.cells[1,rownums]:=cot[1];
Grid1.Cells[0,rowNums]:=IntToStr(rownums);
end
else
inc(binh);
end;
// temp:=temp+ cot[16][i];
inc(rowNums);
Grid1.RowCount:=rowNums;
//Grid1.cells[1,rownums]:=cot[1];
//Grid1.Cells[0,rowNums]:=IntToStr(rownums);
end;
Grid1.FixedRows:=1;
finally
CloseFile(hoso);
end;
end;
procedure TForm4.exit1Click(Sender: TObject);
begin
close();
end;
end.
unit Unit5;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm5 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
OK: TButton;
Cancel: TButton;
Label1: TLabel;
Label2: TLabel;
procedure OKClick(Sender: TObject);
procedure CancelClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form5: TForm5;
implementation
uses Unit2, Unit6;
{$R *.DFM}
procedure TForm5.OKClick(Sender: TObject);
var i,t,k:integer;
temp,temp1,temp2,s:string;
Procedure binhgas(j:integer);
var lylich:textFile;
t:integer;
s:array[1..20]of string;
begin
AssignFile(lylich,'c:\My Documents\lylich.txt');
Rewrite(lylich);
try
for t:=1 to form2.grid1.colcount do
s[t]:=form2.Grid1.Cells[t,j];
Writeln(lylich,' Ly lich binh gas');
writeln(lylich,'');
writeln(lylich,' Soá seâ ri',' :',s[1]);
writeln(lylich,' Ngaøy nhaäp',' :',s[2]);
writeln(lylich,' Sôû höõu chuû',' :',s[3]);
writeln(lylich,' Dung tích bình',' :',s[4]);
writeln(lylich,' Thöû laàn thöù',' :',s[5]);
writeln(lylich,' Naêm saûn xuaát',' :',s[6]);
writeln(lylich,' Nôi saûn xuaát',' :',s[7]);
writeln(lylich,' Khoái löôïng bình',' :',s[8]);
writeln(lylich,' Chieàu daøy',' :',s[9]);
writeln(lylich,' Coå',' :',s[10]);
writeln(lylich,' Khoái löôïng voû',' :',s[11]);
writeln(lylich,' Caét ñuïc ñaøo loõm',' :',s[12]);
writeln(lylich,' Phì ra',' :',s[13]);
writeln(lylich,' AÊn moøn',' :',s[14]);
writeln(lylich,' Roø ræ,',' :',s[15]);
writeln(lylich,' Kieåm ñònh',' :',s[16]);
writeln(lylich,' Sôn',' :',s[17]);
finally
CloseFile(lylich);
Form6.Show;
end;
end;
begin
k:=0;
temp1:=edit2.text;
temp2:=edit1.text;
temp:='';
for i:=1 to length(temp1) do
if temp1[i]=' ' then
temp:=temp+''
else
temp:=temp+temp1[i];
temp1:=temp;
temp:='';
for i:=1 to length(temp2) do
if temp2[i]=' ' then
temp:=temp+''
else
temp:=temp+temp2[i];
temp2:=temp;
if temp1'*' then
begin
for i:=1 to form2.Grid1.Rowcount do
begin
s:='';
for t:=1 to length(form2.Grid1.Cells[2,i]) do
if form2.Grid1.Cells[2,i][t]=' ' then
s:=s+''
else
s:=s+ form2.Grid1.Cells[2,i][t];
if temp1=s then
begin
s:='';
for t:=1 to length(form2.Grid1.Cells[1,i]) do
if form2.Grid1.Cells[1,i][t]=' ' then
s:=s+''
else
s:=s+ form2.Grid1.Cells[1,i][t];
if temp2=s then
begin
k:=1;
binhgas(i);
end;
end;
end;
if k=0 then
ShowMessage('Khong co binh nay hay thu lai... ');
end;
if temp1='*' then
begin
for i:=1 to form2.Grid1.Rowcount do
begin
s:='';
for t:=1 to length(form2.Grid1.Cells[1,i]) do
if form2.Grid1.Cells[1,i][t]=' ' then
s:=s+''
else
s:=s+ form2.Grid1.Cells[1,i][t];
if temp2=s then
begin
binhgas(i);
k:=1;
end;
end;
if k=0 then
ShowMessage('Khong co binh nay... ');
end;
end;
procedure TForm5.CancelClick(Sender: TObject);
begin
close();
end;
end.
unit Unit6;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids, StdCtrls, Menus;
type
TForm6 = class(TForm)
Memo1: TMemo;
Edit1: TEdit;
MainMenu1: TMainMenu;
File1: TMenuItem;
Help1: TMenuItem;
procedure Memo1Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form6: TForm6;
implementation
{$R *.DFM}
procedure TForm6.Memo1Change(Sender: TObject);
begin
//Memo1.Lines.LoadFromFile(edit1.text);
end;
procedure TForm6.FormCreate(Sender: TObject);
begin
//Memo1.Lines.LoadFromFile(edit1.text);
end;
procedure TForm6.FormActivate(Sender: TObject);
begin
Memo1.Lines.LoadFromFile(edit1.text);
end;
end.
._.
Các file đính kèm theo tài liệu này:
- RS-845.doc