Tài liệu Giao tiếp máy tính với vi xử lý: ... Ebook Giao tiếp máy tính với vi xử lý
109 trang |
Chia sẻ: huyen82 | Lượt xem: 1714 | Lượt tải: 0
Tóm tắt tài liệu Giao tiếp máy tính với vi xử lý, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Chöông I:
CHÖÔNG DAÃN NHAÄP
ÑAËT VAÁN ÑEÀ:
Khi nhu caàu hoïc taäp ngaøy caøng cao thì thieát bò, phöông tieän daïy hoïc caøng ñoùng vai troø quan troïng, noù giuùp ngöôøi thaày dôõ vaát vaû trong vieäc truyeàn thuï kieán thöùc, giuùp ngöôøi hoïc nhanh choùng tieáp thu, ngoaøi ra coøn ñeå minh hoïa, chöùng thöïc moât caùch cuï theå nhöõng baøi hoïc mô hoà tröøu töôïng.
Trong baøi naøy, ngöôøi thöïc hieän muoán ñeà caäp ñeán moân hoïc vi xöû lyù, laäp trình vi xöû lyù, moät moân hoïc mang yù nghóa thieát thöïc trong xaõ hoäi maø quaù trình coâng nghieäp hoùa, hieän ñaïi hoùa dieãn ra töøng ngaøy. Khi hoïc moân naøy, ngöôøi hoïc khoâng chæ ñöôïc hoïc veà caáu truùc vi xöû lyù caû phaàn cöùng laãn phaàn meàm, caùch keát noái vôùi caùc IC ngoaïi vi 8255, 8279, … maø coøn phaûi söû duïng thaønh thaïo Kit vi xöû lyù 8085,…
Khi vieát moät chöông trình treân Kit vxl 8085 vaø ñeå kieåm nghieäm chöông trình ñoù thì ngöoøi hoïc phaûi qua caùc böôùc :
Böôùc 1: Xaùc ñònh muïc ñích yeâu caàu cuûa chöông trình.
Muïc ñích, yeâu caàu ñöôïc xaùc ñònh töø ñeà baøi, hoaëc moät nhu caàu thöïc teá, ñaây laø muïc ñích chung cuûa chöông trình. Ñeå thöïc hieän muïc ñích chung naøy, coù theå seõ phaûi qua nhieàu böôùc, maø moãi böôùc laø moät muïc ñích cuï theå môùi, ñöôïc giaûi quyeát baèng moät chöông trình nhoû hôn, phaùt sinh trong giai ñoaïn vieát löu ñoà.
Böôùc 2: Veõ löu ñoà
Löu ñoà duøng ñeå trình baøy caùch giaûi quyeát vaán ñeà, thöôøng thì ngoân ngöõ duøng trong löu ñoà khoâng phaûi laø moät ngoân ngöõ maùy xaùc ñònh naøo, löu ñoà thöïc chaát ñeå giuùp ngöôøi thaûo chöông chia nhoû moät chöông trình lôùn. Töø löu ñoà toång quaùt, coù theå veõ ra löu ñoà chi tieát.
Böôùc 3: Vieát chöông trình baèng ngoân ngöõ gôïi nhôù(ngoân ngöõ Assembler).
Böôùc 4: Chuyeån sang maõ maùy.
Böôùc 5: Nhaäp maõ maùy vaøo Kit baèng phím.
Böôùc 6: Chaïy thöû chöông trình vaø kieåm tra keát quaû.
Moät chöông trình ñöôïc vieát phaûi ñöôïc chaïy thöû vaø kieåm tra keát quaû, keát quaû phaûi ñuùng trong moïi tröôøng hôïp cho pheùp (ñieàu kieän ñaët ra tröôùc) cuûa chöông trình, vaø töø keát quaû kieåm tra maø phaùn ñoaùn, nhaän ñònh loãi ñeå söûa chöông trình töø ñaâu, coù khi phaûi söûa laïi caû löu ñoà.
Trong caùch laøm treân, ta nhaän thaáy coù nhöõng khoù khaên rieâng sau:
Quaù trình dòch töø ngoân ngöõ gôïi nhôù sang maõ maùy (böôùc 4), ñoøi hoûi söï quen thuoäc baûng tra maõ, neáu khoâng vieäc naøy chieàm nhieáu thôøi gian, vaø vieäc kieåm tra laïi cuõng chieám khoâng ít thôøi gian. Taïi nhöõng leänh jump, nhöõng leänh call, caàn phaûi xaùc ñònh ñòa chæ cuï theå, chính xaùc cuûa oâ nhôù roài môùi xaùc ñònh ñöôïc leänh jump. Vieäc naøy chæ hoaøn taát khi chöông trình ñöôïc dòch sang maõ maùy gaàn nhö ñaày ñuû.
ÔÛ giai ñoaïn nhaäp maõ maùy (böôùc 5), ñeå nhaäp nhanh thì phaûi nhôù vò trí phím, phaûi nhaäp chính xaùc ñeå traùnh thôøi gian doø ñeå söûa moät chöông trình nhaäp sai. Ñeå nhaäp moät byte caàn goõ 3 phím vaø phaûi ñoái chieáuqua laïi giöõa baûn dòch chöông trình, noäi dung hieån thò treân caùc led 7 ñoaïn cuøng vôùi ñòa chæ oâ nhôù vaø baøn phím.
Ñoái vôùi nhöõng ai trong giai ñoaïn khôûi ñaàu hoïc laäp trình vi xöû lyù, thì 2 vieäc treân luoân xaåy ra nhaàm laãn gaây maát nhieàu thôøi gian voâ ích.
Khi caàn theâm hoaëc xoùa, hoaëc söûa chöông trình thì maát nhieàu thôøi gian ñeå doø laïi chöông trình, nhaäp laïi khoù khaên, thaäm chí phaûi nhaäp laïi phaàn lôùn chöông tình.
Sau khi bò maát ñieän thì döõ lieäu löu trong RAM khoâng coù nguoàn döï tröõ seõ bò maát heát, phaûi nhaäp laïi toaøn boä chöông trình. Ñoái vôùi nhöõng chöông trình nhoû thì thôøi gian nhaäp khoâng ñaùng keå, nhöng ñoái vôùi nhöõng chöông trình lôùn thì ñaây laø coâng vieäc maát nhieàu thôøi gian, vaø gaây phieàn haø cho ngöôøi hoïc cuõng nhö ngöôøi laäp trình vi xöû lyù.
Beân caïnh ñoù, thöïc teá ñaõ coù nhöõng thieát bò naïp EPROM raát tieän lôïi, maø coù theå ñem yù töôûng ñoù vaøo vieäc hoïc laäp trình vi xöû lyù nhaát laø vieäc giao tieáp vôùi thieát bò khaùc töø vi xöû lyù laø moät ñieàu khaù deã dang.
Ngoaøi ra, chöông trình ñaïi hoïc raát bao quaùt, thôøi gian vaø ñieàu kieän chæ cho pheùp sinh vieân ñi heát beà noåi cuûa chöông trình maø chöa coù hoaëc ít coù dòp tìm hieåu veà chieàu saâu. Do ñoù, ñoà aùn toát nghieäp laø moät cô hoäi toát cho sinh vieân ñaøo saâu vaøo chöông trình hoïc, öùng duïng baøi hoïc vaøo thöïc teá, chöùng minh ñöôïc söï höõu ích cuûa nhöõng kieán thöùc ñaõ hoïc ñöôïc trong moâi tröôøng sö phaïm.
Töø nhöõng lyù do treân, ngöôøi vieát quyeát ñònh choïn ñeà taøi “GIAO TIEÁP MAÙY TÍNH VÔÙI VI XÖÛ LYÙ 8085”.
Ñeà taøi ñöa ra moät chöông trình nhö moät coâng cuï hoã trôï vieäc hoïc laäp trình vi xöû lyù treân Kit8085 vôùi moät thöù töï sau:
Xaùc ñònh muïc ñích yeâu caàu cuûa chöông trình caàn vieát.
Veõ löu ñoà.
Vieát chöông trình baèng ngoân ngöõ Assembly (ngoân ngöõ gôïi nhôù).
Nhaäp chöông trình baèng ngoân ngöõ Assembly vaøo maùy (duøng Norton).
Goïi chöông trình dòch Assembler ñeå dòch töø ngoân ngöõ Assembly sang moät file coù phaàn môû roäng “prn” chöùa maõ maùy.
Trong chöông trình Giao tieáp, goïi file dòch ñeå naïp vaøo RAM.
Chaïy thöû vaø kieåm tra keát quaû.
Caùch laøm naøy coù nhöõng öu ñieåm sau:
Dòch töø ngoân ngöõ Assembly (ngoân ngöõ gôïi nhôù) toán raát ít thôøi gian vì vieäc naøy do maùy tính ñaûm traùch, vôùi ñoä chính xaùc tuyeät ñoái.
Cuõng vaäy, vieäc naïp döõ lieäu vaøo RAM cuõng chæ trong vaøi giaây, vaø ñöôïc kieåm tra trong khi naïp neân ñoä chính xaùc cuõng tuyeät ñoái.
Ngoaøi ra, chöông trình ñöôïc löu tröõ, quaûn lyù deå daøng, deå xem laïi, deå kieåm tra. Khi caàn theâm, hoaëc xoùa hoaëc söûa hoaëc cheùp laïi moät ñoaïn chöông trình, ngay caû thay ñoåi ñòa chæ baét ñaàu, cuõng raát ñôn giaûn.
Veà ñoä chính xaùc vaø thôøi gian caàn thieát thì ñoái vôùi chöông trình caùc lôùn caøng coù lôïi, caøng phaûi naïp chöông trình nhieáu thì caøng coù lôïi.
TAÀM QUAN TROÏNG CUÛA VAÁN ÑEÀ.
Trong xaõ hoäi ngaøy caøng phaùt trieån, löôïng kieán thöùc caàn truyeàn taûi trong nhaø tröôøng ngaøy caøng taêng, maø thôøi gian cho pheùp ngaøy caøng bò giaûm ñi, thì söï noå löïc cuûa caû ngöôøi daïy laãn ngöôøi hoïc ñeàu raát caàn thieát. Beân caïnh ñoù, phöông tieän ít nhieàu seõ goùp phaàn quan troïng trong quaù trình hoïc taäp.
Tröôùc ñaây, vieäc hoïc laäp trình vi xöû lyù ñaõ dieãn ra moät caùch töï nhieân, coù theå coi nhö ñaõ ñaày ñuû veà phöông tieän hoïc taäp. Nhöng nay, neáu coù theâm moät chöông trình moâ phoûng caùc hoï vi ñieàu khieån, hay vi xöû lyù, giao tieáp maùy tính vôùi vi xöû lyù ñeå truyeàn file… thì taát nhieân seõ coù maët tích cöïc, mang theâm nhieàu lôïi ích cho vieäc hoïc.
“Giao tieáp maùy tính vôùi vi xöû lyù” coøn laø moät chöùng thöïc veà giao tieáp _ nhöõng gì ñaõ ñöôïc hoïc _ treân chính kit thöïc taäp, ñieàu ñoù seõ kích hoaït söï tìm toøi, söï ham thích hieåu bieát cuûa sinh vieân.
GIÔÙI HAÏN VAÁN ÑEÀ
Ñaây laø moät chuyeân ñeà thuù vò, coù nhieàu vaàn ñeà ñaùng quan taâm, nhöng do nhöõng giôùi haïn veà thôøi gian vaø kieán thöùc, neân trong ñoà aùn naøy, ngöôøi vieát chæ coù theå trình baøy nhöõng phaàn sau:
Khaùi quaùt Kit 8085 söû duïng, caùc linh kieän coù lieân quan tröïc tieáp ñeán giao tieáp.
Caùch thöùc söû duïng kit, nhöõng hoaït ñoäng beân trong kit veà leänh, döõ lieäu … maø sau ñoù seõ ñöôïc thay theá baèng caùch naïp töø maùy tính.
Giao tieáp maùy tính.
Moät soá ñieåm caàn löu yù khi vieát moät chöông trình baèng ngoân ngöõ gôïi nhôù cho chöông trình dòch Assembler ñeå taïo ra moät file coù phaàn môû roäng .prn.
Caáu truùc moät file .prn, nhöõng soá lieäu naøo caàn xuaát.
Ñoâi neùt veà ngoân ngöõ C, chöông trình Download
Chöông trình nhaän döõ lieäu.
MUÏC ÑÍCH NGHIEÂN CÖÙU
Tröôùc maét: ñaây laø moät vaán ñeà hay, ñaõ thu huùt ngöôøi vieát töø laâu maø nay môùi coù dòp thöïc hieän, vaø cuõng laø nhu caàu caàn thieát trong thöïc teá.
Laâu daøi: tuy chæ laø moät thieát keá ñôn giaûn, nhöng laø moät cô sôû ban ñaàu coù theå phaùt trieån theâm ra höôùng toång quaùt.
XAÙC ÑÒNH THUAÄT NGÖÕ
Töïa ñeà taøi laø “Giao tieáp maùy tính vôùi kit vi xöû lyù 8085”. Thöïc chaát, vaán ñeà giao tieáp chæ laø moät cô sôû, phöông tieän chuû yeáu. Coøn saûn phaåm cuûa ñeà taøi laø moät giao dieän treân maøn hình vi tính maø trong ñoù, ngöôøi duøng cho theå choïn fie caàn truyeàn, vaø truyeàn xuoáng kit qua moät port naøo ñoù ñeå naïp döõ lieäu vaøo RAM.
Ñeà taøi naøy chæ thöïc hieän vieäc naïp döõ lieäu vaøo RAM maø sau ñoù seõ coù nhöõng phaùt trieån khaùc. Thöïc teá ñeà ra laø vieäc thöïc haønh laäp trình vi xöû lyù treân kit, chöông trình chæ laø ñeå thöïc taäp, chuû yeáu chæ naïp vaøo RAM, maø vieäc naïp döõ lieäu vaøo Kit maát nhieàu thôøi gian, vaø muïc ñích cuûa ñeà taøi tröôùc tieân laø ñeå giaûi quyeát vaán ñeà ñoù, sau ñoù coù theå phaùt trieån leân ñeå ñoïc caùc vuøng RAM, EPROM.
Chöông II:
CÔ SÔÛ LYÙ LUAÄN
Töø vaán ñeà ñaët ra nhö ôû chöông 1 ñaõ trình baøy, ngöôøi thöïc hieän ñeà taøi ñaõ tieán haønh giaûi quyeát theo höôùng sau:
Xaùc ñònh thieát bò giao tieáp: Kit vi xöû lyù 8085 ñaõ coù saün caùc IC ngoaïi vi 8255 laøm nhieäm vuï giao tieáp, chæ caàn choïn IC, xaùc ñònh ñòa chæ cuûa IC ñoù, ñòa chæ cuûa caùc port vaøo ra, mode hoaït ñoäng cuûa caùc port, xaùc ñònh caùc ñieåm noái keát phaàn cöùng vôùi maùy tính vaø vieát chöông trình nhaän, phaùt döõ lieäu.
Xaùc ñònh coång giao tieáp: ñoái vôùi maùy tính: choïn coång LPT1 (maø sau naøy coù theå phaùt trieån ñeå coù theå söû duïng caû LPT2, COM1, COM2) vôùi phöôùng phaùp giao tieáp song song baát ñoàng boä.
Xaây döïng giao dieän treân maøn hình maùy tính:Yeâu caàu caàn coù …… vaø phuø hôïp vôùi ngöôøi söû duïng. Sau ñoù tieán haønh vieát giaûi thuaät, vaø baét tay vaøo vieát chöông trình. ÔÛ ñaây, ngöôøi thöïc hieän ñaõ vieát chöông trình truyeàn döõ lieäu trong moâi tröôøng Borland C 3.1. Trong quaù trình vieát, phaûi giaûi quyeát nhöõng khoù khaên phaùt sinh moät caùch cuï theå.
Vieát chöông trình truyeàn, nhaän döõ lieäu vôùi Kit.
Gheùp noái caùc phaàn laïi.
Thöû nghieäm.
Söûa loãi.
Phöông phaùp chuû yeáu laø tham khaûo taøi lieäu vaø thöïc nghieäm
Chöông III:
KIT THÖÏC TAÄP
VI XÖÛ LYÙ 8085
KIT THÖÏC TAÄP VI XÖÛ LYÙ 8085:
Kit thöïc taäp vi xöû lyù 8085 laø moät loaïi maùy tính chuû yeáu phuïc vuï cho muïc ñích hoïc taäp vaø nghieân cöùu thieát keá veà lónh vöïc vi xöû lyù. Kit naøy, xuaát phaùt taïi tröôøng ÑH Sö phaïm kyõ thuaät – Trung taâm Vieät-Ñöùc, vaø do nhu caàu hoïc taäp vaø nhu caàu thöïc teá, caùc giaùo vieân trong boä moân Ñieän-Ñieän töû cuûa tröôøng ñaõ caûi tieán cho phuø hôïp. Maët khaùc, sinh vieân thuoäc khoa, trong caùc ñeà taøi toát nghieäp, ñoà aùn moân hoïc, cuøng vôùi söï höùng thuù, ñaõ tham khaûo, tìm hieåu veà caáu taïo vaø nguyeân lyù hoaït ñoäng, vaø môû roäng theâm moät soá chöùc naêng cho kit.
Moät Kit thöïc taäp vi xöû lyù thöôøng coù caùc phaàn chính ñöôïc trình baøy trong sô ñoà khoái ôû (Hình 1).
Vôùi muïc ñích cuûa ñeà taøi naøy laø giao tieáp song song neân trong Kit 8085, chæ caàn quan taâm ñeán 8085 vaø boä leänh 8085, 8255, 8279.
SÔ LÖÔÏC VI XÖÛ LYÙ 8085:
Vi xöû lyù (microprocessor) laø moät thieát bò baùn daãn chöùa caùc maïch logic ñieän töû coù khaû naêng xöû lyù caùc döõ lieäu, chöông trình töø ngoaøi ñöa vaøo ñeå ñieàu khieån caùc IC, thieát bò keát noái theo muïc ñích ñònh tröôùc.
Caáu truùc phaàn cöùng:
Caáu truùc beân ngoaøi:
8085 laø moät boä vi xöû lyù 8 bit do Intel saûn xuaát, ñaàu tieân vaøo naêm 1977. Noù coù khaû naêng ñònh ñòa chæ cho boä nhôù tôùi 64 Kbyte, IC naøy coù 40 chaân, daïng DIP, söû duïng nguoàn ñôn + 5V.
Chöùc naêng, daïng tín hieäu, traïng thaùi caùc chaân cuûa 8085 ñöôïc cho ôû baûng sau:
Baûng 1:
Chaân
Kyù hieäu
In/out 3 state
YÙ nghóa
1,2
X1, X2
I
X1, X2 laø 2 ngoõvaøo cuûa maïch dao ñoäng. Taàn soá ngoõ vaøo ñöôïc chia cho 2 bôûi maïch chia beân trong. Taàn soá laøm vieäc cöïc ñaïicuûa:
8085A: 6MHz
8085A-2: 10MHz
8085A-1:12MHz
3
Reset Out
O
Cho bieát CPU ñang reset. Tín hieäu naøy coù theå duøng ñeå reset caùc thaønh phaàn khaùc trong maïch.
4
SOD
O
Serial Output: ngoõ ra döõ lieäu noái tieáp ñöôïc xaùc ñònh bôûi leänh SIM.
5
SID
I
Serial Input: ngoõ vaøo döõ lieäu noái tieáp, döõ lieäu naøy ñöôïc naïpaøobit thöù 7 cuûa thanh ghi Accumulator khi thöïc hieän leänh RIM.
6
TRAP
I
Trap: tín hieäu khoâng ngaên ñöôïc. Ngoõ vaøo trap ñöôïc kích bôûi caïnh leân.
7,8,9
RST 7.5, 6.5, 5.5
I
Restart Intrerupt Repuest: laø caùc tín hieäu ngaét coù theå ngaên ñöôïc. RST 7.5 coù theå ñöôïc kích baèng caïnh, RST 6.5 vaø 5.5 coù theå ñöôïc kích baèng möùc.
10
INTR
I
Interrupt: laø tín hieäu ngaét thoângduïng coù theå che ñöôïc leänh kích baèng möùc.
11
INTA\
O
Interrupt Acknowledge: tín hiweäu duøng ñeå baùo cho thieát bò yeâu caàu ngaét INTR bieát raèng microprocessor ñaõ chaáp nhaän yeâu caàu ngaét vaø thieát bò yeâu caàu ngaét haõy ñaët leänh leân bus döõ lieäu.
19-12
AD7-AD0
I/O-3
Address/Data bus: caùc ñöôøng döõ lieäu vaø caùc ñöôøng ñòa chæ ñöôïc tích hôïp chung vôùi nhau. Ôû traïng thaùi T1 cuûa chu kyø maùy, caù ngoõ naøy ñoùng vai troø laø caùc ngoõ ra ñòa chæ. Caùc traïng thaùi coøn laïi cuûa chu kyø maùy, noù ñoùng vai troø laø caùc ñöôøng döõ lieäu.
20
Vss
Ground.
28-22
A15-A8
O-3
Address bus:caùc ngoõ naøy ñöôïc duøng ñeå xuaát 8 bit ñòa chæ cao.
30
ALE
O
Address Latch Ennable: ngoõ naøy taï ra moät xungôû traïng thaùi T1 cuûa chu kyø maùy ñeå xaùc ñònh A15-A8 vaø AD7-AD0 laø caùc ñöôøng ñòa chæ.
31
WR\
O-3
Write: duøng ñeå xaùc ñònh icroprocessor ñang thöïc hieän leänh ghi döõ lieäu leân boä nhôù hay IO.
32
RD\
O-3
Read: duøng ñeå xaùc ñònh microprocessor ñang thöïc hieän leänh ñoïc döõ lieäu töø boä nhôù hay IO.
29,33,34
S0,S1, IO/M\
O,O-3
Machine Cycle Status: 3 bit naøy cho bieát traïng thaùi chu kyø maùy.
IO/M\
S1
S0
Traïng thaùi
0
0
1
Memory Write
0
1
0
Memory Read
0
1
1
Op-code fetch.
1
0
1
IO write.
1
1
0
IO read.
1
1
1
Interrupt Ackowledge.
Ôû traïng thaùi döøng (halt), S1=S2=0 vaø IO/M\ ôû traïng thaùi toång trôû cao. Trong khoaûng thôøi gian Hold vaø reset thì traïng thaùi cuûa S0 vaø S1 khoâng xaùc ñònh,IO/M\ ôû traïng thaùi toång trôû cao. Thöôøng thì caùc bit WR\, RD\ vaø IO/M\ duøng ñeå xaùc ñònh traïng thaùi laøm vieäc cuûa bus nhö: memory read, memory write, IO read, IO write.
35
READY
I
Ready laø tín hieäu traû lôøi töø boä nhôù hoaëc thieát bò ngoaïi vi IO cho microprocesser bieát ñeå microprocessor coù theå hoaøn thaønh chu kyø maùy ñang thöïc hieän.
36
RESET IN
I
Reset: ngoõ vaøo reset 8085 ñeå trôû veà traïng thaùi ban ñaàu cuûa noù. Tín hieäu naøy phaûi ôû möùc 0 khoaûng 3 chu kyø xung clock.
37
CLK
O
Clock out: ngoõ ra tín hieäu clock ñeå cung caáp cho caùc thieát bò khaùc. Taàn soá cuûa noù baèngtaàn soá ngoõ vaøo chia 2.
38
HLDA
O
Hold Ackowledge: tín hieäu ngoõ ra cho bieát tín hieäu hold ñaõ ñöôïc chaáp nhaän vaø CPU seõ ôû traïng thaùi Hold ôû chu kyø xung clock tieáp theo.
39
HOLD
I
Hold request: nhaän tín hieäu yeâu caàu ngöng töø boä ñieàu khieån DMA.
40
Vcc
Power: nguoàn cung caáp +5V.
Caùc chaân cuûa IC ñöôïïc boá trí nhö hình veõ sau (hình 2):
Hình 2: Sô ñoà chaân vaø caùc tín hieäu cuûa 8085
Toaøn boä caùc tín hieäu cuûa 8085 coù theå ñuôïc phaân thaønh 6 nhoùm:
(1) Tuyeán ñòa chæ
(2) Tuyeán döõ lieäu
(3) Caùc tín hieäu traïng thaùi vaø ñieàu khieån
(4) Nguoàn cung caáp vaø caùc tín hieäu taàn soá
(5) Caùc ngaét vaø caùc tín hieäu taàn soá
(6) Caùc coång I/O noái tieáp
Hình 3: caùc nhoùm hoaït ñoäng cuûa 8085
Caáu truùc beân trong 8085:
8085ù bao goàm ñôn vò logic vaø soá hoïc ALU (Arithmetic and Logic Unit), ñôn vò ñònh thôøi vaø ñieàu khieån (Timing and Control Unit) , boä giaûi maõ vaø thanh ghi leänh (Instruction Register and Decoder), daõy thanh ghi ( Register Array), ñieàu khieån ngaét (Interrupt Control) vaø ñieàu khieån I/O noái tieáp (Serial I/O Control) (xem hình 4).
Hình 4: Sô ñoà khoái chöùc naêng cuûa 8085
Caáu truùc phaàn meàm:
Taäp leänh cuûa 8085
Moät leänh (Instruction) laø moät maãu nhò phaân (binary pattern) ñöôïc thieát keá beân trong vi xöû lyù ñeå thöïc hieän moät chöùc naêng cuï theå (Instruction set), xaùc ñònh caùc chöùc naêng maø vi xöû lyù coù theå thöïc hieän. Taäp leänh cuûa 8085 coù 74 leänh (hôn 8080 hai leänh), caùc leänh naøy coù theå ñöôïc phaân thaønh 5 nhoùm chöùc naêng :
Caùc hoaït ñoäng (sao cheùp) truyeàn döõ lieäu
Caùc hoaït ñoäng toaùn hoïc
Caùc hoaït ñoäng logic
Caùc hoaït ñoäng reõ nhaùnh
Vaø, caùc hoaït ñoäng ñieàu khieån
Taäp leänh vi xöû lyù 8085 ñöôïc phaân thaønh 3 nhoùm tuyø theo kích côõ töø :
Caùc leänh moät töø hoaëc 1 byte
Caùc leänh hai töø hoaëc 2 byte
Caùc leänh ba töø hoaëc 3 byte
Leänh moät byte chöùa maõ hoaït ñoäng (Opcode) vaø toaùn töû (Operand) trong cuøng moät byte.
Trong leänh hai byte, byte thöù nhaát neâu leân maõ hoaït ñoäng vaø theo sau laø toaùn töû.
Ñoái vôùi leänh ba byte, byte ñaàu tieân cho bieát maõ hoaït ñoäng, 2 byte theo sau laø döõ lieäu (noäi dung hoaëc ñòa chæ) 16 bit.
Ic NGOAÏI VI 8255:
Caáu truùc:
Phaàn cöùng:
8255 laø moät thieát bò I/O giao tieáp song song, noù coù theå ñöôïc laäp trình ñeå truyeàn döõ lieäu döôùi caùc ñieàu kieän khaùc nhau, töø I/O ñôn giaûn ñeán I/O coù ngaét. Noù khaù linh hoaït, ña naêng vaø tinh teá (khi coù nhieàu coång I/O ñöôïc ñoøi hoûi), nhöng cuõng phöùc taïp. Noù laø moät thieát bò I/O phoå duïng coù theå ñöôïc söû duïng vôùi haàu heát baát kyø boä vi xöû lyù naøo.
8255 coù 40 chaân daïng DIP nhö hình 5.
Hình 5 : sô ñoà chaân vaø Sô ñoà khoái cuûa 8255
Baûng 2: Baûng lieät keâ chöùc naêng caùc chaân IC 8255
Teân caùc chaân
Chöùc naêng
D7 – D0
Data bus (Bi – Direction)
RESET
Rest Input
CS\
Chip Select
RD\
Read Input
WR\
Write Input
A0, A1
Port Address
PA7 – PA0
Port A
PB7 – PB0
Port B
PC7 – BC0
Port C
Sô ñoà khoái treân hình 5. trình baøy hai coång 8 bit (A vaø B) vaø hai coång 4 bit (CU vaø CL) boä ñieän tuyeán döõ lieäu, vaø logic ñieàu khieån. Hình 5.9 (b) trình baøy moät sô ñoà ñôn giaûn hoùa nhöng môû roäng cuûa caáu truùc beân trong, chöùa moät thanh ghi ñieåu khieån. Sô ñoà khoái naøy chöùa taát caû caùc phaàn töû cuûa moät thieát bò laäp trình; coång C thöïc hieän chöùc naêng töông töï chöùc naêng cuûa thanh ghi traïng thaùi, ngoaøi ra coøn cung caáp caùc tín hieäu baét tay.
Phaàn meàm:
Töø ñieàu khieån
Hình 6 trình baøy moät thanh ghi ñöôïc goïi laø thanh ghi ñieàu khieån (control register). Noäi dung cuûa thanh ghi naøy, goïi laø töø ñieàu khieån (control word), neâu roõ moät chöùc naêng I/O cho moãi coång. Thanh ghi coù theå ñöôïc xaâm nhaäp ñeå ghi töø ñieàu khieån. Khi A0 vaø A1 ôû möùc logic 1, nhö ñaõ ñeà caäp ôû treân. Thanh ghi naøy khoâng theå bò xaâm nhaäp ñoái vôùi hoaït ñoäng Ñoïc.
Bit D7 cuûa thanh ghi ñieàu khieån neâu roõ hoaëc chöùc naêng I/O hoaëc chöùc naêng Ñaët/Ñaët laïi bit nhö phaân loaïi trong Hình 5.8 (b). Neáu D7 = 1caùc bit D6 ¸ D5 quyeát ñònh caùc chöùc naêng I/O ôû caùc moát khaùc nhau. Neáu bit D7 = 0, coång C hoaït ñoäng ôû moát Ñaët/Ñaët laïi bit (BSR). Töø ñieàu khieån BSR khoâng aûnh höôûng ñeán caùc chöùc naêng cuûa caùc coång A vaø B.
PORT C (LOWER)
1=INPUT
0=OUTPUT
D7
D6
D5
D4
D3
D2
D1
D0
PORT B
1=INPUT
0=OUTPUT
MODE SELECTION
0=MODE 0
1=MODE 1
PORT C (UPPER)
1=INPUT
0=OUTPUT
PORT A
1=INPUT
0=OUTPUT
MODE SELECTION
00=MODE 0
01=MODE 1
1X=MODE 2
GROUP B
GROUP A
MODE SET FLAG
1=ACTIVE
Hình 6: Caáu truùc töø ñieàu khieån cuûa IC ngoaïi vi 8255.
Caên cöù vaøo töø ñieàu khieån cuûa 8255, coù theå klhôûi taïo 8255 ôû caùc mode 0 hoaëc mode 1 hoaëc mode 2, vaø coù theå xaùc ñònh höôùng vaøo ra döõ lieäu cho moãi port.
Ñeå trao ñoåi thoâng tin vôùi caùc ngoaïi vi (ôû ñaây laø caùc moâ - ñun vaøo ra) thoâng qua 8255, ba böôùc sau ñaây laø caàn thieát :
(1) Xaùc ñònh ñöôïc ñòa chæ caùc coång A, B vaø C vaø cuûa thanh ghi ñieàu khieån theo logic choïn chip (CS) vaø caùc ñöôøng ñòa chæ A0, A1.
(2) Ghi töø ñieàu khieån vaøo thanh ghi ñieàu khieån.
(3) Ghi caùc leänh I/O ñeå thoâng tin vôùi caùc ngoaïi vi thoâng qua coång A,B vaø C.
Heä thoáng Kit ñaõ ñöôïc ñaët cho 8255 laøm vieäc vôùi caùc ngoõ vaøo / ra ôû moát 0 nhö sau :
Caùc ngoõ ra ñöôïc choát
Caùc ngoõ vaøo khoâng ñöôïc choát
Caùc coång khoâng coù khaû naêng baét tay vaø ngaét.
Ví duï:
Ñeå A, C laø coång nhaäp (8 bít), B laø coång xuaát(8bít), vaø choïn ngoaïi vi coù ñòa chæ töø 00 – 03 thì phaûi laøm nhö sau:
Gôûi töø ñieàu khieån 99hex vaøo thanh ghi ñieàu khieån.
Xuaát töø ñieàu khieån ra thanh ghi ñieàu khieån coù ñòa chæ 03hex.
IC GIAÛI MAÕ HIEÅN THÒ 8279:
Caáu truùc 8279
Phaàn cöùng:
8279 laø moät phöông phaùp phaàn cöùng ñeå giao tieáp vôùi baøn phím ma traän vaø hieån thò ña hôïp. Baát lôïi cuûa phöông phaùp duøng phaàn meàm laø vi xöû lí bò baän trong luùc kieåm tra vaø laøm töôi hieån thò. 8279 seõ thay theá vi xöû lí ñaûm traùch hai nhieäm vuï naøy.
8279 (Hình ) laø moät thieát bò daïng DIP _ 40, coù hai phaàn chính : baøn phím vaø hieån thò. Phaàn baøn phím coù theå ñöôïc noái vôùi moät ma traän toái ña 64 phím, söï goõ phím ñöôïc giaûi naåy vaø maõphím ñöôïc löu tröõ vaøo boä nhôù FIFO beân trong (First _ In _ First _ Out : Vaøo tröôùc, ra tröôùc) , vaø moät tín hieäu ngaét ñöôïc phaùt ra moãi laàn goõ phím. Phaàn hieån thò coù theå cung caáp moät hieån thò coù queùt toái ña 16 Led. Phaàn naøy coù boä nhôù RAM 16 x 8, coù theå ñöôïc söû duïng ñoïc / ghi thoâng tin cho caùc muïc ñích hieån thò. Phaàn hieån thò coù theå ñöôïc khôûi taïo ôû daïng ghi phaûi (right entry) hoaëc ghi traùi (left entry).
Taàn soá xung ñoàng hoà caáp cho 8279 toái ña laø 3,125MHz
Hình 7: Sô ñoà chaân logic cuûa 8279
Baûng 3: Chöùc naêng caùc chaân IC 8279
Teân chaân
Soá chaân
Moâ taû vaø chöùc naêng
DB0 – DB7
8
Bi-directional databus:Ñöôøng döõ lieäu 2 chieàu.
Taát caû caùc leänh vaø döõ lieäu giöõaCPU vaø 8279 ñöôïc truyeàn treân nhöõng ñöôøng döõ lieäu naøy.
CLK
1
Clock input: ngoõ vaøo xung clock. Xung clock coù taàn oá toái ña laø 3,125MHz.
RESET
1
Reset in: duøng ñeå ñaët laïi traïng thaùi laøm vieäc cuûa 8279 khi ngoõ vaøo naøy ôû möùc cao.
Sau khi ñöôïc reset, 8279 coù theå laøm vieäc ôû cheá ñoä:
Hieån thò 16 kyù töï loái vaøo traùi.
Laäp maõ queùt phím khoùa ngoaøi 2 phím.
CS\
1
Chip select: taùc ñoäng möùc thaáp cho pheùp 8279 thöïc hieän caùc chöùc naêng keát noái vôùi CPU ñeå truyeàn vaø nhaän döõ lieäu.
A0
1
Buffer address: ñöôøng ñòa chæ naøy thöông ñöôïc keát noái vôùi ñ5a chæ A0 cuûa vi xöû lyù duøng ñeå phaân bieät leänh hay döõ lieäu.
A0=[1]: tín hieäu vaøo ra laø leänh.
A0=[0]:tín hieäu vaøo ra laø döõ lieäu.
RD\, WR\
2
Read, Write:ch pheùp ñoïc hay ghi döõ lieäu leân bus döõ lieäu, thanh ghi ñieàu khieån hay boä nhôù RAM hieån thò.
IRQ
1
Interrupt Request: ñöôøng tín hieäu yeâu caàu ngaét (output). Ngoõ ra naøy seõ ôû möùc cao neá coù döõ lieäu ôû trong boä nhôù FIFO hay SensorRAM, ngoõ ra naøy seõ ôû möùc thaáp moãi khicoù söï ñoïc boä nhôù FIFO/SensorRAM vaø trôûlaïi möùc cao khi d4coù döõ lieäu chöùa trong RAM.
Vss, Vcc
2
Caáp nguoàn 0Vvaø +5V cho 8279.
SL0 – SL3
4
Scan lines: 4 ñöôøng scan line naøycoù theå giaûi maõ ra 16 ñöôøng hay maõ hoùa thaønh 1 ñöôøng, ñöôïc duøng ñeå queùt phím hay ma traän caûm bieán vaø hieån thò.
RL0 – RL7
8
Return line: ñöôïc noái vôùi ñöôøng scan line thoâng qua caùc phím hay coâng taéc caûm bieán. ÔÛ cheá ñoä queùt phím, seõ keát hôïp vôùi caùc ñöôøng scan lines taïo thaønh maõ cuûa phím ñöôïc nhaán.
SHIFT
CTRL/STB
1
1
Shift, Control / Strobe input Mode: trong cheá ñoä queùt phím, möùc logic cuûa töøng ngoõ vaøo naøy seõ ñöôïc löu tröõ vôùi vò trí cuûa phím ñeå taïo ra 1 giaù trò cuûa phím ñöôïc nhaán.
OUT A0 – A3
OUT B0 – B3
4
4
Ñeây laø 2 portngoõ ra cuûa thanh ghi hieån thò 16 x 4 bit. Döõ lieäu töø nhöõng thanh ghi naøy seõ ñöôïc ñöa ra ñoàng boä keát hôïp vôùi caùc ñöôøng queùt scan lines ñeå ña hôïp thaønh soá hieån thò.
Hai ngoõ ra 4 bit naøy coù theå xoùa ñoäc laäp vaø coù theå keát hôïp vôùi nhau ñeå taïo thaønh moät ngoõ ra 8 bit.
BD\
1
Blanking display: duøng ñeå xoùa hieån thò trong quaù trình chuyeån ñoåi giöõa caùc soá hay khi gaëp leänh xoùa hieån thò.
Sô ñoà khoái logic (Hình 8) trình baøy boán phaàn chính cuûa 8279 : baøn phím, queùt, hieån thò vaø giao tieáp vi xöû lí. Caùc chöùc naêng cuûa caùc phaàn naøy ñöôïc mieâu taû nhö döôùi ñaây :
Hình 8: Sô ñoà khoái cuûa 8279
Ñeå giao tieáp vôùi vi xöû lyù, 8279 caàn taùm ñöôøng döõ lieäu hai chieàu (BD0 _ BD7), moät ñöôøng yeâu caàu ngaét (IRQ), vaø saùu ñöôøng giao tieáp, keå caû ñöôøng ñòa chæ cuûa boä ñeäm (A0)
Khi A0 ôû möùc cao, caùc tín hieäu ñöôïc hieåu nhö laø caùc töø ñieàu khieån vaø traïng thaùi. Khi A0 ôû möùc thaáp, caùc tín hieäu ñöôïc hieåu laø döõ lieäu.
Ñöôøng IRQ leân möùc cao baát kì luùc naøo vieäc ghi nhaän döõ lieäu vaøo FIFO. Tín hieäu naøy ñöôïc söû duïng ñeå ngaét vi xöû lí nhaèm chæ thò tính khaû duïng cuûa döõ lieäu.
Laäp trình cho 8279
Ñeå coù söû duïng 8279, caàn bieát caùc töø ñieàu khieån cuûa 8279.
8279 coù taát caû taùm töø ñieàu khieån, tuøy theo muïc ñích söû duïng maø seõ choïn töø ñieàu khieån thích hôïp.
Ñaët moát hieån thò / baøn phím
MSB
LSB
Maõ
0
0
0
D
D
K
K
K
Trong ñoù, D D laø moát hieån thò vaø K K K laø moát baøn phím
D D
0 0 Hieån thò 8 kí töï 8 bit _ ghi traùi
0 1 Hieån thò 16 kí töï 8 bit _ ghi traùi
1 0 Hieån thò 8 kí töï 8 bit _ ghi phaûi
1 1 Hieån thò 16 kí töï 8 bit _ ghi phaûi
K K K
0 0 0 Baøn phím queùt coù laäp maõ _ Khoùa ngoaøi 2 phím
0 0 1 Baøn phím queùt coù giaûi maõ _ Khoùa ngoaøi 2 phím
0 1 0 Baøn phím queùt coù laäp maõ _ Xoay voøng N phím
0 1 1 Baøn phím queùt coù giaûi maõ _ Xoay voøng N phím
1 0 0 Ma traän caûm bieán, queùt coù laäp maõ
1 0 1 Ma traän caûm bieán, queùt coù giaûi maõ
1 1 0 Ngoõ vaøo Strob, queùt hieån thò coù laäp maõ
1 1 0 Ngoõ vaøo Strob, queùt hieån thò coù giaûi maõ
Trong suoát thôøi gian RAM hieån thò ñang bò xoaù (~ 160 mS), noù khoâng theå ñöôïc ghi vaøo. Bit coù troïng soá cao nhaát (MSB) cuûa töø traïng thaùi ñöôïc ñaët trong suoát thôøi gian naøy. Khi RAM hieån thò trôû neân khaû duïng trôû laïi, bit naøy töï ñoäng ñöôïc ñaët laïi.
G Khôûi taïo 8279
Maëc duø 8279 coù tôùi taùm töø ñieàu khieån, nhöng khoâng phaûi luùc naøo cuõng söû duïng heát taát caû taùm töø naøy.
Khi khôûi taïo moät 8279, thöù töï caùc töø ñieàu khieån sau ñaây laø caàn thieát :
+ Ñaët moát hieån thò / baøn phím
+ Laäp trình xung ñoàng hoà
+ Xoaù RAM hieån thò, hoaëc FIFO hoaëc caû hai
Caùc töø ñieàu khieån coøn laïi coù theå ñöôïc gôûi ra thanh ghi ñieàu khieån trong luùc naøy hoaëc khi caàn.
CAÙC THAM SOÁ CAÀN THIEÁT CUÛA KIT:
Treân ñaây, ñaõ giôùi thieäu caùc IC quaïn troïng ñeå coù theå keát noái Kit vôùi maùy tính. Ngoaøi ra, caùc thoâng soá veà ñòa chæ cuõng khoâng keùm phaàn quan troïng.
Baûng : Baûng ñoà ñòa chæ boä nhôù cuûa kit
Boä nhôù
A15
A14
A13
A12 ¾¾¾® A0
Vuøng ñòa chæ boä nhôù
ROM1
0
0
0
0 ¾¾¾® 0
0000H
0
0
0
1 ¾¾¾® 1
1FFFH
ROM2
0
0
1
0 ¾¾¾® 0
2000H
0
0
1
1 ¾¾¾® 1
3FFFH
RAM1
0
1
0
0 ¾¾¾® 0
4000H
0
1
0
1 ¾¾¾® 1
5FFFH
RAM2
0
1
1
0 ¾¾¾® 0
6000H
0
1
1
1 ¾¾¾® 1
7FFFH
RAM3
1
0
0
0 ¾¾¾® 0
8000H
1
0
0
1 ¾¾¾® 1
9FFFH
8279
1
0
1
0 ¾¾¾® 0
A000H
1
0
1
1 ¾¾¾® 1
BFFFH
144424443
3 bit öùng vôùi 6 traïng thaùi cuûa 6 vuøng nhôù
Döïa vaøo 3 bit A13, A14, A15 ñeå xaùc ñònh caùc vuøng ROM, RAM nhö sau:
74138
A13
A14
A15
A
B
C
O0
O1
O2
O3
O4
O5
O6
O7
CS\ROM1
CS\ROM2
CS\RAM1
CS\RAM2
CS\RAM3
CS\8279
No use
No use
Hình 9 : choïn boä nhôù
Baûng 4 : Baûng ñoà ñòa chæ I/O cuûa kit
Boä nhôù
A7
A6
A5
A4
A3
A2
A1
A0
Vuøng ñòa chæ boä nhôù
8255A
0
0
0
0
0
0
0
0
00
0
0
0
0
0
1
1
1
07
8255B
0
0
0
0
1
0
0
0
08
0
0
0
0
1
1
1
1
0F
8253A
0
0
0
1
0
0
0
0
10
0
0
0
1
0
1
1
1
17
8253B
0
0
0
0
1
0
0
0
18
0
0
0
1
1
1
1
1
1F
8259
0
0
1
0
0
0
0
0
20
0
0
1
0
1
1
1
1
27
8251
0
0
1
0
1
0
0
0
28
0
0
1
0
1
1
1
1
2F
ADC0809
0
0
1
1
0
0
0
0
30
0
0
1
1
0
1
1
1
37
DAC0808
0
0
1
1
1
0
0
0
38
0
0
1
1
1
1
1
1
3F
144424443
3 bit öùng vôùi 6 traïng thaùi cuûa 6 vuøng nhôù
Döïa vaøo 3 bit A3, A4, A5 coù theå xaùc ñònh ngoaïi vi söû duïng nhö sau:
A
B
C
O0
O1
O2
O3
O4
O5
O6
O7
74138
A3
A4
A5
CS\8255A
CS\8255B
CS\8253A
CS\8253B
CS\8259
CS\8251
CS\ADC0805
CS\DAC0808
Hình 10: Choïn I/O
SÖÛ DUÏNG KIT:
Chöùc naêng caùc phím:
Phím RESET hoaëc Q: khôûi ñoäng laïi toaøn boä heä thoáng Kit, caùc thanh ghi, caùc ñieåm döøng, caùc khôûi taïo, ñeàu ñöôïc reset.
Phím A hoaëc Address hoaëc S: ñaët laïi ñòa chæ oâ nhôù ñeå taùc ñoäng vaøo: xem döõ lieäu, thay ñoåi noäi dung.
Phím UP hoaëc : löu tröõ döõ lieäu ôû 2 led traùi vaøo ñòa chæ ghi ôû 4 led phaûi.
Phím Down hoaëc ¯ : ñeå xem laïi döõ lieäu ñaõ naïp.
Phím P hoaëc PC: ñaët ñòa chæ chaïy chöông trình.
Phím G hoaëc GO: chaïy chöông trình taïi ñòa chæ ñaõ choïn saún.
Phím I hoaëc INTR: ngaét chöông trình, khôûi ñoäng noùng heä thoáng, caùc khôûi taïo, ñieåm döøng ñeàu vaãn coøn.
Caùc thao taùc nhaäp lieäu treân laø ñeå ñöa caùc döõ lieäu, caùc leänh vi xöû lyù ñaõ ñöôïc maõ hoùa ra daïng maõ maùy, vaøo nhöõng ñòa chæ yeâu caàu cuûa ngöôøi thaûo chöông. Vaøsau ñoù, keát quaû kieåm tra, chaïy thöû chöông trình seõ cho bieát chöông trình ñuùng hay sai.
Muïc ñích chuû yeáu cuûa ñeà taøi laø ruùt ngaén thôøi gian dòch sang maõ maùy vaø thôøi gian nhaäp lieäu, nghóa laø phaûi naïp ñöôïc döõ lieäu vaøo boä nhôù RAM maø khoâng toán thôøi gian nhaäp lieäu.
Chöông IV:
GIAO TIEÁP
MAÙY TÍNH VÔÙI
KIT THÖÏC TAÄP
VI XÖÛ LYÙ 8085
Giao tieáp giöõa maùy tính vaø thieát bò ngoaïi vi coù theå baèng moät trong caùc caùch sau:
GIAO TIEÁP BAÈNG SLOT-CARD:
Trong maùy tính, treân main board hoaëc IO-card, thöôøng cheá taïo saün caùc raõnh caém (slot) cho pheùp môû roäng boä nhôù, caøi ñaët theâm phaàn cöùng, môû roäng phaïm vi öùng duïng cho maùy tính.
Ñeå söû duïng ñöôïc caùc raõnh caém naøy, caàn phaûi coù taøi lieäu chính xaùc veà caùc thoâng soá caàn thieát, ví duï ñòa chæ cuûa coång laø bao nhieâu, thuoäc loaïi raõnh bao nhieâu bit, theo chuaån naøo, kich thöôùc phaàn maïch in caém vaøo , ñoä daøy maïch in, raõnh nguoàn, raõnh döõ lieäu, raõnh döï tröõ, …
GIAO TIEÁP BAÈNG COÅNG MAÙY IN:
Moïi maùy tính ñeàu coù coång maùy in ñaët phía sau maùy. Coång maùy in khoâng chæ ñeå keát noái vôùi maùy in ma._.ø coøn coù theå keát noái vôùi nhieáu loaïi thieát bò ngoaïi vi khaùc cho muïc ñích ño löôøng vaø ñieàu khieån,…
Coång maùy in laø loaïi coång 25 chaân, döõ lieäu truyeàn song song, deã keát noái, caùc ñòa chæ cuûa coång cuûa caùc maùy tính haàu nhö gioáng nhau.
Giao tieáp baèng coång maùy in goïi laø giao tieáp song song baát ñoàng boä. Trong kieåu giao tieáp naøy, nôùi phaùt tín hieäu vaø nôùi nhaän tín hieäu ñeàu coù xung baùo phaùt vaø xung baùo nhaän, taàn soá xung clock taïi nôi phaùt vaø taàn soá xung clock taïi nôi thu khoâng caàn quan taâm.
GIAO TIEÁP BAÈNG COÅNG COM:
Coång COM ñöôïc söû duïng khaù phoå bieán. Döõ lieäu truyeàn ôû coång naøy thuoäc daïng döõ lieäu noái tieáp. Tín hieäu truyeàn ôû coång naøy coù theå truyeàn ñi xa nhôø coù caáu taïo ñöôøng daây caùp ít sôïi hôn coång song song, möùc aùp tín hieäu cao.
Coång COM coù loaïi 9 chaân vaø loaïi 25 chaân nhö coång song song, coù toång coäng 8 ñöôøng daãn tín hieäu khoâng keå ñöôøng noái ñaát, töø maùy tính ñi ra laø loaïi phích caém nhieàu chaân khaùc vôùi coång song song.
Coång COM, coøn goïi laø coång noái tieáp theo chuaån RS-232. Chuaån RS-232 töø naêm 1969 ñöôïc chaáp nhaän chuyeân duøng cho truyeàn soá lieäu vaø caùc ñöôøng noái kieåm tra giöõa terminal vaø moderm, toác ñoä cöïc ñaïi laø 20Kbps, vôùi khoaûng caùc toái ña khoâng quaù 15m. Ñaây laø laïi giao tieáp khoâng caân baèng coù driver.
Möùc aùp tín hieäu treân ñöôøng daây laø +15V/-15V. Treân ñöôøng daây, möùc logic 1 coù ñieän aùp töø 5V ñeán 15V vaø möùc logic 0 töø –5V ñeán –15V. möùc aùp naøy khoâng töông thích TTL do ñoù thöôøng phaûi söû duïng theâm caùc IC chuyeân duïng MC1488, MC1489 ñeå thay ñoåi möùc logic cho töông thích TTL.
Giao tieáp noái tieáp coøn chia ra noái tieáp baát ñoàng boä vaø noái tieáp ñoàng boä (söû duïng caùc chuaån UART duøng CMOS 6402, USART duøng ngoaïi vi 8251, chuaån ACIA duøng NMOS 6850 …).
CHOÏN PHÖÔNG PHAÙP GIAO TIEÁP VAØ COÅNG KEÁT NOÁI:
Trong ñeà taøi naøy, vì lyù do thôøi gian coù haïn, neân ngöôøi thöïc hieän ñeà taøi chæ coù theå söû duïng moät phöông phaùp truyeàn döõ lieäu, ñoù laø truyeàn döõ lieäu song song baát ñoàng boä qua coång maùy in LPT1.
Coång LPT1 laø moät coång song song, döõ lieäu ñöôïc truyeàn vôùi toác ñoä khaù cao töø maùy tính, do ñoù toác ñoä truyeàn döõ lieäu chung chæ coøn phuï thuoäc vaøo Kit.
Hình daïng moät coång LPT1 ñöôïc cho trong hình sau:
13
1
25
14
Hình 11: Coång LPT (DB25).
Baûng 5: Boá trí chaân ôû coång LPT ôû maùy tính:
Chaân
Kyù hieäu
Vaøo/Ra
Moâ taû
1
STROBE
Output
Byte ñöôïc in
2
D0
Output
Ñöôøng döõ lieäu ñöôïc in D0
3
D1
Output
Ñöôøng döõ lieäu ñöôïc in
4
D2
Output
Ñöôøng döõ lieäu ñöôïc in
5
D3
Output
Ñöôøng döõ lieäu ñöôïc in
6
D4
Output
Ñöôøng döõ lieäu ñöôïc in
7
D5
Output
Ñöôøng döõ lieäu ñöôïc in
8
D6
Output
Ñöôøng döõ lieäu ñöôïc in
9
D7
Output
Ñöôøng döõ lieäu ñöôïc in
10
Ack
Input
Acknowledge
11
Busy
Input
1:maùy in baän
12
PE
Input
Heát giaáy
13
SCLT
Input
Select
14
AF
Output
Autofeet
15
ERROR
Input
Error
16
INIT
Output
0: ñaët laïi maùy in
17
SLCTIN
Output
Select in
18
GND
Noái ñaât
19
GND
20
GND
21
GND
22
GND
23
GND
24
GND
25
GND
Coång maùy in LPT1 coù ñòa chæ cô baûn laø 378Hex vaø coång LPT2 coù ñòa chæ cô baûn laø 78Hex.
Caùc thanh ghi trong maùy tính keát noái vôùi coång maùy in:
Thanh ghi döõ lieäu (Data register, ñòa chæ = ñòa chæ cô baûn )
D6
D5
D4
D3
D2
D1
D0
D7
D0 (Pin 2)
D1 (Pin 3)
D2 (Pin 4)
D3(Pin 5)
D4 (Pin 6)
D5 (Pin 7)
D6 (Pin 8)
D7 (Pin 9)
Thanh ghi traïng thaùi(status register, ñòa chæ = ñòa chæ cô baûn +1)
D6
D5
D4
D3
0
0
0
D7
¢
ERROR(Pin 15)
SLCT(Pin 13)
PE(Pin 12)
ACK(Pin 15)
BUSY(Pin 11)
Thanh ghi ñieàu khieån(control register, ñòa chæ = ñòa chæ cô baûn + 2)
¢
D6
D5
D4
D3
D2
D1
D0
D7
D0 (Pin 1)
D1 (Pin 14)
D2 (Pin 16)
D3(Pin 17)
IRQ-Enable
¢
¢
Hình 12: Keát noái caùc thanh ghi ôû coång maùy in cuûa maùy tính PC.
Coång LPT laø coång gheùp noái song song, taát caû nhöõng ñöôøng daãn cuûa coång naøy ñeàu töông thích TTL, nghóa laø chuùng ñeàu cung caáp moät möùc aùp naèm giöõa 0 vaø 5V. Do ñoù, raát thích hôïp cho keát noái vôùi Kit.
Nhìn vaøo baûng coâng duïng caùc chaân cuûa coång LPT vaø 3 thanh ghi cuûa maùy tính, ta thaáy coù theå söû duïng thanh ghi data laø thanh ghi phaùt, coù nhieäm vuï truyeàn döõ lieäu ra ngoaøi, vaø thanh ghi ñieàu khieån seõ gôûi tín hieäu ñieàu khieån cho Kit, coøn thanh ghi traïng thaùi seõ nhaän tín hieäu baùo traïng thaùi hieän taïi cuûa Kit veà maùy tính.
Ñeå keát noái giöõa Kit vaø maùy tính trong tröôøng hôïp naøy, phaûi söû duïng IC giao tieáp ngoaïi vi 8255 ñeå xuaát vaø nhaän döõ lieäu. Coøn veà phía maùy tính, coù theå duøng ngoân ngöõ laäp trình C ñeå ñoïc vaø xuaát caùc thanh ghi döõ lieäu. Ñeå keát noái ñôn giaûn, coù theå khôûi taïo 8255 ôû mode 0 vôùi port A ñoïc thanh ghi data, port B xuaát traïng thaùi traû veà cho thanh ghi trang thaùi, vaø port C duøng ñeå nhaän tín hieäu ñieàu khieån töø thanh ghi ñieàu khieån cuûa maùy tính.
Chöông V:
VIEÁT CHÖÔNG TRÌNH
VAØ DÒCH SSEMBLER
CHO CAÙC CHÖÔNG TRÌNH VI XÖÛ LYÙ.
TAÏI SAO PHAÛI SÖÛ DUÏNG CHÖÔNG TRÌNH DÒCH ASSEMBLER?
Khi hoïc vi xöû lyù, thì moïi sinh vieân ñeàu phaûi hoïc veà soá Hex, ñoåi soá giöõa caùc heä, caùc soá buø,…, caùc pheùp toaùn soá hoïc vaø logic treân caùc bieán. Ngoaøi ra, coøn phaûi hoïc moât loaïi ngoân ngöõ maùy khoù nhôù, chæ ñöôïc vieát baèng caùc kyù töï Hex, ñeå naïp vaøo Kit. Moät caùch khaùc ñeå taïo ra caùc kyù töï khoù nhôù naøy laø söû duïng moät chöông trình dòch Assembler ñeå dòch töø moät file coù phaàn môû roäng laø “asm” sang moät file coù phaàn môû roäng “prn” chöùa ngoân ngöõ maùy. Ñaây laø lyù do phaûi söû duïng moät chöông trình dòch Assembler. Vôùi muïc ñích naøy, ngöôøi söû duïng khoâng caàn thieát phaûi bieát nhieàu veà ngoân ngöõa Assembly maø chæ caàn moät soá kieán thöùc nhoû ñeå goïi chöông trình dòch. Ñaây chính laø caùch chính ñeå giaûm thieåu thôøi gian trong vieäc dòch vaø nhaäp döõ lieäu vaøo Kit.
Moät soá ñieàu caàn löu yù khi söû duïng chöông trình dòch Assebler:
Ñeå vieát moät chöông trình vaø nhaäp vaøo Kit, thì ñaàu tieân phaûi bieát yeâu caàu cuûa chöông trình, vieát löu ñoà toång quaùt, löu ñoà chi tieát vaø tieán haønh vieát chöông trình. taát caû caùc böôùc treân ñeàu phaûi söû duïng laïi vôùi caùch laøm maø ñeà taøi naøy neâu leân. Tuy nhieân, töø böôùc dòch töø ngoân ngöõ gôïi nhôù sang maõ maùy thì coù nhieàu ñieåm khaùc nhau:
Khi vieát chöông trình ôû ngoân ngöõ gôïi nhôù (ngoân ngöõ Assembly), caàn phaûi tuaân thuû moät soá qui ñònh rieâng ñeå coù theå duøng moät chöông trình dòch Assembler.
Phaûi duøng töø khoùa “Org” ôû ñaàu vaø “End” ôû cuoái chöông trình, nhôù chöõ end khoâng coù chaám cuoái caâu.
Taát caû caùc leänh ôû daïng gôïi nhôù phaûi ghi chính xaùc.
ÔÛ cuoáimoät soá Hex phaûi ghi kyù töï ‘h’ khoâng keå in hay thöôøng.
Neáu moät soá Hex baét ñaàu baèng moät kyù töï Alphabet, thì phaûi theâm lieàn ngay tröôùc soá hex ñoù moät con soâ ‘0’.
Moät nhaõn khai baùo khoâng ñöôïc vöôït quaù 6 kyù töï.
Vaø moät soá qui ñònh khaùc.
Nhaäp chöông trình vaøo maùy tính: ñeå nhaäp deå daøng vaø thuaän tieän, coù theå söû duïng Norton ôû cheá ñoä Edit, vaø löu thaønh moät file coù phaàn môû roäng laø “asm”.
Duøng chöông trình dòch Assembler ñeå dòch file treân thaønh moät file môùi coù phaàn môû roäng la “prn”, file cuõ khoâng thay ñoåi.
Sau ñoù duøng chöông trình download ñeå naïp file vaøo Kit.
Taát caû caùc yeâu caàu treân ñeàu raát deã nhôù nhôø ñi theo moät trình töï nhaát ñònh moät caùc töï nhieân. Norton laø moät chöông trình tieän ích raát phoå bieán. Chöông trình Download coù giao dieän ñaõ ñöôïc toái giaûn nhaát.
FILE *.PRN, NOÄI DUNG, ÑAËC ÑIEÅM, VAØ DÖÕ LIEÄU CHÍNH:
Chöông trình dòch seõ dòch töø moät file x.asm sang moât file x.prn.
Xem noäi dung moät file coù phaàn ôû roäng prn trong ví duï sau:
Org 0000h
MVI A,00h
STA 0A001h
MVI A,80h
STA 0A001h
MVI A,06h
STA 0A000h
HLT
END
Giaû söû dòch file x.asm sau:
Thì seõ ñöôïc file x.prn sau:
MACRO-80 3.4 01-Dec-80 PAGE 1
Org 0000h
0000' 3E 00 MVI A,00h
0002' 32 A001 STA 0A001h
0005' 3E 80 MVI A,80h
0007' 32 A001 STA 0A001h
000A' 3E 06 MVI A,06h
000C' 32 A000 STA 0A000h
000F' 76 HLT
MACRO-80 3.4 01-Dec-80 PAGE S
Macros:
Symbols:
No Fatal error(s)
Trong ñoù, noäi dung caàn naïp vaøo Kit laø:
3E 00
32 A001
3E 80
32 A001
3E 06
32 A000
76
Nhöng vôùi thöù töï laø:
3E 00
32 01 A0
3E 80
32 01 A0
3E 06
32 00 A0
76
Vaán ñeà ñaët ra laø laøm theá naøo ñeå loïc ra ñöôïc noäi dung chæ treân theo thöù töï ñuùng nhö noäi dung naïp vaøo Kit. Vaán ñeà naøy seõ ñöôïc giaûi quyeát ôû chöông keá: Chöông trình DownLoad.
Chöông VI:
CHÖÔNG TRÌNH DOWNLOAD
ÑOÂI NEÙT VEÀ NGOÂN NGÖÕ C:
Nguoàn goác:
C ñöôïc phaùt minh vaø caøi ñaët ñaàu tieân bôûi Dennis Ritchie chaïy treân heä ñieàu haønh Unix, ñöôïc Martin Richards phaùt trieån trong thaäp nieân 70. C söû duïng chuaån ANSI ñöôïc ñeà nghò laàn cuoái cuøng vaøo naêm 1989.
C laø ngoân ngöõ baäc trung:
Ñöôïc xem laø ngoân ngöõ baäc trung vì C toå hôïp nhöõng thaønh phaàn toát nhaát cuûa caùc ngoân ngöõ baäc cao vôùi söï ñieàu khieån vaø tính linh hoaït cuûa ngoân ngöõ Assembly. C cho pheùp thao taùc treân caùc bit, caùc byte vaø caùc ñòa chæ – nhöõng phaàn töû cô baûn vôùi caùc chöùc naêng cuûa maùy tính, maõ cuûa chöông trình C cuõng mang tính khaû chuyeån.
C laø ngoân ngöõ cuûa laäp trình vieân:
C ñöôïc caùc laäp trình vieân laøm vieäc thaät söï taïo ra, thuùc ñaåy vaø kieåm tra, ñeå roài C laïi mang veà cho hoï nhöõng gì hoï mong muoán: ít haïn cheá, ít lôøi phaøn naøn, caùc caáu truùc khoái, caùc haøm ñôn leû, vaø moât taäp ñoùng kín nhöõng töø khoùa.
CAÙC PHÖÔNG PHAÙP LAÄP TRÌNH:
Phöông phaùp laäp trình leänh:
Chöông trình laø moät daõy caùc leänh.
Laäp trình laø xaùc ñònh caùc leänh cuøng vôùi thöù töï caùc leänh ñoù.
Phöông phaùp naøy chæ coù giaù trò vôùi chöông trình leänh ( < 100 leänh).
Phöông phaùp laäp trình thuû tuïc:
Chöông trình laø moät heä thoáng caùc thuû tuïc vaø haøm, moãi thuû tuïc hay haøm laø moät daõy caùc leänh.
Laäp trình laø ñi xaùc ñònh nhöõng thuû vaø haøm, vaø xaùc ñònh caùc leänh beân tring thuû tuïc vaø haøm ñoù.
Phöông phaùp naøy tieán boä hôn phöông phaùp treân.
Phöông phaùp laäp trình ñôn theå:
Chöông trình laø moät heä thoâng caùc ñôn theå (module).
Moãi ñôn theå laø moät heä thoáng thuû tuïc, haøm coù cuøng yù nghóa naøo ñoù. Moãi thuû tuïc vaø haøm laø moät daõy caùc leänh.
Caùc ñôn theå coù ñöôïc löu tröõ vaø bieân dòch phaân caùch, neân deã daøng laép gheùp. Tuy nhieân phöông phaùp naøy coøn thieáu töï nhieân, ngaøi ra neáu chöông trình quaù roäng vaø quaù saâu thì khoâng theå quaûn lyù ñöôïc.
Phöông phaùp laäp trình höôùng ñoái töôïng:
Chöông trình laø moät heä thoáng caùc ñoái töôïng, caùc ñoái töôïng trong thöïc teá ñöôïc dieãn taû baèng ngoân ngöõ tin hoïc.
Laäp trình laø ñi xaùc ñònh nhöõng ñoái töôïng cuøng nhöõng quan heä cuûa chuùng.
Tính töï nhieân cuûa phöông phaùp naøy laøm noù trôû neân sinh ñoäng, moãi ñoái töôïng coù thuoäc tính vaø haønh ñoäng rieâng nhö trong thöïc teá do ñoù deã hình dung, deã quaûn lyù. Ngoaøi ra, nhôø döïa treân caùc ñoái töôïng neân tính tieán hoùa vaø môû roäng raát cao.
Trong phaàn vieát chöông trình giao dieän vi tính, ngöôøi vieát ñaõ choïn phöông phaùp laäp trình höôùng ñoái töông. Nhôø nhöõng öu ñieåm treân, phöông phaùp naøy cho pheùp boå sung moät caùch deã daøng, taïo ñieàu kieän thuaän lôïi cho vieäc boå sung sau naøy neáu caàn.
PHÖÔNG PHAÙP LAÄP TRÌNH HÖÔÙNG ÑOÁI TÖÔÏNG TRONG C
Caùc khaùi nieäm:
Theá giôùi thöïc
Phöông phaùp laäp trình
Ngoân ngöõ laäp trình
Ñoái töôïng baát kyø trong theá giôùi thöïc
Ñoái töôïng
Bieán coù kieåu lôùp
(töông töï kieåu caáu truùc)
Khaùi nieän chung cuûa moät ñoái töông
Lôùp ñoái töôïng
Kieåu lôùp(Class-töông töï kieåu caáu truùc)
Thuoäc tính ñöôïc quan taâm cuûa ñoái töôïng
Thuoäc tính
Thaønh phaàn döõ lieäu cuûa kieåu lôùp
Khaû naêng coù theå thöïc hieän cuûa moät ñoái töông
Haønh ñoäng
Thuû tuïc, haøm cuûa kieåu lôùp
Phöông phaùp:
Xaùc ñònh caùc lôùp ñoái töôïng, quan heä qua caùc lôùp naøy (xaây döïng sô ñoà lôùp)
Thieát keá caùc lôùp (bieåu dieãn treân maùy tính)
Thaønh phaàn döõ lieäu (thuoäc tính).
Thaønh phaàn xöû lyù (haønh ñoäng).
Caøi ñaët caùc lôùp: Vieát haøm main()
Thöû nghieäm.
Thöïc hieän vieát chöông trình DownLoad:
Yeâu caàu cuûa giao dieän:
Cho pheùp choïn file seõ truyeàn.
Baèng caùch goõ vaøo teân file
Baèng caùch click chuoät ñeå choïn
Xem tröôùc vuøng nhôù caàn thieát seõ söû duïng ôû RAM ôû Kit 8085
Choïn coång truyeàn.
Truyeàn file coù kieåm tra.
Choïn ngoân ngöõ laäp trình:
Choïn ngoân ngöõ C vieát ôû moâi tröôøng Dos
Lyù do: yeâu caàu thieát bò (maùy tính) khoâng cao, phuø hôïp kieán thöùc ngöôøi vieát.
Öu ñieåm: C laø moät coâng cuï laäp tình goïn nheï, chaïy nhanh, hieäu quaû vaø kheùp kín. Vì söû duïng C ôû moâi tröôøng Dos neân khoâng caàn phaûi kieåm soaùt caùc driver nhö neáu vieát ôû moâi tröôøng Windows. Ngoân ngöõ C cho pheùp truy caäp tröïc tieáp caùc port, deå daøng kieåm soaùt töøng bit döõ lieäu.
Khuyeát ñieåm: Vuøng nhôù troáng ôû moâi tröôøng Dos chæ coù 640Kbyte, vaø sau khi khôûi ñoäng xong (ôû maøn hình dos) thì chæ coøn laïi treân döôùi 400Kbyte, khoâng cho pheùp taïo moät giao dieän phöùc taïp. Ñoä phaân giaûi ôû cheá ñoä graph trong Dos khoâng theå so saùnh vôùi moâi tröôøng Windows.
Chöông trình Download:
Danh saùch caùc lôùp:
Teân lôùp
Coâng duïng
Button.hpp
Taïo caùc nuùt nhaán, vaø chöùa caùc haønh ñoäng lieân quan
Disklist.hpp
Lieät keâ caùc oå ñóa trong maùy, vaø chöùa caùc haønh ñoäng lieân quan
List.hpp
Ñeå veõ baûng lieät keâ caùc thö muïc vaø file, vaø chöùa caùc haønh ñoäng lieân quan
Mouse.h
Chöùa caùc thao taùc veà chuoät
Screen.h
Chöùa caùc tham soá veà giao dieän maøn hình, vaø chöùa caùc haønh ñoäng lieân quan
Textbox.hpp
Veõ khung nhaäp lieäu (teân file, loaïi file,..) , vaø chöùa caùc haønh ñoäng lieân quan
Xuat.hpp
Chöùa caùc thao taùc, haønh ñoäng lieân quan ñeán truyeàn file
Begin
InitGraphics()
Khôûi taïo thaønh coâng
Mainpro()
closegraph()
End
CT baùo loãi
Ñoùng cheá ñoä
ñoà hoïa
Thoaùt
InitValues(…)
InitScreen()
InitMouse(…)
S
Ñ
Löu ñoà cuûa haøm main():
Hình 13: löu ñoà haøm Main() cuûa chöông trình DownLoad.
Giaûi thích löu ñoà:
Chöông trình baét ñaàu ôû begin.
InitGraphisc():Khôûi taïo cheá ñoä ñoà hoïa, vì chöông trình naøy coù söû duïng maøn hình ôû cheá ñoä ñoà hoïa trong moâi tröôøng Dos. Neáu khôûi taïo khoâng thaønh coâng thì thoâng baùo loåi khôûi taïo vaø thoaùt khoûi chöông trình.
InitValues(…): haøm naøy coøn khôûi taïo caùc giaù trò ban ñaàu cho maøn hình: kích thöôùc cöûa soå, kích thöôùc kyù töï.
InitScreen(): Veõ maøn hình vôùi caùc giaù trò ñaõ khôûi taïo
InitMouse(): Khôûi taïo chuoät.
Khôûi taïo thaønh coâng: kieåm tra, neáu khôûi ñoäng chuoät thaønh coâng thì tieáp tuïc coâng vieäc, neáu khoâng thaønh coâng thì xuaát ra thoâng baùo loãi vaø thoaùt khoûi chöông trình.
MainPro laø chöông trình quaûn lyù moïi thao taùc cuûa toaøn boä chöông trình, töø caùc thao taùc nhaäp xuaát ñeán caùc thao taùc löïa choïn caùc tuøy choïn.
Closegraph(): Ñoùng cheá ñoä ñoà hoïatröôùc khi thoaùt khoûi chöông trình.
End: keát thuùc chöông trình.
Haøm Main() naøy ñöôïc vieát baèng ngoân ngöõ C :
void main(void)
{
InitGraphics();
InitValues("Chuong trinh truyen du lieu ra RAM");
InitScreen();
if (!InitMouse(&MainWindow.rViewPort))
{
OutMessage("Mouse driver not found. Init mouse and return");
getch();
closegraph();
exit(1);
}
ShowMouse();
MainProgram();
closegraph();
}
void main(void): void cho bieát raèng haøm main() khoâng traû veà moât giaù trò naøo, nghóa laø trong haøm main naøy khoâng coù leänh return() hoaëc leänh laø moät leänh return khoâng coù tham soâ. (void) cho bieát haøm main khoâng caàn ñoái soá ñöa vaøo.
Begin
Khôûi taïo caùc giaù trò cho caùc oâ nhaäp text
Khôûi taïo caùc giaù trò cho caùc nuùt choïn
A
Löu ñoà haøm Mainpro():
Truyeàn
file
Return
Xaùc nhaän thoaùt
Xaùc ñònh
file choïn
Click Nuùt pull down
Click nuùt Exit
Nhaán Esc
Click nuùt Send
Xuaát caùc oâ nhaäp
text ra maøn hình
Xuaát caùc nuùt choïn
ra maøn hình
A
GetEvent()
Click vaøo
oâ Open File
Goïi chöông trình
nhaäp vaøo ñöôøng daãn
Goïi chöông trình
xuaát cöûa soå choïn file
Hình 14: Löu ñoà cuûa haøm MainPro().
Giaûi thích löu ñoàhaøm MainPro():
Khôûi taïo caùc giaù trò cho caùc oâ nhaäp text: treân maøn hình seõ coù khung cho pheùp goõ vaøo teân file, chöông trình con naøy seõ khôûi taïo caùc toïa ñoä, maøu chöõ cho text.
Khôûi taïo caùc giaù trò cho caùc nuùt choïn: cuõng gioáng nhö treân, nhöng ñoái vôùi caùc nuùt Send, Exit vaø nuùt Pulldown.
Xuaát caùc oâ nhaäp text ra maøn hình.
Xuaát caùc nuùt choïn ra maøn hình.
GetEvent: chöông trình con laán bieán coá chuoät. Bieán coá naøy chöùa caùc thoâng tin veà toïa ñoä chuoät, phím naøo cuûa chuoät ñöôïc click, thôøi gian click laàn cuoái, … ñeå xaùx ñònh caùc leänh keá tieáp caàn thöïc hieän.
Click vaøo oâ Open File: neáu bieán coá click chuoät xaåy ra taïi toïa ñoä cuûa cuûa oâ Open file thì keát quaû click vaøo oâ naøy laø TRUE, thöïc hieän chöông trình con nhaäp vaøo file caàn xuaát. Ngöôïc laïi thì boû qua.
Click vaøo nuùt Pulldown: neáu bieán coá click chuoät xaåy ra taïi toïa ñoä cuûa cuûa nuùt Pulldown thì keát quaû click vaøo oâ naøy laø TRUE, goïi chöông trình xuaát ra cöûa soå choïn File, ngöôïc laïi thì boû qua.
Click nuùt Send: neáu bieán coá click chuoät xaåy ra taïi toïa ñoä cuûa cuûa nuùt Send thì keát quaû click vaøo oâ naøy laø TRUE, thöïc hieän xaùc nhaän file xuaát ñaõ nhaäp vaøo chöa, neáu file xuaát chöa nhaäp vaøo thì baùo loãi vaø boû qua leänh Send, neáu file xuaát ñaõ coù teân roài thì xuaát file.
Click nuùt Exit: neáu bieán coá click chuoät xaåy ra taïi toïa ñoä cuûa cuûa nuùt Exit thì keát quaû click vaøo oâ naøy laø TRUE, thöïc hieän xaùc nhaän muoán thoaùt khoûi chöông trình, neáu xaùc nhaän ñuùng thì thoaùt, ngöôïc laïi thì boû qua leänh Exit.
Nhaán Esc: neáu ngöôøi duøng nhaán vaøo nuùt Esc treân baøn phím thì bieán coá Nhaán Esc seõ laø TRUE, thöïc hieän xaùc nhaän muoán thoaùt khoûi chöông trình, neáu xaùc nhaän ñuùng thì thoaùt, ngöôïc laïi thì boû qua leänh thoaùt baèng nuùt Esc.
Sau ñoù, chöông trình laïi thöïc hieän voøng laëp taïi haøm laáy bieán coá chuoät cho tôùi khi coù thao taùc môùi.
Giaû söû click chuoät vaøo oâ Open File, oâ naøy seõ ñoåi traïng thaùi, caùc kyùtöï trong oâ seõ ñoåi maøu baùo traïng thaùi chôø nhaäp, nhaäp vaøo moät teân fie coù phaàn môû roäng laø “prn” vôùi ñaày ñuû ñöôøng daãn, sau ñoù goõ phímEnter thì teân file seõ ñöôïc löu vaøo moät bieán toaøn cuïc, vaø caùc ñòa chæ ñaàu vaø ñòa chæ cuoái cuûa chöông trình ngoân ngöõ maùy seõ ñöôïc hieän leân ôû khung “Free memory request”, vaø moät doøng thoâng baøo beân döôùi baùo cho bieát click Send ñeå truyeàn file.
Giaû söû tieáp tuïc click Send thì moät thoâng baùo xaùc nhaän seõ xuaát hieän, muoán xaùc nhaän coù chaéc laø ngöôøi duøng muoán truyeàn file khoâng. Neáu traû lôøi Ok thì chöông trình truyeàn file seõ ñöôïc goïi thi haønh.
Sau ñaây laø löu ñoà cuûa chöông trình con thöïc hieän vieäc truyeàn File.
Giaûi thích löu ñoà:
Goïi chöông trình caét file: chöông trình caét file thöïc chaát laø moät chöông trình con coù nhieäm vuï loïc ra nhöõng thoâng tin quan troïng trong file “x.prn” seõ ñöôïc truyeàn ñi, vaø löu chuùng trong moät file “x.tmp” chæ xuaát hieän trong khoaûng thôøi gian chöông trình ñang caét file. Sau ñoù file “x.tmp” naøy seõ bò xoaù ñi khi quaù trình truyeàn file hoaøn taát. Quaù trình truyeàn file phaûi söû duïng böôùc naøy ñeå caùc quaù trình baét tay giöõa maùy tính vaø Kit ñöôïc oån ñònh (thöïc nghieäm), vaø vieäc vieát chöông trình ñöôïc roõ raøng hôn.
Goïi chöông trình xuaát file: chöông trình naøy seõ ñoïc file coù teân laø “x.tmp” ñöôïc taïo töø chöông trình caét file. Chöông trình naøy seõ tuaàn töï ñoïc file, nhaän tín hieäu baét tay vaø gôûi döõ lieäu cho ñeán khi heát file.
Trong quaù trình truyeàn file, neáu coù söï coá, giaû söû khoâng baét tay ñöôïc vì lyù do naøo ñoù, thì chöôn trình seõ ñôïi, thôøi gian keùo daøi seõ coi nhö vieäc truyeàn file bi loãi, vaø thoâng baùo loãi seõ xuaát hieän.
Neáu truyeàn thaønh coâng thì thoâng baùo hoaøn taát coâng vieäc.
Return: Quay trôû veà chöông trình MainPro.
Trong haøm MainPro(), caàn quan taâm chöông trình con truyeàn file.
Ñuùng
Goïi chöông trình
Caét file
Begin
Goïi chöông trình
xuaát file
Thaønh coâng
Thoâng baùo hoaøn
taát coâng vieäc
Return.
Thoâng baùo loãi coâng vieäc
Sai
Hình 15: Löu ñoà chöông trình con coù nhieäm vuï truyeàn file.
Trong phaàn naøy, ta quay laïi coâng vieäc caét file ñaõ giôùi thieäu ôû muïc III cuûa chöông V.
Chöông trình con caét file laø ñeå taïo ra moät file taïm thôøi coù phaàn môû roäng .tmp. file naøy seõ laø moät file coù caáu truùc ñôn giaûn hôn file .prn raát nhieàu nhaèm ñeå giuùp cho vieäc truyeàn file theâm ñôn giaûn.
Tröôùc heát haõy khaûo saùt moät file *.prn, file naøy ñöôïc dòch ra bôûi 1 chöông trình dòch Assembler.
Trong chöông trình, byte leänh ñeàu tieân baét ñaàu ôû ñòa chæ 0000hex. Nhaän xeùt raèng moãi doøng leänh baét ñaàu bôû moät ñòa chæ boä nhôù, vaø lieàn sau ñòa chæ naøy laø moät daáu nhaùy ñôn, maø daáu nhaùy ñôn ñaàu tieân chæ xuaát hieän taïi ñòa chæ cuûa doøng leänh ñaàu tieân.
Þ ñeå tìm ñòa chæ ñaàu tieân thì coù theå tìm daáu nhaùy ñôn ñaàu tieân.
Coøn ñòa chæ cuoái cuøng laø ñòa chæ cuûa byte cuoái cuøng cuûa doøng leänh cuoái cuøng. Doøng leänh cuoái cuøng laø doøng leänh naèm gaàn töø “Macros” nhaát. Töø macros naøy cuõng laø töø macros duy nhaát.
Þ caùch tìm ñòa chæ cuoái cuøng nhö sau:
Tìm töø Macros
Doø ngöôïc trôû veà phíc treân cho ñeán khi gaëp daáu nhaùy ñôn ñaàu tieân
Tieáp tuïc doø ngöôïc veà tröôùc, neáu trong voøng 10 kyù töï maø gaëp moât kyù töï xuoáng doøng thì thì daáu nhaùy ñôn vöøa roài naèm ngay sau doøng leänh cuoái cuøng.
Trong doøng leänh cuoái cuøng, tìm byte cuoái cuøng seõ tính ñöôïc ñòa chæ cuoái cuøng.
Caùch tìm moät doøng leänh:
Khi gaëp moät daáu nhaùy ñôn, thì tìm moät kyù töï khaùc daáu nhaùy ñôn hoaëc khoaûng traéng.
Khi gaëp kyù töï ñaàu tieân, ñoù chính laø kyù töï ñaàu tieân cuûa byte leänh.
Neáu sau 2 kyù töï cuûa leänh laø moät khoaûng traéng thì 2 kyù töï vöøa roài chính laø moät maõ leänh.
Neáu sau 2 lyù töï cuûa moât byte leänh khoâng coù khoaûng traéng naøo, thì 2 kyù töï vöøa roài chính laø 2 cuûa 4 kyù töï baùo moät ñòa chæ.
Neáu sau 2 kyù töï tính töø luùc baét ñaàu moät leänh laø 2 khoaûng traéng trôû leân thì 2 byte vöøa roài laø 2 byte cuoái cuøng cuûa moät doøng leänh.
Baét ñaàu moät chu kyø môùi tìm doøng maõ leänh.
Löu maõ leänh vaøo file *.tmp:
Ñaàu tieàn löu ñòa chæ ñaàu, ñòa chæ cuoái vaøo file.
Neáu gaëp maõ leänh (2 kyù töï) thì ghi tieáp vaøo file.
Neáu gaëp maõ ñòa chæ thì ñoåi choå 2 kyù töï sau vôùi 2 kyù töï tröôùc cuûa ñòa chæ.
Ñeán khi gaëp ñòa chæ cuoái cuøng thì ghi vaøo 2 kyù töï cuoái cuøng vaø ñoùng file.
MACRO-80 3.4 01-Dec-80 PAGE 1
Org 0000h
0000' 3E 00 MVI A,00h
0002' 32 A001 STA 0A001h
0005' 3E 80 MVI A,80h
0007' 32 A001 STA 0A001h
000A' 3E 06 MVI A,06h
000C' 32 A000 STA 0A000h
000F' 76 HLT
MACRO-80 3.4 01-Dec-80 PAGE S
Macros:
Symbols:
No Fatal error(s)
Coâng vieäc treân ñöôïc moâ taû baèng löu ñoà sau:
Ñ
S
S
S
Nhaän ñòa chæ ñaàu
Begin
Nhaän ñòa chæ cuoái
Môû file nguoàn
Môû file ñích
Tìm daáu “ ‘”
Ñoïc 2 kyù töï leänh
Xeùt kyù töï tieáp theo
Khoâng laø
khoaûng traéng
Laø moät
khoaûng traéng
³ 2
khoaûng traéng
Löu 2 kyù töï
Löu 2 kyù töï sau
Ñoïc 2 kyù töï tieáp theo
> ñòa chæ cuoái
Ñ
S
End
Ñ
Ñ
Hình 16: Löu ñoà chöông trình con Caét file
Busy=1
Xuaát dlieäu ra bus
Strobe=1
ACK=1 & Error=0
AF=1
Ñoïc Error=0
sai
Thu nible cao
AF=0
Error=1
sai
Thu nible thaáp
Ktra döõ lieäu
sai
Ñuùng
Xuaát FF ra data bus
AF=0 Strobe=0
Heát döõ lieäu
Chuaån bò döõ lieäu keá tieáp
sai
Sai
Return
Ñuùng
Ñuùng
Sai
Ñuùng
Ñuùng
Begin
Xuaát 00 ra data bus
AF=0 Strobe=0
Hình 17: Löu ñoà chöông trình con xuaát döõ lieäu.
Sau khi caét file, moät file môùi ñaõ ñöôïc taïo ra. Chöông trình truyeàn file ñeán böôùc xuaát file. Dó nhieân tröôùc khi xuaát file cuõng caàn coù nhöõng thuû tuïc môû file, ñaët caùc möùc logic caàn thieát ñeå khôûi ñoäng coång: môû file hôïp leä, cho bit AF=0, strobe=0.
Giaûi thích löu ñoà chöông trình xuaát file:
Tröôùc tieân, maùy tính xuaát strobe=0, AF=0 baèng chaùch xuaát ra port 37Ahex soá 03hex (xem laïi thanh ghi ñieàu khieån ôû muïc IV chöông IV);
Chöông trình xuaát baét ñaàu taïi begin.
Ñoïc Busy\ cho tôùi khi baèng [1]: ñôïi kit phaùt ra Busy=[0] baùo hieäu ñaõ saún saøng nhaän döõ lieäu.
Neáu nhaän ñöôïc Busy\=[1] thì böôùc xuaát döõ lieäu ñöôïc thöïc hieän, töùc laø luùc ñoù maùy tính ñoïc 2 kyù töï ñaàu tieân cuûa file .tmp vaø xuaát ra port 378 cuûa maùy tính.
Strobe=[1]: ñeå baùo cho kit bieát döõ lieäu ñaõ ñöôïc göûi ra port ñeå kit bieát maø ñoïc döõ lieäu vaøo.
ACK=[1] vaø Error=[0]: khi nhaändl xong kit seõ baùo ACK=[1], Error=0 ñeå baùo cho maùy tính bieát Kit seõ göûi döõ lieäu ñeå kieåm tra ñuùng hay sai.
AF=[1]: baùo cho Kit bieát maùy tính saún saøng nhaän döõ lieäu.
Maùy tính ñoïc bit Error cho tôùi khi Error = [0] ñeå bieát Kit ñaõ göûi veà döõ lieäu ñeå kieåm tra.
Thu Nible cao: Nhaän döõ lieäu ñeå kieåm tra.
Cho AF=[0]: ñaõ nhaän xong döõ lieäu.
Ñoïc Error cho tôùi khi Error=[1] ñeå bieát ñaõ coù döõ lieäu môùi.
Thu nible thaáp.
Kieåm tra döõ lieäu: maùy tính seõ phaûi gheùp noái nible cao vôùi nible thaáp laïi roài so saùnh vôùi döõ lieäu vöøa xuaát ra, neáu 2 döõ lieäu gioáng nhau thì keát quaû xuaát döõ lieäu seõ laø ñuùng. Maùy tính seõ xuaát ra soá FFhex ôû thanh ghi data ñeå baùo ñuùng, vaø xuaát AF=0 & strobe=0 ñeå baùo xuaát xong 1 byte döõ lieäu. Ngöôïc laïi thì xuaát 00hex ra thanh ghi data vaø xuaát AF=0, strobe =0 ñeå baùo keát quaû sai.
Neáu keát quaû sai thì quay laïi xuaát laï byte vöøa roài ñaõ xuaát.
Quay laïi töø ñaàu chöông trình xuaát döõ lieäu cho ñeán khi heát döõ lieäu.
Chöông trình nhaän döõ lieäu ôû Kit:
Giaûi thích löu ñoà chöông trình nhaän döõ lieäu:
Chöông trình baét ñaàu taïi begin.
Tröôùc tieân phaûi khôûi taïo 8255 vôùi caùc cheá ñoä qui ñònh nhö sau:
Port A: nhaän döõ lieäu töø thanh ghi data theo ket noái phaàn cöùng.
Port B: xuaát traïng thaùi Kít traû veà maùy tính.
Port C: nhaän tín hieäu ñieàu khieån töø thanh ghi ñieàu khieån cuûa maùy tính.
Sau ñoù baùo cho maùy tính bieát traïng thaùi baän. Muïc ñích cuûa coâng vieäc naøy laø ñeå ñoàng boä thôøi ñieåm baét ñaàu chöông trình nhaän döõ lieäu vôùi chöông trình xuaát döõ lieäu töø maùy tính.
Reset bieán ñeám ñòa chæ ñaàu vaø cuoái, nôi ñaët vuøng döõ lieäu nhaän ñöôïc töø maùy tính.
Xuaát chöû Ready baùo cho ngöôøi söû duïng bieát traïng thaùi saún saøng nhaän döõ lieäu cuûa kit. Chôø ngöôøi söû duïng goõ phím Go.
Hình 18: Löu ñoà chöông trình nhaän döõ lieäu töø maùy tính gôûi xuoáng thieát bò thöïc taäp vi xöû lyù 8085 (trang 1):
Begin
Khôûi taïo ngoaïi vi 8255:
Port A: nhaän döõ lieäu.
Port B: Xuaát traïng thaùi
Port C: nhaän tín hieäu ñieàu khieån.
Baùo thieát bò baän
Reset bieán ñeám ñòa chæ ñaàu vaø cuoái, nôi ñaët vuøng döõ lieäu nhaän ñöôïc töø maùy tính gôûi xuoáng
“READY”
Chôø goõ phím “Go”
Goõ phím “Go”
“SENDING”
Busy=0
Saún saøng nhaän döõ lieäu.
1
Strobe=1
Busy=1, ACK=0
Ñoïc döõ lieäu, ACK=1
AF=1
Xuaát Nible cao +Error=0
AF=0
Xuaát Nible thaáp +Error=1
Strobe=0
Ñoïc döõ lieäu port A
(A)=FF
Xöû lyù döõ lieäu
Busy=0
1
Ñ
Ñ
Ñ
Ñ
Ñ
S
S
S
S
S
Hình 18: Löu ñoà chöông trình nhaän döõ lieäu töø maùy tính gôûi xuoáng thieát bò thöïc taäp vi xöû lyù 8085 (trang 2).
Khi phím Go ñöôïc goõ thì quaù trình nhaän döõ lieäu cuûa kit thöïc söï baét ñaàu.
Kit baùo saún saøng chôø maùy tính göûi döõ lieäu xuoáng.
Ñoïc strobe cho tôùi khi baèng 1, ñeå bieát döõ lieäu ñaõ ñöôïc gôûi ra bus döõ lieäu.
Xuaát Busy=1, ACK=0.
Ñoïc döõ lieäu vaø cho ACK=1. Luùc naøy kit ñaõ nhaän ñöôïc döõ lieäu nhöng chöa bieát döõ lieäu coù chaéc chaén ñuùng khoâng. Sau ñoù baét ñaàu kieåm tra.
Ñoïc AF cho tôùi khi baèng 1, bieát maùy tính saún saøng nhaän döõ lieäu kieåm tra.
Xuaát nible cao cuûa döõ lieäu kieåm tra (baèng 4 bit cao cuûa port B) vaø bit Error=0 (bit PB3).
Ñoïc AF cho tôùi khi baèng 0, ñeå bieát maùy tính saún saøng nhaän4 bit thaáp cuûa döõ lieäu kieåm tra.
Xuaát 4 bit thaáp vaø Error baèng 1.
Luùc naøy, maùy tính ñang nhaän vaø so saùnh döõ lieäu ñaõ gôûi ñi. Vaø keát quaû so saùnh ñöôïc baùo cho kit ôû thanh ghi döõ lieäu, töùc portA cuûa 8255. Kit ñoïc strobe cho tôùi khi strobe baèng [0] bieát keát quaû kieåm tra ñaõ saún saøng.
Ñoïc port A laáy keát quaû kieåm tra.
Neáu keát quaû kieåm tra laø ñeùng thì thöïc hieän khaâu xöû lyù döõ lieäu (löu döõ lieäu vaøo nôi caàn thieát) vaø quay laïi nhaän döõ lieäu keá tieáp. Neáu keát quaû laø sai thì boû qua khaâu xöû lyù döõ lieäu maø quay trôû laïi nhaäp laïi döõ lieäu cuõ.
Quaù trình xaåy ra cho ñeán khi khaâu xöû lyù döõ lieäu nhaän ra ñaõ nhaäp ñeán döõ lieäu cuoái cuøng thì keát thuùc khaâu xöû lyù seõ thoaùt nhö löu ñoà sau ñaây:
Start
(c) = 00h
Laáy döõ lieäu vöøa nhaän ñöôïc laøm byte cao cuûa ñòa chæ baét ñaàu vuøng nhôù ñaët döõ lieäu.
H ¬ (B)
Laáy döõ lieäu vöøa nhaän ñöôïc laøm byte thaáp cuûa ñòa chæ baét ñaàu vuøng nhôù ñaët döõ lieäu.
L ¬ (B)
Laáy döõ lieäu vöøa nhaän ñöôïc laøm byte cao cuûa ñòa chæ chaám döùt vuøng nhôù ñaët döõ lieäu.
D ¬ (B)
(c) = 01h
(c) = 02h
1
A
Ñ
Ñ
Ñ
S
S
S
Hình 19: Löu ñoà chöông trình xöû lyù döõ lieäu (trang1).
Return
Laáy döõ lieäu vöøa nhaän ñöôïc laøm byte thaáp cuûa ñòa chæ baét ñaàu vuøng nhôù ñaët döõ lieäu.
E ¬ (B)
(c) = 03h
A
1
Ñ
S
Taêng bieán ñeám leân moät ñôn vò.
Caát byte döõ lieäu vöøa nh._. co chon
if(tempx1Posx&&tempx2>=lpEvent->Posx)
if((tempy1+j*14)Posy&&(tempy2+j*14)>=lpEvent->Posy)
{
Arrowkey:
HideMouse();
setfillstyle(SOLID_FILL,WHITE);//MAGENTA);
bar(oldx1,oldy1,oldx2,oldy2);
setcolor(BLACK);//LIGHTGREEN);
outtextxy(x21+8,oldy1+3,Lis[Dem+over].ff_name);
setfillstyle(SOLID_FILL,BLUE);
oldx1=tempx1, oldy1=tempy1+j*14,oldx2=tempx2,oldy2=tempy2+j*14;
bar(oldx1,oldy1,oldx2,oldy2);
setcolor(YELLOW);
outtextxy(x21+8,oldy1+3,Lis[j+over].ff_name);
_dos_getfileattr(Lis[j+over].ff_name,attrib);
strcpy(s,Lis[j+over].ff_name);
if(strcmp(s,".")==0) strcpy(s,"\\");
Dem=j;
End:
Kiemtra=1;//bao hieu co nhan vao list
}
if(lpEvent->Msg==1&&(j==15)&&tempx1Posx&&tempx2>=lpEvent->Posx&&(tempy1+j*14)Posy&&(tempy2+j*14)>=lpEvent->Posy)
//truong hop vet tro file o cuoi bang list va nhap chuot ngay ben duoi vet tro
{
lpEvent->Posx=x11;
lpEvent->Posy=y11;
delay(50);
goto MouseDown;
}
if(lpEvent->Msg==1&&(j==15)&&tempx1Posx&&tempx2>=lpEvent->Posx&&(tempy1-14)Posy&&(tempy2-14)>=lpEvent->Posy)
//truong hop vet tro file o dau bang list va nhap chuot ngay ben tren vet tro
{
lpEvent->Posx=x11;
lpEvent->Posy=y11;
delay(50);
goto MouseUp;
}
if(lpEvent->Msg==1&&x31Posx&&y31Posy&&x32>=lpEvent->Posx&&y32>=lpEvent->Posy)
nutOK:
{
HideMouse();
putimage(x11,y11,buf,COPY_PUT);
farfree(buf);
if(Kiemtra!=1)
strcpy(s,Lis[0].ff_name);
if(strcmp(s,".")==0)
{
strcpy(s,"\\");
*attrib=16;
}
if(*attrib==16)
{
chdir(s);
return 2;
}
Show();
ShowMouse();
OutMessage("Click OK to send file.");
return 1 ;//bao da co chon file
}
if(lpEvent->Msg==1&&x41Posx&&y41Posy&&x42>=lpEvent->Posx&&y42>=lpEvent->Posy)
nutCancel:
{
HideMouse();
putimage(x11,y11,buf,COPY_PUT);
farfree(buf);
Cancel:
Show();
ShowMouse();
OutMessage("Click mouse to chose action");
return 0;
}
}
if(lpEvent->Msg==2)
{
delay(100);
goto nutOK;
}
}while(1);
}
//---------------------------------------------------------
VIII. CLASS MOUSE.H
#if !defined(__MOUSE_H__)
#define __MOUSE_H__
#include
#include "screen.h"
#define INT_MOUSE 0x33
#define M_LEFT 0x01 /* set if LEFT press */
#define M_RIGHT 0x02 /* set if RIGHT press */
#define M_CENTER 0x04 /* set if CENTER press */
#define M_CHANGE 0x08 /* set if mouse status is changed */
/* -- Keyboard coding bits -- */
#define KEY_NULL 0x0
#define ESC 0x1B
#define ENTER 0x0D
#define TAB '\t'
#define INS 0xD2
#define DEL 0xD3
#define BACKSPACE 0x8
#define HOME 0xC7
#define END 0xCF
#define PAGE_UP 0xC9
#define PAGE_DOWN 0xD1
/* -- Function's keys -- */
#define F1 0xBB
#define F2 0xBC
#define F3 0xBD
#define F4 0xBE
#define F5 0xBF
#define F6 0xC0
#define F7 0xC1
#define F8 0xC2
#define F9 0xC3
#define F10 0xC4
#define PLUS 0x2B
#define MINUS 0x2D
#define SPACEBAR 0x20
#define SHIFT_TAB 0x8F
#define CTRL_C 0x3
//struct time;
typedef struct tagEVENT{
int Msg;
int Posx, Posy; // toa do xay ra bien co chuot
struct time *t;
} EVENT;
typedef EVENT far *LPEVENT;
// Khai bao cac ham toan cuc
extern void SetMouseRange(LPRECT);//LPRECT: xem SCREEN.H
extern int InitMouse(LPRECT);
extern void ShowMouse(void);
extern void HideMouse(void);
extern void MouseRead(LPEVENT);
extern LPEVENT GetEvent(void);
extern void DeviceRelease(int);
//extern void ButtonPressed(int, LPEVENT);
extern void ResetEvent(LPEVENT);
//extern void MoveMouse(int x,int y);//tri
extern void MouseText(int x,int y,int color1, int color2);//,char s[]);
//extern int GetKey(void);
extern int GetMtx();
extern int GetMty();
//extern EVENT OldEvent();
extern int Double(LPEVENT);
#endif
// End of MOUSE.H
IX.MODULE MOUSE.CPP
#include
#include
//#include
#include
#include "mouse.h"
void SetMouseRange(LPRECT lpRect)
// Dat vung di chuyen cho chuot
{
_AX = 0x07;//ham 07 cua ngat 33 de dinh gioi han di chuyen ngang
_CX = lpRect->left;
_DX = lpRect->right;
geninterrupt(INT_MOUSE);//INT_MOUSE=0x33:ngat 33
_AX = 0x08;//ham 08 cua ngat 33 dinh gioi han di chuyen doc cho con tro
_CX = lpRect->top;
_DX = lpRect->bottom;
geninterrupt(INT_MOUSE);
}
//---------------------------------------------------------
int InitMouse(LPRECT lpRect)
// Khoi dong chuot
{
int ax;
_AX = 0;
geninterrupt(INT_MOUSE);
ax = _AX;
if (ax == 0)
return FALSE;
SetMouseRange(lpRect);
return TRUE;
}
//---------------------------------------------------------
void ShowMouse(void)
// Hien thi chuot
{
_AX = 1;
geninterrupt(INT_MOUSE);
}
//---------------------------------------------------------
void HideMouse(void)
// Dau chuot
{
_AX = 2;
geninterrupt(INT_MOUSE);
}
//---------------------------------------------------------
#include
#include
void MouseRead(LPEVENT lpEvent)
// Tra ve bien co nhan duoc tu chuot : Nut trai hay phai duoc an
{
int bx;
_AX = 3;
geninterrupt(INT_MOUSE);
bx = _BX;
//cx = _CX;
//dx = _DX;
lpEvent->Msg = bx;
lpEvent->Posx = _CX;
lpEvent->Posy = _DX;
gettime(lpEvent->t);
}
//---------------------------------------------------------
void ResetEvent(LPEVENT lpEvent)
{
lpEvent->Msg = 0;
lpEvent->Posx = lpEvent->Posy = 0;
}
//---------------------------------------------------------
EVENT PrevEvent, CurEvent;
//---------------------------------------------------------
LPEVENT GetEvent(void)
{
ResetEvent(&CurEvent);
MouseRead(&CurEvent);
// chuyen sang toa do ViewPort
CurEvent.Posx = CurEvent.Posx-MainWindow.rViewPort.left;
CurEvent.Posy = CurEvent.Posy-MainWindow.rViewPort.top;
// xet trang thai chuot co thay doi hay khong
if((CurEvent.Posx!=PrevEvent.Posx)&&(CurEvent.Posy!=PrevEvent.Posy))
CurEvent.Msg |= M_CHANGE;
PrevEvent = CurEvent;
// delay(50);
return (&CurEvent);
}
//---------------------------------------------------------
void DeviceRelease(int Msg)
{
while(GetEvent()->Msg&Msg);
}
//---------------------------------------------------------
int Double(LPEVENT lpEvent)
{
if(lpEvent->Msg==1)
{
delay(100);
ResetEvent(lpEvent);
lpEvent=GetEvent();
if(lpEvent->Msg==1)
//if((abs(CurEvent.Posx-oldEvent.Posx))<=10&&abs(CurEvent.Posy-oldEvent.Posy)<=10)
{
{
return 1;
}
}
else
return 0;
}
else return 0;
}
//---------------------------------------------------------
void MouseText(int x,int y,int color1,int color2)//,char s[])//gia dau nhay con tro
{
HideMouse();
// int h=textheight(s);
int w=5;
int color=getcolor();
do
{
for(int i=0;i<10&&(!kbhit());i++)
{
setcolor(color2);//WHITE);
line(x,y,x+w,y);
line(x,y+1,x+w,y+1);
delay(10);
setcolor(color);
}
setcolor(color1);//GREEN);
line(x,y,x+w,y);
line(x,y+1,x+w,y+1);
setcolor(color);
for(i=0;i<10&&(!kbhit());i++)
{
setcolor(color1);//GREEN);
line(x,y,x+w,y);
line(x,y+1,x+w,y+1);
delay(10);
setcolor(color);
}
}while(!kbhit());
}
//---------------------------------------------------------
int GetMtx()
{
return getx();
}
//---------------------------------------------------------
int GetMty()
{
return gety();
}
//---------------------------------------------------------
// End of MOUSE.CPP
X.CLASS SCREEN.H
#if !defined(__SCREEN_H__)
#define __SCREEN_H__
#define BORDERSIZE 3
#define TRUE 1
#define FALSE 0
#define DEMODELAY 0
// Dinh nghia cac kieu du lieu
typedef struct tagRECT{
int left, top, right, bottom ;
}RECT;
typedef RECT far *LPRECT;
typedef struct tagWINDOW {
char sCaption[80]; /*Window's caption*/
RECT rWinRect; /*Rectangle in which window is located*/
RECT rSys; /*System area of window*/
RECT rTitleBar; /*Caption area of window*/
RECT rMenuBar; /*Rectangle in which window's menu is located*/
RECT rMessage; /* Rectangle in which messages is display
}WINDOWS;
// Dinh nghia cac ham va bien dung toan cuc
extern int Xc, Yc; // Goc toa do
extern int LineColor;
extern int VP_WIDTH;
extern int VP_HEIGHT;
extern WINDOWS MainWindow;
extern void InitGraphics(void);
extern void OutMessage(char *Msg);
extern void InitScreen(void);
extern void InitValues(char *lpCaption);
extern int OutError(char *s);
#endif
// End of SCREEN.H
XI.MODULE SCREEN.CPP
#include
#include
#include
#include
#include
#include "screen.h"
#include "mouse.h"
int T_SIZE, W_SIZE, H_SIZE, W_CHAR, H_CHAR, MSG_SIZE;
int COLOR_WINDOW;
int COLOR_BUTTON;
int COLOR_BORDER;
int COLOR_CAPTION;
int COLOR_TEXT;
int VP_WIDTH;
int VP_HEIGHT;
int Maxx, Maxy; // Maxx - Maxy of screen
WINDOWS MainWindow;
//int Xc, Yc; // Goc toa do
//int LineColor = MAGENTA; // Mau cua duong thang can ve - Dung trong thu tuc SetPixel
//---------------------------------------------------------
void InitGraphics(void)
// Khoi tao che do do hoa
{
int grDrv=DETECT, grMode;
int ErrCode;
initgraph(&grDrv, &grMode, "");
ErrCode = graphresult();
if(ErrCode!= grOk)
{
printf("Graphics error: %s\n", grapherrormsg(ErrCode));
printf("Press any key to halt...");
getch();
exit(1); /* return with error code */
}
Maxx = getmaxx();
Maxy = getmaxy();
}
//---------------------------------------------------------
void InitValues(char *lpCaption)
// Khoi tao cac gia tri cho bien Windows de ve cua so man hinh
{
int WinWidth, WinHeight;
W_CHAR = 8; H_CHAR = 8; // Chieu rong va chieu cao cua mot ki tu
W_SIZE = 8; H_SIZE = 20; T_SIZE = 18; MSG_SIZE = 20;
COLOR_WINDOW = CYAN;
COLOR_BUTTON = LIGHTGRAY;
COLOR_BORDER = LIGHTGRAY;
COLOR_CAPTION = BLUE;
COLOR_TEXT = BLUE;
strcpy(MainWindow.sCaption, lpCaption);
// Gan gia tri cho WinRect - H.C.nhat chua cua so
MainWindow.rWinRect.left = 0;
MainWindow.rWinRect.top = 0;
MainWindow.rWinRect.right = Maxx;
MainWindow.rWinRect.bottom= Maxy;
WinWidth = MainWindow.rWinRect.right-MainWindow.rWinRect.left+1;
WinHeight= MainWindow.rWinRect.bottom-MainWindow.rWinRect.top+1;
// Gan gia tri cho rSys - H.C.nhat chua SystemMenu
MainWindow.rSys.left = BORDERSIZE;
MainWindow.rSys.top = BORDERSIZE;
MainWindow.rSys.right = MainWindow.rSys.left+T_SIZE;
MainWindow.rSys.bottom= MainWindow.rSys.top+T_SIZE;
// Gan gia tri cho rTitleBar - H.C.nhat chua thong tin thanh tieu de
MainWindow.rTitleBar.left = BORDERSIZE+1;//MainWindow.rSys.right+1;
MainWindow.rTitleBar.top = BORDERSIZE+1;
MainWindow.rTitleBar.right = WinWidth-BORDERSIZE-1;
MainWindow.rTitleBar.bottom= MainWindow.rSys.top+T_SIZE;
// Gan gia tri cho rMenuBar - H.C.nhat chua thong tin menu
// Gan gia tri cho rMessage - H.C.nhat chua thong tin cua cac //thong bao
MainWindow.rMessage.left = BORDERSIZE+1;
MainWindow.rMessage.right = WinWidth-BORDERSIZE-2;
MainWindow.rMessage.top = WinHeight-(BORDERSIZE+2)-MSG_SIZE;
MainWindow.rMessage.bottom= MainWindow.rMessage.top+MSG_SIZE;
// Gan gia tri cho rViewPort - H.C.nhat chua thong tin ve vung lam viec
// thuc su cua cua so
MainWindow.rViewPort.left = BORDERSIZE+1;
MainWindow.rViewPort.top = MainWindow.rTitleBar.bottom+2;//MainWindow.rMenuBar.bottom+2;
MainWindow.rViewPort.right = WinWidth-BORDERSIZE-2;
MainWindow.rViewPort.bottom= MainWindow.rMessage.top-2;
VP_WIDTH = MainWindow.rViewPort.right-MainWindow.rViewPort.left;
VP_HEIGHT = MainWindow.rViewPort.bottom-MainWindow.rViewPort.top;
}
//---------------------------------------------------------
void OutMessage(char *Msg)
// Ghi thong bao Msg ra cua so rMessage
{
struct fillsettingstype FillInfo;
int OldColor;
struct viewporttype vp;
// luu thong tin cu
getfillsettings(&FillInfo);
OldColor = getcolor();
getviewsettings(&vp);
// xoa thong bao cu
setviewport(MainWindow.rWinRect.left, MainWindow.rWinRect.top,
MainWindow.rWinRect.right, MainWindow.rWinRect.bottom, 1);
setfillstyle(SOLID_FILL, COLOR_BUTTON);
setcolor(COLOR_TEXT);
bar(MainWindow.rMessage.left, MainWindow.rMessage.top,
MainWindow.rMessage.right, MainWindow.rMessage.bottom);
// in thong bao moi ra
outtextxy(MainWindow.rMessage.left+W_CHAR,
MainWindow.rMessage.bottom-H_CHAR-5, Msg);
// tra ve trang thai cu
setfillstyle(FillInfo.pattern, FillInfo.color);
setcolor(OldColor);
setviewport(vp.left,vp.top, vp.right, vp.bottom, 1);
}
//---------------------------------------------------------
void DrawScreenBorder(int left, int top, int right, int bottom)
// Ve duong vien cho mot hinh chu nhat co toa do (left, top), (right, bottom)
{
setfillstyle(SOLID_FILL, COLOR_BORDER);
bar(left, top, right, top+BORDERSIZE);
bar(left, bottom, right, bottom-BORDERSIZE);
bar(left, top, left+BORDERSIZE, bottom);
bar(right-BORDERSIZE, top, right, bottom);
setcolor(BLACK);
rectangle(left, top, right, bottom);
rectangle(left+BORDERSIZE, top+BORDERSIZE,
right-BORDERSIZE, bottom-BORDERSIZE);
}
//---------------------------------------------------------
#include
void InitScreen(void)
// Ve cac thanh phan cua cua so
{
int x, y;
int WinWidth, WinHeight;
struct viewporttype vp;
getviewsettings(&vp);
setviewport(MainWindow.rWinRect.left, MainWindow.rWinRect.top,
MainWindow.rWinRect.right, MainWindow.rWinRect.bottom, 1);
WinWidth = MainWindow.rWinRect.right-MainWindow.rWinRect.left+1;
WinHeight= MainWindow.rWinRect.bottom-MainWindow.rWinRect.top+1;
x = (WinWidth-W_CHAR*strlen(MainWindow.sCaption))/2+1;
y = BORDERSIZE+(T_SIZE-H_CHAR)/2+1;
// Ve duong vien cua hinh chu nhat
DrawScreenBorder(0, 0, WinWidth-1, WinHeight-1);
delay(DEMODELAY);
// Ve thanh tieu de
setfillstyle(SOLID_FILL, COLOR_CAPTION);
bar(MainWindow.rTitleBar.left, MainWindow.rTitleBar.top,
MainWindow.rTitleBar.right, MainWindow.rTitleBar.bottom);
setcolor(WHITE);
outtextxy(x, y, MainWindow.sCaption);
delay(DEMODELAY);
// Ve SystemMenu
setfillstyle(SOLID_FILL, COLOR_BUTTON);
/* bar(MainWindow.rSys.left+1, MainWindow.rSys.top+1,
MainWindow.rSys.right-1, MainWindow.rSys.bottom-1);
setcolor(BLACK);
rectangle((MainWindow.rSys.left+MainWindow.rSys.right)/2-5,
(MainWindow.rSys.top+MainWindow.rSys.bottom)/2-1,
(MainWindow.rSys.left+MainWindow.rSys.right)/2+5,
(MainWindow.rSys.top+MainWindow.rSys.bottom)/2+1);
delay(DEMODELAY);
*/ // Ve Menu
// bar(MainWindow.rMenuBar.left, MainWindow.rMenuBar.top,
// MainWindow.rMenuBar.right, MainWindow.rMenuBar.bottom);
// outtextxy(MainWindow.rMenuBar.left+8, MainWindow.rMenuBar.bottom-13,
// "Menu of Program is here");
// delay(DEMODELAY);
// Ve thanh chua thong bao
bar(MainWindow.rMessage.left, MainWindow.rMessage.top,
MainWindow.rMessage.right, MainWindow.rMessage.bottom);
OutMessage("Welcome to Demo Window Program");
delay(DEMODELAY);
// Ve vung lam viec
setfillstyle(SOLID_FILL, COLOR_WINDOW);
bar(MainWindow.rViewPort.left, MainWindow.rViewPort.top,
MainWindow.rViewPort.right, MainWindow.rViewPort.bottom);
setcolor(BLACK);
rectangle(MainWindow.rViewPort.left-1, MainWindow.rViewPort.top,
MainWindow.rViewPort.right+1, MainWindow.rViewPort.bottom);
delay(DEMODELAY);
// Dat lai viewport la rViewPort
setviewport(MainWindow.rViewPort.left, MainWindow.rViewPort.top,
MainWindow.rViewPort.right, MainWindow.rViewPort.bottom, 1);
}
//---------------------------------------------------------
/*void DrawSysCoordinates(void)
// Ve he truc toa do
{
Xc = VP_WIDTH/2;
Yc = VP_HEIGHT/2;
setcolor(COLOR_TEXT);
// ve hai truc toa do
line(0, Yc, VP_WIDTH, Yc);
line(Xc, 0, Xc, VP_HEIGHT);
// ve hai mui ten
line(Xc, 0, Xc-5, 5);
line(Xc, 0, Xc+5, 5);
line(VP_WIDTH, Yc, VP_WIDTH-5, Yc-5);
line(VP_WIDTH, Yc, VP_WIDTH-5, Yc+5);
// Ve goc toa do
outtextxy(Xc-8, Yc+8, "O");
}
//---------------------------------------------------------
void SetLineColor(int C)
{
LineColor = C;
}
//---------------------------------------------------------
void SetPixel(int x, int y)
{
putpixel(Xc+x, Yc-y, LineColor);
}
//---------------------------------------------------------
void Set2Pixel(int Ox, int Oy, int x, int y)
{
putpixel(Ox+x, Oy-y, LineColor);
putpixel(Ox-x, Oy-y, LineColor);
}
//---------------------------------------------------------
void Set2PixelHor(int Ox, int Oy, int x, int y)
{
putpixel(Ox+x, Oy-y, LineColor);
putpixel(Ox+x, Oy+y, LineColor);
}
//---------------------------------------------------------
void ClearViewPort(void)
{
struct fillsettingstype FillInfo;
// luu thong tin cu
getfillsettings(&FillInfo);
setfillstyle(SOLID_FILL, COLOR_WINDOW);
bar(0, 0, VP_WIDTH, VP_HEIGHT);
setfillstyle(FillInfo.pattern, FillInfo.color);
DrawSysCoordinates();
} */
// End of SCREEN.C
//---------------------------------------------------------
#include
int OutError(char *s)
{
void far *buf;//con tro chi vung luu tru man hinh
unsigned int size = imagesize(200,150,470,240);
LPEVENT lpEvent;
int Cx1=280,Cy1=203,Cx2=337,Cy2=223;
int Ox1=350,Oy1=203,Ox2=405,Oy2=223;
if ((buf = farmalloc(size)) == NULL)
{
return -1;
}
else
{
getimage(200,150,470,240,buf);
}
setfillstyle(SOLID_FILL,BLUE);
HideMouse();
bar(200,150,470,240);
setcolor(WHITE);
rectangle(200,150,470,240);
outtextxy(200+(270-8*strlen(s))/2,170,s);
setfillstyle(SOLID_FILL,LIGHTBLUE);
bar(Cx1,Cy1,Cx2,Cy2);//280,203,337,223);
int OK=0;
outtextxy(285,210,"Cancel");
outtextxy(365,210,"OK");
int event;
do
{
lpEvent=GetEvent();
if(kbhit())
{
if((event=getch())==13)
{
CompleteOk:
HideMouse();
putimage(200,150,buf,COPY_PUT);
ShowMouse();
farfree(buf);
return OK;
}
if(event==27)
{
CompleteCancel:
HideMouse();
putimage(200,150,buf,COPY_PUT);
ShowMouse();
farfree(buf);
return 0;
}
if(event==9)
{
OK=!OK;
Cancel:
if(OK==0)
{
HideMouse();
setfillstyle(SOLID_FILL,BLUE);
bar(Ox1,Oy1,Ox2,Oy2);//350,203,405,223);
outtextxy(365,210,"OK");
setfillstyle(SOLID_FILL,LIGHTBLUE);
bar(Cx1,Cy1,Cx2,Cy2);//280,203,337,223);
outtextxy(285,210,"Cancel");
ShowMouse();
}
Ok:
if(OK==1)
{
HideMouse();
setfillstyle(SOLID_FILL,BLUE);
bar(Cx1,Cy1,Cx2,Cy2);//280,203,337,223);
outtextxy(285,210,"Cancel");
setfillstyle(SOLID_FILL,LIGHTBLUE);
bar(Ox1,Oy1,Ox2,Oy2);//350,203,405,223);
outtextxy(365,210,"OK");
ShowMouse();
}
}
if(event==0)
{
event=getch();
if(event==75)
{
OK=0;
goto Cancel;
}
if(event==77)
{
OK=1;
goto Ok;
}
}
else
flushall();
}
if(lpEvent->Msg==1)
{
if(lpEvent->Posx>=Cx1&&lpEvent->PosxPosy>=Cy1&&lpEvent->Posy<=Cy2)
{
OK=0;
goto CompleteCancel;
}
if(lpEvent->Posx>=Ox1&&lpEvent->PosxPosy>=Oy1&&lpEvent->Posy<=Oy2)
{
OK=1;
goto CompleteOk;
}
}
ShowMouse();
}while(1);
}
XII. CLASS SEND.HPP
#include
#include
#include
#include
#include
#include
#include
#if !defined __SEND__
#define __SEND__
class SEND
{
private:
char OutFile[100];
public:
char *CatFile(char St_add[],char End_add[],char InFile[]);
int Out();
int DeleteFile();//se del OutFile
};
#endif
extern int Esc();
XIII. MODULE SEND.CPP
#include "screen.h"
#include "send.hpp"
#define data 0x378
#define sta 0x379
#define ctr 0x37a
char *SEND::CatFile(char St_add[],char End_add[],char InFile[])
{
char KyTu_Hex[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','a','b','c','d','e','f'};
int Gtri_Dec[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,10,11,12,13,14,15};
unsigned int i,DemSpace;
unsigned int Value1=0,Value2=0;
char FindPos,FindValue;
int Thoigian=0;
FILE *f,*f1;
char t,t1,t2,t3,t4;
// char St_add[]="0000 Hex",End_add[]="000F Hex";
int end_line;
strcpy(OutFile,InFile);
i=strlen(OutFile);
do
{
OutFile[i]='\0';
}while(OutFile[--i]!='.');
strcat(OutFile,"tmp");//dat ten cho file se tao ra
for (FindPos=3;FindPos>=0;FindPos--)
for(FindValue=0;FindValue<22;FindValue++)
if(St_add[FindPos]==KyTu_Hex[FindValue])
Value1+=pow(16,(3-FindPos))*Gtri_Dec[FindValue];
for (FindPos=3;FindPos>=0;FindPos--)
for(FindValue=0;FindValue<22;FindValue++)
if(End_add[FindPos]==KyTu_Hex[FindValue])
Value2+=pow(16,(3-FindPos))*Gtri_Dec[FindValue];
f=fopen(InFile,"rt");
f1=fopen(OutFile,"w+t");
fwrite(St_add,4,1,f1);
fwrite(End_add,4,1,f1);
do
{
do
{
fread(&t1,1,1,f);
}while(t1!='\'');//ngay sau dia chi cua lenh
do
{
fread(&t1,1,1,f);
}while(t1==' ');//den lenh
end_line=0;
do
{
fread(&t2,1,1,f);
Value1++;
DemSpace=0;
do
{
fread(&t,1,1,f);
DemSpace++;
}while(t==' '&&DemSpace<3);//con la lenh hoac dia chi hay da cham dut mot lenh
if(DemSpace>=2)//la ma lenh hoac da ket thuc mot dong lenh
{
fwrite(&t1,1,1,f1);
fwrite(&t2,1,1,f1);
t1=t;
}
if(DemSpace==1)
{
t3=t;
fread(&t4,1,1,f);
Value1++;
fwrite(&t3,1,1,f1);
fwrite(&t4,1,1,f1);
fwrite(&t1,1,1,f1);
fwrite(&t2,1,1,f1);
DemSpace=0;
do
{
fread(&t,1,1,f);
if(t==' ')
DemSpace++;
}while((t=='\''||t==' ')&&DemSpace<3);//con la lenh hoac dia chi hay da cham dut mot lenh
if(DemSpace==2)
t1=t;
}
if(DemSpace>2)
{
end_line=1;
}
}while(end_line==0);
}while(Value1<=Value2);
fcloseall();
return OutFile;
}
//---------------------------------------------------------
int SEND::Out()
{
int result,Temp;
FILE *f;
char value;
int n,dem=0;
int Stop=0;
char KyTu_Hex[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','a','b','c','d','e','f'};
int Gtri_Dec[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,10,11,12,13,14,15};
if ( (f = fopen(OutFile,"rt")) == NULL)
{
OutError("Cannot open input file.");
return dem;
}
while(!feof(f))
{
do
{
result=inportb(sta);
result=result & 0x80;
Stop=Esc();
}while(result !=0x80&&Stop!=1);//doc busy cho toi khi !busy = 1
if(Stop==1)
return -1;
n=fread(&value,1,1,f);
if(n==0)
return dem;
for(int z=0;z<22;z++)//doi ky tu ra gia tri Dec de goi di
if(value==KyTu_Hex[z])//nible cao
{
Temp=Gtri_Dec[z]*16;
z=22;
}
fread(&value,1,1,f);
for(z=0;z<22;z++)//nible thap
if(value==KyTu_Hex[z])
{
Temp=Gtri_Dec[z]+Temp;
z=22;
}
outportb(data,Temp);//pow(2,i));//xuat du lieu ra thanh ghi du lieu
outportb(ctr,0x00);// cho strobe = 1 de bao cho phan thu biet da goi du lieu ra thanh ghi du lieu
dem++;
do
{
result=inportb(sta);
result=result & 0xC0;
Stop=Esc();
}while(result!=0x40&&Stop!=1);//doc ack cho den khi ack = 1
if(Stop==1)
return -1;
outportb(ctr,0x01);// cho strobe = 0 de bao cho phan thu biet da goi xong mot byte du lieu ra thanh ghi du lieu
}
return 0;
}
//---------------------------------------------------------
int SEND::DeleteFile()
{
return remove(OutFile);
}
//---------------------------------------------------------
int Esc()
{
if(kbhit())//nhan Esc de thoat
{
if(getch()==27)
{
OutError("Task is not complete !!!");
}
else
flushall();
return 1;
}
return 0;
}
XIV.CLASS TEXTBOX.HPP
#include
#if !defined __TEXTBOX__
#define __TEXTBOX__
class TEXTBOX
{
private:
int l,t,r,b;
int Color,Color1;
char S[100],S1[100];
char Dri[100],Path_var[100],Name[100],TenFile[100],SubFile[100];
int chiso;
public:
TEXTBOX() {S[0]='\0';}//S1="Duong dan";}
void InitTextBox(int x1,int y1,int x2,int y2,int color,int color1,char s[]);
void Path();
void PressTextBox();
void OutTextBox();
int Left(){return l;}
int Top(){return t;}
int Right(){return r;}
int Bottom(){return b;}
void DelChar(int length);//,int xoa);//de xoa ky tu khi gap phim del tai texbox
void InsertChar(char c);
void GetS(char s[]){strcpy(s,S);};
void GetS_in(char s[]){strcpy(S,s);}
int DuongDan(char s[]);
void Get_path(char s[]){strcpy(s,Path_var);};
void Get_name();
};
#endif
XV.MODULE TEXTBOX.CPP
#include
#include
#include
#include
#include
#include
#include
#include "textbox.hpp"
#include "mouse.h"
//---------------------------------------------------------
void TEXTBOX::InitTextBox(int x1,int y1,int x2,int y2,int color,int color1,char s[])
{
char buffer[MAXPATH];
l=x1;t=y1;r=x2;b=y2;
Color=color;
Color1=color1;
strcpy(S1,s);
getcwd(buffer, MAXPATH);
strcpy(S,buffer);
strcat(S,"\\");
}
//---------------------------------------------------------
void TEXTBOX::OutTextBox()
{
setfillstyle(SOLID_FILL,Color);
bar(l,t,r,b);
setcolor(WHITE);
line(l,b,r,b);
line(r,t,r,b);
setcolor(BLACK);
line(l,t,r,t);
line(l,t,l,b);
setcolor(WHITE);
if(Color==WHITE)
setcolor(BLACK);
outtextxy(l,t+(b-t-textheight(S))/2-b+t-3,S1);
outtextxy(l+5,t+(b-t-textheight(S))/2,S);
}
//---------------------------------------------------------
/*
void TEXTBOX::PressTextBox()
{
setcolor(BLACK);
line(l,t,r,t);
line(l,t,l,b);
setcolor(WHITE);
line(l,b,r,b);
line(r,t,r,b);
}
*/
//---------------------------------------------------------
void TEXTBOX::Path()//lay duong dan nhap vao vao bien S cua TEXTBOX
{
char a;
int C1=Color1;//C1 la mau cua text trong textbox o che do nhap ten file
setcolor(C1);
outtextxy(l+5,t+(b-t-textheight(S))/2,S);
chiso=0;
MouseText(l+textwidth(S)+4,t+(b-t+textheight(S))/2,Color,C1);//,S);//gia dau nhac chuot
char stemp[128];
strcpy(stemp,S);
while((a=getch())!=13)//&&a!=27)//kiem tra phim Enter
{
switch(a)//kiem tra ky tu nhap vao
{
case 0:switch(a=getch())
{
case 71://home
MouseText(l+6,t+(b-t+textheight(S))/2,Color,C1);//,S);
chiso=-strlen(S);
break;
case 72:break;
case 73:break;
case 75://left arrow
int f=textwidth(S);
int xt=l+6+f+(--chiso)*8;
int yt=t+(b-t+textheight(S))/2;
if(xt<l+6)
xt=l+6+f+((++chiso))*8;
MouseText(xt,yt,Color,C1);//,S);//so 8 la be ngang 1 ky tu
break;
case 77://right arrow
if(chiso==0)break;
f=textwidth(S);
MouseText(l+f+6+((++chiso))*8,t+(b-t+textheight(S))/2,Color,C1);//,S);//so 8 la be ngang 1 ky tu
break;
case 79://end
f=textwidth(S);
MouseText(l+f+6,t+(b-t+textheight(S))/2,Color,C1);//,S);
chiso=0;
break;
case 80:
case 81:
case 82:break;
case 83://del
setcolor(GREEN);
outtextxy(l+5,t+(b-t-textheight(S))/2,S);
DelChar(strlen(S));//,chiso);
f=textwidth(S);
setcolor(YELLOW);
outtextxy(l+5,t+(b-t-textheight(S))/2,S);
MouseText(l+f+6+chiso*8,t+(b-t+textheight(S))/2,Color,C1);//,S);//so 8 la be ngang 1 ky tu
break;
}break;
case 8://backspace
setcolor(Color);
outtextxy(l+5,t+(b-t-textheight(S))/2,S);
chiso--;
DelChar(strlen(S));
setcolor(C1);
outtextxy(l+5,t+(b-t-textheight(S))/2,S);
MouseText(l+textwidth(S)+6+chiso*8,t+(b-t+textheight(S))/2,Color,C1);//,S);
break;
case 27://Esc
strcpy(S,stemp);return;
default:
if(a>=32&&a<=126)
{
if((strlen(S)+2)*8>(r-l))break;
setcolor(GREEN);
outtextxy(l+5,t+(b-t-textheight(S))/2,S);
InsertChar(a);
setcolor(C1);
outtextxy(l+5,t+(b-t-textheight(S))/2,S);
MouseText(l+textwidth(S)+6+chiso*8,t+(b-t+textheight(S))/2,Color,C1);//,S);//so 8 la be ngang 1 ky tu
}
}
MouseText(l+textwidth(S)+6,t+(b-t+textheight(S))/2,Color,C1);//,S);//truong hop phim khong co nhiem vu nao dac biet
};
if (S[0]=='\0')
strcpy(S,stemp);
}
//---------------------------------------------------------
void TEXTBOX::DelChar(int length)//xoa ky tu tai vi tri con tro
{
int vitri=length+chiso;
for(int i=vitri;i<length-1;i++)
S[i]=S[i+1];
if(chiso<0)
{
S[length-1]='\0';
chiso++;
}
}
//---------------------------------------------------------
void TEXTBOX::InsertChar(char c)
{
int length=strlen(S);
for(int i=length;i>length+chiso;i--)
S[i]=S[i-1];
S[length+1]='\0';
S[i]=c;
}
//---------------------------------------------------------
int TEXTBOX::DuongDan(char s[])
{
int l=strlen(s),dem,dr;
char s1[200]="",s2[200]="";
dem=l-1;
if(s[1]==':')
switch(toupper(s[0]))
{
case 'A':dr=1;break;
case 'B':dr=2;break;
case 'C':dr=3;break;
case 'D':dr=4;break;
case 'E':dr=5;break;
}
else dr=_getdrive();
for(int i=l-1;i>0;i--)
{
if(s[i]=='\\')
{
dem=i+1;
i=0;
}
else
dem=0;
}
strcat(s2,&s[dem]);
if(dem!=0) dem-=1;
strncpy(s1,s,dem);
strcpy(Path_var,s1);
strcpy(Name,s2);
return dr;
}
//---------------------------------------------------------
void TEXTBOX::Get_name()
{
int n=strlen(Name);
int phan_ten=1;
for(int i=0;i<=n&&phan_ten;i++)
{
if(Name[i]=='.'&&i<n)
{
for(int j=n;j>i;j--)
Name[j]=Name[j-1];
Name[j]='1';
Name[n+1]='\0';
phan_ten=0;
}
if(i==n)
{
Name[i]='1';
Name[i+1]='\0';
}
}
S[0]='\0';
strcat(S,Path_var);
strcat(S,"\\");
strcat(S,Name);
}
C. SÖÛ DUÏNG CHÖÔNG TRÌNH DOWNLOAD.
Ñeå söû duïng chöông trình DowLoad, tröôùc tieân phaûi veà maøn hình Dos (vì chöông trình ñöôïc vieát trong moâi tröông Dos, khoâng quaûn lyù ñöôïc caùc chöông trình ñieàu khieån thieát bò saún coù trong maùy, thoaùt veà Dos ñeå traùnh nhöõng xung ñoät chöông trình).
Goïi teân Demo.exe, luùc ñoù maøn hình seõ hieän leân nhö sau:
Ñeå choïn file baèng caùch goõ phím, click chuoät vaøo oâ Open File.
OÂ nhaäp text
Nuùt pulldown
Neáu nhaép nuùt pulldown thì seõ choïn file theo kieåu click chuoät. (hình sau). Choïn oå ñóa, choïn loaïi file, choïn teân file vaø click OK ñeå choïn file.
Sau khi choïn xong file thì trong baûng “Free memory request” xuaát hieän caùc ñòa chæ ñaàu cuoái, vaø dung löôïng boä nhôù seõ söû duïng.
Sau ñoù click Send ñeå gôûi döõ lieäu ñi.
Khi quaù trình truyeàn file keát thuùc thì xuaát hieän thoâng baùo “Task is complete.”
._.
Các file đính kèm theo tài liệu này:
- DO57.DOC