LỜI NÓI ĐẦU
Hiện nay đất nước ta đang chuyển mình theo sự phát triển chung của thế giới và khu vực Châu Á bằng nền sản xuất đa dạng và đầy tiềm năng. Nền sản xuất này không chỉ đòi hỏi một số lượng lao động khổng lồ mà còn yêu cầu về trình độ, chất lượng tay nghề, kỹ thuật lao động và thiết bị sản xuất. Trên đà phát triển đó, vấn đề tự động hoá trong quá trình sản xuất, nghiên cứu trở thành một nhu cầu cần thiết. Thoạt đầu vấn đề tự động hoá được thực hiện riêng lẻ từ cơ khí hoá đến các mạch điện tử. Ngày nay, với sự xuất hiện cuả các Chip vi xử lý và máy tính cùng với việc sử dụng rộng rãi của nó đã đẩy vấn đề tự động hoá lên một bước cao hơn và thời lượng nhanh hơn
Trong đó, việc ứng dụng Máy Vi Tính vào kỹ thuật đo lường và điều khiển đã đem lại những kết quả đầy tính ưu việc. Các thiết bị, hệ thống đo lường và điều khiển ghép nối với Máy Vi Tính có độ chính xác cao, thời gian thu thập số liệu ngắn. Ngoài ra, máy tính còn có phần giao diện lên màn hình rất tiện lợi cho người sử dụng.
Việc dùng máy tính để điều khiển và thông tin liên lạc với nhau thì vấn đề truyền dữ liệu rất quan trọng. Hiện nay chúng ta có thể dùng máy tính để liên lạc với nhau thông qua hệ thống mạng như: mạng cục bộ (LAN) hay mạng toàn cầu Internet. Do đó, trong phạm vi hiểu biết cuả mình, em đã tìm hiểu và thực hiện đề tài: “Giao Tiếp Giữa Vi Điều Khiển 8951 và Máy Vi Tính” thông qua cổng nối tiếp và viết chương trình phần mềm để truyền số liệu giữa hai hệ thống.
Mặc dù em đã cố gắng rất nhiều để hoàn thành quyển luận văn này, song do giới hạn về thời gian cũng như kiến thức nên nội dung còn nhiều thiếu sót. Rất mong sự đóng góp ý kiến của quý thầy cô và các bạn sinh viên để luận văn được hoàn thiện hơn. Xin chân thành cảm ơn.
99 trang |
Chia sẻ: banmai | Lượt xem: 1953 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Giao tiếp giữa Kit Vi xử lý 8951 và máy tính, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
o bit, neân ñeå ñaët bit SMOD leân 1 caàn phaûi theo caùc leänh sau:
MOV A,PCON ; laáy giaù trò hieän thôøi cuûa PCON
SETB ACC.7 ; ñaët bit SMOD leân 1
MOV PCON,A ; ghi giaù trò ngöôïc veà PCON
Caùc toác ñoä baud trong caùc cheá ñoä 1 vaø 3 ñöôïc xaùc ñònh baèng toác ñoä traøn cuûa timer 1. Vì timer hoaït ñoäng ôû taàn soá töông ñoái cao, traøn timer ñöôïc chia theâm cho 32 (hoaëc 16 neáu SMOD =1 ) tröôùc khi cung caáp toác ñoä xung nhòp cho port noái tieáp.
3. Toå chöùc ngaét trong 8051
Vi Ñieàu Khieån coù 5 nguoàn ngaét:2 nguoàn ngaét ngoaøi,2 ngaét timer vaø 1 ngaét Port noái tieáp, taát caû caùc nguoàn ngaét bò caám sau khi reset heä thoáng vaø cho pheùp bôûi phaàn meàm
3.1.Cho Pheùp vaø Khoâng Cho Pheùp Ngaét
Moãi nguoàn ngaét ñöôïc cho pheùp hoaëc khoâng cho pheùp thoâng qua thanh ghi chöùc naêng ñaëc bieät coù caùc bit ñöôïc ñòa chæ hoùa IE (Interrupt Enable) taïi ñòa chæ 0A8H.
BIT
SYMBOL
BIT ADDRESS
DESCRIPTION
(1:ENABLE,0:DISABLE)
IE.7
IE.6
IE.5
IE.4
IE.3
IE.2
IE.1
IE.0
EA
EA
ET2
ES
ET1
EX1
ET0
EX0
AFH
AEH
ADH
ACH
ABH
AAH
A9H
A8H
Global Enable/Disable
Undefined
Enable Timer 2 Interrupt (8052)
Enable Serial Port Interrupt
Enable Timer 1 Interrupt
Enable External 1 Interrupt
Enable Timer 0 Interrupt
Enable External 0 Interrupt
VeùcTô Ngaét
Khi ngaét ñöôïc chaáp nhaän giaù trò ñöôïc ñöa vaøo PC (Program Counter) goïi laø vector ngaét (Interrupt Vector)
INTERRUPT
FLAG
VECTOR ADDRESS
System Reset
External 0
Timer 0
External 1
Timer 1
Serial Port
Timer 2
RST
IE0
TF0
IE1
TF1
RI OR TI
TF2 OR EXF2
0000 H
0003 H
000B H
0013 H
001B H
0023 H
002B H
Ngaét Port noái Tieáp
Ngaét Port noái tieáp xaûy ra khi caû 2 côø ngaét truyeàn (TI) hoaëc côø ngaét nhaän (RI) ñöôïc ñaët. Ngaét truyeàn xaûy ra khi bit cuoái cuøng trong SBUF truyeàn xong töùc laø luùc naøy thanh ghi SBUF roãng .Ngaét nhaän xaûy ra khi SBUF ñaõ hoaøn thaønh vieäc nhaän vaø ñang ñôïi ñeå ñoïc töùc laø luùc naøy thanh ghi SBUF ñaày. Caû hai côø ngaét naøy ñöôïc ñaêt bôûi phaàn cöùng vaø xoùa baèng phaàn meàm.
II. TOÙM TAÉT TAÄP LEÄNH CUÛA 8951:
- Caùc chöông trình ñöôïc caáu taïo töø nhieàu leänh, chuùng ñöôïc xaây döïng logic, söï noái tieáp cuûa caùc leänh ñöôïc nghó ra moät caùch hieäu quaû vaø nhanh, keát quaû cuûa chöông trình khaû quan.
- Taäp leänh hoï MSC-51 ñöôïc söï kieåm tra cuûa caùc mode ñònh vò vaø caùc leänh cuûa chuùng coù caùc Opcode 8 bit. Ñieàu naøy cung caáp khaû naêng 28= 256 leänh ñöôïc thi haønh vaø moät leänh khoâng ñöôïc ñònh nghóa. Vaøi leänh coù 1 hoaëc 2 byte bôûi döõ lieäu hoaëc ñòa chæ theâm vaøo Opcode. Trong toaøn boä caùc leänh coù 139 leänh 1 byte, 92 leänh 2 byte vaø 24 leänh 3 byte.
1. Caùc cheá ñoä ñònh vò ñòa chæ (addressing mode):
- Caùc mode ñònh vò laø moät boä phaän thoáng nhaát cuûa taäp leänh. Chuùng cho pheùp ñònh roõ nguoàn hoaëc nôi gôûi tôùi cuûa döõ lieäu ôû caùc ñöôøng khaùc nhau tuøy thuoäc vaøo traïng thaùi cuûa ngöôøi laäp trình. 8951 coù 8 mode ñònh vò ñöôïc duøng nhö sau:
Thanh ghi.
Tröïc tieáp.
Giaùn tieáp.
Töùc thôøi.
Töông ñoái.
Tuyeät ñoái.
Daøi.
Ñònh vò.
1.1 Söï ñònh vò thanh ghi (Register Addressing):
- Coù 4 daõy thanh ghi 32 byte ñaàu tieân cuûa RAM döõ lieäu treân Chip ñòa chæ 00H ¸ 1FH, nhöng taïi moät thôøi ñieåm chæ coù moät daõy hoaït ñoäng caùc bit PSW3, PSW4 cuûa töø traïng thaùi chöông trình seõ quyeát ñònh daõy naøo hoaït ñoäng.
- Caùc leänh ñeå ñònh vò thanh ghi ñöôïc ghi maät maõ baèng caùch duøng bit troïng soá thaáp nhaát cuûa Opcode leänh ñeå chæ moät thanh ghi trong vuøng ñòa chæ theo logic naøy. Nhö vaäy 1 maõ chöùc naêng vaø ñòa chæ hoaït ñoäng coù theå ñöôïc keát hôïp ñeå taïo thaønh moät leänh ngaén 1 byte nhö sau:
Opcode
n
n
n
Register Addressing.
- Moät vaøi leänh duøng cuï theå cho 1 thanh ghi naøo ñoù nhö thanh ghi A, DPTR … maõ Opcode töï noù cho bieát thanh ghi vì caùc bit ñòa chæ khoâng caàn bieát ñeán.
1.2 Söï ñònh ñòa chæ tröïc tieáp (Direct Addressing):
- Söï ñònh ñòa chæ tröïc tieáp coù theå truy xuaát baát kyø giaù trò naøo treân Chip hoaëc thanh ghi phaàn cöùng treân Chip. Moät byte ñòa chæ tröïc tieáp ñöôïc ñöa vaøo Opcode ñeå ñònh roõ vò trí ñöôïc duøng nhö sau:
Opcode
Direct Addressing
- Tuøy thuoäc caùc bit baäc cao cuûa ñòa chæ tröïc tieáp maø moät trong 2 vuøng nhôù ñöôïc choïn. Khi bit 7 = 0, thì ñòa chæ tröïc tieáp ôû trong khoaûng 0¸127 (00H¸7FH) vaø 128 vò trí nhôù thaáp cuûa RAM treân Chip ñöôïc choïn.
- Taát caû caùc Port I/O, caùc thanh ghi chöùc naêng ñaëc bieät, thanh ghi ñieàu khieån hoaëc thanh ghi traïng thaùi bao giôø cuõng ñöôïc quy ñònh caùc ñòa chæ trong khoaûng 128¸255 (80¸FFH). Khi byte ñòa chæ tröïc tieáp naèm trong giôùi haïn naøy (öùng vôùi bit 7 = 1) thì thanh ghi chöùc naêng ñaëc bieät ñöôïc truy xuaát. Ví duï Port 0 vaø Port 1 ñöôïc quy ñònh ñòa chæ tröïc tieáp laø 80H vaø 90H, P0, P1 laø daïng thöùc ruùt goïn thuaät nhôù cuûa Port, thì söï bieán thieân cho pheùp thay theá vaø hieåu daïng thöùc ruùt goïn thuaät nhôù cuûa chuùng. Chaún haïn leänh: MOV P1, A Ü söï bieân dòch seõ xaùc ñònh ñòa chæ tröïc tieáp cuûa Port 1 laø 90H ñaët vaøo hai byte cuûa leänh (byte 1 cuûa port 0).
1.3 Söï ñònh vò ñòa chæ giaùn tieáp (Indirect Addressing):
- Söï ñònh ñòa chæ giaùn tieáp ñöôïc töôïng tröng bôûi kyù hieäu @ ñöôïc ñaët tröôùc R0, R1 hay DPTR. R0 vaø R1 coù theå hoaït ñoäng nhö moät thanh ghi con troû maø noäi dung cuûa noù cho bieát moät ñòa chæ trong RAM noäi ôû nôi maø döõ lieäu ñöôïc ghi hoaëc ñöôïc ñoïc. Bit coù troïng soá nhoû nhaát cuûa Opcode leänh seõ xaùc ñònh R0 hay R1 ñöôïc duøng con troû Pointer.
i
Opcode
1.4. Söï ñònh ñòa chæ töùc thôøi (Immediate Addressing):
- Söï ñònh ñòa chæ töùc thôøi ñöôïc töôïng tröng bôûi kyù hieäu # ñöôïc ñöùng tröôùc moät haèng soá, 1 bieán kyù hieäu hoaëc moät bieåu thöùc soá hoïc ñöôïc söû duïng bôûi caùc haèng, caùc kyù hieäu, caùc hoaït ñoäng do ngöôøi ñieàu khieån. Trình bieân dòch tính toaùn giaù trò vaø thay theá döõ lieäu töùc thôøi. Byte leänh theâm voâ chöùa trò soá döõ lieäu töùc thôøi nhö sau:
Opcode
Immediate Data
1.5 Söï ñònh ñòa chæ töông ñoái:
- Söï ñònh ñòa chæ töông ñoái chæ söû duïng vôùi nhöõng leänh nhaûy naøo ñoù. Moät ñòa chæ töông ñoái (hoaëc Offset) laø moät giaù trò 8 bit maø noù ñöôïc coäng vaøo boä ñeám chöông trình PC ñeå taïo thaønh ñòa chæ moät leänh tieáp theo ñöôïc thöïc thi. Phaïm vi cuûa söï nhaûy naèm trong khoaûng -128 ¸ 127. Offset töông ñoái ñöôïc gaén vaøo leänh nhö moät byte theâm vaøo nhö sau:
Opcode
Relative Offset
- Nhöõng nôi nhaûy ñeán thöôøng ñöôïc chæ roõ bôûi caùc nhaõn vaø trình bieân dòch xaùc ñònh Offset Relative cho phuø hôïp.
- Söï ñònh vò töông ñoái ñem laïi thuaän lôïi cho vieäc cung caáp maõ vò trí ñoäc laäp, nhöng baát lôïi laø chæ nhaûy ngaén trong phaïm vi -128¸127 byte.
1.6 Söï ñònh ñòa chæ tuyeät ñoái (Absolute Addressing):
- Söï ñònh ñòa chæ tuyeät ñoái ñöôïc duøng vôùi caùc leänh ACALL vaø AJMP. Caùc leänh 2 byte cho pheùp phaân chia trong trang 2K ñang löu haønh cuûa boä nhôù maõ cuûa vieäc cung caáp 11 bit thaáp ñeå xaùc ñònh ñòa chæ trong trang 2K (A0¸A10 goàm A10¸A8 trong Opcode vaø A7¸A0 trong byte)vaø 5 bit cao ñeå choïn trang 2K (5 bit cao ñang löu haønh trong boä ñeám chöông trình laø 5 bit Opcode).
Addr 10 ¸ Addr 8
Opcode
Addr 7 ¸ Addr 0
- Söï ñònh vò tuyeät ñoái ñem laïi thuaän lôïi cho caùc leänh ngaén (2 byte), nhöng baát lôïi trong vieäc giôùi haïn phaïm vi nôi gôûi ñeán vaø cung caáp maõ coù vò trí ñoäc laäp.
1.7 Söï ñònh vò daøi (Long Addressing) :
- Söï ñònh vò daøi ñöôïc duøng vôùi leänh LCALL vaø LJMP. Caùc leänh 3 byte naøy bao goàm moät ñòa chæ nôi gôûi tôùi 16 bit ñaày ñuû laø 2 byte vaø 3 byte cuûa leänh.
Opcode
Addr 15 ¸ Addr 8
Addr 7 ¸ Addr 0
- Öu ñieåm cuûa söï ñònh daøi laø vuøng nhôù maõ 64K coù theå ñöôïc duøng heát, nhöôïc ñieåm laø caùc leänh ñoù daøi 3 byte vaø vò trí leä thuoäc. Söï phuï thuoäc vaøo vò trí seõ baát lôïi bôûi chöông trình khoâng theå thöïc thi taïi ñòa chæ khaùc.
1.8 Söï ñònh ñòa chæ phuï luïc (Index Addressing):
- Söï ñònh ñòa chæ phuï luïc duøng moät thanh ghi cô baûn (cuõng nhö boä ñeám chöông trình hoaëc boä ñeám döõ lieäu) vaø Offset (thanh ghi A) trong söï hình thaønh 1 ñòa chæ lieân quan bôûi leänh JMP hoaëc MOVC.
Base Register Offset Effective Address
ACC
PC (or PDTR)
Index Address
- Caùc baûng cuûa leänh nhaûy hoaëc caùc baûng tra ñöôïc taïo neân moät caùch deã daøng baèng caùch duøng ñòa chæ phuï luïc.
PHAÀN B:
CHÖÔNG I:
GIAO TIEÁP GIÖÕA KIT 8951 VÔÙI MAÙY TÍNH
I. PHAÀN CÖÙNG
Thieát keá card giao tieáp giöõa 8951 vaø maùy vi tính
Sô Ñoà Card Giao Tieáp Vaø Sô Ñoà Maïch In
II. PHAÀN MEÀM
Giôùi thieäu phaàn meàm:
Phaàn cöùng ñoù laø nhöõng gì ñaõ coá ñònh, noù laø moät coã maùy, coã maùy muoán hoaït ñoäng thì phaûi coù coâng nhaân laønh ngheà ñieàu khieån noù, vôùi cuøng moät coã maùy nhöng ngöôøi coâng nhaân coù tay ngheà cao thì saûn phaåm caøng coù chaát löôïng. Töø ñoù chuùng ta nhaän thaáy raèng, phaàn cöùng muoán hoaït ñoäng ñöôïc ñoøi hoûi phaûi coù söï can thieäp cuûa con ngöôøi maø chuû yeáu laø thoâng qua phaàn meàm ñieàu khieån vaø söï hoaït ñoäng meàm deûo cuûa phaàn cöùng laïi phuï thuoäc vaøo trình ñoä ngöôøi laäp trình. Nhö vaäy, phaàn meàm vaø phaàn cöùng tuy laø hai boä phaän hoaït ñoäng ñoäc laäp nhöng hoaït ñoäng cuûa chuùng khoâng theå taùch rôøi nhau trong cuøng moät heä thoáng, chuùng hoã trôï laãn nhau ñeå hình thaønh neân hoaït ñoäng cuûa heä thoáng.
Bieát ñöôïc taàm quan troïng cuûa phaàn meàm, chuùng ta seõ vaän duïng phaàn cöùng ñeå caùc chöông trình phaàn meàm phuïc vuï muïch ñích cuûa chuùng ta.
2. Giôùi thieäu ngoân ngöõ Assembly:
Khi maùy tính thöïc hieän chöông trình, noù ñoïc moät daõy caùc soá nhò phaân chæ goàm toaøn caùc soá 0 vaø 1 vaøo boä nhôù, giaûi maõ roài hieån thò. Ñeå cho deã ñoïc vaø deã vieát hôn thöôøng ta vieát caùc soá nhò phaân döôùi daïng caùc soá thaäp luïc phaân ñöôïc goïi laø chöông trình vieát baèng ngoân ngöõ maùy. Ta coù theå vieát vaø thöïc hieän moät chöông trình ngoân ngöõ maùy baèng phaàn meàm DEBUG, duøng leänh “E” hay leänh “A” ñeå nhaäp caùc maõ leänh vaøo boä nhôù, sau ñoù coù theå duøng leänh “G” hoaëc leänh “P“ ñeå thöïc hieän chöông trình.
Tuy chöông trình coù theå vieát tröïc tieáp baèng ngoân ngöõ maùy, nhöng neáu trong chöông trình coù moät loãi naøo ñoù, hoaëc muoán theâm hoaëc xoaù moät maõ leänh naøo ñoù coù ñiaï chæ ñi keøm nhö jump, call, loop … cuõng phaûi ñöôïc tính toaùn laïi cho ñuùng ñòa chæ, neân raát khoù cho vieäc laäp, söûa vaø baûo trì chöông trình. Vì vaäy thay vì vieát tröïc tieáp baèng ngoân ngöõ maùy, ngöôøi laäp trình coù theå vieát baèng moät ngoân ngöõ döôùi daïng caùc kyù hieäu hình thöùc hoaëc caùc töø gôïi nhôù töông ñöông vôùi moät leänh cuûa CPU. Ñaây chính laø Hôïp Ngöõ (Assembly Language).
Hôïp ngöõ (Assembly Language) laø ngoân ngöõ laäp trình caáp thaáp gaàn vôùi ngoân ngöõ maùy.
Assembly laø chöông trình dòch caùc chöông trình vieát baèng hôïp ngöõ sang maõ maùy.
Caùc chöông trình dòch thoâng duïng hieän nay laø Macro Assembler (MASM) cuûa haõng phaàn meàm noåi tieáng Microsoft vaø Turbo Assembler (TASM) cuûa haõng Borland. Giöõa hai Chöông trình naøy coù söï khaùc nhau ñoâi chuùt, nhöng veà coâng duïng thì nhö nhau vaø töông thích vôùi nhau.
Hieän nay chöông trình dòch ñöôïc nhieàu ngöôøi söû duïng nhaát laø Macro Assembler 5.0 vaø chöông trình giao tieáp trong luaän aùn naøy cuõng söû duïng chöông
trình dòch naøy.
3. Löu ñoà vaø chöông trình giao tieáp
Phaàn meàm giao tieáp trong maùy tính söû duïng ngoân ngöõ Assembly treân cô sôû söû duïng File.Hex vaø xöû lyù töøng kyù töï. Coøn phaàn meàm giao tieáp trong KIT ñöôïc vieát baèng ngoân ngöõ cuûa 8951.
¨ Xöû lyù File
File xuaát ra ngoaøi ñöôïc löu tröõ trong maùy döôùi daïng File.Hex.
Caáu truùc moãi doøng cuûa File.Hex:
: NNAAAARRHHHHHHHHHH . . . HHHCCTT
Trong ñoù :
: Baét ñaàu doøng
NN Soá löôïng byte chöông trình trong doøng
AAAA Ñòa chæ cuûa byte ñaàu tieân
RR Kieåu Recort :00 , ôû doøng ñaàu tieân 01
HH Caùc byte chöông trình trong khuoân maãu Hex
CC Toång kieåm tra trong khuoân maãu Hex
TT Keát thuùc doøng CR vaø LF
Toång kieåm tra ñöôïc hình thaønh töø toång cuûa taát caû caùc byte töø NN ñeán byte cuoái cuøng cuûa chöông trình HH.
CC = [0 – ( Toång taát caû caùc byte NN ñeán HH )] vaø FFH
Nhöng khi truyeàn ra ngoaøi thì döõ lieäu xuaát ra döôùi daïng maõ cuûa phím aán, maø chöông trình nhaän döõ lieäu cuûa KIT thì nhaän döõ lieäu vaøo döôùi daïng Hex. Do ñoù, chöông trình truyeàn phaûi coù ñoaïn xöû lyù File ñeå beân truyeàn vaø beân nhaän thoáng nhaát vôùi nhau.
VD: ta coù File HIEU.HEX
:10000000230039140C23FF39140C04BF13FEB26E6 :1000110022FEEFAC1435F6E7ABAFBEAA34616E6
:0000001FF
Sau khi xöû lyù vaø truyeàn ra ngoaøi File.Hex coù daïng :
:100000230039140C23FF39140C04BF13FEB26 :10001122FEEFAC1435F6E7ABAFBEAA34616
:0000001FF
Trong File.Hex coù maõ baét ñaàu doøng luoân laø 3A (:) , soá kyù töï caàn truyeàn trong moät doøng vaø ñòa chæ caàn löu tröõ döõ lieäu. Do ñoù, trong chöông triønh nhaän phaûi phaân bieät taát caû caùc caáu truùc cuûa File.Hex ñeå nhaän döõ lieäu vaø löu tröõ vaøo ñuùng oâ nhôù.
3.1. Giao tieáp giöõa KIT vôùi KIT:
Löu ñoà chöông trình nhaän döõ lieäu töø KIT
BEGIN
Khôûi ñoäng port noái tieáp
Naïp ñòa chæ quaûn lyù vuøng data
ñeå truyeàn
TI = 1
TI = 0
Löu ñoà chöông trình truyeàn döõ lieäu
Truyeàn data
Kieåm tra bit TI sau khi truyeàn
Xoùa bit TI
Taêng ñòa chæ quaûn lyù data truyeàn
Naïp bieán ñeám data truyeàn
Giaûm bieán ñeám
S
So saùnh bieán ñeám vôùi FF
Ñ
END
Khôûi ñoäng port noái tieáp
Naïp ñòa chæ quaûn lyù vuøng data
ñeå nhaän
Nhaän data
Kieåm tra bit RI sau khi nhaän
RI = 0
RI=1
Xoùa bit RI
Taêng ñòa chæ quaûn lyù vuøng data nhaän
Naïp bieán ñeám data nhaän
Giaûm bieán ñeám
So saùnh bieán ñeám vôùi FF
BEGIN
Löu ñoà chöông trình truyeàn döõ lieäu töø KIT
END
S
Ñ
¨ Chöông trình truyeàn döõ lieäu töø KIT
org 5100h
mov ie,#00h ; caám ngaét
mov tmod,#20h ; timer mode 2, 2400baud
mov th1,#-13
setb tr1
mov scon,#0fch
mov dptr,#6000h ; naïp ñòa chæ quaûn lyù vuøng maõ
x2: mov a,@dptr ; laáy döõ lieäu ñeå truyeàn ñi
mov sbuf,a ; göûi döõ lieäu leân thanh ghi ñeäm
x1: jnb ti,x1 ; kieåm tra bit ti sau khi göûi
clr ti
inc dptr
mov a,dpl
cjne a,#0ffh,x2
mov a,#76h ; naïp maõ chöõ H ñeå baùo keát thuùc
mov dptr,#0c000h
movx @dptr,a
sjmp $
¨ Chöông trình nhaän döõ lieäu töø KIT
org 5100h
mov ie,#00h ; caám ngaét
mov tmod,#20h ; timer mode 2, 2400baud
mov th1,#-13
setb tr1
mov scon,#0fch
mov dptr,#6000h ; naïp ñòa chæ quaûn lyù vuøng maõ
xr1: jnb ri,xr1
clr ri
mov a,sbuf ; göûi döõ lieäu leân thanh ghi ñeäm
movx @dptr,a
inc dptr
mov a,dpl
cjne a,#0ffh,xr1
mov a,#76h ; naïp maõ chöõ H ñeå baùo keát thuùc
mov dptr,#0c000h
movx dptr,a
sjmp $
¨Löu ñoà chöông trình truyeàn döõ lieäu coù giôùi haïn soá byte vaø ñòa chæ quaûn lyù data:
BEGIN
Khôûi taïo giao tieáp noái tieáp
Naïp ñòa chæ quaûn lyù vuøng data ñeå truyeàn
Laáy döõ lieäu töø oâ nhôù naïp vaøo thanh ghi
laøm bieán ñeám
Laáy ñòa chæ byte H naïp vaøo thanh ghi R1
Laáy ñòa chæ byte L naïp vaøo thanh ghi R0
Göûi bieán ñeám ra sbuf ñeå truyeàn
Kieåm tra bit TI
TI=0
TI=1
Xoùa bit TI
Göûi byte ñòa chæ H ra sbuf ñeå truyeàn
Kieåm tra bit TI
TI=0
TI=1
Xoùa bit TI
TI=1
TI=0
Kieåm tra bit TI
Göûi ñòa chæ byte L ra sbuf ñeå truyeàn
Xoùa bit TI
Naïp ñòa chæ byte H vaø L vaøo dptr
Laáy döõ lieäu chöùa trong dptr ñeå truyeàn
Kieåm tra bit TI
TI=0
TI=1
Xoùa bit TI
Taêng ñòa chæ quaûn lyù dptr
Giaûm bieán ñeám
So saùnh bieán ñeám vôùi 00H
S
Ñ
Hieån thò chöõ E ñeå baùo keát thuùc
END
¨Löu ñoà chöông trình nhaän döõ lieäu coù giôùi haïn soá byte vaø ñòa chæ quaûn lyù data:
BEGIN
Khôûi taïo giao tieáp noái tieáp
Kieåm tra bit RI
RI=0
RI=1
Xoùa bit RI
Nhaän döõ lieäu vaø göûi ra thanh ghi R6
laøm bieán ñeám
Kieåm tra bit RI
RI=1
RI=0
Xoùa bit RI
Nhaän döõ lieäu vaø löu tröõ vaøo dph
Kieåm tra bit RI
RI=0
RI=1
Xoùa bit RI
END
Hieån thò chöõ E ñeå baùo keát thuùc
Ñ
S
So saùnh bieán ñeám vôùi 00H
Giaûm bieán ñeám
Taêng dptr
Nhaän döõ lieäu vaø löu tröõ vaøo oâ nhôù coù
chöùa trong dptr
Xoùa bit RI
RI=1
RI=0
Kieåm tra bit RI
Nhaän döõ lieäu vaø löu tröõ vaøo dpl
¨Chöông trình truyeàn döõ lieäu coù giôùi haïn soá byte vaø ñòa chæ quaûn lyù data
;vung nho 6000h chua bien dem se goi,6001H chua byte addr H ,6002H chua byte L
pcon equ 87h
org 4100h
mov IE,#00h
mov scon,#11011100b ;mode3, 2400baud
mov tmod,#20h
mov th1,#-13
setb tr1 ;start timer 1
mov dptr,#6000h ;nap dia chi quan li vung ma
movx a,@dptr ;lay so luong byte se goi
mov r6,a ;cat sang r6
inc dptr
movx a,@dptr ;lay dia chi byte H quan li du lieu
mov r1,a
inc dptr
movx a,@dptr ;lay dia chi byte L quan li du lieu
mov r0,a
x4: jb P1.1,x4
mov a,r6
mov sbuf,a ;goi so luong byte di truoc
x5: jnb TI,x5 ;kiem tra Ti = 1
clr TI ;xoa TI de goi byte ke
x6: jb P1.1,x6
mov a,r1
mov sbuf,a ;goi dia chi byte cao
x7: jnb TI,x7
clr TI
x8: jb P1.1,x8
mov a,r6
mov sbuf,a ;goi dia chi byte thap
x9: jnb TI,x9
clr TI
mov dpl,r0 ;nap dia chi cho dptr
mov dph,r1
x3: jb P1.1,x3
x2: movx a,@dptr ;lay du lieu de truyen di
mov sbuf,a ;goi len thanh ghi dem
x1: jnb TI,x1 ;kiem tra ti vi sau khi goi 1 byte thi ti=1
clr ti ;neu dung bang 1 thi xoa de goi tiep byte thu 2
inc dptr
djnz r6,x3 ;giam bien dem di 1
mov dptr,#0c000h
mov a,#79h
movx @dptr,a
sjmp $
¨Chöông trình nhaän döõ lieäu coù giôùi haïn soá byte vaø ñòa chæ quaûn lyù data
org 4100h
mov IE,#00h
setb p1.1 ;chua cho phep nhan
mov scon,#11011100b ;khoi tao giao tiep noi tiep
mov tmod,#20h ;khoi tao giao tiep noi tiep
mov th1,#-13 ;khoi tao giao tiep noi tiep
setb tr1 ;start timer 1
xr6: clr p1.1 ;cho phep truyen
xr1: jnb ri,xr1 ;kiem tra xem co du lieu hay khong
setb p1.1
clr ri ;xoa vi da co du lieu
mov a,sbuf ;lay du lieu tu may phat goi toi
cjne a,#0FFh,xr2
sjmp xr1
xr2: mov r6,a ;luu tru so byte nhan
clr p1.1 ;cho phep truyen
xr3: jnb ri,xr3 ;kiem tra xem co du lieu hay khong
setb p1.1
clr ri ;xoa vi da co du lieu
mov a,sbuf ;lay du lieu tu may phat goi toi
mov dph,a
clr p1.1 ;cho phep truyen
xr5: jnb ri,xr5 ;kiem tra xem co du lieu hay khong
setb p1.1
clr ri ;xoa vi da co du lieu
mov a,sbuf ;lay du lieu tu may phat goi toi
mov dpl,a
xr4: clr p1.1
jnb ri,xr2 ;kiem tra xem co du lieu hay khong
setb p1.1
clr ri ;xoa vi da co du lieu
mov a,sbuf ;lay du lieu tu may phat goi toi
movx @dptr,a ;cat du lieu
inc dptr
djnz r6,xr4 ;giam bien dem
mov dptr,#0c000h
mov a,#79h
movx @dptr,a
sjmp xr6 ;quay tro lai de nhan byte du lieu ke
end
3.2. Giao tieáp giöõa KIT vaø maùy tính:
BEGIN
¨Löu ñoà chöông trình nhaän döõ lieäu töø maùy tính:
Khôûi taïo giao tieáp noái tieáp
Kieåm tra bit RI
RI=1
RI=0
Xoùa bit RI
Nhaän data töø sbuf vaøo R0
Kieåm tra bit RI
RI=1
RI=0
Xoùa bit RI
Nhaän data töø sbuf vaøo R1 laøm bieán ñeám
Kieåm tra bit RI
RI=1
RI=0
Xoùa bit RI
Nhaän data töø sbuf vaøo dph
Kieåm tra bit RI
RI=0
RI=1
Xoùa bit RI
Nhaän data töø sbuf vaøo dpl
Kieåm tra bit RI
RI=0
Xoùa bit RI
RI=1
Nhaän data töø sbuf vaøo thanh ghi A
Laáy noäi dung cuûa thanh ghi A göûi vaøo
oâ nhôù coù ñòa chæ chöùa trong dptr
Taêng dptr
Giaûm bieán ñeám vaø
so saùnh vôùi 00H
Ñ
S
Nhaûy veà begin
END
¨ Chöông trình nhaän döõ lieäu töø maùy tính:
org 5000h
mov ie,#00h
mov tmod,#20h
mov th1,#-13
setb tr1
mov scon,#0fch
xr1: jnb ri,xr1 ;nhan ma dau ':'
clr ri
mov r0,sbuf
cjne r0,#3ah,xr1
xr2: jnb ri,xr2 ;nhan so byte can goi
clr ri
mov r1,sbuf
xr3: jnb ri,xr3
clr ri
mov dph,sbuf
xr4: jnb ri,xr4
clr ri
mov dpl,sbuf
xr5: jnb ri,xr5
clr ri
mov a,sbuf
movx @dptr,a
inc dptr
djnz r1,xr5
sjmp xr1
end
¨löu ñoà chöông trình truyeàn döõ lieäu töø maùy tính:
BEGIN
F8
F7
F6
Hieån thò caùch thieát laäp truyeàn
Ñaët caùch thöùc truyeàn
F5
Kieåm tra phím aán
Hieån thò Menu
Khai baùo caùc bieán
Môû File.Hex ñeå truyeàn
Hieån thò File.Hex
leân maøn hình
Xöû lyù File.Hex
vaø truyeàn
END
III. Ñaùnh giaù keát quaû thi coâng:
Vôùi söï phaùt trieån ñeán möùc tieân tieán cuûa KHKT nhö hieän nay, ñaëc bieät laø lónh vöïc ñieän töû vaø vi tính ñaõ laøm tieàn ñeà cho moïi ngaønh khoa hoïc khaùc deã daøng phaùt trieån – söï phaùt trieån vuõ baõo ñoù luoân ñeo ñuoåi hoaøi baûo duy nhaát – phuïc vuï con ngöôøi. Keát quaû, moãi öùng duïng trong cuoäc soáng con ngöôøi luoân saün saøng thöøa höôûng nhöõng tinh hoa ñoù, nhaèm naâng cao naêng suaát lao ñoäng, naâng cao cuoäc soáng con ngöôøi, khoâng ngöøng thuùc ñaåy xaõ hoäi veà moïi maët.
Ñeå tieáp caän vôùi lónh vöïc töï ñoäng hoaù, ñaëc bieät laø lónh vöïc truyeàn döõ lieäu neân em baét ñaàu nghieân cöùu lónh vöïc naøy vaø thöïc hieän ñeà taøi :”Giao Tieáp Giöõa KIT Vi Ñieàu Khieån 8951 vaø Maùy Vi Tính” vôùi nhöõng thaønh quaû nhaát ñònh trong thi coâng:
_ Vieát chöông trình giao tieáp giöõa KIT Vi Ñieàu Khieån 8951 vaø Maùy Vi Tính.
_ Thieát keá card giao tieáp giöõa KIT Vi Ñieàu Khieån 8951 vaø Maùy Vi Tính thoâng qua port giao tieáp noái tieáp.
Ngoaøi ra coøn coù chöông trình truyeàn vaø nhaän döõ lieäu giöõa 2 KIT. Maëc duø ñaõ coá gaéng nhieàu vaãn khoâng traùnh ñöôïc nhöõng thieáu soùt: chöa hoaøn thaønh ñöôïc chöông trình truyeàn döõ lieäu töø KIT sang vaø chöông trình giao dieän ñieàu khieån coøn raát ñôn giaûn.
Ñaây laø laàn ñaàu tieân tieán haønh thi coâng vôùi chöông trình giao tieáp khaù phöùc taïp, neân yù muoán hoaøn chænh ñeán möùc toái öu nhöng vaãn chöa ñaït ñöôïc. Tuy nhieân, keát quaû thi coâng vaãn ñaït ñöôïc nhöõng yeâu caàu nhaát ñònh.
KEÁT LUAÄN
Qua 8 tuaàn tieán haønh laøm vieäc vôùi söï noã löïc cuûa baûn thaân vaø kieán thöùc ñöôïc trang bò ôû nhaø tröôøng, caùc kieán thöùc thöïc teá maø em hoïc hoûi ñöôïc nhôø söï giuùp ñôõ cuûa caùc thaày coâ trong khoa ñieän cuøng vôùi söï giuùp ñôõ taän tình cuûa thaày: Nguyeãn Ñình Phuù neân em ñaõ hoaøn thaønh taäp luaän vaên naøy ñuùng thôøi gian quy ñònh vaø thu ñöôïc nhöõng keát quaû nhaát ñònh:
_ Thieát keá card giao tieáp giöõa maùy tính vaø Vi Ñieàu Khieån.
_ Vieát chöông trình cho Vi Ñieàu Khieån vaø maùy tính ñeå giao tieáp giöõa hai heä thoáng.
Ñaây laø laàn ñaàu tieân thöïc hieän ñeà taøi vôùi quy moâ roäng, nhöng do thôøi gian, kieán thöùc vaø kinh nghieäm coøn nhieàu haïn cheá neân em nhaän thaáy raèng taäp luaän vaên naøy chöa ñaùp öùng ñaày ñuû nhu caàu ñeà taøi ra … Do ñoù, em mong raèng vôùi söï thieáu soùt treân, em seõ nhaän ñöôïc söï thoâng caûm vaø chæ daãn theâm cuûa quyù thaày coâ trong khoa Ñieän cuøng giaùo vieân höôùng daãn.
Em xin chaân thaønh caûm ôn söï giuùp ñôõ taän tình vaø quyù baùo cuûa caùc thaày coâ ñaõ taïo ñieàu kieän cho em hoaøn thaønh toát nhieäm vuï ñöôïc giao ñuùng thôøi gian quy ñònh.
Em raát mong söï ñoùng goùp yù kieán cuûa quyù thaày coâ cuøng caùc baïn sinh vieân ñeå taäp luaän vaên ñöôïc hoaøn haûo hôn.
HÖÔÙNG PHAÙT TRIEÅN ÑEÀ TAØI
Ngaøy nay vôùi söï phaùt trieån nhanh choùng cuûa khoa hoïc kyõ thaät vaø ñaát nöôùc ta ñang chuyeån mình sang neàn saûn xuaát coâng nghieäp. Do ñoù, ñeå ñaùp öùng vôùi nhu caàu thöïc teá thì chuùng ta caàn phaûi nghieân cöùu theâm caùc loaïi giao dieän noái tieáp khaùc ñeå taêng theâm ñöôïc khoaûng caùch vaø toác ñoä truyeàn. Ngoaøi ra, coøn coù theå döïa treân taäp luaän aùn naøy ñeå vieát theâm nhieàu chöông trình khaùc coù theå öùng duïng trong thöïc teá vaø caûi tieán laïi chöông trình naøy ñeå tieän lôïi cho ngöôøi söû duïng …
TAØI LIEÄU THAM KHAÛO
1. ÑO LÖÔØNG VAØ ÑIEÀU KHIEÅN BAÈNG MAÙY VI TÍNH
Ngoâ Dieän Taäp _ NXB KHKT Haø Noäi _ 1996
ÑIEÀU KHIEÅN VAØ GHEÙP NOÁI CAÙC THIEÁT BÒ NGOAÏI VI
Traàn Baù Thaùi _ NXB KHKT Haø Noäi _ 1984
KYÕ THUAÄT GHEÙP NOÁI MAÙY VI TÍNH
Nguyeãn Maïnh Giang _ NXB GD Haø Noäi _1997
GIAÙO TRÌNH HÔÏP NGÖÕ
Ñaïi Hoïc Môû Baùn Coâng TPHCM _ 1995
TRUYEÀN DÖÕ LIEÄU
Toáng Vaên On _ ÑH KYÕ THUAÄT TPHCM _ 1999
VI XÖÛ LYÙ TRONG ÑO LÖÔØNG VAØ ÑIEÀU KHIEÅN
Ngoâ Dieän Taäp _ NXB KHKT Haø Noäi _ 1996
KYÕ THUAÄT VI XÖÛ LYÙ
Vaên Theá Minh _ NXB GD _ 1997
ASSEMBLY LANGUAGE TOOLS and TECHNIQUES FOR
THE IPM MICROCOMPUTERS
Julio Sanches _ Prentice Hall _ 1990
MICROCOMPUTER INTERFACING
Bruce A.Artwick _ Prentice Hall _ 1980
THE 8051 MICROCONTROLLER
I.Scott Mackenzic
PHAÀN C:
TOÙM TAÉT TAÄP LEÄNH CUÛA VXL 8051 – 8951 – 8952:
Data Transfer Instructions.
Mnemonic
Instruction code
Hexa
decimal
Explanation
D7 D6 D5 D4 D3 D2 D1 D0
MOV A, Rn
1 1 1 0 1 n2 n1 n0
E8 ¸ EF
(A) ¬ (Rn)
MOV A, direct
1 1 1 0 0 1 0 1
a7 a6 a5 a4 a3 a2 a1 a0
E5
Byte 2
(A) ¬ (direct)
MOV A, @Ri
1 1 1 0 0 1 1 I
E6 ¸ E7
(A) ¬ ((Ri))
MOV A, #data
0 1 1 1 0 1 0 0
d7 d6 d5 d4 d3 d2 d1 d0
74
Byte 2
(A) ¬ #data
MOV Rn, A
1 1 1 1 1 n2 n1 n0
F8 ¸ FF
(Rn) ¬ (A)
MOV Rn, direct
1 0 1 0 1 n2 n1 n0
a7 a6 a5 a4 a3 a2 a1 a0
A8 ¸ AF
Byte 2
(Rn) ¬ (direct)
MOV Rn, #data
0 1 1 1 1 n2 n1 n0
d7 d6 d5 d4 d3 d2 d1 d0
78 ¸ 7F
Byte 2
(Rn) ¬ #data
MOV direct, A
1 1 1 1 0 1 0 1
a7 a6 a5 a4 a3 a2 a1 a0
F5
Byte 2
(direct) ¬ (A)
MOV direct, Rn
1 0 0 0 1 n2 n1 n0
a7 a6 a5 a4 a3 a2 a1 a0
88 ¸ 8F
Byte 2
(direct) ¬ (Rn)
MOV direct, direct
1 0 0 0 0 1 0 1
a7 a6 a5 a4 a3 a2 a1 a0
a7 a6 a5 a4 a3 a2 a1 a0
88 ¸ 8F
Byte 2
Byte 3
(direct) ¬ (direct)
(source)
(destination)
MOV direct, @Ri
1 0 0 0 0 1 1 I
a7 a6 a5 a4 a3 a2 a1 a0
86 ¸ 87
Byte 2
(direct) ¬ ((Ri))
MOV direct, #data
0 1 1 1 0 1 0 1
a7 a6 a5 a4 a3 a2 a1 a0
d7 d6 d5 d4 d3 d2 d1 d0
75
Byte 2
Byte 3
(direct) ¬ #data
MOV @Ri, A
1 1 1 1 0 1 1 I
F6 ¸ F7
((Ri)) ¬ (A)
MOV @Ri, direct
1 0 1 0 0 1 1 I
a7 a6 a5 a4 a3 a2 a1 a0
A6 ¸ A7
Byte 2
((Ri)) ¬ (direct)
MOV @Ri, #data
0 1 1 1 0 1 1 i
d7 d6 d5 d4 d3 d2 d1 d0
76 ¸ 77
Byte 2
((Ri)) ¬ (data)
MOV dptr, #data 16
1 0 0 1 0 0 0 0
d15 d14 d13 d12 d11 d10 d9 d8
d7 d6 d5 d4 d3 d2 d1 d0
75
Byte 2
Byte 3
(dptr) ¬ #data 15-0
(dpH) ¬ #data 15-8
(dpL) ¬ #data 7-0
MOVC A, @A + dptr
1 0 0 1 0 0 1 1
93
¬ ((A) + (dptr)) External Ram
MOVC A, @A + PC
1 0 0 0 0 0 1 1
83
(A) ¬ ((A) + (PC)) External Ram
MOVX A, @Ri
1 1 1 0 0 0 1 i
E2 ¸ E3
(A)¬((Ri)) External Ram
MOVX A, @ dptr
1 1 1 0 0 0 0 0
93
(A)¬((dptr)) External Ram
MOVX @Ri, A
1 1 1 1 0 0 1 i
F2 ¸ F3
((Ri)) ¬ (A)
MOVX @ dptr, A
1 1 1 1 0 0 0 0
F0
((dptr)) ¬ (A)
PUSH direct
1 1 0 0 0 0 0 0
a7 a6 a5 a4 a3 a2 a1 a0
C0
Byte 2
(SP) ¬ (SP) + 1
((SP)) ¬ (direct)
POP direct
1 1 0 1 0 0 0 0
a7 a6 a5 a4 a3 a2 a1 a0
D0
Byte 2
(direct) ¬ ((SP))
(SP) ¬ (SP) – 1
XCH A, Rn
1 1 0 0 1 n2 n1 n0
C8 ¸ CF
(direct) « (Rn)
XCH A, direct
1 1 0 0 0 1 0 1
a7 a6 a5 a4 a3 a2 a1 a0
C5
Byte 2
(A) « (direct)
XCH A, @Ri
1 1 0 0 0 1 1 i
C6 ¸ C7
(A) « ((Ri))
XCHD A, @Ri
1 1 0 1 0 1 1 i
D6 ¸ D7
(A3-0) « ((Ri3-0))
Mathematical (Arithmetic) Instructions.
Mnemonic
Instruction code
Hexa
decimal
Explanation
D7 D6 D5 D4 D3 D2 D1 D0
ADD A, Rn
0 0 1 0 1 n2 n1 n0
28 ¸ 2F
(A) ¬ (A) + (Rn)
ADD A, direct
0 0 1 0 0 1 0 1
a7 a6 a5 a4 a3 a2 a1 a0
25
Byte 2
(A) ¬ (A) + (direct)
ADD A, @Ri
0 0 1 0 0 1 1 I
26 ¸ 27
(A) ¬ (A) + ((Ri))
ADD A, #data
0 0 1 0 0 1 0 0
d7 d6 d5 d4 d3 d2 d1 d0
24
Byte 2
(A) ¬ (A) + #data
ADDC A, Rn
0 0 1 1 1 n2 n1 n0
38 ¸ 3F
(A) ¬ (A) + (Rn) + (C)
ADDC A, direct
0 0 1 1 0 1 0 1
a7 a6 a5 a4 a3 a2 a1 a0
35
Byte 2
(A) ¬ (A) + (direct) + (C)
ADDC A, @Ri
0 0 1 1 0 1 1 I
36 ¸ 37
(A) ¬ (A) + ((Ri)) + (C)
ADDC A, #data
0 0 1 1 0 1 0 0
d7 d6 d5 d4 d3 d2 d1 d0
34
Byte 2
(A) ¬ (A) + #data +(C)
SUBB A, Rn
1 0 0 1 1 n2 n1 n0
98 ¸ 9F
(A) ¬ (A) - (Rn) - (C)
SUBB A, direct
1 0 0 1 0 1 0 1
a7 a6 a5 a4 a3 a2 a1 a0
95
Byte 2
(A) ¬ (A) - (direct) - (C)
SUBB A, @Ri
1 0 0 1 0 1 1 I
96 ¸ 97
(A) ¬ (A) - ((Ri)) - (C)
SUBB A, #data
1 0 0 1 0 1 0 0
d7 d6 d5 d4 d3 d2 d1 d0
94
Byte 2
(A) ¬ (A) - #data -(C)
INC A
0 0 0 0 0 1 0 0
04
(A) ¬ (A) + 1
INC Rn
0 0 0 0 1 n2 n1 n0
08 ¸ 0F
(Rn) ¬ (Rn) + 1
INC direct
0 0 0 0 0 1 0 1
a7 a6 a5 a4 a3 a2 a1 a0
05
Byte 2
(direct) ¬ (direct) + 1
INC @Ri
0 0 0 0 0 1 1 I
06 ¸ 07
((Ri)) ¬ ((Ri)) + 1
INC dptr
1 0 1 0 0 0 1 1
A3
(dptr) ¬ (dptr) + 1
DEC A
0 0 0 1 0 1 0 0
14
(A) ¬ (A) - 1
DEC Rn
0 0 0 1 1 n2 n1 n0
18 ¸ 1F
(Rn) ¬ (Rn) - 1
DEC direct
0 0 0 1 0 1 0 1
a7 a6 a5 a4 a3 a2 a1 a0
15
Byte 2
(direct) ¬ (direct) - 1
DEC @Ri
0 0 0 1 0 1 1 I
16 ¸ 17
((Ri)) ¬ ((Ri)) - 1
MUL AB
1 0 1 0 0 1 0 0
A4
(B15-8),(A7-0) ¬ (A)´(B)
DIV AB
1 0 0 0 0 1 0 0
84
(A15-8),(B7-0) ¬ (A)/(B)
DA A
1 1 0 1 0 1 0 0
D4
Content of A laø BCD
Logic Instructions.
Mnemonic
Instruction code
Hexa
decimal
Explanation
D7 D6 D5 D4 D3 D2 D1 D0
ANL A, Rn
0 1 0 1 1 n2 n1 n0
58 ¸ 5F
(A) ¬ (A) AND (Rn)
ANL A, direct
0 1 0 1 0 1 0 1
a7 a6 a5 a4 a3 a2 a1 a0
55
Byte 2
(A) ¬ (A) AND (direct)
ANL A, @Ri
0 1 0 1 0 1 1 I
56 ¸ 57
(A) ¬ (A) AND ((Ri))
ANL A, #data
0 1 0 1 0 1 0 0
d7 d6 d5 d4 d3 d2 d1 d0
54
Byte 2
(A) ¬ (A) AND #data
ANL direct, A
0 1 0 1 0 0 1 0
a7 a6 a5 a4 a3 a2 a1 a0
52
Byte 2
(direct)¬(direct) and (A)
ANL direct, #data
0 1 0 1 0 0 1 1
a7 a6 a5 a4 a3 a2 a1 a0
d7 d6 d5 d4 d3 d2 d1 d0
53
Byte 2
Byte 3
(direct)¬(direct) and #data
ORL A, Rn
0 1 0 0 1 n2 n1 n0
48 ¸ 4F
(A) ¬ (A) OR (Rn)
ORL A, direct
0 1 0 0 0 1 0 1
a7 a6 a5 a4 a3 a2 a1 a0
45
Byte 2
(A) ¬ (A) OR (direct)
ORL A, @Ri
0 1 0 0 0 1 1 I
46 ¸ 47
(A) ¬ (A) OR ((Ri))
ORL A, #data
0 1 0 0 0 1 0 0
d7 d6 d5 d4 d3 d2 d1 d0
44
Byte 2
(A) ¬ (A) OR #data
ORL direct, A
0 1 0 0 0 0 1 0
a7 a6 a5 a4 a3 a2 a1 a0
42
Byte 2
(direct)¬(direct) OR (A)
ORL direct, #data
0 1 0 0 0 0 1 1
a7 a6 a5 a4 a3 a2 a1 a0
d7 d6 d5 d4 d3 d2 d1 d0
43
Byte 2
Byte 3
(direct)¬(direct) OR #data
XRL A, Rn
0 1 1 0 1 n2 n1 n0
68 ¸ 6F
(A) ¬ (A) XOR (Rn)
XRL A, direct
0 1 1 0 0 1 0 1
a7 a6 a5 a4 a3 a2 a1 a0
65
Byte 2
(A) ¬ (A) XOR (direct)
XRL A, @Ri
0 1 1 0 0 1 1 I
66 ¸ 67
(A) ¬ (A) XOR ((Ri))
XRL A, #data
0 1 1 0 0 1 0 0
d7 d6 d5 d4 d3 d2 d1 d0
64
Byte 2
(A) ¬ (A) XOR #data
XRL direct, A
0 1 1 0 0 0 1 0
a7 a6 a5 a4 a3 a2 a1 a0
62
Byte 2
(direct)¬(direct) XOR (A)
XRL direct, #data
0 1 1 0 0 0 1 1
a7 a6 a5 a4 a3 a2 a1 a0
d7 d6 d5 d4 d3 d2 d1 d0
63
Byte 2
Byte 3
(direct)¬(direct) XOR #data
CLR A
1 1 1 0 0 1 0 0
E4
(A) ¬ 0
CPL A
1 1 1 1 0 1 0 0
F4
(A) ¬ (`A)
RL A
0 0 1 0 0 0 1 1
23
The contents of the accumulator are rotated left by one bit.
RLC A
0 0 1 1 0 0 1 1
33
The contents of the accumulator and carry are rotated left by one bit.
RR A
0 0 0 0 0 0 1 1
03
The contents of the accumulator are rotated right by one bit.
RRC A
0 0 0 1 0 0 1 1
13
The contents of the accumulator and carry are rotated right by one bit.
SWAP A
1 1 0 0 0 1 0 0
C4
(A3-0) « (A7-4)
Control Transfer Instructions.
Mnemonic
Instruction code
Hexa
decimal
Explanation
D7 D6 D5 D4 D3 D2 D1 D0
ACALL addr 11
A10 a9 a8 1 0 0 0 1
a7 a6 a5 a4 a3 a2 a1 a0
Byte 1
Byte 2
(PC) ¬ (PC) + 2
(SP) ¬ (SP) + 1
((SP)) ¬ (PC7-0)
(SP) ¬ (SP) + 1
((SP)) ¬ (PC15-8)
(PC) ¬ page address
LCALL addr 16
0 0 0 1 0 0 1 0
a15 a14 a13 a12 a11 a10 a9 a8
a7 a6 a5 a4 a3 a2 a1 a0
12
Byte 2
Byte 3
(PC) ¬ (PC) + 3
(SP) ¬ (SP) + 1
((SP)) ¬ (PC7-0)
(SP) ¬ (SP) + 1
((SP)) ¬ (PC15-8)
(PC) ¬ addr15-0
RET
0 0 1 0 0 0 1 0
22
(PC15-8) ¬ ((SP))
(SP) ¬ (SP) - 1
(PC7-0) ¬((SP))
(SP) ¬ (SP) - 1
RETI
0 0 1 1 0 0 1 0
32
(PC15-8) ¬ ((SP))
(SP) ¬ (SP) - 1
(PC7-0) ¬((SP))
(SP) ¬ (SP) - 1
AJMP addr 11
a10 a9 a8 0 0 0 0 1
a7 a6 a5 a4 a3 a2 a1 a0
Byte 1
Byte 2
(PC) ¬ (PC) + 2
(PC) ¬ page address
LJMP addr 16
0 0 0 0 0 0 1 0
a15 a14 a13 a12 a11 a10 a9 a8
a7 a6 a5 a4 a3 a2 a1 a0
02
Byte 2
Byte 3
(PC) ¬ addr15-0
SJMP rel
1 0 0 0 0 0 0 0
r7 r6 r5 r4 r3 r2 r1 r0
80
Byte 2
(PC) ¬ (PC) + 2
(PC) ¬ (PC) + rel
JMP @A + dptr
0 1 1 1 0 0 1 1
73
(PC) ¬ (A) + (dptr)
JZ rel
0 1 1 0 0 0 0 0
r7 r6 r5 r4 r3 r2 r1 r0
60
Byte 2
(PC) ¬ (PC) + 2
IF (A) = 0 then (PC)¬(PC) + rel
JNZ rel
0 1 1 1 0 0 0 0
r7 r6 r5 r4 r3 r2 r1 r0
70
Byte 2
(PC) ¬ (PC) + 2
IF (A) ¹ 0 then (PC)¬(PC) + rel
JC rel
0 1 0 0 0 0 0 0
r7 r6 r5 r4 r3 r2 r1 r0
40
Byte 2
(PC) ¬ (PC) + 2
IF (C) = 0 then (PC)¬(PC) + rel
JNC rel
0 1 0 1 0 0 0 0
r7 r6 r5 r4 r3 r2 r1 r0
50
Byte 2
(PC) ¬ (PC) + 2
IF (C) ¹ 0 then (PC)¬(PC) + rel
JB bit, rel
0 0 1 0 0 0 0 0
b7 b6 b5 b4 b3 b2 b1 b0
r7 r6 r5 r4 r3 r2 r1 r0
20
Byte 2
Byte 3
(PC) ¬ (PC) + 3
IF (bit)=0 then (PC)¬(PC) + rel
JNB bit, rel
0 0 1 1 0 0 0 0
b7 b6 b5 b4 b3 b2 b1 b0
r7 r6 r5 r4 r3 r2 r1 r0
30
Byte 2
Byte 3
(PC) ¬ (PC) + 3
IF (bit)¹ 0 then (PC)¬(PC) + rel
JBC bit, rel
0 0 0 1 0 0 0 0
b7 b6 b5 b4 b3 b2 b1 b0
r7 r6 r5 r4 r3 r2 r1 r0
10
Byte 2
Byte 3
(PC) ¬ (PC) + 3
IF (bit)= 0 then (bit) ¬ 0
(PC)¬(PC) + rel
CJNE A, direct, rel
1 0 1 1 0 1 0 1
a7 a6 a5 a4 a3 a2 a1 a0
r7 r6 r5 r4 r3 r2 r1 r0
B5
Byte 2
Byte 3
(PC) ¬ (PC) + 3
IF (direct) < (A) then (C)¬0 and
(PC)¬(PC) + rel
IF (direct) > (A) then (C)¬1 and
(PC)¬(PC) + rel
CJNE A, #data, rel
1 0 1 1 0 1 0 0
d7 d6 d5 d4 d3 d2 d1 d0
r7 r6 r5 r4 r3 r2 r1 r0
B4
Byte 2
Byte 3
(PC) ¬ (PC) + 3
IF #data < (A) then (C)¬0 and
(PC)¬(PC) + rel
IF #data > (A) then (C)¬1 and
(PC)¬(PC) + rel
CJNE Rn,#data, rel
1 0 1 1 0 n2 n1 n0
d7 d6 d5 d4 d3 d2 d1 d0
r7 r6 r5 r4 r3 r2 r1 r0
B8 ¸ BF
Byte 2
Byte 3
(PC) ¬ (PC) + 3
IF #data < (Rn) then (C)¬0 and
(PC)¬(PC) + rel
IF #data > (Rn) then (C)¬1 and
(PC)¬(PC) + rel
CJNE @Ri,#data, rel
1 0 1 1 0 1 1 0
d7 d6 d5 d4 d3 d2 d1 d0
r7 r6 r5 r4 r3 r2 r1 r0
B6 ¸ B7
Byte 2
Byte 3
(PC) ¬ (PC) + 3
IF #data <((Ri)) then (C)¬0 and
(PC)¬(PC) + rel
IF #data >((Ri)) then (C)¬1 and
(PC)¬(PC) + rel
DJNZ Rn, rel
1 1 0 1 1 n2 n1 n0
r7 r6 r5 r4 r3 r2 r1 r0
D8 ¸ DF
Byte 2
(PC) ¬ (PC) + 2
(Rn) ¬ (Rn) – 1
IF ((Ri)) ¹ 0 then
(PC)¬(PC) + rel
DJNZ direct, rel
1 1 0 1 0 1 0 1
a7 a6 a5 a4 a3 a2 a1 a0
r7 r6 r5 r4 r3 r2 r1 r0
D5
Byte 2
Byte 3
(PC) ¬ (PC) + 3
(direct) ¬ (direct) – 1
IF (direct) ¹ 0 then
(PC)¬(PC) + rel
NOP
0 0 0 0 0 0 0 0
00
(PC) ¬ (PC) + 1
Bit Oriented Instructions.
Mnemonic
Instruction code
Hexa
decimal
Explanation
D7 D6 D5 D4 D3 D2 D1 D0
CLR C
1 1 0 0 0 0 1 1
C3
(C) ¬ 0
CLR bit
1 1 0 0 0 0 1 0
b7 b6 b5 b4 b3 b2 b1 b0
C2
Byte 2
(bit) ¬ 0
SETB C
1 1 0 1 0 0 1 1
D3
(C) ¬ 1
SETB bit
1 1 0 1 0 0 1 0
b7 b6 b5 b4 b3 b2 b1 b0
D2
Byte 2
(bit) ¬ 1
CPL C
1 0 1 1 0 0 1 1
B3
(C) ¬ (`C)
CPL bit
1 0 1 1 0 0 1 0
b7 b6 b5 b4 b3 b2 b1 b0
B2
Byte 2
(bit) ¬ (bit)
ANL C,bit
1 0 0 0 0 0 1 0
b7 b6 b5 b4 b3 b2 b1 b0
82
Byte 2
(C) ¬ (C) AND (bit)
ANL C,/bit
1 0 1 1 0 0 0 0
b7 b6 b5 b4 b3 b2 b1 b0
B0
Byte 2
(bit) ¬(C) AND (bit)
ORL C,bit
0 1 1 1 0 0 1 0
b7 b6 b5 b4 b3 b2 b1 b0
72
Byte 2
(C) ¬ (C) OR (bit)
ORL C,/bit
1 0 1 0 0 0 0 0
b7 b6 b5 b4 b3 b2 b1 b0
A0
Byte 2
(bit) ¬(C) OR (bit)
MOV C,bit
1 0 1 0 0 0 1 0
b7 b6 b5 b4 b3 b2 b1 b0
A2
Byte 2
(C) ¬ (bit)
MOV bit,C
1 0 0 1 0 0 1 0
b7 b6 b5 b4 b3 b2 b1 b0
92
Byte 2
(bit) ¬ (C)
CHÖÔNG TRÌNH TRUYEÀN DÖÕ LIEÄU TÖØ MAÙY TÍNH
; TERMINAL.ASM
; STACK
stack segment stack
db 300 dup('?')
stack ends
; DATA
data segment
prompt db 'File name:$'
filename db 30 dup(0)
buffer db 512 dup(0)
buffrr db 512 dup(0)
handle dw ?
openerr db 0dh,0ah,'OPEN ERROR - COPDE'
errcode db 30h,'$'
;messages
MENU_MS db ' **TERMINAL PROGRAM**',0dh,0ah
db ' to redisplay this MENU',0dh,0ah
db ' to set communications protocol',0dh,0ah
db ' to display protocol installed',0dh,0ah
db ' to open file.hex and trasnmit',0dh,0ah
db ' to exit the TERMINAL program',0dh,0ah
db 'All character typed are transmitter',0dh,0ah
db 'All character receiver are display',0dh,0ah
db 0dh,0ah,'$'
PROT_MS db '* Installed communications protocol',0dh,0ah
db 'Baud rate:'
Baud% db '2400',0dh,0ah
db 'Parity:'
Par% db 'Even',0dh,0ah
db 'Stop bit:'
Stop% db '1',0dh,0ah
db 'Word length:'
Word% db '8',0dh,0ah,0ah,'$'
Baud$$ db '110 150 300 600 1200 2400 4800 9600'
Par$$ db 'odd noneven'
baud_menu db 0dh,0ah,'**New communication parameter'
db 'rs input **',0dh,0ah
db 'baud rate:',0dh,0ah
db '1 = 110',0dh,0ah
db '2 = 150',0dh,0ah
db '3 = 300',0dh,0ah
db '4 = 600',0dh,0ah
db '5 = 1200',0dh,0ah
db '6 = 2400',0dh,0ah
db '7 = 4800',0dh,0ah
db '8 = 9600',0dh,0ah
db 'Select: $'
par_menu db 0dh,0ah,'Pariry:',0dh,0ah
db '1 = odd',0dh,0ah
db '2 = none',0dh,0ah
db '3 = even',0dh,0ah
db 'Select: $'
Stop_menu db 0dh,0ah,'Stop bit:',0dh,0ah
db '1 = 1 stop bit',0dh,0ah
db '2 = 2 stop bit',0dh,0ah
db 'Select: $'
Word_menu db 0dh,0ah,'Word length:',0dh,0ah
db '1 = 7 bit',0dh,0ah
db '2 = 8 bit',0dh,0ah
db 'Select: $'
err1_ms db 0dh,0ah,'*** cannot transmit ***',0dh,0ah
card_base dw 02f8h ;address of RS 232 card
inT_num db 0ch
setup_byte db 0bbh
;Origin
O_int_seg dw 0000h ;segment
O_int_off dw 0000h ;offset
;circular buffer and pointer:
circ_buf db 20 dup(00h)
dw 0
data_in dw 0 ;imput pointer
data_out dw 0 ;output pointer
data ends
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx CODE xxxxxxxxxxxxxxxxxx
code segment
assume CS:code
start:
mov ax,data
mov ds,ax
assume ds:data
mov es,ax
assume es:data
;display MENU at cursor
mov dx,offset menu_ms ;messages
call show_message
;hardware type
push ds
mov dx,0f000h
mov ds,dx
mov al,ds:[0fffeh] ;code to AL
;get addr of the RS232 card from BIOS data area
mov dx,0
mov ds,dx
mov cx,ds:0400h
pop ds
mov card_base,cx
;determine interrupt number:
; 0bh IRQ4 all other
cmp al,0fdh
jne set_address
mov int_num,0bh
;save/install interrupt
set_address:
mov ah,53
mov al,int_num
int 21h
mov o_int_seg,es
mov o_int_off,bx
mov ah,37
mov al,int_num
mov dx,offset cs:rs232_int
push ds
push cs
pop ds
int 21h
pop ds
;set protocol
mov al,10111011b
mov ah,0
mov dx,0
int 14h
call comm_on
call flush
monitor:
mov ah,1
int 16h
jz ser_imp
jmp char_typed
ser_imp:
sti ;interrupt on
mov cx,50
delay: nop
nop
loop delay
;test for new data received
cli
mov bx,data_out
cmp bx,data_in
jne new_data
sti
jmp monitor
;process char
char_typed:
mov ah,0
int 16h
;test for ,,, and keys
cmp ax,3b00h
jne test_f2
jmp show_menu ;F1 key pressed
test_f2:
cmp ax,3c00h
jne test_f3
jmp set_protocol ;F2 key pressed
test_f3:
cmp ax,3d00h
jne test_f4
jmp show_protocol ;F3 key pressed
test_f4:
cmp ax,3e00h
jne test_f9
jmp tran_file ;F4 key pressed
test_f9:
cmp ax,4300h
je dos_exit
jmp show_and_send ;F2 key pressed
dos_exit:
call comm_off
mov ah,37
mov al,int_num
mov dx,o_int_off
mov ax,o_int_seg
mov ds,ax
int 21h
;exit
mov ah,76
mov al,0
int 21h
;redisplay menu
show_menu:
mov dx,offset menu_ms
call show_message
jmp monitor
;new data receiver
new_data:
lea si,circ_buf
mov bx,data_out
add si,bx
mov al,byte ptr[si]
;update output pointer
inc bx
cmp bx,20
jne ok_out_ptr
mov bx,0
ok_out_ptr:
mov data_out,bx
sti
call tty
jmp monitor
set_protocol:
call comm_off
baud_rates:
mov dx,offset baud_menu
call show_message
call get_key
call tty
cmp al,'1'
jc baud_rates
cmp al,'9'
jnc baud_rates
sub al,30h ;ascii to binary
sub al,1 ;to range 0 to 7
push ax
mov cl,4
mul cl
mov si,offset baud$$
mov ah,0
add si,ax
mov di,offset baud%
mov cx,4
cld
push ds
pop es
rep movsb
pop ax
mov cl,5
shl al,cl
mov setup_byte,al
parity:
mov dx,offset par_menu
call show_message
call get_key
call tty
;valid input range is "1" to "3"
cmp al,'1'
jc parity
cmp al,'4'
jnc parity
;input is valid range
sub al,30h
push ax
;select 4 byte parity message and place in display area
sub al,1
mov al,4
mul cl
mov si,offset par$$
mov ah,0
add si,ax
mov di,offset par%
mov cx,4
cld
push ds
pop es
rep movsb
pop ax
mov cl,3
shl al,cl
or setup_byte,al
stopbits:
mov dx,offset stop_menu
call show_message
call get_key
call tty
;valid input range is "1" or "2"
cmp al,'1'
jc stopbits
cmp al,'3'
jnc stopbits
mov si,offset stop%
mov byte ptr[si],al
sub al,31h
mov cl,2
shl al,cl
or setup_byte,al
word_length:
mov dx,offset word_menu
call show_message
call get_key
call tty
;valid input range is '1' or '2'
cmp al,'1'
jc word_length
cmp al,'3'
jnc word_length
push ax
;Input in valid range. Add 6 and move input to display area
add al,6
mov si,offset word%
mov byte ptr[si],al
pop ax
sub al,30h
inc al
or setup_byte,al
;install new parameter
mov al,setup_byte
mov dx,0
mov ah,0
int 14h
;line feed and cariage reture before exit
mov al,0dh
call tty
mov al,0ah
call tty
;communication
call comm_on
jmp monitor
;display protocol
show_protocol:
mov dx,offset prot_ms
call show_message
jmp monitor
;*********************************************************
;output and display
show_and_send:
mov cx,2000
push ax
thre_wait:
mov dx,card_base
add dx,5
in al,dx
jmp short $+2
test al,20h
jnz ok_2_send
loop thre_wait
;wait period timed out,display error message and exit
pop ax
mov dx,offset err1_ms
call show_message
jmp monitor
ok_2_send:
pop ax
;place in transmitter hoding register to send
mov dx,card_base
out dx,al
jmp short $+2
;display character
call tty
jmp monitor
;*********************************************************
;CAC CHUONG TRINH CON
comm_on proc near
cli ;interrupt off
;reset buffer pointer to start of buffer
mov data_in,0
mov data_out,0
;set dx to base address of RS 232 card from BIOS
mov dx,card_base
mov dl,0fch
mov al,00001011b
out dx,al
jmp short $+2
;set bit 7
mov dl,0fbh
in al,dx
jmp short $+2
and al,7fh
out dx,al
jmp short $+2
in al,21h
jmp short $+2
and al,0e7h
out 21h,al
jmp short $+2 ;I/o delay
;reenable interrupt
sti
ret
comm_on endp
comm_off proc near
in al,21h
or al,18h
out 21h,al
jmp short $+2
ret
comm_off endp
show_message proc near
mov ah,9
int 21h
ret
show_message endp
tty proc near
tty_one:
push ax
mov ah,14
mov bx,0
int 10h
pop ax
cmp al,0dh
jne not_cr
mov al,0ah
jmp tty_one
not_cr: ret
tty endp
flush proc near
flush_1:
mov ah,1
int 16h
jz no_old_chars
mov ah,0
int 16h
jmp flush_1
no_old_chars:
ret
flush endp
get_key proc near
mov ah,0
int 16h
ret
get_key endp
rs232_int:
sti ;interrupt on
push ax
push bx
push dx
push di
push ds
mov dx,data
mov ds,dx
assume ds:data
data_check:
mov dx,card_base
mov dl,0fdh
in al,dx
jmp short $+2
test al,1eh
jnz data_error
jmp data_check
data_error:
mov al,'1'
jmp store_byte
data_ready:
mov dl,0f8h
in al,dx
jmp short $+2
and al,7fh
store_byte:
lea di,circ_buf
mov bx,data_in
add di,bx
mov byte ptr[di],al
inc bx
cmp bx,20
jne ok_in_ptr
mov bx,0
ok_in_ptr:
mov data_in,bx
mov al,20h
out 20h,al
jmp short $+2
pop ds
pop di
pop dx
pop bx
pop ax
iret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxtran_file:
call get_name ;doc ten file
lea dx,filename ;dx chua offset cua ten file
mov al,0
call open
jc open_error
mov handle,ax
read_loop:
lea dx,buffer ;tro toi vung dem
mov bx,handle ;lay the file
call read ;doc file,AX = so byte doc duoc
or ax,ax ;ket thuc file
je pexit ;dung, ket thuc file
mov cx,ax ;CX chua so byte doc duoc
call display ;hien thi file
jmp read_loop ;lap lai
open_error:
lea dx,openerr ;lay thong bao loi
add errcode,al
mov ah,9
int 21h ;hien thi thong bao loi
;*********************************************************
;output and display
;show_and_send:
pexit:
mov cx,2000
pthre_wait:
mov dx,card_base
add dx,5
in al,dx
jmp short $+2
test al,20h
jnz pok_2_send
loop pthre_wait
;wait period timed out,display error message and exit
mov dx,offset err1_ms
call show_message
jmp ppexit
pok_2_send:
call con_hex ;goi chtr con chuyen sang so hex
lea dx,buffrr
mov cx,256
call display
mov cx,256
;place in transmitter hoding register to send
mov dx,card_base
lea di,buffrr ;tro toi vung dem
ppl: mov al,[di] ;lay byte data
out dx,al
jmp short $+2
call edelay
inc di
loop ppl
;display character
; call tty
ppexit:mov bx,handle ;lay the file
call close ;dong the file
jmp monitor
;*********************************************************
get_name proc near
push ax
push dx
push di
mov ah,9 ;ham hien thi chuoi
lea dx,prompt
int 21h
cld
lea di,filename ;DI tro toi ten file
mov ah,1 ;ham doc ki tu tu ban phim
read_name:
int 21h
cmp al,0dh ;co phai CR
je done ;dung ket thuc
stosb ;luu no vao trong chuoi
jmp read_name ;tiep tuc doc vao
done: mov al,0
stosb ;luu byte 0
pop di
pop dx
pop ax
ret
get_name endp
open proc near
mov ah,3dh ;ham mo file
mov al,0 ;chi doc
int 21h
ret
open endp
read proc near
push cx
mov ah,3fh ;ham mo file
mov cx,512 ;chi doc
int 21h
pop cx
ret
read endp
display proc near
push bx
mov ah,40h ;ham ghi file
mov bx,1 ;the file cho man hinh
int 21h ;dong file
pop bx
ret
display endp
close proc near
mov ah,3eh ;ham dong file
int 21h ;dong file
ret
close endp
edelay proc near
push ax
push bx
mov ax,0fh
edel2: mov bx,0ffffh
edel1: dec bx
jnz edel1
dec ax
jnz edel2
pop bx
pop ax
ret
edelay endp
;++++++++++++++++++++++++++++++++++++++++++++
con_hex proc near
push ax
push bx
push cx
push dx
push di
push si
mov ax,0b800h
mov bx,0
cld
lea si,buffrr
mov cx,260
mov al,0
xxx8: mov [si],al
inc si
loop xxx8
lea si,buffrr
lea di,buffer
xxx3: mov al,[di] ;lay byte data
cmp al,3ah ;so sanh voi ma dau ':'
jz xxx2 ;nhay neu la dau ':'
inc di
jmp xxx3 ;quay lai de tim dau ':'
xxx2: call ktra_end ;goi chuong trinh kiem tra ket thuc
cmp ax,0 ;dung la het data thi lam cho AX=0000
jnz xxx4
xxx6: pop si
pop di
pop dx
pop cx
pop bx
pop ax
ret
xxx4: mov al,[di] ;lay byte data
mov [si],al ;dung la byte 3Ah can luu vao
call goi_ht
inc di
inc si
;xu li so byte can goi
mov al,[di] ;lay so can goi MSD
sub al,30h ;tru di 30 de thanh so hex
call so_lon ;kiem tra so ABCDEF
mov cl,4
rol al,cl
mov ah,al
inc di
mov al,[di] ;lay so can go LSD
sub al,30h ;tru di 30 de thanh so hex
call so_lon ;kiem tra so ABCDEF
or al,ah ;or 2 data lai thanh 1 byte
mov [si],al ;cat so HEX ADDR_H
add al,1
mov dl,al ;luu so byte can xu li con lai
call goi_ht
;xu li phan dia chi can goi
inc di
inc si
mov al,[di] ;lay byte ADDR_L-MSD
sub al,30h ;tru di 30 de thanh so hex
call so_lon ;kiem tra so ABCDEF
mov cl,4
rol al,cl
mov ah,al
inc di
mov al,[di] ;lay byte ADDR_L-LSD
sub al,30h ;tru di 30 de thanh so hex
call so_lon ;kiem tra so ABCDEF
or al,ah ;or 2 data lai thanh 1 byte
mov [si],al ;cat so HEX ADDR_H
call goi_ht
inc di
inc si
mov al,[di] ;lay byte ADDR_H-MSD
sub al,30h ;tru di 30 de thanh so hex
call so_lon ;kiem tra so ABCDEF
mov cl,4
rol al,cl
mov ah,al
inc di
mov al,[di] ;lay byte ADDR_H-LSD
sub al,30h ;tru di 30 de thanh so hex
call so_lon ;kiem tra so ABCDEF
or al,ah ;or 2 data lai thanh 1 byte
mov [si],al ;cat so byte can goi dang HEX
call goi_ht
;xu li cac byte con lai
inc di ;bo byte 00
inc di
xxx1: inc di
inc si
mov al,[di] ;lay so byte thu nhat
sub al,30h ;tru di 30 de thanh so hex
call so_lon ;kiem tra so ABCDEF
mov cl,4
rol al,cl
mov ah,al
inc di
mov al,[di] ;lay so byte thu 2
sub al,30h ;tru di 30 de thanh so hex
call so_lon ;kiem tra so ABCDEF
or al,ah ;or 2 data lai thanh 1 byte
mov [si],al ;cat so byte can goi dang HEX
call goi_ht
dec dl
cmp dl,0
jnz xxx1 ;quay lai vi chua
inc di ;bo byte cuoi thu nhat
inc di ;bo byte thu 2
inc di ;bo ma xuong hang
jmp xxx3 ;het 1 hang data
con_hex endp
;chuong trinh kiem tra ket thuc
ktra_end proc near
push di
inc di
mov al,[di] ;lay byte data
cmp al,30h ;kiem tra byte 0 thu nhat
jnz kt_exit ;nhay den de thoat vi khong phai
inc di ;neu dung thi kiem tra byte 0 thu 2
mov al,[di] ;lay byte data
cmp al,30h
jnz kt_exit ;nhay den de thoat vi khong phai
inc di ;neu dung thi kiem tra byte 0 thu 3
mov al,[di] ;lay byte data
cmp al,30h
jnz kt_exit ;nhay den de thoat vi khong phai
inc di ;neu dung thi kiem tra byte 0 thu 4
mov al,[di] ;lay byte data
cmp al,30h
jnz kt_exit ;nhay den de thoat vi khong phai
inc di ;neu dung thi kiem tra byte 0 thu 5
mov al,[di] ;lay byte data
cmp al,30h
jnz kt_exit ;nhay den de thoat vi khong phai
inc di ;neu dung thi kiem tra byte 0 thu 6
mov al,[di] ;lay byte data
cmp al,30h
jnz kt_exit ;nhay den de thoat vi khong phai
inc di ;neu dung thi kiem tra byte 0 thu 7
mov al,[di] ;lay byte data
cmp al,30h
jnz kt_exit ;nhay den de thoat vi khong phai
inc di ;neu dung thi kiem tra byte 1 thu 8
mov al,[di] ;lay byte data
cmp al,31h
jnz kt_exit ;nhay den de thoat vi khong phai
inc di ;neu dung thi kiem tra byte F thu 9
mov al,[di] ;lay byte data
cmp al,46h
jnz kt_exit ;nhay den de thoat vi khong phai
inc di ;neu dung thi kiem tra byte F thu 10
mov al,[di] ;lay byte data
cmp al,46h
jnz kt_exit ;nhay den de thoat vi khong phai
mov ax,0
pop di
ret
kt_exit:
mov ax,1111h ;nap data sao cho khac khong la 1
pop di
ret
ktra_end endp
goi_ht proc near
push di
mov di,bx
mov ah,1
stosw
mov bx,di
pop di
ret
goi_ht endp
so_lon proc near
cmp al,9
jg yyy
ret
yyy: sub al,7
ret
so_lon endp
code ends
end start
Các file đính kèm theo tài liệu này:
- LUANVAN.DOC