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ỉ
                
              
                                            
                                
            
 
            
                
106 trang | 
Chia sẻ: Kuang2 | Lượt xem: 1287 | Lượt tải: 0
              
            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:
8123.pdf