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: 1108 | 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