Tìm hiểu về vi điều khiển 8051

Ttìm hiểu về vi điều khiển 8051 Sau khi nhập dữ liệu của một chương trình tại địa chỉ 4000, để vi điều khiển thực hiện chương trình này hãy nhấn phím P. khi đó trên màn hình 8 led sẽ xuất hiện PC 4000. Nếu muốn thực hiện chương trình tại địa chỉ 4000 hãy nhấn phím tăng địa chỉ

pdf106 trang | Chia sẻ: Kuang2 | Lượt xem: 1108 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Tìm hiểu về vi điều khiển 8051, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
goân ngöõ maùy Daïng hôïp ngöõ 1 B4 02 MOV AH, 02h 2 80 C2 30 ADD DL, 30h 3 50 PUSH AX Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN Dó nhieân laø maùy khoâng theå hieåu ñöôïc chöông trình vieát baèng hôïp ngöõ neân phaûi qua giai ñoaïn dòch, ñeå dòch chöông trình töø hôïp ngöõ sang ngoâng ngöõ maùy. Chöông trình laøm nhieäm vuï dòch moät chöông trình sang ngoân ngöõ maùy goïi laø trình hôïp dòch (Assembler ). Chöông trình vieát baèng hôïp ngöõ goïi laø chöông trình nguoàn( hay goác –sourse program ) vaø chöông trình döôùi daïng ngoân ngöõ maùy dòch töø chöông trình nguoàn goïi laø chöông trình ñích (hay ñoái töôïng -object program) nhö sô ñoà sau: TAÏO VAØ CHAÏY CHÖÔNG TRÌNH HÔÏP NGÖÕ Ñeå taïo vaø chaïy moät chöông trình hôïp ngöõ baïn caàn coù moät trong caùc boä trình hôïp dòch nhö Turbo Assembler cuûa haõng Borland International (goàm trình hôïp dòch TASM.EXE vaø trình lieân keát TLINK.EXE ) hoaëc Microsoft Assembler cuûa haõng Microsoft (goàm trình hôïp dòch MASM.EXE vaø trình lieân keát LINK.EXE) ngoaøi ra coøn moät soá taäp tin khaùc trong caùc boä chöông trình naøy. Duø ñang söû duïng cuûa haõng naøo cuõng phaûi theo qui trình sau: Böôùc 1: Tröôùc heát baïn caàn coù moát trình soaïn thaûo vaên baûn ñeå taïo chöông trình nguoàn hôïp ngöõ nhö NC (Norton Commander), Turbo trong Turbo Pascal, sau khi soaïn ñöôïc ghi leân ñóa thaønh moät taäp tin coù hoï laø ASM (ví duï HELLO.ASM) Böôùc 2: Dòch chöông trình ñaõ soaïn (HELLO.ASM) vôùi trình hôïp dòch TASM.EXE (ñoái vôùi söû duïng boä dòch cuûa haõng turbo). Sau khi dòch treân ñóa seõ coù moät taäp tin môùi goïi laø taäp ñoái töôïng (HELLO.OBJ) doøng leänh dòch chöông trình nhö sau: C:\ TASM HELLO.ASM Turbo Assembler Version 2.01 Copyright (c) 1990 Borland International Assembling file: hello.asm to hello.obj Error message: None Warning message: None Passes: 1 Remaining memory: 370k Thoâng baùo treân cho bieát chöông trình cuûa baïn khoâng coù loãi sai. Neáu coù, phaûi söûa laïi chöông trình (vôùi trình soaïn thaûo ) vaø cho dòch laïi. Baây giôø treân ñóa cuûa baïn coù hai taäp tin HELLO.ASM (chöông trình nguoàn do baïn taïo ra) vaø HELLO.OBJ (taäp tin ñoái töôïng). Neáu chöông trình khoâng loãi thì qua böôùc 3 Trình nguoàn (Source program) Trình hôïp dòch (Assembler) Trình ñoái töôïng (Object program) Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN Böôùc 3: Lieân keát chöông trình vôùi trình lieân keát TLINK.EXE. doøng leänh thöïc hieän lieân keát nhö sau: C:\TLINK HELLO.OBJ Turbo Link Version 3.01 Copyright (c) 1990 Borland International Neáu chöông trình cuûa baïn khoâng coù loãi sai, TLINK seõ taïo taäp thöïc hieän HELLO.EXE. Böôùc 4: Cuoái cuøng laø thöïc hieän chöông trình cuûa baïn. Qui trình taïo vaø thöïc hieän chöông trình coù theå toùm taét nhö ôû hình sau: CUÙ PHAÙP LEÄNH HÔÏP NGÖÕ Chöông trình hôïp ngöõ goàm nhieàu leänh, moãi leänh vieát treân moät doøng. Leänh hôïp ngöõ phaân laøm hai loaïi laø chæ thò vaø chæ daãn. Chæ thò laø leänh seõ ñöôïc dòch sng maõ maùy, töùc laø leänh seõ ñöôïc thi haønh, coøn chæ daãn ( coøn goïi laø leänh giaû) chæ laø leänh höôùng daãn trình hôïp dòch trong quaù trình dòch chöông trình. Daïng toång cuûa moät leänh goàm 4 chöông trình nhö sau: vd: DoAddition: ADD AX, DX ;Taêng AX löôïng DX Trình nguoàn (treân giaáy) Trình soaïn thaûo Trình nguoàn (treân ñóa –ASM) TASM.EXE (dòch chöông trình ) TLINK.EXE (lieân keát chöông trình Taäp ñoái töôïng (.OBJ) Trình ñích (.EXE) Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN Caùc tröôøng hôïp caùch nhau ít nhaát laø moät khoaûng traéng hoaëc kí töï nhaûy (Tab) a/ Tröôøng teân Tröôøng teân coù theå laø nhaõn (Label ) hoaëc kí hieäu (Symbol). Nhaõn laø moät teân ñaïi dieän cho moät vò trí trong chöông trình (tröôøng hôïp naøy coù daáu : theo sau), hoaëc teân thuû tuïc (chöông trình con) hoaëc teân bieán vuøng nhôù chöùa döõ lieäu ). b/ Tröôøng taùc töû Tröôøng taùc töû laø teân gôïi nhôù cuûa leänh. Neáu laø chæ thò nhö MOV, ADD, thì leänh seõ ñöôïc dòch sang maõ maùy coøn neáu laø chæ daãn nhö ENDS, PROC, thì ñoù laø leänh höôùng daãn trình hôïp dòch trong quaù trình dòch chöông trình sang maõ maùy. c/ Tröôøng taùc toá Tröôøng taùc toá xaùc ñònh döõ lieäu seõ ñöôïc xöû lyù bôûi leänh. Leänh coù theå coù hoaëc khoâng coù taùc toá. Neáu coù hai taùc toá thì chuùng caùch nhau baèng daáp phaåy, taùc toá thöù nhaát (töø traùi qua ) goïi laø taùc toá ñích, taùc toá thöù hai goïi laø taùc toá nguoàn. d/ Tröôøng ghi chuù Sau moãi caâu leänh coù theå vieát doøng ghi chuù sau daáu chaám phaåy vôùi muïch ñích laø ñeå giaûi thích yù nghóa cuûa leänh KHAI BAÙO DÖÕ LIEÄU Döõ lieäu trong chöông trình ñeàu ñöôïc chuyeån sang döôùi daïng nhò phaân, tuy nhieân baïn coù theå vieát döôùi daïng thaäo phaân, thaäp luïc phaân hoaëc chuoãi kyù töï a/ Caùch vieát soá Trong caùc chöông trình bình thöôøng ñöôïc hieåu laø thaäp phaân, khi caàn coù theâm chöõ D hoaëc d ñaèng sau soá (ví duï 10,10D, 10d ) ñeàu coù giaù trò nhö nhau Soá vieát theo heä thaäp luïc phaân keát thuùc baèng chöõ H hoaëc h phaûi baét ñaàu laø moät soá (ví duï 10h, 10H, 2F8h, 2F8H) Soà nhò phaân keát thuùc baèng B hoaëc b (ví duï 1001b, 1001B ) b/ Chuoãi kyù töï Kyù töï hoaëc chuoãi kyù töï phaûi raøo giöõa hai daáu nhaùy ñôn (‘) hoaëc daáu nhaùy keùp(“) (ví duï ‘Hello’,”hello”,’A’, “A” ) caùc kyù töï ñöôïc chuyeån thaønh maõ ASCII töông öùng, do ñoù ‘A’,”A” ,41h hoaëc 65 ñeàu coù nghóa nhö nhau. c/ Ñònh nghóa döõ lieäu Caùc chæ daãn thoâng duïng duøng ñònh nghóa döõ lieäu kieåu byte, töø (2 byte – Word ) hoaëc töø keùp (4 byte – Double word ) nhö sau: Nhaõn DB trò, trò, ;byte Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN Nhaõn DW trò, trò, ;word Nhaõn DD trò, trò, ;double word Vôùi nhaõn laø teân vuøng nhôù (coøn goïi laø bieán, thöïc chaát laø ñòa chæ töôïng tröng cuûa vuøng nhôù vaø ñöôïc chuyeån thaønh ñòa chæ thaät sau khi dòch chöông trình ) ñöôïc ñònh nghóa vôùi kích thöôùc 1 byte (DB ), 2 byte (DW ) hoaëc 4 byte (DD ). Moãi trò ghi trong phaàn taùc toá seõ laø trò ñöôïc gaùn cho vuøng nhôù ñöôïc caáp phaùt. Neáu thay trò baèng daáu ? thì seõ khoâng gaùn trò cho vuøng nhôù Vd : B DB 5 coù nghóa laø vuøng nhôù ñöôïc caáp phaùtcoù ñòa chæ laø B, chieám 1 byte vaø coù trò laø 5 Vd : W DW 10 coù nghóa laø vuøng nhôù ñöôïc caáp phaùt coù ñòa chæ laø W chieám 2 byte vaø coù giaù trò laø 0Ah (W laø 0A coøn W+1 laø 00 ) d/ Ñònh nghóa haèng Thay vì vieát tröïc tieáp caùc haèng soá hoaëc chuoãi trong chöông trình, ta coù theå ñaët teân (goïi laø kí hieäu ) cho raèng ôû ñaàu chöông trình, sau ñoù chæ caàn duøng caùc teân ñoù thay cho caùc haèng. Caùch ñaët teân cho haèng naøy laøm chöông trình deã ñoïc vaø deã hieåu hôn vôùi cuù phaùp sau: Teân EQU Haèng Vd: CR EQU 0D h LF EQU 0A h STR EQU ‘Du lieu nhap sai!!!!’ Sau ñoù coù hai doøng sau laø töông ñöông MESS DB STR, CR, LF , ’S’ MESS DB ‘Du lieu nhap sai!!!!’, 0Dh, 0Ah, ’$’ CAÁU TRUÙC CHÖÔNG TRÌNH Nhö ñaõ trình baøy, chöông trình maõ maùy goàm 3 phaàn chöùa trong 3 ñoaïn laø ñoaïn maõ döõ lieäu vaø ngaên xeáp do ñoù trình hôïp ngöõ cuõng ñöôïc toå chöùc töông töï vôùi caùc leänh thích hôïp. a/ Kieåu boä nhôù Kích thöôùc boä nhôù duøng cho ñoaïn maõ vaø döõ lieäu ñöôïc xaùc ñònh baèng chæ daãn MODEL nhö sau: MODEL kieåu Vôùi kieåu laø: • TINY Maõ vaø döõ lieäu naèm cho phaïm vi moät ñoaïn Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN • SMALL Maõ naèm trong moät ñoaïn 64K nhöng döõ lieäu ôû trong phaïm vi moät ñoaïn 64K • COMPACT Maõ trong phaïm vi moät ñoaïn 64K vaø döõ lieäu coù theå lôùn hôn 64K Thöôøng coù ít chöông trình naøo coù maõ hoaëc döõ lieäu lôùn hôn 64K neân kieåu SMALL laø ñuû. Kieåu TINYduøng ñeå dòch chöông trình sang daïng .COM. b/ Ñoaïn ngaên xeáp Ñoaïn ngaên xeáp khai baùo kích thöôùc vuøng ngaên xeáp vôùi chæ daãn : . STACK Kích Thöôùc Kích thöôùc laø ñoä lôùn ngaên xeáp tính baèng byte, neáu khoâng ghi seõ maëc nhieân laø 1024. Ví duï sau khai baùo vuøng ngaên xeáp 256 byte . STACK 100h c/ Ñoaïn döõ lieäu Ñoaïn döõ lieäu duøng khai baùo bieán hoaëc haèng baét ñaàu baèng chæ daãn .DATA. Ví duï: . DATA CR EQU 13 LF EQU 10 VungNho1 DW 2 VungNho2 DW 3 ThongBao DB ‘CHUONG TRINH ABC ’ d/ Ñoaïn maõ Ñoaïn maõ chöùa caùc leänh cuûa chöông trình baét ñaàu baèng chæ daãn : . CODE Leänh cuoái cuøng cuûa chöông trình laø chæ daãn END. Toùm laïi moät chöông trình hôïp ngöõ thoâng thöôøng coù daïng sau: . MODEL SMALL . STACK 100h . DATA ; phaàn khai baùo döõ lieäu . CODE ; phaàn leänh END Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN CHÖÔNG 2 GIÔÙI THIEÄU NGOÂN NGÖÕ LAÄP TRÌNH VISUAL C++ I. Toång quan ngoân ngöõ visual c Taïi thôøi ñieåm hieän nay ñaõ coù raát nhieàu ngoân ngöõ laäp trình khaùc nhau phuïc vuï cho nhieàu muïc ñích khaùc nhau, tuøy vaøo öùng duïng cuï theå maø ngöôøi laäp trình seõ söû duïng moät ngoân ngöõ naøo maø mình bieát ñeå vieát chöông trình. Trong cuoán Luaän vaên toát nghieäp naøy ñeå taïo phaàn giao dieän cho chöông trình toâi söû duïng ngoân ngöõ laäp trình Visual C++ moät ngoân ngöõ khaù phoå bieán hieän nay. Visual C++ laø moät ngoân ngöõ laäp trình tröïc quan noù döïa treân neàn taûng cuûa Ngoân ngöõ C/C++ vì theá nhöõng ai ñaõ bieát ñeán ngoân ngöõ C/C++ ñeàu coù theå töï hoïc vaø töï vieát cho mình moät chöông trình. Ñaây laø ngoân ngöõ chaïy treân moâi tröôøng Windows vaø coù theå lieân keát vôùi caùc chöông trình trong moâi tröôøng Dos 2. Caùch vieát moät chöông trình baèng visual c++ Toâi khoâng theå giôùi thieäu moät caùch ñaày ñuû veà Visual C++ nhöng coù theå toùm taét quaù trình vieát chöông trình baèng Visual C++ nhö sau: Böôùc 1: Thieát keá giao dieän Böôùc 2: Vieát maõ leänh ? Ñoái vôùi böôùc thieát keá giao dieän, baïn seõ thieát keá “boä maët“ cuûa chöông trình. Baïn duøng caùc coâng cuï Visual C++ ñeå ñöa caùc ñoái töôïng khaùc nhau (nhö laø caùc nuùt baám, thanh cuoän, nuùt radio) vaøo trong cöûa soå chöông trình cuûa baïn. Ñaëc bieät trong phaàn thieát keá giao dieän baïn khoâng phaûi vieát moät maõ leänh naøo. ? Ñoái vôùi böôùc vieát maõ leänh baïn duøng trình soaïn thaûo cuûa Visual C++ vaø ngoân ngöõ laäp trình C++ ñeå vieát maõ leänh cho chöông trình Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN CHÖÔNG 3 CHÖÔNG TRÌNH CHÖÔNG TRÌNH GIAO DIEÄN CAÙC MAÕ LEÄNH VIEÁT CHO CHÖÔNG TRÌNH GIAO DIEÄN ♦ HIEÅN THÒ FILE void CLUANVANTOTNGHIEPDoc::Serialize(CArchive& ar) { if (ar.IsStoring()) { // TODO: add storing code here } else { // TODO: add loading code here } // Calling the base class CRichEditDoc enables serialization // of the container document's COleClientItem objects. m_bRTF=FALSE; CRichEditDoc::Serialize(ar); } ♦ CHUYEÅN ÑOÅI FILE ASM THAØNH LILE LIST void CChildFrame::OnCovertlst() { // TODO: Add your command handler code here system("C:\\LVTN\\ASM51 TEST1.ASM "); } Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN ♦ CHUYEÅN ÑOÅI FILE OBJ THAØNH FILE HEX void CChildFrame::OnConverthex() { // TODO: Add your command handler code here system("C:\\LVTN\\RL51 TEST1.OBJ"); system("C:\\LVTN\\OH TEST1.OBJ"); } ♦ GOÏI CHÖÔNG TRÌNH MAÙY TÍNH TRÔÏ GIUÙP CHO VIEÄC ÑOÅI CAÙC CÔ SOÁ KHAÙC NHAU void CLUANVANTOTNGHIEPView::OnCalCulator() { // TODO: Add your command handler code here system("Calc.exe"); } ♦ GOÏI CHÖÔNG TRÌNH TRUYEÀN TÖØNG BYTE KÍ TÖÏ void CLUANVANTOTNGHIEPView::OnTransmitted() { // TODO: Add your command handler code here system("C:\\LVTN\\TERMINAL.EXE"); } ♦ GOÏI CHÖÔNG TRÌNH TRUYEÀN FILE DÖÕ LIEÄU (*.HEX) void CChildFrame::OnLoadfile() { // TODO: Add your command handler code here system("C:\\LVTN\\TERMINA3.EXE"); } Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN CHÖÔNG TRÌNH TRUYEÀN DÖÕ LIEÄU TRUYEÀN GIÖÕA 2 KIT VI ÑIEÀU KHIEÅN 1. LÖU ÑOÀ ♦ BEÂN KIT VÑK TRUYEÀN: BEGIN KHÔØI TAÏO 8051 ÔÛ CHEÁ ÑOÄ GIAO TIEÁP NOÁI TIEÁP NAÏP ÑÒA CHÆ QUAÛN LYÙ VUØNG DÖÕ LIEÄU CAÀN TRUYEÀN KIEÅM TRA BEÂN NHAÄN SAÜN SAØNG ? KIEÅM TRA DÖÕ LIEÄU CAÀN TRUYEÀN HEÁT CHÖA ? TRUYEÀN TÖØNG BYTE END YES NO NO YES Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN ♦ BEÂN KIT VÑK 8051 NHAÄN: BEGIN KHÔØI TAÏO 8051 ÔÛ CHEÁ ÑOÄ GIAO TIEÁP NOÁI TIEÁP NAÏP ÑÒA CHÆ QUAÛN LYÙ VUØNG DÖÕ LIEÄU TRUYEÀN ÑEÁN KIEÅM TRA BEÂN PHAÙT SAÜN SAØNG CHÖA ? KIEÅM TRA Ñ/C QUAÛN LYÙ VUØNG DL TRUYEÀN ÑEÁN HEÁT CHÖA ? NHAÄN TÖØNG BYTE END YES NO NO YES Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN 2. CHÖÔNG TRÌNH ♦ BEÂN KIT VÑK TRUYEÀN: org 5000h mov IE,#00h ;khoi tao khong cho phep ngat mov tmod,#20h mov th1,#-13 ;timer mode 2, 2400baud setb tr1 ;cho phep chay mov scon,#0fch ;khoi tao truyen data mode 3 mov dptr,#6000h ;nap dia chi quan li vung ma x2: jb p1.1,x2 ;neu bang 1 thi cho 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 ;neu dung bang 1 thi xoa de goi tiep byte thu 2 clr ti inc dptr mov a,dpl cjne a,#0ffh,x2 mov a,#76h mov dptr,#0c000h movx @dptr,a sjmp $ end ♦ BEÂN KIT VÑK 8051 NHAÄN: org 5000h setb p1.1 mov IE,#00h ;cam ngat mov tmod,#20h mov th1,#-13 setb tr1 mov scon,#0fch ;khoi tao giao tiep noi tiep mov dptr,#6000h xr2: clr p1.1 xr1: jnb ri,xr1 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 mov a,dpl cjne a,#0ffh,xr2 mov a,#79h Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN mov dptr,#0c000h movx @dptr,a sjmp $ ;nhay tai cho end ;RxD cua may phat va RxD cua may thu duoc noi voi nhau lam duong truyen data ;TxD cua may phat va TxD cua may thu duoc noi voi nhau lam xung clk TRUYEÀN DÖÕ LIEÄU TÖØ MAÙY TÍNH ÑEÁN KIT VÑK 8051 B1. TRUYEÀN TÖØNG BYTE KÍ TÖÏ TÖØ MAÙY TÍNH ÑEÁN KIT VÑK 1. LÖU ÑOÀ ♦ BEÂN TRUYEÀN (MAÙY TÍNH) Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN BEGIN THIEÁT ÑAËT ÑÒA CHÆ VUØNG DÖÕ LIEÄU CUÛA CHÖÔNG TRÌNH, LÖU VAØ CAØI ÑAËT CAÙC NGAÉT CUÛA MAÙY TÍNH , ÑAËT PHUÔNG THÖÙC GIAO TIEÁP CHUAÅN (2400 b/s, 8 bit, None Parity, 1 Stopbit) HIEÅN THÒ MENU CUÛA CHÖÔNG TRÌNH KIEÅM TRA COÙ PHÍM NAØO ÑÖÔÏC AÁN ? END GOÏI CHÖÔNG TRÌNH HIEÅN THÒ VAØ TRUYEÀN KÍ TÖÏ ÑÖÔÏC NHAÁN PHÍM F1 # PHÍM F1, F9 PHÍM F9 KIEÅM TRA COÙ PHÍM NAØO ÑÖÔÏC NH Á Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN ♦ BEÂN NHAÄN (KIT VI ÑIEÀU KHIEÅN 8051): 2. CHÖÔNG TRÌNH ♦ BEÂN TRUYEÀN (MAÙY TÍNH): BEGIN KHÔÛI TAÏO 8051 ÔÛ CHEÁ ÑOÄ GIAO TIEÁP NOÁI TIEÁP NOÁI TIEÁP NAÏP ÑÒA CHÆ QUAÛN LYÙ VUØNG DÖÕ LIEÄU SEÕ ÑÖÔÏC GÖÛI TÔÙI NHAÄN TÖØNG BYTE ÑÖÔÏC GÔÛI TÔÙI END KIEÅM TRA XEM ÑAÕ HEÁT ÑÒA CHÆ QUAÛN LYÙ VUØNG DL YES NO Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN CHÖÔNG TRÌNH TRUYEÀN TÖØNG BYTE KÍ TÖÏ TÖØ MAÙY TÍNH ; STACK stack segment stack db 300 dup('?') stack ends ;------------------------------------------ DATA ---------------------- Data Segment ;Messages MENU_MS db '',0dh,0ah db '',0dh,0ah db '* THE TRANSMITTED CHARACTERS * ‘,0dh,0ah db '** --> Press To Redisplay This MENU ** ',0dh,0ah db '** --> Press To Exit This Program ** ’, 0dh,0ah db 'Input characters from keyboard:' db '$' ; PROT_MS db '',0dh,0ah ERR1_MS db 0dh,0ah,'*** Cannot Transmit ***',0dh,0ah ; ;PROGRAM PARAMETER STORAGE CARD_BASE dw 03f8h ;Address of RS 232 card for all harware ;type except INT_NUM db 0ch ;Offset in Bios table as follows SETUP_BYTE db 0bbh ;Default value ; ;Origin interrupt vector address to restore on exit O_INT_SEG dw 0000h ;segment O_INT_OFF dw 0000h ;offset ; ;circular buffer and pointers: CIRC_BUF db 20 dup(00h) ;Circular buffer dw 0 DATA_IN dw 0 ;imput pointer DATA_OUT dw 0 ;output pointer ; DATA Ends ;-------------------------------------- CODE -------------------------------------- CODE SEGMENT ASSUME CS:CODE START: Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN ; ;Establish addressability of program's data Segment 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 | ;----------------------| ; ;Examine Ram location F000:FFFE to determine IBM hardware push ds ;Save program 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 ;Bios data area segment mov ds,dx ;Data segment to Bios area mov cx,ds:0400h ;Offset card 1 pop ds ;Restore program ds mov Card_Base,cx ;Save in program's data ; ;determine interrupt number: ; 0bh IRQ4 all other hardware cmp al,0fdh ;Code for PCjr jne Set_Address mov int_num,0bh ; ;----------------------------------| ;Save/Install Interrupt | ;----------------------------------| ;Obtain and save the segment/offset of the original communications ;interrup installed on entry using Dos service number 53 ;of Int 21h Set_Address: Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN mov ah,53 ;Dos service request number mov al,Int_Num ;Interrup number (0bh or 0ch) int 21h ; ;ES:BX = segment/offset of original handler mov O_Int_Seg,es ;Save segment mov O_Int_Off,bx ;and offset ; ;Insert address of the interrup service routine in the Bios ;Label for interrup service routine is: RS232_INT ;use DOS service number 37 of INT 21h mov ah,37 ;Dos service request number mov al,int_num ;Machine interrup number mov dx,offset cs:RS232_Int push ds ;Save program data segment push cs pop ds ;Set DS to segment base of int 21h ;interrup service routine pop ds ;Restore program's ds ; ;------------------| ;Set protocol | ;------------------| ;Set default communication parameters mov al,10100011b ;Control code mov ah,0 ;Bios request number mov dx,0 ;Comm1 in all hardware types int 14h ;Bios service request call comm_on call flush ;Flush keyboard buffer ; ;------------------------------------------------------------------------------------| ; Send and receive characters | ; monitor funtion key | ;------------------------------------------------------------------------------------| Monitor: mov ah,1 ;Code for read keyboard status int 16h ;Bios service jz ser_imp ;Nothing in keyboard buffer jmp char_typed ;Character in keyboard buffer ; Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN ;Delay loop to allow interrupt to occur Ser_imp: sti ;interrupt on mov cx,50 Delay: nop nop loop delay ; ;--------------------------------------| ;Test for new data received | ;--------------------------------------| cli ;Interrup off while reading pointer mov bx,data_out ;Compare pointers cmp bx,data_in jne new_data ;New data item or items sti ;Interrup on jmp Monitor ;Reapeat cycle ; ;------------------| ;Process char | ;------------------| ;Receive character type from keyboard buffer char_typed: mov ah,0 ;Code for read keyboard char int 16h ;Bios service ;Test for and keys cmp ax,3b00h ; jne test_f9 jmp show_menu ; key pressed Test_F9: cmp ax,4300h ; je dos_exit jmp show_and_send ; key pressed ; ;----------------| ; Exit | ;----------------| Dos_Exit: ;Communications interrupts OFF call Comm_Off ; ;Restore orginal interrupt vector for communications interrup number Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN mov ah,37 ;Dos service request number mov al,int_num ;Machine interrup number mov dx,o_int_off ;Offset to DX mov ax,o_int_seg ; Segment mov ds,ax ;to DS int 21h ;Exit mov ah,76 ;Dos service request number mov al,0 ;No return code int 21h ;Exit to dos ; ;----------------------| ;Redisplay Menu | ;----------------------| Show_Menu: mov dx,offset menu_ms call show_message ;Display message routine jmp monitor ; ;--------------------------| ;New Data Receiver | ;--------------------------| New_Data: lea si,circ_buf ;Circular buffer address mov bx,data_out ;Output pointer add si,bx ;Buffer start +displacement mov al,byte ptr[si] ;Get character ; ;Update output pointer inc bx ;Bump cmp bx,20 ;Pointer overflows buffer? jne ok_out_ptr mov bx,0 ;Request to start of buffer ; Ok_Out_Ptr: mov data_out,bx ;Update ; ;Display byte taken from buffer sti call tty jmp monitor ; Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN ;------------------------| ;Display Protocol | ;------------------------| Show_Protocol: mov dx,offset prot_ms call show_message ;Display message routine jmp monitor ; ;--------------------------| ; Output and Display | ;--------------------------| Show_and_Send: ;Send through RS-232c line ;Wait loop for tranmitter holding register empty mov cx,2000 ;Prime wait counter push ax ;Save character to transmit ; Thre_Wait: mov dx,card_base add dx,5 ;Line status register in al,dx ;Get byte at port jmp short $+2 ;Thre bit set? test al,20h jnz ok_2_send loop thre_wait ; ;Wait period timed out,display error message and exit pop ax ;Restore stack mov dx,offset err1_ms call show_message ;Error to screen jmp monitor ; Ok_2_Send: pop ax ;Retrieve byte ;Place in transmitter hoding register to send mov dx,Card_Base ;THR register out dx,al ;Send jmp short $+2 ;I/O delay ;Display character call tty jmp monitor ;------------------------------------------------------------------------------| Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN ; PROCEDURES | ;------------------------------------------------------------------------------| Comm_On proc near ;Set communication line for interrupt operation received data 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 ; ;Init mode control register for data terminal ready ;(bit 0) request to send (bit1) and output 2 (bit3) ;DX is still holding port address mov dl,0fch ;MCR address mov al,00001011b ;Bit 0,1 and 3 set out dx,al jmp short $+2 ; ;Set bit 7 of the line control register (DLAB) to access ;the interrupts enable register at xF9h mov dl,0fbh ;xFBH =line control register in al,dx ;Read byte at port jmp short $+2 ;I/O delay and al,7fh ;Reset DLAB out dx,al ;Write to LCR jmp short $+2 ;I/O delay ; ;Enable interrupts for DATA READY only mov dl,0f9h ;Interrupt enable register mov al,1 ;Data ready interrupt out dx,al jmp short $+2 ;I/O delay ; ;Enable communications interrupts by resetting the bits ;corresponding to the irq3 and iqr4 line on the interrupt mask ;register(port address =21h) in al,21h ;Read byte at port jmp short $+2 ;I/O delay and al,0e7h ;Reset bit 3 and bit 4 out 21h,al Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN jmp short $+2 ;I/o delay ; ;Reenable interrupt sti ret Comm_on Endp ; ;---------------------------------------| ; Communication line off | ;---------------------------------------| Comm_off proc near ;Disable communications interrup by setting for irq3 and iqr4 line ;on the interrupt mask register (port address=21) in al,21h or al,18h ;Set bit 3 and 4 out 21h,al jmp short $+2 ret Comm_off Endp ; Show_Message proc near ;Display string ->by the DX register using Dos function 09h mov ah,9 ;Service request number int 21h ;Dos interrupt ret Show_Message Endp ; ;-----------------------------| ; Teletype write | ;-----------------------------| tty proc near ;Display character or control code at cursor position tty_one: push ax ;Save character mov ah,14 ;Bios service request number ;for ASCII teletype write mov bx,0 ;Display page int 10h ;Bios service request pop ax ; ;Test for carriage return and add line feed Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN cmp al,0dh jne not_cr mov al,0ah jmp tty_one not_cr: ret tty endp ; ;-------------------------| ; Flush Buffer | ;-------------------------| flush proc near flush_1: mov ah,1 ;Bios service request code int 16h jz no_old_chars ;Flush old character mov ah,0 int 16h jmp flush_1 no_old_chars: ret flush endp ; get_key proc near mov ah,0 ;Bios service request number int 16h ret get_key endp ; ;----------------------------------------------------------------------------| ; Interrupt Service Routine | ;----------------------------------------------------------------------------| rs232_int: sti ;interrupt on ;communications ;Save register to be used by the service routine push ax push bx push dx push di push ds Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN ;Set Ds establish addressability of main program data mov dx,data mov ds,dx assume ds:data ; ;Check line status register for reception error and data ready Data_check: mov dx,card_base mov dl,0fdh ;line status register in al,dx ;Read port byte jmp short $+2 ;I/O delay ;Check for error codes test al,1eh jnz data_error jmp data_check ; data_error: mov al,'?' ;Error symbol jmp store_byte ; ;Pull data from the receiver data register and store in ;the circular buffer Data_Ready: mov dl,0f8h ;RDR in al,dx ;Get byte jmp short $+2 ;I/O delay and al,7fh ;Mask off high bit ; ;Place byte in circular buffer Store_Byte: lea di,circ_buf ;Buffer pointer mov bx,data_in ;Input pointer add di,bx ;Point Di to active byte mov byte ptr[di],al ;Store in Circ_Buf ; ;Index input pointer. Reset if pointer overflows buffer inc bx ;Bump pointer cmp bx,20 ;Past end of buffer ? jne ok_in_ptr ; ;Reset pointer to start of buffer mov bx,0 Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN ok_in_ptr: mov data_in,bx ;Store new pointer displacement ; ;Signal end of -interrupt to the interrupt command register mov al,20h ;Code out 20h,al ;EOl port address jmp short $+2 ;I/O delay ; ;Requset register from stack pop ds pop di pop dx pop bx pop ax ; ;Return from interrupt iret code ends End start ♦ BEÂN NHAÄN (KIT VÑK 8051): org 5000h setb p1.1 mov IE,#00h ;cam ngat mov tmod,#20h mov th1,#-13 setb tr1 mov scon,#0fch ;khoi tao giao tiep noi tiep mov dptr,#6000h xr1: jnb ri,xr1 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 mov a,dpl cjne a,#0ffh,xr1 sjmp $ ;nhay tai cho end B2. TRUYEÀN FILE DÖÕ LIEÄU TÖØ MAÙY TÍNH ÑEÁN KIT VÑK 1. LÖU ÑOÀ Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN ♦ BEÂN TRUYEÀN (MAÙY TÍNH): BEGIN THIEÁT ÑAËT ÑÒA CHÆ VUØNG DÖÕ LIEÄU CUÛA CHÖÔNG TRÌNH, LÖU VAØ CAØI ÑAËT CAÙC NGAÉT CUÛA MAÙY TÍNH , SET PHUÔNG THÖÙC GIAO TIEÁP CHUAÅN HIEÅN THÒ MENU CUÛA CHÖÔNG TRÌNH END GOÏI CHÖÔNG TRÌNH HIEÅN THÒ VAØ TRUYEÀN FILE AÁN ÑÒNH PHÍM F1 PHÍM F4 PHÍM F9 KIEÅM TRA COÙ PHÍM NAØO ÑÖÔÏC AÁN ? Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN ♦ BEÂN NHAÄN KIT VÑK 8051: BEGIN KHÔÛI TAÏO 8051 ÔÛ CHEÁ ÑOÄ GIAO TIEÁP NOÁI TIEÁP NHAÄN BYTE ÑAÀU TIEÂN TREÂN MOÄT DOØNG CUÛA FILE SAO SAÙNH = 3AH NHAÄN BYTE TIEÁP THEO KTRA HEÁT DÖÕ LIEÄU TREÂN DOØNG YES NO NO YES Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN 2. CHÖÔNG TRÌNH ♦ BEÂN TRUYEÀN (MAÙY TÍNH) CHÖÔNG TRÌNH TRUYEÀN FILE DÖÕ LIEÄU (*.HEX) Döïa vaøo chöông trình truyeàn töøng byte kí töï coù söï theâm vaøo moät soá haøm ; 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 KIEÅM TRA HEÁT DÖÕ LIEÄU TREÂN FILE END YES NO Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN db ' to open file.hex and trasnmit',0dh,0ah db ' to exit the TERMINAL program',0dh,0ah db 0dh,0ah,'$' PROT_MS db ' ',0dh,0ah 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 phaàn code gioáng coù thay ñoåi nhö sau: ;----------------------------------------- CODE ------------------------------ ;------------------| ;Process char | ;------------------| ;Receive character type from keyboard buffer char_typed: mov ah,0 ;Code for read keyboard char int 16h ;Bios service ;Test for , and keys cmp ax,3b00h ; jne test_f4 jmp show_menu ; key pressed Test_F4: cmp ax,3e00h jne test_F9 jmp tran_file ; key pressed Test_F9: cmp ax,4300h ; je dos_exit jmp show_and_send ; key pressed ; Phaàn procedure theâm vao moät soá chöông trình con Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN ;------------------------------------------------------------------------------| ; PROCEDURES | ;------------------------------------------------------------------------------| tran_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: Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN 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 Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN 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,06h edel2: mov bx,0ffffh edel1: dec bx jnz edel1 dec ax jnz edel2 pop bx pop ax ret edelay endp Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN ;--------------------- 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 Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN 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 Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN 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 Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN 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 RET push di mov di,bx mov ah,1 Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN 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 ♦ BEÂN NHAÄN (KIT VÑK 8051): ;chuong trinh cua may nhan du lieu (receiver) dk equ 0c001h ht equ 0c000h org 5200h mov ie,#00h mov tmod,#20h mov th1,#-13 setb tr1 mov scon,#0fch mov 24h,#00 mov 25h,#00 xr1: jnb ri,xr1 ;nhan ma dau ':' clr ri mov a,sbuf cjne a,#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 11h,dph ;chuyen dia chi de giai ma hthi mov 10h,dpl mov a,sbuf Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN movx @dptr,a mov 14h,a ;cat de giai ma hien thi lcall decode inc dptr djnz r1,xr5 sjmp xr1 ;chuong trinh con giai ma hien thi decode: push dpl push dph mov dptr,#0200h mov a,11h ;lay byte B_A_H de giai ma hien thi push 0e0h ;cat A swap a ;xu li so thu nhat anl a,#0fh mov dpl,a movx a,@dptr mov 20h,a pop 0e0h ;lay lai A anl a,#0fh ;xu li so thu 2 mov dpl,a movx a,@dptr mov 21h,a mov a,10h ;lay byte B_A_L de giai ma hien thi push 0e0h ;cat A swap a ;xu li so thu nhat anl a,#0fh mov dpl,a movx a,@dptr mov 22h,a pop 0e0h ;lay lai A anl a,#0fh ;xu li so thu 2 mov dpl,a movx a,@dptr mov 23h,a mov a,14h ;lay byte DATA de giai ma hien thi push 0e0h ;cat A swap a ;xu li so thu nhat anl a,#0fh mov dpl,a Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN movx a,@dptr mov 26h,a pop 0e0h ;lay lai A anl a,#0fh ;xu li so thu 2 mov dpl,a movx a,@dptr mov 27h,a lcall display pop dph pop dpl ret display: mov r2,#80h ;tu dieu khien 8279 chong nhap nhay mov r0,#20h ;quan li dia chi ma hien thi dis1: mov dptr,#dk mov a,r2 movx @dptr,a mov dptr,#ht mov a,@r0 movx @dptr,a inc r2 inc r0 mov a,r0 cjne a,#28h,dis1 ret end Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN CHÖÔNG 1 HÖÔÙNG DAÃN SÖÛ DUÏNG KIT VI ÑIEÀU KHIEÅN 8051 I. GIÔÙI THIEÄU CAÁU TRUÙC PHAÀN CÖÙNG KIT VI XÖÛ LYÙ: 1. Taàn soá laøm vieäc: ? Kít vi ñieàu khieånsöû duïng vi ñieàu khieån 8051 hoaëc 8951 cuûa Intel vôùi taàn soá hoaït ñoäng 12MHZ. ? Caùc chöông trình veà thôøi gian ñöôïc vieát töông öùng vôùi ñòa chæ naøy. 2. Toå chöùc boä nhôù: a. Boä nhôù EPROM: Coù dung löôïng 16kbyte söû duïng 2 EPROM 2764, chöông trình heä thoáng chöùa ôû EPROM thöù nhaát, EPROM thöù 2 chöa söû duïng ñöôïc thieát keá ôû daïng socket. ? EPROM 1 coù ñòa chæ töø 0000H - 1FFFH. ? EPROM 2 coù ñòa chæ töø 2000H - 3FFFH. b. Boä nhôù RAM: Boä nhôù RAM coù dung löôïng 16kbyte söû duïng 2 IC 6264. ? RAM 1 coù ñòa chæ töø 4000H - 5FFFH. ? RAM 2 coù ñòa chæ töø 6000H - 7FFFH. ? Chöông trình coù theå söû duïng toaøn boä caùc vuøng nhôù RAM. Q G T P IK RC 8 D 9 E A F B 6 2 7 3 4 0 5 1 S Caùc phím nhaäp döõ lieäu Caùc phím chöùc naêng Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN 3. Caùc IC ngoaïi vi: trong heä thoáng coù söû duïng 2 IC 8255A duøng ñeå giao tieáp vôùi thieát bò ngoaïi vi. Baûng ñoà nhôù cuûa 2 IC 8255: Ñòa chæ cuûa caùc port 8255_1 8255-2 Port A 8000H A000H Port B 8001H A001H Port C 8002H A002H Thanh ghi ñieàu khieån 8003H A003H ? Caùc ngoõ ra cuûa IC 8255A -1, 8255 -2, ñöôïc ñöa ra beân ngoaøi baèng connect 64 chaân coù sô ñoà chaân tra ôû baûng tra. Moãi IC 8255A coù 3 port, moãi port coù 8 chaân ñieàu khieån neân soá chaân ñöa ra beân ngoaøi ñeå ñieàu khieån laø 48. 4. Khoái giaûi maõ hieån thò – queùt phím söû duïng IC 8279: Vuøng ñòa chæ söû duïng cuûa IC 8279 laø C000H - C001H, trong ñoù: ? Ñòa chæ C000H laø ñòa chæ duøng ñeå gôûi döõ lieäu caàn hieån thò vaø ñoïc maõ phím. ? Ñòa chæ C001H laø ñòa chæ duøng ñeå gôûi töø ñieàu khieån ra 8279 – ñoïc thanh ghi traïng thaùi. a. Phaàn giaûi maõ hieån thò: Goàm coù 8 led vôùi thöù töï Led 1 ñeán led 8 theo höôùng töø phaûi sang traùi nhö hình 2: Hình 2. ♦ Caáu truùc byte döõ lieäu cuûa led: p g f e d c b a Heä thoáng söû duïng Led loaïi Anode chung neân muoán ñoaïn naøo saùng thì bit döõ lieäu töông öùng vôùi ñoaïn ñoù baèng 1. Ñoaïn naøo taét thì bit töông öùng vôùi ñoaïn ñoù baèng 0. Ví duï muoán saùng soá “9” thì byte döõ lieäu seõ gôûi ra led laø: Led8 Led7 Led6 Led5 Led4 Led3 Led2 Led1 Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN 0 1 1 0 1 1 1 1 Töông öùng vôùi soá hex laø 6FH. Sau ñaây laø maõ 7 ñoaïn cuûa 1 soá chöõ soá vaø chöõ caùi: p g f e d c b a hex Soá 0 0 0 1 1 1 1 1 1 3F Soá 1 0 0 0 0 0 1 1 0 06 Soá 2 0 1 0 1 1 0 1 1 5B Soá 3 0 1 0 0 1 1 1 1 4F Soá 4 0 1 1 0 0 1 1 0 66 Soá 5 0 1 1 0 1 1 0 1 6D Soá 6 0 1 1 1 1 1 0 1 7D Soá 7 0 0 0 0 0 1 1 1 07 Soá 8 0 1 1 1 1 1 1 1 7F Soá 9 0 1 1 0 1 1 1 1 6F Chöõ A 0 1 1 1 0 1 1 1 77 Chöõ b 0 1 1 1 1 1 0 0 7C Chöõ C 0 0 1 1 1 0 0 1 39 Chöõ d 0 1 0 1 1 1 1 0 5E Chöõ E 0 1 1 1 1 0 0 1 79 Chöõ F 0 1 1 1 0 0 0 1 71 Chöõ P 0 1 1 1 0 0 1 1 73 Chöõ H 0 1 1 1 0 1 1 0 76 Chöõ U 0 0 1 1 1 1 1 0 3E Coù theå tìm caùc maõ töông öùng coøn laïi. ? Coù 2 caùch hieån thò döõ lieäu treân caùc Led: ? Caùch 1: khi gôûi döõ lieäu môùi ra ñòa chæ C000H thì döõ lieäu naøy seõ hieån thi ôû led 1, döõ lieäu tröôùc ñoù cuûa caùc led seõ dòch sang traùi theo chieàu muõi teân trong hình 3. Rieâng byte döõ lieäu tröôùc ñoù cuûa Led8 seõ dòch vaø maát ñi. Muõi teân naèm ngang chæ chieàu nhaän döõ lieäu töø vi ñieàu khieån ñöa ñeán led 1. Caùc muõi teân voøng cung chæ chieàu dòch chuyeån döõ lieäu. LED8 LED7 LED6 LED5 LED4 LED3 LED2 LED1 Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN ⊥ Chuù yù: neáu muoán xoùa heát maøn hình 8 led thì gôûi 8 byte 00h lieân tieáp ra A000h. ? Caùch 2: kieåu gôûi döõ lieäu ôû caùch 1 coøn ñöôïc goïi laø kieåu dòch chuyeån döõ lieäu tuaàn töï. Beân caïnh ñoù 8279 coøn cho pheùp gôûi döõ lieäu tröïc tieáp ñeán baát kyø led naøo trong 8 led – toå chöùc cuûa led khoâng coù gì thay ñoåi ñòa chæ gôûi döõ lieäu vaãn laø C000H nhöng moãi led coøn coù theâm 1 ñòa chæ ñieàu khieån nhö trong hình 4. Ñòa chæ ñieàu khieån cuûa led phaûi gôûi ra ñòa chæ C001H tröôùc khi gôûi döõ lieäu ra ñòa chæ C000H. b. Phaàn giaûi maõ baøn phím: Chöông trình con giaûi maõ baøn phím ñöôïc vieát taïi ñòa chæ 0223H söû duïng caùc thanh ghi R2, A, DPTR, R6, R7, oâ nhôù 41h. Khi goïi chöông trình con 0223H: • Neáu khoâng aán phím thì sau khi thöïc hieän xong chöông trình seõ trôû veà chöông trình chính vôùi noäi dung thanh ghi A =FFH. • Neáu coù aán phím thì maõ cuûa phím aán chöùa trong A. Chöông trình naøy neáu coù aán phím hoaëc khoâng aán phím ñeàu trôû veà chöông trình sau khi thöïc hieän xong vaø phaûi chuù yù caát döõ lieäu trong caùc thanh ghi khi goïi chöông trình con naøy. Baûng maõ caùc phím soá: Phím Maõ Phím M aõ Phím Maõ Phím Maõ 0 00 4 04 8 08 C 0C 1 01 5 05 9 09 D 0D 2 02 6 06 A 0A E 0E 3 03 7 07 B 0B F 0F Baûng maõ caùc phím chöùc naêng: Phím Maõ Phím M aõ T 10 S 14 G 11 15 R 12 P 16 13 K 17 LED8 LED7 LED6 LED5 LED4 LED3 LED2 LED1 80H 81H 82H 83H 84H 85H 86H 87H Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN II. HÖÔÙNG DAÃN SÖÛ DUÏNG KIT VI ÑIEÀU KHIEÅN 8051 1. Baøn phím: ♦ Kít vi ñieàu khieån coù taát caû laø 26 phím nhaán nhö hình 1 ñöôïc chia thaønh caùc nhoùm nhö sau: ? 16 phím nhaäp döõ lieäu cuûa chöông trình daïng soá thaäp luïc phaân töø 0 ñeán F ? Caùc phím chöùc naêng. 2. Chöùc naêng cuûa phím: ♦ Khi môùi caáp ñieän cho maùy 4 Led beân traùi seõ hieän thò 4 soá 0000, boán led beân phaûi taét. ♦ Neáu khoâng hieån thò ñuùng haõy nhaán phím “Q”. Phím “Q” coù chöùc naêng Reset maïch khi khôûi ñoäng hoaëc khi muoán thoaùt khoûi chöông trình vi ñieàu khieån ñang thöïc hieän (chöùc naêng nhö phím RESET cuûa maùy vi tính). 3. Chöùc naêng cuûa phím: ♦ Muoán nhaäp döõ lieäu môùi vaøo oâ nhôù coù ñòa chæ ví duï 4000, haõy duøng caùc phím nhaäp döõ lieäu ñaùnh soá 4000, ñòa chæ naøy seõ xuaát hieän ôû 4 led beân phaûi. ♦ Nhaán phím “S” thì ñòa chæ 4000 seõ thay theá cho ñòa chæ tröôùc ñoù ôû 4 led beân traùi. ♦ 4 led coøn laïi chæ coù 2 led saùng ñoù chính laø noäi dung cuûa oâ nhôù töông öùng vôùi ñòa chæ 4 led beân traùi. 4. Chöùc naêng cuûa phím: ♦ Duøng ñeå löu tröõ döõ lieäu vaøo oâ nhôù coù ñòa chæ ôû 4 Led beân traùi, ví duï muoán löu tröõ döõ lieäu laø “3F” vaøo oâ nhôù coù ñòa chæ laø 4000, haõy ñaùnh “3F” töø caùc phím döõ lieäu, döõ lieäu môùi “3F” seõ thay theá döõ lieäu cuõ tröôùc ñoù. ♦ Sau ñoù nhaán phím “ ↑ “ ñeå löu tröõ döõ lieäu naøy vaøo oâ nhôù 4000. Ñòa chæ seõ taêng leân 1 laø 4001 ñeå saün saøng nhaän döõ lieäu tieáp theo vaø 2 led beân traùi hieån thò noäi dung cuûa oâ nhôù 4001. ♦ Chöùc naêng cuûa phím naøy laø löu tröõ döõ lieäu ñoàng thôøi taêng ñòa chæ cuûa oâ nhôù. 5. Chöùc naêng cuûa phím: ♦ Coù chöùc naêng giaûm ñòa chæ cuûa oâ nhôù xuoáng 1 ñôn vò töông öùng vôùi moãi laàn nhaán. Ví duï muoán kieåm tra laïi oâ nhôù môùi vöøa nhaäp laø 4000 xem coù ñuùng laø döõ lieäu “3F” khoâng, haõy nhaán phím “ ↓ “. Neáu sai thì nhaäp laïi, neáu ñuùng thì nhaán phím taêng ñòa chæ ñeå naïp caùc döõ lieäu tieáp theo. Q S ↓ ↑ P Luaän Vaên Toát Nghieäp GVHD: NGUYEÃN ÑÌNH PHUÙ SVTH: NGUYEÃN NGOÏC TOAØN 6. Chöùc naêng cuûa phím: ♦ Sau khi nhaäp döõ lieäu cuûa moät chöông trình taïi ñòa chæ 4000, ñeå vi ñieàu khieån thöïc hieän chöông trình naøy haõy nhaán phím “P”. Khi ñoù treân maøn hình 8 Led seõ xuaát hieän “PC 4000”. Neáu muoán thöïc hieän chöông trình taïi ñòa chæ 4000 haõy nhaán phím taêng ñòa chæ, khi ñoù treân maøn hình seõ xuaát hieän theâm daáu “=“ nhö sau: “PC =4000’. Sau ñoù nhaán phím “G”. Chöông trình seõ ñöôïc thi haønh. ♦ Neáu chöông trình löu taïi ñòa chæ khaùc vôùi ñòa chæ 4000 thì tröôùc khi nhaán phím taêng ñòa chæ haõy ñaùnh ñòa chæ cuûa chöông trình ñoù vaøo baèng caùc phím nhaäp döõ lieäu. Sau ñoù nhaán phím taêng ñòa chæ, ví duï muoán thöïc hieän chöông trình taïi ñòa chæ 5000 thì treân maøn hình 8 led seõ hieån thò “PC =5000”. Nhaán tieáp phím “G” chöông trình seõ ñöôïc thi haønh taïi ñòa chæ 5000. 7. Chöùc naêng cuûa phím: ♦ Duøng ñeå xem noäi dung caùc thanh ghi, tröôùc tieân nhaán phím “R” vaø sau ñoù nhaán caùc phím thaäp phaân töông öùng töø “6” cho ñeán “F”. ? Nhaán phím thaäp phaân “A”: xem noäi dung thanh ghi A. ? Nhaán phím thaäp phaân “B”: xem noäi dung thanh ghi B. ? Nhaán phím thaäp phaân “C”: xem noäi dung thanh ghi C. ? Nhaán phím thaäp phaân “D”: xem noäi dung thanh ghi D. ? Nhaán phím thaäp phaân “E”: xem noäi dung thanh ghi E. ? Nhaán phím thaäp phaân “F”: xem noäi dung thanh ghi F. ? Nhaán phím thaäp phaân “8”: xem noäi dung thanh ghi H. ? Nhaán phím thaäp phaân “9”: xem noäi dung thanh ghi L. ? Nhaán phím thaäp phaân “7”: xem noäi dung caëp thanh ghi SP. ? Nhaán phím thaäp phaân “6”: xem noäi dung caëp thanh ghi PC. 8. Chöùc naêng cuûa phím: ♦ Phím naøy taùc ñoäng ñeán ngaét cöùng cuûa heä thoáng vi xöû lyù. Chöông trình seõ bò ngöøng sau khi nhaán phím “I”, neáu nhaán “I” theâm laàn nöõa heä thoáng seõ ñöôïc ñaët laïi traïng thaùi maëc ñònh ban ñaàu töông ñöông vôùi reset maùy baèng phím Q. 9. Chöùc naêng cuûa phím: ♦ Chöùc naêng cuûa phím naøy laø thöïc hieän chöông trình töøng böôùc. Trình töï nhaán phím gioáng nhö phím “G”. Neáu nhaán phím “G” ñeå thöïc hieän caû chöông trình taïi ñòa chæ chöùa trong caëp thanh ghi PC, ta nhaán phím “T” chöông trình seõ ñöôïc thöïc hieän töøng leänh taïi ñòa chæ chöùa trong PC. R I T

Các file đính kèm theo tài liệu này:

  • pdf8123.pdf
Tài liệu liên quan