Giao tiếp giữa Kit Vi xử lý 8951 và máy tính

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.

doc99 trang | Chia sẻ: banmai | Lượt xem: 1953 | Lượt tải: 0download
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:

  • docLUANVAN.DOC