LỜI CẢM ƠN!
Em xin chân thành cảm ơn quí thầy cô trong và ngoài Trường Đại Học Bách Khoa TP. Hồ Chí Minh đã truyền đạt cho em nhiều kiến thức quí báu trong suốt thời gian học tập.
Em xin chân thành cảm ơn thầy Nguyễn Chí Nghĩa đã tận tình hướng dẫn,truyền đạt cho em nhiều kiến thức và kinh nghiệm thực tiễn trong quá trình thực hiện luận văn tốt nghiệp này.
Xin cảm ơn gia đình và các bạn bè đã động viên, giúp đỡ trong suốt quá trình hoàn thành luận văn này.
73 trang |
Chia sẻ: lvcdongnoi | Lượt xem: 2272 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Ứng dụng mạng vi xử lí điều khiển dây chuyền sản xuất, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
u maïch phaùt vaø nhaän cuøng noái vaøo moät ñöôøng daây bus chung , moãi node ñeàu coù theå phaùt vaø nhaän data. RS485 ñaùp öùng caùc yeâu caàu naøy. Chuaån RS485 cho pheùp 32 maïch truyeàn vaø maïch nhaän cuøng noái vaøo ñöôøng daây bus ñôn (vôùi boä repeater töï ñoäng vaø caùc boä truyeàn / nhaän trôû khaùng cao, giôùi haïn naøy coù theå môû roäng leân ñeán haøng traêm node treân moät maïng). Beân caïnh ñoù , RS485 coøn coù theå chòu ñöôïc caùc xung ñoät data(data collision) vaø caùc ñieàu kieän loãi treân ñöôøng daây bus.
Ñeå giaûi quyeát vaán ñeà xung ñoät data thöôøng xuaát hieän treân maïng multi-drop network , caùc ñôn vò phaàn cöùng( converters, repeaters , micro-processor controls ) ñöôïc thieát keá ñeå luoân duy trì ôû traïng thaùi nhaän cho ñeán khi chuùng ñaõ saün saøng truyeàn data. Moät node master seõ kích khôûi moät yeâu caàu truyeàn ñeán moät slave node baèng caùch ñònh ñòa chæ node ñoù. Phaàn cöùng phaùt hieän bit start cuûa kyù töï ñöôïc truyeàn vaø töï ñoäng cho pheùp boä truyeàn laøm vieäc. Sau khi moät kyù töï ñöôïc truyeàn , phaàn cöùng seõ trôû veà traïng thaùi nhaän sau moät vaøi micro giaây. Khi coù kyù töï môùi caàn göûi , boä truyeàn seõ töï ñoäng ñöôïc kích laïi. Nhö vaäy , moät slave node ñöôïc ñònh ñòa chæ coù theå ñaùp öùng ngay laäp töùc maø khoâng caàn thöïc hieän moät khoaûng delay daøi ñeå traùnh xung ñoät .
Nhöõng öu ñieåm cuûa RS485 so vôùi RS232 :
Chi phí thaáp . Boä truyeàn vaø boä nhaän thöôøng khoâng quaù ñaét vaø chæ ñoøi hoûi moät nguoàn ñôn +5V ( hoaëc thaáp hôn) ñeå taïo ra möùc aùp toái thieåu laø 1,5V taïi ngoõ ra vi sai. Ngöôïc laïi , ngoõ ra toái thieåu cuûa RS232 laø 5V caàn moät nguoàn cung caáp keùp hoaëc moät chip coù chi phí ñaùng keå ñeå taïo ra caùc nguoàn naøy.
Khaû naêng noái maïng . Thay vì giôùi haïn ôû 2 ñôn vò , RS485 laø giao dieän coù theå cung caáp cho vieäc keát noái coù nhieàu boä truyeàn vaø nhaän .Vôùi boä nhaän coù trôû khaùng cao , RS485 coù theå cho keát noái leân ñeán 256 node.
Ñöôøng daây keát noái daøi. Moät maïng RS485 coù theå daøi ñeán 4000 feet so vôùi RS232 coù giôùi haïn töø 50 ñeán 100 feet.
Toác ñoä nhanh. RS485 coù theå cho toác ñoä leân ñeán 10 Megabits/giaây.
IV. Full Duplex :
Giao dieän RS485 ñöôïc thieát keá ñeå söû duïng trong heä thoáng coù nhieàu node , vôùi moät hoaëc nhieàu boä truyeàn hoaëc nhaän . Phaàn lôùn caùc keát noái RS485 ñeàu laø baùn song coâng , trong ñoù boä truyeàn vaø nhaän duøng chung moät ñöôøng tín hieäu. Tuy nhieân , ta cuõng coù theå duøng RS485 döôùi daïng song coâng , moãi höôùng truyeàn duøng moät ñöôøng tín hieäu rieâng. Ñaây laø giaûi phaùp ñôn giaûn khi ta muoán taïo moät keát noái daøi , song coâng giöõa caùc microcontrollers. Caùc chip duøng cho RS485 cuõng nhoû hôn , ñôn giaûn hôn vaø reû hôn so vôùi RS232. Thuaän lôïi cuûa caùch keát noái naøy laø noù tieát kieäm thôøi gian cho caùc slave ( boä nhaän) vì chuùng khoâng phaûi ñoïc tín hieäu traû lôøi ( master) töø caùc slave ñöôïc hoûi. Tuy nhieân , neáu duøng ñöôøng daây daøi , chi phí seõ taêng ñaùng keå.
V. Half Duplex :
Nhieàu lieân keát RS485 ôû daïng baùn song coâng , vôùi nhieàu boä nhaän vaø truyeàn duøng chung moät ñöôøng tín hieäu. Khi moät lieân keát coù 3 node hoaëc nhieàu hôn, ta chuù yù raèng chæ coù moät ñöôøng tín hieäu vaø chæ coù moät node ñöôïc truyeàn taïi moãi thôøi ñieåm. Do ñoù caàn baûo ñaûm ñöôøng truyeàn ñang ôû traïng thaùi free khi moät node muoán truyeàn.
* Maïch baûo veä beân trong :
Trong keát noái baùn song coâng , chæ coù moät boä truyeàn ñöôïc cho pheùp taïi moät thôøi ñieåm nhöng cho duø ñöôïc thieát keá caån thaän ñeán ñaâu , vaãn coù theå coù tröôøng hôïp taïi moät thôøi ñieåm naøo ñoù hai hoaëc nhieàu boä truyeàn ñeàu ñöôïc enable cuøng moät luùc. Khi ñieàu naøy xaûy ra, neáu caùc driver keùo ñöôøng daây theo caùc traïng thaùi ngöôïc nhau , tín hieäu treân ñöôøng daây seõ ôû möùc logic khoâng xaùc ñònh , hieän töôïng naøy goïi laø söï tranh chaáp treân ñöôøng daây (line contention)
Taát caû caùc chip RS485 ñeàu coù giôùi haïn doøng (curent limiting) vaø töï ñoäng shutdown do quaù nhieät (thermal shutdown) ñeå baûo veä chip neáu coù nhieàu hôn moät boä nhaän ñöôïc cho pheùp cuøng luùc. Giôùi haïn doøng haïn cheá doøng ra cuûa boä truyeàn. Theo chuaån TIA/EIA-485 möùc giôùi haïn naøy phaûi döôùi 250mA. Neáu ngoõ ra output tieáp tuïc ñöa ra doøng cao , nhieät ñoä cuûa chip seõ taêng leân vaø cuoái cuøng maïch baûo veä quaù nhieät beân trong chip seõ chuyeån ngoõ ra sang traïng thaùi trôû khaùng cao( high-impedance state). Ñieàu naøy cuõng ñoàng nghóa vôùi vieäc ngoõ ra seõ khoâng theå söû duïng cho tôùi khi noù ñöôïc haï nhieät , nhöng baûo ñaûm linh kieän seõ khoâng bò hö.
VI. Caùc Phöông Phaùp Truyeàn Thoâng
Ñôn coâng ( Simplex Communication) : truyeàn thoâng moät chieàu. Döõ lieäu chæ coù theå truyeàn ñi theo moät chieàu töø thieát bò naøy sang thieát bò khaùc maø khoâng coù chieàu ngöôïc laïi(hình 1.2).
Baùn song coâng ( Half Duplex Communication ) : taïi moät thôøi ñieåm chæ coù moät node truyeàn vaø moät node nhaän . Cho pheùp truyeàn hai chieàu(hình 1.3).
Song coâng ( Full Duplex Communication ) : cho pheùp truyeàn döõ lieä ñoàng thôøi giöõa hai thieát bò(hình 1.4).
Chuaån RS-232C ñöôïc ñònh nghóa laø moät chuaån giao tieáp giöõa moät DTE ( Device Terminal Equipment – thöôøng laø computer) vaø moät DCE ( Device Communication Equipment – caùc thieát bò ngoaïi vi) vôùi khoaûng caùch truyeàn toái ña laø 50ft ( khoaûng 15m ) vaø toác ñoä toái ña laø 20kps.
Chöông III :
BUS I2C
I. Hoaït Ñoäng Cuûa Bus I2C :
Bus I2C (vieát taét töø Inter-Ic-Bus) laø moät moái lieân keát döõ lieäu 2 daây giöõa moät hoaëc nhieàu boä xöû lyù (Master) vaø nhöõng khoái ngoaïi vi cuï theå (slave).Taát caû caùc vi maïch ñeàu lieân keát tröïc tieáp vôùi bus vaø ñöôïc trao ñoåi döôùi ñòa chæ cuûa töøng vi maïch. Caùc ñòa chæ vaø döõ lieäu ñöôïc truyeàn treân chính caùc ñöôøng daãn. Bus I2C cho pheùp hình thaønh moät moái lieân keát ñôn giaûn giöõa nhieàu vi maïch vaø cho pheùp deã daøngù môû roäng theâm.
Taát caû caùc vi maïch tham gia bus, khoáng cheá giao thöùc theo moät caùch rieâng . Beân caïnh caùc boä nhôù RAM, EEPROM, caùc vi maïch môû roäng coång, caùc boä bieán doåi A/D vaø D/A cuõng nhö caùc vi maïch ñoàng hoà coøn coù nhieàu vi maïch chuyeân duïng, chaúng haïn boä ñeäm hieån thò hoaëc caùc vi maïch duøng trong kyõ thuaät truyeàn hình . Taát caû caùc vi maïch naøy ñeàu coù theåû ñieàu khieån deã daøng vaø tröïc tieáp qua hai ñöôøng daãn cuûa dao dieän song song vôùi maùy tính PC. Chæ caàn boå sung theâm raát ít caùc vi maïch, coång noái tieáp cuõng coù theå ñöôïc söû duïng.
II . Truyeàn Döõ Lieäu vaø Ñònh Ñòa Chæ :
Bus I2C söû duïng 2 ñöôøng daãn:
Ñöôøng daãn döõ lieäu noái tieáp SDA
Ñuôøng daãn giöõ nhòp SCL
Gioáng nhö ôû thanh ghi dòch, döõ lieäu vaø ñòa chæ ñöôïc truyeàn cuøng theo moät nhòp .Caû hai ñöôøng daãn ñeàu coù theå ñöôïc söû duïng theo töøng höôùng döõ lieäu. Moãi ñöôøng daãn ñeàu coù moät ñieän trôû noái leân nguoàn(Pull-up) vaø coù theå ñöôïc moãi thaønh vieân keùo xuoáng möùc LOW qua caùc loái ra cöïc goùp hôû hoaëc cöïc maùng hôû. Thaønh vieân bus khoâng kích hoaït ôû traïng thaùi coù ñieän trôû cao, nhöng vaãn luoân giaùm saùt caùc tín hieäu truyeàn treân bus. Khi chæ coù moät vi maïch chuû ñöôïc söû duïng, vi maïch naøy töï xuaát ra tín hieäu giöõ nhòp ñeå suû duïng. Döõ lieäu coù theå ñeán töø vi maïch chuû cuõng nhö töø vi maïch tôù.
Giao thöùc bus I2C nhaän bieát moät daüy caùc tình huoáng ñaü ñöôïc ñònh nghóa chính xaùc, caùc tình huoáng naøy giôùi thieäu töøng thaønh vieân bus, ñeå nhaän daïng choã baét daàu vaø keát thuùc cuûa moät cuoäc truyeàn cuõng nhö caùch ñònh ñòa chæ coù theå coù cuûa noù.
Traïng thaùi yeân tónh: SDA vaø SCL ôû möùc HIGH vaø do vaäy laø khoâng kích hoaït.
Ñieàu kieän baét ñaàu( Start): SDA ñöôïc vi maïch master chuyeån sang möùc thaáp, trong khi SCL giöõ nguyeân ôû möùc HIGH.
Ñieàu kieän döøng (Stop) : SDA chuyeån töø traïng thaùi LOW sang HIGH, trong khi SCL giöõ nguyeân ôû möùc HIGH.
Truyeàn döõ lieäu : Moãi boä truyeàn xeáp taùm bít döõ lieäu leân ñöôøng daãn döõ lieäu SDA, baèng caùc xung giöõ nhòp caùc bít naøy ñöôïc vi maïch chuû(master) ñaåy tieáp leân ñöôøng giöõ nhòp SCL. Vieäc truyeàn döõ lieäu baét ñaàu vôùi bít coù giaù trò lôùn nhaát.
Xaùc nhaän (Acknowledge):Moãi boä nhaän keát thuùc quùa trình nhaän moâït byte baèng moät möùc LOW ôû ñöôøng daãn SDA, cho ñeán khi vi maïch chuû taïo ra xung ñoàng hoà thöù chín ôû ñöôøng daãn SCL. Vieäc xaùc nhaän ñoàng thôøi coù nghóa laø moät byte tieáp theo caàn ñöôïc nhaän. Vieäc keát thuùc cuoäc truyeàn theo mong muoán caàn phaûi ñöôïc baùo tröôùc baèng vieäc khoâng xuaát hieän söï xaùc nhaän. Söï keát thuùc thaät söï cuûa cuoäc truyeàn ñöôïc ñaït tôùi baèng ñieàu kieän döøng(Stop).
Caùc ñòa chæ ñöôïc truyeàn vaø keát thuùc gioáng heät nhö döõ lieäu. Trong tröôøng hôïp ñôn giaûn nhaát laø cuoäc truyeàn döõ lieäu töø vi maïch chuû tôùi moät vi maïch tôù(slave) chaúng haïn tôùi moät coång loái ra, caùc quùa trình dieãn ra sau: Vi maïch chuû (master) taïo ra dieàu kieän baét ñaàu vaø truyeàn ñòa chæ cuûa vi maïch coång vaøo caùc bit 7 ñeán 1 vaø höôùng mong muoán truyeàn döõ lieäu vaøo bit 0, cuï theå laø 0 ñoái vôùi tröôøng hôïp "ghi" vaø 1 ñoái vôùi tröôøng hôïp "ñoïc". Vieäc truyeàn ñòa chæ ñöôïc keát thuùc bôûi vi maïch tôù (slave) caàn trao ñoåi. Sau ñoù vi maïch chuû (master) göûi byte döõ lieäu vaø cuõng laø ñeå keát thuùc moät quùa trình truyeàn. Vi maïch chuû coù theå chaám döùt moái lieân keát baèng ñieàu kieän Stop hoaëc göûi caùc byte tieáp theo tôùi chính caùc vi maïch aáy.
Caùc ñòa chæ chæ vi maïch coù ñoä daøi 7 bit,trong ñoù coøn moät bit höôùng döõ lieäu ñöôïc truyeàn boå sung sau cuøng. Thoâng thöông caùc ñòa chæ vi maïch ñöôïc qui ñònh ñeå chæ roõ loaïi trong 4 bit cao hôn vaø coù theå ñöôïc löïa choïn töï do trong 3 bit thaáp hôn (A0 - A2) baèng maïch ñieän beân ngoaøi. Nhieàu vi maïch cuøng moät loaïi cuõng coù theå hoaït ñoäng treân cuøng moät bus. Toång coäng coù theå coù ñeán 128 vi maïch coù theå ñöôïc söû duïng treân cuøng moät bus.
Ñòa chæ bus I2C vôùi höôùng döõ lieäu
A6
A5
A4
A3
A2
A1
A0
R/W
Khi caàn ñoïc döõ lieäu töø moät vi maïch tôù (slave), ñòa chæ caàn phaûi ñöôïc truyeàn baèng bit höôùng döõ lieäu ñaü ñöôïc ñaët. Vi maïch chuû xuaát ra töøng nhoùm taùm xung ñoàng hoà vaø nhaän ñöôïc taùm bit döõ lieäu. Cho ñeán khi noù xaùc nhaän cuoäc nhaän döõ lieäu baèng Acknowledge, ôû xung ñoàng hoà thuù chín, vi maïch naøy coù theå nhaän caùc byte tieáp theo.Cuoái cuøng, cuoäc truyeàn ñöôïc vi maïch chuû keát thuùc baèng vieäc khoâng ñöa ra tín hieäu xaùc nhaän (Nacknowledge ) vaø keøm theo laø ñieàu kieän döøng.
Moãi maïch I2C ñeàu coù moät ñòa chæ ñaü ñöôïc quy ñònh, ñòa chæ naøy moät phaàn ñöôïc quy ñònh ñeå ñaëc tröng cho töøng loaïi coøn moät phaàn khaùc ñöôïc thay ñoåi qua caùc ñöôøng daãn ñòa chæ ñöôïc daãn ra ngoaøi. Ñieàu ñoù coù nghóa laø,chaúng haïn vôùi ba ñöôøng ñòa chæ ñöôïc daãn ra ngoaøi coù tôùi taùm vi maïch cuøng loaïi coù theå ñöôïc ñaáu noái vaøo bus.
Toáùc ñoä giöõ nhòp cöïc ñaïi duøng cho bus I2C baèng 100 KHz. Caùc chöông trình ñöôïc giôùi thieäu döôùi ñaây söû duïng thôøi gian chôø baèng 10ms, ñeå traùnh tình traïng vöôït quùa toác ñoä cöc ñaïi khi cho chaïy treân caùc maùy tính nhanh.
III. Bus I2C Duøng SEEPROM AT24C0X
Ñaây laø 1 boä nhôù coá ñònh (permanent),coù theå ñöôïc xoaù vaø ghi baèng ñieän maø khoâng caàn cung caáp ñieän aùp laøm vieäc phuï theâm.
24C01 128 bytes
24C02 256 bytes
24C03 512 bytes
24C04 1024 bytes
24C08 2048 bytes
Caùc boä nhôù SEEPROM coù dung löôïng nhoû thöôøng ñöôïc söû duïng ñeå thieát laäp caùc döõ lieäu ñònh chuaån hoaëc moät löông döõ lieäu khoâng ñaùng keå khaùc moät caùch ñoäc laäp vôùi nguoàn cung caáp vaøo moät heä thoáng. Caùc vi maïch naøy baûo ñaûm vieäc löu tröõ döõ lieäu ñöôïc treân 10 naêm. Moät öu ñieåm khaùc laø vieäc thieát keá maïch ñôn giaûn,ñoàng nghóa vôùi vieäc khoâng caàn ñeán ñieän aùp boå sung duøng cho boä naïp chöông trình,bôûi vì moät ñieän aùp cao hôn ñaõ ñöôïc taïo ra ngay treân chip.
Vieát AT24C0X : Xoùa ghi EEPROM,max 2 bytes
S
Ñòa chæ Slave
0
A
A
Ñòa chæ boä nhôù
Vieát byte 1
A
Vieát byte 2
A
S
S
Ñòa chæ Slave
0
A
A
Ñòa chæ boä nhôù
A
Ñoïc byte 1
A
S
Ñòa chæ Slave
1
Ñoïc byte 2
A
Ñoïc byte n
NACK
S
Vieát Ack cuûa Slave
Ñoïc AT24C0X :
Vieát Ack cuûa Slave
Ack cuûa Master khoâng coù NACK
Khi ñoïc ra,sau ñòa chæ vi maïch,tröôùc heát laø ñòa chæ byte cuûa byte ñaàu tieân mong muoán phaûi ñöôïc chæ ñònh . Sau ñoù,ñieàu kieän ngöøng caàn phaûi ñöôïc xuaát ra ñeå trao ñoå vôùi vi maïch theo höôùng ñoïc ra. Treân ñoù nhieàu byte coù theå ñuôïc ñoïc ra moät caùch tuøy yù. Moät boä ñeäm ñòa chæ beân trong töï ñoäng taêng theâm moät.
Khi laäp trình (vieát) caán chuù yù laø sau ñòa chæ vi maïch,ñòa chæ byte mong muoán caàn ñöôïc chuyeån giao. Sau ñoù,tieáp theo laø byte döõ lieäu caàn ñöôïc laäp trình.Cuõng coù theå xaûy ra tröôøng hôïp hai byte ñöôïc truyeàn keá tieáp nhau. Khi ñoù,quaù trình laäp trình vaø xoaù thöïc teá baét ñaàu ngay sau ñieàu kieän ngöøng.
III. CHÖÔNG TRÌNH VIEÁT EEPROM AT24C0X TÖØ PC :
1. Chöông trình vi xöû lí :
ORG 0000H
MEM1 EQU 30H
MEM2 EQU 31H
MEM19 EQU 50H
MEM20 EQU 51H
MAIN:
MOV SCON,#01010010B
CLR TR1
MOV TMOD,#21H
MOV TH1,# -3
SETB TR1
LOOP:
;Nhan tin hieu tu PC
ACALL INCHAR
CJNE A,#79,NEXT
;CT write a byte
ACALL INCHAR
MOV MEM1,A ; Address 24C02
ACALL INCHAR
MOV MEM2,A ; Data 24C02
ACALL VIETROM
;Delay thoi gian de nap Rom
ACALL DELAY100MS
;Goi CT con docrom
NEXT:
CJNE A,#79,LOOP
;CT Read a byte
;Khai bao cac CT con
ACALL INCHAR
MOV MEM1,A ; Address 24C02
ACALL DOCROM
;Phat len PC gia tri rom doc duoc
ACALL OUTCHAR
;Xuat ra P2 de kiem tra
MOV P2,A
SJMP LOOP
INCHAR:
JNB RI,$
CLR RI
MOV A,SBUF
RET
OUTCHAR:
JNB TI,$
CLR TI
MOV SBUF,A
RET
I2CINIT:
SETB P1.6 ;SDA = 1
SETB P1.7 ;SCL = 1
RET
I2CSTART:
CLR P1.6 ;SDA = 0
SETB P1.7 ;SCL = 1
CLR P1.7 ;SCL = 0
RET
I2CSTOP:
CLR P1.6 ;SDA = 0
CLR P1.7 ;SCL = 0
SETB P1.7 ;SCL = 1
SETB P1.6 ;SDA = 1
RET
ACK:
CLR P1.6 ;SDA = 0
CLR P1.7 ;SCL = 0
SETB P1.7 ;SCL = 1
CLR P1.7 ;SCL = 0
NACK:
SETB P1.6 ;SDA = 1
CLR P1.7 ;SCL = 0
SETB P1.7 ;SCL = 1
CLR P1.7 ;SCL = 0
RET
XUATRA:
MOV MEM20,A
;BO NHO TRUNG GIAN
MOV A,#8
MOV MEM19,A
;BO DEM DUNG CHO 8 BIT
LAP:
MOV A,MEM20
ANL A,#128
;CHE BIT 7
RR A
;SAU BIT 6 (SDA)
ADD A,#3FH
MOV P1,A
SETB P1.7
CLR P1.7
MOV A,MEM20
RL A
;BIT TIEP THEO
MOV MEM20,A
DJNZ MEM19,LAP
;BO DEM GIAM 1
SETB P1.6
CLR P1.7
SETB P1.6
SETB P1.7
CLR P1.7
RET
DOCVAO:
SETB P1.6 ;SDA = 1
CLR P1.7 ;SCL = 0
MOV MEM20,#0
MOV MEM19,#8
LAP1:
SETB P1.7 ;SCL = 1
MOV A,MEM20
RL A
MOV B,A
MOV A,P1
ANL A,#64 ;DOC SDA
RL A
RL A ;BIT 0
ADD A,B
MOV MEM20,A ;LUU TRU
CLR P1.7 ;SCL = 0
DJNZ MEM19,LAP1 ;8 LAN
RET
VIETROM:
ACALL I2CSTART
MOV A,#10100000B
ACALL XUATRA
MOV A,#0
ACALL XUATRA
MOV A,MEM2
ACALL XUATRA
ACALL I2CSTOP
ACALL DELAY100MS
RET
DOCROM:
ACALL I2CSTART
MOV A,#10100000B
;DIA CHI AT24C02,VIET
ACALL XUATRA
MOV A,#0
;DIA CHI BAT DAU 0
ACALL XUATRA
ACALL I2CSTOP
ACALL I2CSTART
MOV A,#10100001B
;DIA CHI AT24C02,DOC
ACALL XUATRA
ACALL DOCVAO
ACALL NACK
ACALL I2CSTOP
RET
DELAY100MS:
PUSH B
MOV B,#2
LAP2:
MOV TL0,#LOW(-50000)
MOV TH0,#HIGH(-50000)
SETB TR0
JNB TF0,$
CLR TF0
CLR TR0
DJNZ B,LAP2
POP B
RET
END
2. Chöông trình Visual Basic :
Dim Dataout(0) As Byte
Dim Datain() As Byte
Dim Transfer As Byte
Dim Timeout As Boolean
Dim str As String
Dim Buffer As Variant
Private Sub CmdRead_Click()
'Phat tin hieu read a byte
Dataout(0) = 80
Buffer = Dataout()
MSComm1.Output = Buffer
MSComm1.InBufferCount = 0
'Truyen dia chi
str = Text2.Text
Transfer = Val(str)
Dataout(0) = Transfer
Buffer = Dataout()
MSComm1.Output = Buffer
MSComm1.InBufferCount = 0
tmrError.Enabled = True
Timeout = False
Do
DoEvents
Loop Until MSComm1.InBufferCount = 1 Or Timeout = True
If Timeout = False Then
Buffer = MSComm1.Input
Datain() = Buffer
Text3.Text = Datain(0)
Text4.Text = "Data read successfully !"
Else
Text4.Text = "Not response from 89C51"
End If
End Sub
Private Sub cmdWrite_Click()
'Phat tin hieu write a byte
Dataout(0) = 79
Buffer = Dataout()
MSComm1.Output = Buffer
MSComm1.InBufferCount = 0
''Truyen dia chi
str = Text2.Text
Transfer = Val(str)
Dataout(0) = Transfer
Buffer = Dataout()
MSComm1.Output = Buffer
MSComm1.InBufferCount = 0
'Truyen data
str = Text1.Text
Transfer = Val(str)
Dataout(0) = Transfer
Buffer = Dataout()
MSComm1.Output = Buffer
MSComm1.InBufferCount = 0
tmrError.Enabled = True
Timeout = False
Text4.Text = "Data and Address are transfering"
Do
DoEvents
Loop Until MSComm1.InBufferCount = 1 Or Timeout = True
If Timeout = False Then
Buffer = MSComm1.Input
Datain() = Buffer
If Datain(0) = Val(Text1.Text) Then
Text4.Text = "Data writed successfully !"
Else
Text4.Text = "Data Error"
End If
Else
Text4.Text = "Not response from 89C51"
End If
End Sub
Private Sub Form_Load()
MSComm1.Settings = "9600,n,8,1"
MSComm1.CommPort = 2
MSComm1.InputLen = 0
tmrError.Interval = 2000
MSComm1.PortOpen = True
End Sub
Private Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen = False
End Sub
Private Sub tmrError_Timer()
tmrError.Enabled = False
Timeout = True
End Sub
Chöông IV :
GIÔÙI THIEÄU DAÂY CHUYEÀN SAÛN XUAÁT
I.Yeâu Caàu Cuûa Coâng Vieäc Ñoái Vôùi Daây Chuyeàn Saûn Xuaát :
Saûn phaåm sau khi qua giai ñoaïn cô baûn,noù phaûi qua caùc coâng ñoaïn phuï. Sau khi laøm ñaõ ñuû caùc coâng ñoaïn phuï naøy,noù seõ trôû thaønh saûn phaåm hoaøn chænh ñeå ñöa ñeán ngöôøi tieâu duøng. Caùc coâng ñoaïn phuï naøy coù ñaëc ñieåm laø chuùng khoâng phuï thuoäc vaøo nhau,coâng ñoaïn naøy coù theå laøm tröôùc hoaëc laøm sau baát kyø coâng ñoaïn naøo,khoâng caàn theo thöù töï. Trong daây chuyeàn saûn xuaát naøy coù coâng ñoaïn cuoái cuøng ñeå laáy saûn phaåm hoaøn chænh ñaõ laøm ñuû caùc coâng ñoaïn phuï ra khoûi daây chuyeàn ñoàng thôøi cho pheùp ñöa saûn phaåm môùi vaøo (saûn phaåm chöa laøm coâng ñoaïn phuï naøo)
Muïc ñích sau cuøng laø laøm sao phaân boá ñeàu coâng vieäc ñeán caùc coâng ñoaïn phuï,taïi moãi thôøi ñieåm ôû caùc coâng ñoaïn ñeàu coù saûn phaåm ñeå laøm. Khi ñoù daây chuyeàn saûn xuaát seõ ñaït naêng suaát vaø hieäu quaû cao nhaát.
* Em cuõng xin giôùi thieäu daây chuyeàn saûn xuaát ñang ñöôïc öùng duïng taïi xí nghieäp may Vieät Tieán. Saûn phaåm ôû ñaây laø aùo quaàn caùc loaïi. Caùc coâng ñoaïn phuï bao goàm: vaøo coå,ñôm nuùt,may tuùi,may caùnh tay...
II.Daây Chuyeàn Saûn Xuaát:
Daây chuîeàn saûn xuaát ôû ñaây coù baêng taûi chuyeån ñoäng troøn ñeàu vôùi vaän toác khoâng ñoåi ( vaän toác cuûa baêng taûi töông ñoái thaáp khoaûng10cm/s). Sau khi chuyeån ñoäng ñöôïc moät voøng, noù seõ trôû veà vò trí ban ñaàu.
Baêng taûi ôû ñaây coù nhieäm vuï chuyeån ñoäng ñeå ñöa caùc saûn phaåm sau khi ñaõ hoaøn thaønh baát kyø coâng ñoaïn naøo hoaëc ñöa saûn phaåm môùi vaøo daây chuyeàn saûn xuaát.
Vaán ñeà ñaët ra laø quaûn lyù soá saûn phaåm coù treân baêng taûi, ñoàng thôøi bieát ñöôïc caùc saûn phaåm ñoù ñaõ laøm coâng ñoaïn naøo vaø chöa laøm coâng doaïn naøo. Töø ñoù cho pheùp ñieàu khieån vaøo,ra taïi caùc vò trí vaøo ra cuûa caùc coâng ñoaïn.
Do ñoù caáu taïo cuûa baêng taûi seõ goàm moät soá raõnh coá ñònh ( kyù hieäu laø n, n = const, n coù theå leân ñeán haøng ngaøn). Moãi raõnh cuûa baêng taûi coù hai traïng thaùi: chöùa moät baùnh xe duøng ñeå treo saûn phaåm hoaëc troáng ( khoâng coù saûn phaåm).
Baêng taûi coù theå cho pheùp caùc baùnh xe( duøng ñeå treo saûn phaåm) vaøo hoaëc ra taïi caùc vò trí cho pheùp vaøo ra cuûa caùc coâng ñoaïn. Khi coù tín hieäu ñieàu khieån vaøo thì ngay laäp töùc baêng taûi seõ ñaåy baùnh xe ra khoûi daây chuyeàn, ñoàng thôøi khi coù tín hieäu ñieàu khieån ra thì baêng taûi seõ cho pheùp baùnh xe chöùa saûn phaåm ñaõ laøm xong coâng ñoaïn naøo ñoù ñang chôø vaøo daây chuyeàn töùc thì.
10
1
2
3
6
9
7
8
5
4
CÑ1
CÑ2
CÑ4
CÑ3
11
Hình : Daây Chuyeàn Saûn Xuaát
1. Baêng chuyeàn chính 4. Truyeàn ñoäng chính
2. Baêng chuyeàn reõ nhaùnh 5. Thieát bò reõ nhaùnh phuï
3. Baøn laøm vieäc 6. Thieát bò nhaän daïng
7. Tuû ñieàu khieån baêng chuyeàn chính 10. Coät chính truyeàn ñoäng.
8. Tuû ñieàu khieån baêng chuyeàn reõ nhaùnh 11. Saûn phaåm chôø
9. Coät trung gian
Sp Sp Sp Maët caét ngang Baêng Chuyeàn Baøn laøm vieäc Coät trung gian Coät truyeàn ñoäng chính
III.Caùch Nhaän Bieát Caùc Baùnh Xe (caùc saûn phaåm):
Vaán ñeà ñaët ra laøm theá naøo ñeå nhaän bieát ñöôïc caùc baùnh xe khi chuùng vaøo vaø ra khoûi baêng taûi cuûa daây chuyeàn khoâng theo moät thöù töï, quy ñònh naøo. Do ñoù ñeå nhaän bieát caùc baùnh xe ta seõ gaén moät con SEEPROM (AT24C0X). Moãi moät con AT24C0X seõ ñöôïc naïp moät giaù trò coá ñònh ( maõ ROM).
VÍ DUÏ: giaû söû baêng taûi cuûa daây chuyeàn coù 1000 raõnh thì ta seõ duøng 1000 con ROM gaén treân 1000 baùnh xe. Vì vaäy ñeå phaân bieät ñöôïc baùnh xe (saûn phaåm) naøy thì caùc con SEEPROM seõ ñöôïc naïp caùc giaù trò töø 1 ñeán 1000 (2 bytes).
IV. Ñoïc Döõ Lieäu Töø Serial EEPROM :
Nhö ta ñaõ giôùi thieäu ôû phaàn bus I2C ñeå ñoïc döõ lieäu töø SEEPROM taïi moãi coâng ñoaïn ta seõ duøng 1 con VXL AT89C51
Neáu daây chuyeàn saûn xuaát coù n coâng ñoaïn ,ta seõ duøng (n+1) con VXL .Con VXL sau cuøng duøng cho vieäc laáy saûn phaåm ñaõ laøm xong n coâng ñoaïn ra vaø ñöa saûn phaåm môùi vaøo.
V. Ñieàu Khieån Vaøo vaø Ñieàu Khieån Ra :
Taïi moãi coâng ñoaïn seõ coù 2 vò trí ñaëc bieät :
Vò trí cho pheùp vaøo (MEMIN) : Cho pheùp baùnh xe chöùa saûn phaåm reõ vaøo baêng chuyeàn reõ nhaùnh ñeå laøm.
Vò trí cho pheùp ra (MEMOUT) : Cho pheùp baùnh xe chöùa saûn phaåm laøm xong ñang chôø chaïy vaøo baêng chuyeàn chính.
Caùc vò trí MEMIN & MEMOUT cuûa cuøng 1 coâng ñoaïn vaø giöõa caùc coâng ñoaïn seõ caùch nhau 1 khoaûng caùch coá ñònh do caáu taïo cô khí vaø caùch boá trí caùc coâng ñoaïn cuûa daây chuyeàn saûn xuaát.
Ñieàu khieån vaøo : ñieàu kieän
MEMIN # 0 : coù baùnh xe (saûn phaåm).
Khoâng coù tín hieäu baùo ñaàøy töø coâng ñoaïn ñang xeùt
Ñieàu khieån ra : ñieàu kieän
MEMOUT # 0 :khoâng coù saûn phaåm.
Coù saûn phaåm laøm xong ñang chôø
Ghi chuù : Khi coù saûn phaåm laøm xong ñang chôø cho ra ñeå vaøo baêng taûi. Khi coù tín hieäu Ñieàu Khieån ra thì baùnh xe ( AT24C02 ) seõ ñöôïc caáp nguoàn vaø 2 chaân SDA vaø SCL tieáp xuùc P1.6 vaø P1.7 , VXL seõ ñoïc ñöôïc döõ lieäu töø AT24C02 ñöôïc caáp nguoàn vaø phaùt leân PC.
VI. Sô Ñoà Nguyeân Lyù Ñieàu Khieån :
PC
VXL1
VXL2
VXL n
VXL n+1
ÑK Vaøo&Ra
Ñoïc EEPROM
ÑK Vaøo&Ra
Ñoïc EEPROM
ÑK Vaøo&Ra
Ñoïc EEPROM
ÑK Vaøo&Ra
Ñoïc EEPROM
VXL 1 ñeán n : coù nhieäm vuï
Nhaän töø PC tín hieäu :
Ñieàu khieån vaøo
Ñieàu khieån ra
Phaùt PC tín hieäu :
Baùo baän taïi caùc coâng ñoaïn
Maõ SEEPROM
VXL (n+1) : coù nhieäm vuï
Nhaän töø PC tín hieäu :
Ñieàu khieån vaøo (saûn phaåm ñaõ laøm ñuû n coâng ñoaïn)
Ñieàu khieån ra (ñöa saûn phaåm môùi vaøo)
Phaùt PC tín hieäu :
Côø baùo baêng taûi chuyeån ñoäng (moãi laàn baêng taûi chuyeån ñoäng ñöôïc 1 oâ (raõnh) thì côø baêng taûi seõ baùo).
Maõ SEEPROM
PC coù nhieäm vuï thu thaäp,quaûn lyù vaø xöû lí döõ lieäu
Set caùc vò trí MEMIN(i) vaø MEMOUT(i) (i = 1ñeán n+1)
Quaûn lí n raõnh baêng taûi cuûa daây chuyeàn saûn xuaát :moãi laàn nhaän ñöôïc tín hieäu côø baêng taûi töø VXL cuoái (n+1),PC seõ taêng caùc giaù trò MEMIN(i) vaø MEMOUT(i) leân 1 ñôn vò
Quaûn lí n saûn phaåm (n baùnh xe) ñaõ laøm coâng ñoaïn naøo vaø chöa laøm coâng ñoaïn naøo hay laø saûn phaå môùi ñöa vaøo
Phaùt tín hieäu Ñieàu khieån vaøo vaø Ñieàu khieån ra ñeán caùc VXL
CHÖÔNG V :
SÔ ÑOÀ GIAÛI THUAÄT VAØ CHÖÔNG TRÌNH
ÑEÅ ÑIEÀU KHIEÅN DAÂY CHUYEÀN SAÛN XUAÁT (DCSX) TOÅNG QUAÙT TREÂN GOÀM n COÂNG ÑOAÏN (CÑ),CHÖÔNG TRÌNH MINH HOÏA SAU ÑAÂY SEÕ TRÌNH BAØY DAÂY CHUYEÀN SAÛN XUAÁT ÑÔN GIAÛN NHÖ SAU : SAÛN PHAÅM (SP) PHAÛI LAØM 3 CÑ VAØ CÑ CUOÁI CUØNG LAØ CÑ 4 ÑEÅ LAÁY SP ÑAÕ LAØM XONG 3 CÑ RA VAØ ÑÖA SP MÔÙI VAØO (CHÖÔNG TRÌNH HOAØN TOAØN COÙ THEÅ MÔÛ ROÄNG CHO DCSX GOÀM n CÑ) . CAÙC CÑ 1,2,3,4 ÖÙNG VÔÙI VÒ TRÍ CUÛA CAÙC VXL 1,2,3,4.
* Giaû söû baêng taûi cuûa DCSX coù 12 raõnh (oâ) ,do ñoù coù theå chöùa toái ña 12 baùnh xe (SP) moãi baùnh xe coù gaén 1 con seeprom AT24C0X,caùc con seeprom ñöôïc naïp caùc giaù trò töø 1 - 12 (1 byte)
* Caùc VXL 1,2,3 :
Nhaän töø PC tín hieäu :
ÑK Vaøo (xuaát xung ra P3.4 ñeå kieåm tra)
ÑK Ra (xuaát xung ra P3.5 ñeå kieåm tra)
Phaùt leân PC tín hieäu :
Baùo baän ( Swich P3.2 = 0 : baän )
Maõ ROM ñoïc ñöôïc ( Swich P3.3 = 0 : coù saûn phaåm laøm xong ñang chôø vaøo daây chuyeàn saûn xuaát )
* VXL 4
Nhaän töø PC tín hieäu :
ÑK Vaøo (xuaát xung ra P3.4 ñeå kieåm tra)
ÑK Ra (xuaát xung ra P3.5 ñeå kieåm tra)
Phaùt leân PC tín hieäu :
Côø baùo baêng taûi chuyeån ñoäng ( Swich P3.2 = 0 )
Maõ ROM ñoïc ñöôïc (Swich P3.3 = 0 : coù saûn phaåm laøm xong ñang chôø ñeå vaøo DCSX )
* PC :
Duøng maûng MEMIN(1-4) ñeå xeùt caùc vò trí ÑK Vaøo taïi caùc VXL 1,2,3,4
Duøng maûng MEMOUT(1-4) ñeå xeùt caùc vò trí ÑK Ra taïi caùc VXL 1,2,3,4
Duøng maûng DATA(1-12) ñeå quaûn lí 12 oâ BT, oâ naøo khoâng coù SP thì DATA(i) = 0,oâ naøo coù SP thì giaù trò DATA(i) = maõ ROM chöùa SP ñoù (i = 1-12)
Duøng maûng DATACD(1-12) ñeå quaûn lí caùc CÑ ñaõ laøm hoaëc chöa laøm cuûa 12 SP. Neáu SP treân baùnh xe chöùa ROM coù maõ laø i thì DATACD(i) seõ quaûn lí (i = 1-12) SP ñoù.
DATACD(i) = xxxxxxxx (8 bit)
bit 0 : CÑ 1
bit 1 : CÑ 2
bit 2 : CÑ 3
bit x = 0 : CÑ chöa laøm
bit x = 1 : CÑ ñaõ laøm
Ñeå nhaän vaø phaùt vôùi maïng VXL,PC qui ñònh caùch ñònh ñòa chæ vaø maõ leänh nhö sau : duøng 1 byte ñeå nhaän bieát ñòa chæ vaø maõ leänh :
C3C2C1C0 A3A2A1A0
Ñòa chæ :
A3A2A1A0 = 0001 : Ñòa chæ VXL1
A3A2A1A0 = 0010 : Ñòa chæ VXL2
A3A2A1A0 = 0011 : Ñòa chæ VXL3
A3A2A1A0 = 0100 : Ñòa chæ VXL4
Maõ leänh :
C3C2C1C0 = 0001 : ÑK Vaøo
C3C2C1C0 = 0010 : ÑK Ra
C3C2C1C0 = 0011 : Maõ ROM
C3C2C1C0 = 0100 : Baän (VXL1,2,3),Côø BT (VXL4)
Sô Ñoà Maïch Nguyeân Lyù
CHÖÔNG TRÌNH TOÅNG QUAÙT PC
LOOP
- CT ÑK Ra
- Ñoïc maõ Rom töø caùc VXL
Coù tín hieäu côø BT töø XL4?
CT ÑK Vaøo
LOOP
PC
N
Y
LÖU ÑOÀ GIAÛI THUAÄT CHI TIEÁT :
- SET MEMOUT ( i )
- SET MEMIN ( i )
START
CT ÑK VAØO
Tín hieäu BT töø XL4?
DATAIN = 44H ?
- INC MEMOUT(i )
- INC MEMIN (i )
Vò trí vaøo CÑ1 coù SP?
DATA[MEMIN(1)]#0
Phaùt tín hieäu ÑK vaøo xuoáng VXL1
DATAOUT = 11H
CÑ1 laøm chöa ?
DATACD[DATA(MEMIN(1))] AND 01H = 01H ?
LOOP
N
Y
Y
N
Y
N
Y
N
N
Coù tín hieäu baùo Busy
töø VXL1 ?
DATAIN = 41H ?
Xoaù oâ nhôù vöøa cho SP vaøo
DATA[MEMIN(1)] = 0
Vò trí vaøo CÑ2 coù SP?
DATA[MEMIN(2)]#0?
Phaùt tín hieäu ÑK vaøo xuoáng VXL2
DATAOUT = 12H
CÑ2 laøm chöa ?
DATACD[DATA(MEMIN(2))] AND 02H = 02H ?
Y
N
N
N
Y
Y
Y
N
N
N
Coù tín hieäu baùo Busy
töø VXL2 ?
DATAIN = 42H ?
Xoaù oâ nhôù vöøa cho SP vaøo
DAT[MEMIN(2)] = 0
Vò trí vaøo CÑ3 coù SP?
DATA[MEMIN(3)#0?
Phaùt tín hieäu ÑK vaøo xuoáng VXL3
DATAOUT = 13H
CÑ3 laøm chöa ?
DATACD[DATA(MEMIN(3))] AND 04H = 04H ?
Y
N
N
Y
Y
N
N
Phaùt tín hieäu ÑK vaøo xuoáng VXL4
DATAOUT = 14H
Coù tín hieäu baùo Busy
töø VXL3 ?
DATAIN = 43H ?
Xoaù oâ nhôù vöøa cho SP vaøo
DATA[MEMIN(3)] = 0
Vò trí vaøo CÑ4 coù SP?
DATA[MEMIN(4)#0?
Caû ba CÑ1,CÑ2,CÑ3 laøm chöa ?
DATACD[DATA(MEMIN(4))] AND 07H = 07H ?
Xoaù oâ nhôù vöøa cho SP vaøo
DATA[MEMIN(4)] = 0
Y
N
N
Y
N
Y
Y
CT ÑK RA
Vò trí ra CÑ1 coù SP ?
DATA[MEMOUT(1)] #0 ?
Truyeàn tín hieäu ÑK ra xuoáng VXL1
DATAOUT = 21H
Coù tín hieäu ñoïc ROM töø VXL1?
DATAIN(1) = 31H ?
Gaùn maõ ROM nhaän ñöôïc vaøo oâ nhôù cho pheùp ÑK ra
DATA[MEMOUT(1) = DATAIN(2)
(Maõ ROM = DATAIN(2)]
Ñaùnh daáu CÑ1 ñaõ laøm
DATACD[DATA(MEMOUT(1))] OR 01H
Y
N
N
Y
Vò trí ra CÑ2 coù SP ?
DATA[MEMOUT(2)] # 0 ?
Truyeàn tín hieäu ÑK ra xuoáng VXL2
DATAOUT = 22H
Coù tín hieäu ñoïc ROM töø VXL2?
DATAIN(1) = 32H ?
Gaùn maõ ROM nhaän ñöôïc vaøo oâ nhôù cho pheùp ÑK ra
DATA[MEMOUT(2)] = DATAIN(2)
(Maõ ROM = DATAIN(2)]
Ñaùnh daáu CÑ2 ñaõ laøm
DATACD[DATA(MEMOUT(2))] OR 02H
Y
N
N
Y
Vò trí ra CÑ3 coù SP ?
DATA[MEMOUT(3)] # 0 ?
Truyeàn tín hieäu ÑK ra xuoáng VXL3
DATAOUT = 23H
Coù tín hieäu ñoïc ROM töø VXL3?
DATAIN(1) = 33H ?
Gaùn maõ ROM nhaän ñöôïc vaøo oâ nhôù cho pheùp ÑK ra
DATA[MEMOUT(3)] = DATAIN(2)
(Maõ ROM = DATAIN(2) )
Ñaùnh daáu CÑ3 ñaõ laøm
DATACD[DATA(MEMOUT(3))] OR 04H
Y
N
N
Y
Coù tín hieäu ñoïc ROM töø VXL3?
DATAIN(1) = 33H ?
Gaùn maõ ROM vaøo oâ nhôù cho pheùp ÑK ra
DATA[MEMOUT(3)] = DATAIN(2)
(Maõ ROM = DATAIN(2) )
Ñaùnh daáu CÑ3 ñaõ laøm
DATACD[DATA(MEMOUT(3)] OR 04H
Vò trí ra CÑ4 coù SP ?
DATA[MEMOUT(4)] # 0 ?
Truyeàn tín hieäu ÑK ra xuoáng VXL4
DATAOUT = 24H
Coù tín hieäu ñoïc ROM töø VXL4?
DATAIN(1) = 34H ?
Gaùn maõ ROM nhaän ñöôïc vaøo oâ nhôù cho pheùp ÑK ra
DATA[MEMOUT(4)] = DATAIN(2)
(Maõ ROM = DATAIN(2)]
Ñöa SP môùi vaøo (chöa laøm CÑ naøo) DATACD[DATA(MEMOUT(4))] = 0
LOOP
Y
N
N
Y
LÖU ÑOÀ GIAÛI THUAÄT CUÛA CAÙC VXL 1,2,3
VXL1,2,3
Coù phaûi tín hieäu ÑK Vaøo
LOOP
Nhaän tín hieäu ÑK töø
PC
Coù phaûi tín hieäu ÑK Ra ?
ÑK Vaøo
Phaùt PC baùo baän
Caùc CÑ coù baän ?
Coù SP laøm xong ñang chôø?
Ñoïc ROM & phaùt PC
ÑK Ra
LOOP
Y
Y
N
N Y
N N
Y
LÖU ÑOÀ GIAÛI THUAÄT CHO VXL4 (CÑ CUOÁI )
VXL1,2,3
LOOP
Coù phaûi tín hieäu ÑK Vaøo
Coù phaûi tín hieäu ÑK Ra ?
ÑK Vaøo
Coù SP môùi ñang chôø?
Ñoïc ROM & phaùt PC
ÑK Ra
LOOP
Coù tín hieäu côø BT
N
Y
Y
N
Y
N N
Y
CHÖÔNG TRÌNH VXL1:
ORG 0000H
MEM1 EQU 30H
MEM2 EQU 31H
MEM19 EQU 50H
MEM20 EQU 51H
MAIN:
MOV SCON,#01010010B
CLR TR1
MOV TMOD,#21H
MOV TH1,#-3
SETB TR1
LOOP:
ACALL INCHAR
;CO PHAI TIN HIEU DIEU KHIEN VAO ?
CJNE A,#11H,NEXT
JNB P3.2,BUSY
;CO TIN HIEU BAO BAN ?
ACALL DKVAO
;PHAT TIN HIEU BAO KHONG BAN
MOV A,#51H
ACALL OUTCHAR
SJMP LOOP
BUSY:
;PHAT TIN HIEU BAO BAN
MOV A,#41H
ACALL OUTCHAR
SJMP LOOP
NEXT:
;CO PHAI TIN HIEU DIEU KHIEN RA ?
CJNE A,#21H,LOOP
;CO SAN PHAM CHO ?
JB P3.3,NEXT1
;CO SP CHO ?
ACALL DKRA
WAIT:
;CHO DOC ROM
MOV A,#0
ACALL DOCROM
CJNE A,#0FFH,NEXT2
;CO DOC DUOC MA ROM ?
SJMP WAIT
NEXT2:
;XUAT MA ROM DOC DUOC RA P2 DE KIEM TRA
MOV P2,A
MOV B,A
MOV A,#31H
ACALL OUTCHAR
MOV A,B
ACALL OUTCHAR
SJMP LOOP
NEXT1:
;PHAT TIN HIEU BAO KHONG CO SAN PHAM CHO
MOV A,#61H
ACALL OUTCHAR
MOV A,#71H
ACALL OUTCHAR
SJMP LOOP
;KHAI BAO CAC CHUONG TRINH CON
INCHAR:
JNB RI,$
CLR RI
MOV A,SBUF
RET
OUTCHAR:
JNB TI,$
CLR TI
MOV SBUF,A
RET
DKVAO:
;XUAT TIN HIEU DK VAO RA P3.4 DE KIEM TRA
CLR P3.4
ACALL DELAY100MS
SETB P3.4
RET
DKRA:
;XUAT TIN HIEU DKRA RA P3.5 DE KIEM TRA
CLR P3.5
ACALL DELAY100MS
SETB P3.5
RET
I2CINIT:
SETB P1.6 ;SDA = 1
SETB P1.7 ;SCL = 1
RET
I2CSTART:
CLR P1.6 ;SDA = 0
SETB P1.7 ;SCL = 1
CLR P1.7 ;SCL = 0
RET
I2CSTOP:
CLR P1.6 ;SDA = 0
CLR P1.7 ;SCL = 0
SETB P1.7 ;SCL = 1
SETB P1.6 ;SDA = 1
RET
ACK:
CLR P1.6 ;SDA = 0
CLR P1.7 ;SCL = 0
SETB P1.7 ;SCL = 1
CLR P1.7 ;SCL = 0
NACK:
SETB P1.6 ;SDA = 1
CLR P1.7 ;SCL = 0
SETB P1.7 ;SCL = 1
CLR P1.7 ;SCL = 0
RET
XUATRA:
MOV MEM20,A ;BO NHO TRUNG GIAN
MOV A,#8
MOV MEM19,A ;BO DEM DUNG CHO 8 BIT
LAP:
MOV A,MEM20
ANL A,#128 ;CHE BIT 7
RR A ;SAU BIT 6 (SDA)
ADD A,#3FH
MOV P1,A
SETB P1.7
CLR P1.7
MOV A,MEM20
RL A ;BIT TIEP THEO
MOV MEM20,A
DJNZ MEM19,LAP ;BO DEM GIAM 1
SETB P1.6
CLR P1.7
SETB P1.6
SETB P1.7
CLR P1.7
RET
DOCVAO:
SETB P1.6 ;SDA = 1
CLR P1.7 ;SCL = 0
MOV MEM20,#0
MOV MEM19,#8
LAP1:
SETB P1.7 ;SCL = 1
MOV A,MEM20
RL A
MOV B,A
MOV A,P1
ANL A,#64 ;DOC SDA
RL A
RL A ;BIT 0
ADD A,B
MOV MEM20,A ;LUU TRU
CLR P1.7 ;SCL = 0
DJNZ MEM19,LAP1 ;8 LAN
RET
DOCROM:
ACALL I2CSTART
MOV A,#10100000B ;DIA CHI AT24C02,VIET
ACALL XUATRA
MOV A,#0 ;DIA CHI BAT DAU 0
ACALL XUATRA
ACALL I2CSTOP
ACALL I2CSTART
MOV A,#10100001B ;DIA CHI AT24C02,DOC
ACALL XUATRA
ACALL DOCVAO
ACALL NACK
ACALL I2CSTOP
RET
DELAY100MS:
PUSH B
MOV B,#2
LAP2:
MOV TL0,#LOW(-50000)
MOV TH0,#HIGH(-50000)
SETB TR0
JNB TF0,$
CLR TF0
CLR TR0
DJNZ B,LAP2
POP B
RET
END
CHÖÔNG TRÌNH VXL2:
ORG 0000H
MEM1 EQU 30H
MEM2 EQU 31H
MEM19 EQU 50H
MEM20 EQU 51H
MAIN:
MOV SCON,#01010010B
CLR TR1
MOV TMOD,#21H
MOV TH1,#-3
SETB TR1
LOOP:
ACALL INCHAR
;CO PHAI TIN HIEU DIEU KHIEN VAO ?
CJNE A,#12H,NEXT
JNB P3.2,BUSY
;CO TIN HIEU BAO BAN ?
ACALL DKVAO
;PHAT TIN HIEU BAO KHONG BAN
MOV A,#52H
ACALL OUTCHAR
SJMP LOOP
BUSY:
;PHAT TIN HIEU BAO BAN
MOV A,#42H
ACALL OUTCHAR
SJMP LOOP
NEXT:
;CO PHAI TIN HIEU DIEU KHIEN RA ?
CJNE A,#22H,LOOP
;CO SAN PHAM CHO ?
JB P3.3,NEXT1
ACALL DKRA
WAIT:
;CHO DOC ROM
ACALL DOCROM
CJNE A,#0FFH,NEXT2
;CO DOC DUOC MA ROM ?
SJMP WAIT
NEXT2:
MOV P2,A
;XUAT MA ROM DOC DUOC RA P2 DE KIEM TRA
MOV B,A
MOV A,#32H
ACALL OUTCHAR
MOV A,B
ACALL OUTCHAR
SJMP LOOP
NEXT1:
;PHAT TIN HIEU BAO KHONG CO SAN PHAM CHO
MOV A,#62H
ACALL OUTCHAR
MOV A,#72H
ACALL OUTCHAR
SJMP LOOP
;KHAI BAO CAC CHUONG TRINH CON
INCHAR:
JNB RI,$
CLR RI
MOV A,SBUF
RET
OUTCHAR:
JNB TI,$
CLR TI
MOV SBUF,A
RET
DKVAO:
;XUAT TIN HIEU DK VAO RA P3.4 DE KIEM TRA
CLR P3.4
ACALL DELAY100MS
SETB P3.4
RET
DKRA:
;XUAT TIN HIEU DKRA RA P3.5 DE KIEM TRA
CLR P3.5
ACALL DELAY100MS
SETB P3.5
RET
I2CINIT:
SETB P1.6 ;SDA = 1
SETB P1.7 ;SCL = 1
RET
I2CSTART:
CLR P1.6 ;SDA = 0
SETB P1.7 ;SCL = 1
CLR P1.7 ;SCL = 0
RET
I2CSTOP:
CLR P1.6 ;SDA = 0
CLR P1.7 ;SCL = 0
SETB P1.7 ;SCL = 1
SETB P1.6 ;SDA = 1
RET
ACK:
CLR P1.6 ;SDA = 0
CLR P1.7 ;SCL = 0
SETB P1.7 ;SCL = 1
CLR P1.7 ;SCL = 0
NACK:
SETB P1.6 ;SDA = 1
CLR P1.7 ;SCL = 0
SETB P1.7 ;SCL = 1
CLR P1.7 ;SCL = 0
RET
XUATRA:
MOV MEM20,A ;BO NHO TRUNG GIAN
MOV A,#8
MOV MEM19,A ;BO DEM DUNG CHO 8 BIT
LAP:
MOV A,MEM20
ANL A,#128 ;CHE BIT 7
RR A ;SAU BIT 6 (SDA)
ADD A,#3FH
MOV P1,A
SETB P1.7
CLR P1.7
MOV A,MEM20
RL A ;BIT TIEP THEO
MOV MEM20,A
DJNZ MEM19,LAP ;BO DEM GIAM 1
SETB P1.6
CLR P1.7
SETB P1.6
SETB P1.7
CLR P1.7
RET
DOCVAO:
SETB P1.6 ;SDA = 1
CLR P1.7 ;SCL = 0
MOV MEM20,#0
MOV MEM19,#8
LAP1:
SETB P1.7 ;SCL = 1
MOV A,MEM20
RL A
MOV B,A
MOV A,P1
ANL A,#64 ;DOC SDA
RL A
RL A ;BIT 0
ADD A,B
MOV MEM20,A ;LUU TRU
CLR P1.7 ;SCL = 0
DJNZ MEM19,LAP1 ;8 LAN
RET
DOCROM:
ACALL I2CSTART
MOV A,#10100000B ;DIA CHI AT24C02,VIET
ACALL XUATRA
MOV A,#0 ;DIA CHI BAT DAU 0
ACALL XUATRA
ACALL I2CSTOP
ACALL I2CSTART
MOV A,#10100001B ;DIA CHI AT24C02,DOC
ACALL XUATRA
ACALL DOCVAO
ACALL NACK
ACALL I2CSTOP
RET
DELAY100MS:
PUSH B
MOV B,#2
LAP2:
MOV TL0,#LOW(-50000)
MOV TH0,#HIGH(-50000)
SETB TR0
JNB TF0,$
CLR TF0
CLR TR0
DJNZ B,LAP2
POP B
RET
END
CHÖÔNG TRÌNH VXL3:
ORG 0000H
MEM1 EQU 30H
MEM2 EQU 31H
MEM19 EQU 50H
MEM20 EQU 51H
MAIN:
MOV SCON,#01010010B
CLR TR1
MOV TMOD,#21H
MOV TH1,#-3
SETB TR1
LOOP:
ACALL INCHAR
;CO PHAI TIN HIEU DIEU KHIEN VAO ?
CJNE A,#13H,NEXT
JNB P3.2,BUSY
;CO TIN HIEU BAO BAN ?
ACALL DKVAO
;PHAT TIN HIEU BAO KHONG BAN
MOV A,#53H
ACALL OUTCHAR
SJMP LOOP
BUSY:
;PHAT TIN HIEU BAO BAN
MOV A,#43H
ACALL OUTCHAR
SJMP LOOP
NEXT:
;CO PHAI TIN HIEU DIEU KHIEN RA ?
CJNE A,#23H,LOOP
JB P3.3,NEXT1
;CO SP CHO ?
ACALL DKRA
WAIT:
;CHO DOC ROM
MOV A,#0
ACALL DOCROM
CJNE A,#0FFH,NEXT2
;CO DOC DUOC MA ROM ?
SJMP WAIT
NEXT2:
MOV P2,A
;XUAT MA ROM DOC DUOC RA P2 DE KIEM TRA
MOV B,A
MOV A,#33H
ACALL OUTCHAR
MOV A,B
ACALL OUTCHAR
SJMP LOOP
NEXT1:
;PHAT TIN HIEU BAO KHONG CO SAN PHAM CHO
MOV A,#63H
ACALL OUTCHAR
MOV A,#73H
ACALL OUTCHAR
SJMP LOOP
;KHAI BAO CAC CHUONG TRINH CON
INCHAR:
JNB RI,$
CLR RI
MOV A,SBUF
RET
OUTCHAR:
JNB TI,$
CLR TI
MOV SBUF,A
RET
DKVAO:
;XUAT TIN HIEU DK VAO RA P3.4 DE KIEM TRA
CLR P3.4
ACALL DELAY100MS
SETB P3.4
RET
DKRA:
;XUAT TIN HIEU DKRA RA P3.5 DE KIEM TRA
CLR P3.5
ACALL DELAY100MS
SETB P3.5
RET
I2CINIT:
SETB P1.6 ;SDA = 1
SETB P1.7 ;SCL = 1
RET
I2CSTART:
CLR P1.6 ;SDA = 0
SETB P1.7 ;SCL = 1
CLR P1.7 ;SCL = 0
RET
I2CSTOP:
CLR P1.6 ;SDA = 0
CLR P1.7 ;SCL = 0
SETB P1.7 ;SCL = 1
SETB P1.6 ;SDA = 1
RET
ACK:
CLR P1.6 ;SDA = 0
CLR P1.7 ;SCL = 0
SETB P1.7 ;SCL = 1
CLR P1.7 ;SCL = 0
NACK:
SETB P1.6 ;SDA = 1
CLR P1.7 ;SCL = 0
SETB P1.7 ;SCL = 1
CLR P1.7 ;SCL = 0
RET
XUATRA:
MOV MEM20,A ;BO NHO TRUNG GIAN
MOV A,#8
MOV MEM19,A ;BO DEM DUNG CHO 8 BIT
LAP:
MOV A,MEM20
ANL A,#128 ;CHE BIT 7
RR A ;SAU BIT 6 (SDA)
ADD A,#3FH
MOV P1,A
SETB P1.7
CLR P1.7
MOV A,MEM20
RL A ;BIT TIEP THEO
MOV MEM20,A
DJNZ MEM19,LAP ;BO DEM GIAM 1
SETB P1.6
CLR P1.7
SETB P1.6
SETB P1.7
CLR P1.7
RET
DOCVAO:
SETB P1.6 ;SDA = 1
CLR P1.7 ;SCL = 0
MOV MEM20,#0
MOV MEM19,#8
LAP1:
SETB P1.7 ;SCL = 1
MOV A,MEM20
RL A
MOV B,A
MOV A,P1
ANL A,#64 ;DOC SDA
RL A
RL A ;BIT 0
ADD A,B
MOV MEM20,A ;LUU TRU
CLR P1.7 ;SCL = 0
DJNZ MEM19,LAP1 ;8 LAN
RET
DOCROM:
ACALL I2CSTART
MOV A,#10100000B ;DIA CHI AT24C02,VIET
ACALL XUATRA
MOV A,#0 ;DIA CHI BAT DAU 0
ACALL XUATRA
ACALL I2CSTOP
ACALL I2CSTART
MOV A,#10100001B ;DIA CHI AT24C02,DOC
ACALL XUATRA
ACALL DOCVAO
ACALL NACK
ACALL I2CSTOP
RET
DELAY100MS:
PUSH B
MOV B,#2
LAP2:
MOV TL0,#LOW(-50000)
MOV TH0,#HIGH(-50000)
SETB TR0
JNB TF0,$
CLR TF0
CLR TR0
DJNZ B,LAP2
POP B
RET
END
CHÖÔNG TR4ÌNH VXL4:
ORG 0000H
MEM1 EQU 30H
MEM2 EQU 31H
MEM19 EQU 50H
MEM20 EQU 51H
MAIN:
MOV SCON,#01010010B
CLR TR1
MOV TMOD,#21H
MOV TH1,#-3
SETB TR1
CO:
;CHO TIN HIEU CO BANG TAI
JB P3.2,CO
ACALL DELAY100MS
JB P3.2,CO
MOV A,#44H
ACALL OUTCHAR
;NHAN TIN HIEU DIEU KHIEN
LOOP:
ACALL INCHAR
CJNE A,#14H,NEXT
ACALL DKVAO
;PHAT TIN HIEU DIEU KHIEN VAO
MOV A,#54
ACALL OUTCHAR
SJMP LOOP
NEXT:
CJNE A,#24H,NEXT1
JB P3.3,NEXT2
;CO SP CHO ?
ACALL DKRA
WAIT:
;CHO DOC ROM
MOV A,#0
ACALL DOCROM
CJNE A,#0FFH,NEXT3
;CO DOC DUOC MA ROM ?
SJMP WAIT
NEXT3:
MOV P2,A
;XUAT MA ROM DOC DUOC RA P2 DE KIEM TRA
MOV B,A
MOV A,#34H
ACALL OUTCHAR
MOV A,B
ACALL OUTCHAR
SJMP LOOP
NEXT2:
MOV A,#64H
ACALL OUTCHAR
MOV A, #74H
ACALL OUTCHAR
SJMP LOOP
NEXT1:
;KIEM TRA XEM CO PHAI TIN HIEU KET THUC
CJNE A,#79,LOOP
SJMP CO
;KHAI BAO CAC CHUONG TRINH CON
INCHAR:
JNB RI,$
CLR RI
MOV A,SBUF
RET
OUTCHAR:
JNB TI,$
CLR TI
MOV SBUF,A
RET
DKVAO:
;XUAT TIN HIEU DK VAO RA P3.4 DE KIEM TRA
CLR P3.4
ACALL DELAY100MS
SETB P3.4
RET
DKRA:
;XUAT TIN HIEU DKRA RA P3.5 DE KIEM TRA
CLR P3.5
ACALL DELAY100MS
SETB P3.5
RET
I2CINIT:
SETB P1.6 ;SDA = 1
SETB P1.7 ;SCL = 1
RET
I2CSTART:
CLR P1.6 ;SDA = 0
SETB P1.7 ;SCL = 1
CLR P1.7 ;SCL = 0
RET
I2CSTOP:
CLR P1.6 ;SDA = 0
CLR P1.7 ;SCL = 0
SETB P1.7 ;SCL = 1
SETB P1.6 ;SDA = 1
RET
ACK:
CLR P1.6 ;SDA = 0
CLR P1.7 ;SCL = 0
SETB P1.7 ;SCL = 1
CLR P1.7 ;SCL = 0
NACK:
SETB P1.6 ;SDA = 1
CLR P1.7 ;SCL = 0
SETB P1.7 ;SCL = 1
CLR P1.7 ;SCL = 0
RET
XUATRA:
MOV MEM20,A ;BO NHO TRUNG GIAN
MOV A,#8
MOV MEM19,A ;BO DEM DUNG CHO 8 BIT
LAP:
MOV A,MEM20
ANL A,#128 ;CHE BIT 7
RR A ;SAU BIT 6 (SDA)
ADD A,#3FH
MOV P1,A
SETB P1.7
CLR P1.7
MOV A,MEM20
RL A ;BIT TIEP THEO
MOV MEM20,A
DJNZ MEM19,LAP ;BO DEM GIAM 1
SETB P1.6
CLR P1.7
SETB P1.6
SETB P1.7
CLR P1.7
RET
DOCVAO:
SETB P1.6 ;SDA = 1
CLR P1.7 ;SCL = 0
MOV MEM20,#0
MOV MEM19,#8
LAP1:
SETB P1.7 ;SCL = 1
MOV A,MEM20
RL A
MOV B,A
MOV A,P1
ANL A,#64 ;DOC SDA
RL A
RL A ;BIT 0
ADD A,B
MOV MEM20,A ;LUU TRU
CLR P1.7 ;SCL = 0
DJNZ MEM19,LAP1 ;8 LAN
RET
DOCROM:
ACALL I2CSTART
MOV A,#10100000B ;DIA CHI AT24C02,VIET
ACALL XUATRA
MOV A,#0 ;DIA CHI BAT DAU 0
ACALL XUATRA
ACALL I2CSTOP
ACALL I2CSTART
MOV A,#10100001B ;DIA CHI AT24C02,DOC
ACALL XUATRA
ACALL DOCVAO
ACALL NACK
ACALL I2CSTOP
RET
DELAY100MS:
PUSH B
MOV B,#2
LAP2:
MOV TL0,#LOW(-50000)
MOV TH0,#HIGH(-50000)
SETB TR0
JNB TF0,$
CLR TF0
CLR TR0
DJNZ B,LAP2
POP B
RET
END
CHÖÔNG TRÌNH VISUAL BASIC
Option Explicit
Dim data(1 To 12) As Byte
Dim Memout(1 To 4) As Byte
Dim Memin(1 To 4) As Byte
Dim Mem(1 To 12) As Byte
Dim Datain() As Byte
Dim Dataout(0) As Byte
Dim Bufferin As Variant
Dim Bufferout As Variant
Dim lap As Boolean
Private Sub cmddisplay_Click()
Load Form2
Form2.Show
End Sub
Private Sub cmdStart_Click()
Dim i, j, k As Integer
Dim x, y, z As Integer
Dim CY As Boolean
For i = 1 To 12
Mem(i) = i
Next i
For i = 1 To 12
data(i) = 0
Datacd(i) = 0
Next i
x = 0
y = 0
z = 0
'Vong lap chuong trinh chinh
lap = True
Do
'Cho tin hieu co bang tai tu VXL4
Do
CY = False
DoEvents
If (MSComm1.InBufferCount >= 1) Then
Bufferin = MSComm1.Input
Datain() = Bufferin
MSComm1.InBufferCount = 0
If Datain(0) = &H44 Then
CY = True
End If
End If
Loop Until CY = True
Beep
For i = 1 To 12
Mem(i) = Mem(i) - 1
If Mem(i) = 0 Then
Mem(i) = 12
End If
Next i
Memin(1) = Mem(1)
Memout(1) = Mem(2)
Memin(2) = Mem(4)
Memout(2) = Mem(5)
Memin(3) = Mem(7)
Memout(3) = Mem(8)
Memin(4) = Mem(10)
Memout(4) = Mem(11)
'Hien thi 12 san pham
For i = 1 To 12
If data(Mem(i)) Then
Frame1(i - 1).Visible = True
Text1(i - 1).Text = Mem(i)
Text2(i - 1).Text = data(Mem(i))
If (Datacd(data(Mem(i))) And &H1) = &H1 Then
Check1(i - 1).Value = 1
Else:
Check1(i - 1).Value = 0
End If
If (Datacd(data(Mem(i))) And &H2) = &H2 Then
Check2(i - 1).Value = 1
Else:
Check2(i - 1).Value = 0
End If
If (Datacd(data(Mem(i))) And &H4) = &H4 Then
Check3(i - 1).Value = 1
Else:
Check3(i - 1).Value = 0
End If
Else:
Frame1(i - 1).Visible = False
End If
Next i
For i = 1 To 12
If data(Mem(i)) Then
Shape3(i - 1).Visible = True
Else:
Shape3(i - 1).Visible = False
End If
Next i
'Dieu khien vao cong doan 1
If data(Memin(1)) Then
'Co san pham
'Cong doan 1 lam chua
If (Datacd(data(Memin(1))) And &H1) &H1 Then
Dataout(0) = &H11
Bufferout = Dataout()
MSComm1.Output = Bufferout
MSComm1.OutBufferCount = 0
Do
DoEvents
Loop Until MSComm1.InBufferCount >= 1
Bufferin = MSComm1.Input
Datain() = Bufferin
MSComm1.InBufferCount = 0
If Datain(0) &H41 Then
data(Memin(1)) = 0
x = x + 1
If x > 4 Then
x = 4
End If
End If
End If
End If
'Dieu khien vao cong doan 2
If data(Memin(2)) Then
'Co san pham
'Cong doan 2 lam chua
If (Datacd(data(Memin(2))) And &H2) &H2 Then
Dataout(0) = &H12
Bufferout = Dataout()
MSComm1.Output = Bufferout
MSComm1.OutBufferCount = 0
Do
DoEvents
Loop Until MSComm1.InBufferCount >= 1
Bufferin = MSComm1.Input
Datain() = Bufferin
MSComm1.InBufferCount = 0
If Datain(0) &H42 Then
data(Memin(2)) = 0
y = y + 1
If y > 4 Then
y = 4
End If
End If
End If
End If
'Dieu khien vao cong doan 3
If data(Memin(3)) Then
'Co san pham
'Cong doan 3 lam chua
If (Datacd(data(Memin(3))) And &H4) &H4 Then
Dataout(0) = &H13
Bufferout = Dataout()
MSComm1.Output = Bufferout
MSComm1.OutBufferCount = 0
Do
DoEvents
Loop Until MSComm1.InBufferCount >= 1
Bufferin = MSComm1.Input
Datain() = Bufferin
MSComm1.InBufferCount = 0
If Datain(0) &H43 Then
data(Memin(3)) = 0
z = z + 1
If z > 4 Then
z = 4
End If
End If
End If
End If
'Dieu khien vao cong doan 4
If data(Memin(4)) Then
'Co san pham
'San pham lam xong 3 cong dan chua ?
If (Datacd(data(Memin(4))) And &H7) = &H7 Then
Dataout(0) = &H14
Bufferout = Dataout()
MSComm1.Output = Bufferout
MSComm1.OutBufferCount = 0
Do
DoEvents
Loop Until MSComm1.InBufferCount >= 1
Bufferin = MSComm1.Input
Datain() = Bufferin
MSComm1.InBufferCount = 0
data(Memin(4)) = 0
End If
End If
'Dieu khien ra cong doan 1
If data(Memout(1)) = 0 Then
'Khong co san pham
Dataout(0) = &H21
Bufferout = Dataout()
MSComm1.Output = Bufferout
MSComm1.OutBufferCount = 0
Do
DoEvents
Loop Until MSComm1.InBufferCount >= 2
Bufferin = MSComm1.Input
Datain() = Bufferin
MSComm1.InBufferCount = 0
If Datain(0) = &H31 Then
data(Memout(1)) = Datain(2)
Datacd(data(Memout(1))) = Datacd(data(Memout(1))) Or &H1
x = x - 1
If x < 0 Then
x = 0
End If
End If
End If
'Dieu khien ra cong doan 2
If data(Memout(2)) = 0 Then
'Khong co san pham
Dataout(0) = &H22
Bufferout = Dataout()
MSComm1.Output = Bufferout
MSComm1.OutBufferCount = 0
Do
DoEvents
Loop Until MSComm1.InBufferCount >= 2
Bufferin = MSComm1.Input
Datain() = Bufferin
MSComm1.InBufferCount = 0
If Datain(0) = &H32 Then
data(Memout(2)) = Datain(2)
Datacd(data(Memout(2))) = Datacd(data(Memout(2))) Or &H2
y = y - 1
If y < 0 Then
y = 0
End If
End If
End If
'Dieu khien ra cong doan 3
If data(Memout(3)) = 0 Then
'Khong co san pham
Dataout(0) = &H23
Bufferout = Dataout()
MSComm1.Output = Bufferout
MSComm1.OutBufferCount = 0
Do
DoEvents
Loop Until MSComm1.InBufferCount >= 2
Bufferin = MSComm1.Input
Datain() = Bufferin
MSComm1.InBufferCount = 0
If Datain(0) = &H33 Then
data(Memout(3)) = Datain(2)
Datacd(data(Memout(3))) = Datacd(data(Memout(3))) Or &H4
z = z - 1
If z < 0 Then
z = 0
End If
End If
End If
'Dieu khien ra cong doan 4
If data(Memout(4)) Then
'Co san pham
Dataout(0) = 79
Bufferout = Dataout()
MSComm1.Output = Bufferout
MSComm1.OutBufferCount = 0
Else:
'Khong co san pham
Dataout(0) = &H24
Bufferout = Dataout()
MSComm1.Output = Bufferout
MSComm1.OutBufferCount = 0
Do
DoEvents
Loop Until MSComm1.InBufferCount >= 2
Bufferin = MSComm1.Input
Datain() = Bufferin
MSComm1.InBufferCount = 0
If Datain(0) = &H34 Then
data(Memout(4)) = Datain(2)
Datacd(data(Memout(4))) = 0
End If
Dataout(0) = 79
Bufferout = Dataout()
MSComm1.Output = Bufferout
MSComm1.OutBufferCount = 0
End If
'Hien thi 12 san pham sau khi da dieu khien Vao va Ra
For i = 1 To 12
If data(Mem(i)) Then
Frame1(i - 1).Visible = True
Text1(i - 1).Text = Mem(i)
Text2(i - 1).Text = data(Mem(i))
If (Datacd(data(Mem(i))) And &H1) = &H1 Then
Check1(i - 1).Value = 1
Else:
Check1(i - 1).Value = 0
End If
If (Datacd(data(Mem(i))) And &H2) = &H2 Then
Check2(i - 1).Value = 1
Else:
Check2(i - 1).Value = 0
End If
If (Datacd(data(Mem(i))) And &H4) = &H4 Then
Check3(i - 1).Value = 1
Else:
Check3(i - 1).Value = 0
End If
Else:
Frame1(i - 1).Visible = False
End If
Next i
For i = 1 To 12
If data(Mem(i)) Then
Shape3(i - 1).Visible = True
Else:
Shape3(i - 1).Visible = False
End If
Next i
'Hien thi so san pham tai cong doan 1
Select Case x
Case 0
For i = 0 To 2
Shape4(i).Visible = False
Next i
Case 1
Shape4(0).Visible = True
Shape4(1).Visible = False
Shape4(2).Visible = False
Shape4(3).Visible = False
Case 2
Shape4(0).Visible = True
Shape4(1).Visible = True
Shape4(2).Visible = False
Shape4(3).Visible = False
Case 3
For i = 0 To 2
Shape4(i).Visible = True
Next i
Shape4(3).Visible = False
Case 4
For i = 0 To 3
Shape4(i).Visible = True
Next i
End Select
'Hien thi so san pham tai cong doan 2
Select Case y
Case 0
For i = 0 To 2
Shape5(i).Visible = False
Next i
Case 1
Shape5(0).Visible = True
Shape5(1).Visible = False
Shape5(2).Visible = False
Shape5(3).Visible = False
Case 2
Shape5(0).Visible = True
Shape5(1).Visible = True
Shape5(2).Visible = False
Shape5(3).Visible = False
Case 3
For i = 0 To 2
Shape5(i).Visible = True
Next i
Shape5(3).Visible = False
Case 4
For i = 0 To 3
Shape5(i).Visible = True
Next i
End Select
'Hien thi so san pham tai cong doan 3
Select Case z
Case 0
For i = 0 To 2
Shape6(i).Visible = False
Next i
Case 1
Shape6(0).Visible = True
Shape6(1).Visible = False
Shape6(2).Visible = False
Shape6(3).Visible = False
Case 2
Shape6(0).Visible = True
Shape6(1).Visible = True
Shape6(2).Visible = False
Shape6(3).Visible = False
Case 3
For i = 0 To 2
Shape6(i).Visible = True
Next i
Shape6(3).Visible = False
Case 4
For i = 0 To 3
Shape6(i).Visible = True
Next i
End Select
'Kiem tra Error (neu co nhieu san pham cung ma Rom tren bang tai)
k = 2
For i = 1 To 11
For j = k To 12
If (data(i) = data(j)) And data(i) 0 Then
MsgBox "Co san pham cung ma Rom", , "Error"
End If
Next j
k = k + 1
Next i
Loop Until lap = False
End Sub
Private Sub cmdStop_Click()
lap = False
Unload Form1
End Sub
Private Sub Form_Load()
MSComm1.Settings = "9600,n,8,1"
MSComm1.InputLen = 0
MSComm1.InputMode = comInputModeText
MSComm1.CommPort = 2
MSComm1.PortOpen = True
End Sub
Private Sub Unload_form()
MSComm1.PortOpen = False
End Sub
BAÙO CAÙO KEÁT QUAÛ THI COÂNG
* Chöông trình vieát vaø ñoïc Seeprom AT24C02 :
Vieát vaø ñoïc ñöôïc ñuùng giaù trò.
* Chöông trình ñieàu khieån daây chuyeàn saûn suaát :
Chöông trình ñieàu khieån chaïy ñuùng yeâu caàu ñaët ra ban ñaàu cuûa daây chuyeàn saûn xuaát.