Vào đầu những năm thập niên 60, kỹ thuật số đã đưa vào ứng dụng trong thực tế nhưng ở phạm vi nhỏ. Cho đến ngày hôm nay kỹ thuật số đã được phát triển một cách mạnh mẽ và được ứng dụng vào mọi lãnh vực của cuộc sống. Từ những chiếc máy vi tính (computer), máy CD, máy VDC, truyền hình số cho đến các băng diã CD đã dần dần thay thế các máy và băng từ tín hiệu tương tự (analog) bởi bộ phân giải rộng, độ chính xác cao và dễ dàng trong quá trình xử lý tín hiệu. Tuy nhiên trong cuộc sống hằng ngày chúng ta lại thường tiếp xúc với những tín hiệu tương tự nhiều hơn. vd: Điện thoại, sóng đài truyền hình, dòng điện sinh hoạt, âm thanh vì thế phải cần có một sự chuyển đổi từ tín hiệu tương tự (Analog) – số (Digital) để xử lý dữ liệu, sau đó lại chuyển đổi ngược lại từ số (Digital) – tương tự (Analog) để đưa vào điều khiển, khống chế thiết bị. Đó là những lý do để em thực hiện đề tài này.
85 trang |
Chia sẻ: Dung Lona | Lượt xem: 1264 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Ứng dụng kit 8051 dùng để chuyển đổi a/d & d/a, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
giaù trò maëc ñònh laø 07H. Do ñoù stack maëc ñònh baét ñaàu taïi 08H. Neáu trình khoâng khôûi ñoäng laïi stack thì caùc thanh ghi 1, 2, 3 khoâng theå söû duïng vì noù ñöôïc duøng laøm stack.
Stack ñöôïc truy xuaát moät caùch roõ raøng baèng caùc leänh PUSH, POP ñeå löu tröõ taïm thôøi hay truy xuaát döõ lieäu. Noù cuõng coù theå ñöôïc truy xuaát ngaàm khi coù caùc leänh goïi ñeán chöông trình con. Caùc leänh ACALL, LCALL hay ngaét seõ ñaåy thanh ghi ñeám chöông trình (PC) vaøo stack. Leänh RET, RETI traû giaù trò trong stack laïi cho PC.
Con troû döõ lieäu (DPTR)
Con troû döõ lieäu duøng ñeå truy xuaát maõ hay döõ lieäu töø boä nhôù ngoaøi vaø thanh ghi 16 bit. Thanh ghi naøy goàm hai thanh ghi DPL (byte thaáp, ñòa chæ 82H) vaø DPH (byte cao, ñòa chæ 83H). Ba leänh sau ñaây seõ ghi giaù trò 55H vaøo RAM ngoaøi taïi ñòa chæ 1000H.
MOV A, #55H;
MOV DPTR, #1000H;
MOV @DPTR, A;
Caùc thanh ghi Port:
Caùc port cuûa 8051 goàm coù port 0 ñòa chæ 80H, port 1 ñòa chæ 90H, port 2 ñòa chæ A0H, port 3 ñòa chæ B0H. Caùc port 0, 2 vaø 3 khoâng ñöôïc duøng ñeå xuaát nhaäp neáu ñang söû duïng boä nhôù ngoaøi. Coøn laïi port 1 coù theå duøng ñeå xuaát nhaäp (I/O).
Taát caû caùc port ñeàu coù theå duøng truy xuaát bit. Ñieàu naøy cung caáp cho vi ñieàu khieån khaû naêng giao tieáp raát maïnh. Ta coù theå duøng chaân P1.7 ñeå ñoùng môû ñoäng cô. Chaân P1.7 noái vôùi transitor ñeå laùi moät relay ñoùng môû ñoäng cô. Leänh SETB P1.7 môû ñoäng cô. Leänh CLR P1.7 taét ñoäng cô.
Hai leänh treân duøng toaùn töû daáu chaám ñeå xaùc ñònh ñòa chæ bit trong moät byte.
Caùc thanh ghi boä ñònh thôøi:
8051 coù hai boä ñònh thôøi 16 bit. Timer 0 coù ñòa chæ 8AH (TL0 byte thaáp) vaø 8DH (TH1 byte cao). Ngoaøi boä ñònh thôøi coøn coù hai thanh ghi: thanh ghi ñieàu khieån TCON ñòa chæ 88H vaø thanh ghi xaùc ñònh mode cho timer TMOD ñòa chæ 89H. Trong ñoù chæ coù thanh ghi TCON truy xuaát ñöôïc töøng bit.
Caùc thanh ghi coång noái tieáp:
8051 chöùa coång noái tieáp beân trong MCU ñeå giao tieáp vôùi caùc thieát bò noái tieáp nhö thieát bò ñaàu cuoái, modem v.v… Coång noái tieáp goàm coù hai thanh ghi: moät thanh ghi ñeäm SBUF laø naïp döõ lieäu ñeå truyeàn ñi. Ñoïc SBUF laø nhaän döõ lieäu ñaõ thu ñöôïc vaøo. Caùc mode truyeàn coù theå ñöôïc laäp trình thoâng qua thanh ghi ñieàu khieån coång keá tieáp. Thanh ghi naøy coù theå truy xuaát bit vaø coù ñòa chæ 98H.
Caùc thanh ghi ngaét:
8051 coù 5 nguoàn ngaét vaø hai möùc öu tieân. Caùc ngaét bò caám khi reset heä thoáng. Caùc ngaét ñöôïc cho pheùp thoâng qua thanh ghi IE coù ñòa chæ 0AH. Caùc möùc öu tieân cuõng ñöôïc set bôûi thanh ghi IP taïi ñòa chæ B8H. Caû hai thanh ghi naøy ñeàu coù theå truy xuaát bit.
IE coù ñòa chæ A8H. Ngaét chæ ñöôïc chaáp nhaän khi thanh ghi naøy ñaõ ñöôïc laäp trình.
Thanh ghi PCON (Power Control Register)
Thanh ghi PCON coù ñòa chæ 87H, chöùa caùc bits ñieàu khieån linh tinh, ñöôïc toùm taét trong baûng 4.4.
Bit SMOD nhaân ñoâi toác ñoä truyeàn noái tieáp ôû caùc mode 1, 2 vaø 3. Caùc bit 4, 5, 6 khoâng ñöôïc ñònh nghóa. Bit 3 vaø 2 laø hai côø ñöôïc tuøy yù trong laäp trình öùng duïng.
Caùc bit PD (power down) vaø IDL (idle) ñeàu coù trong caùc hoï IC MCS-51 nhöng chæ vôùi IC duøng CMOS maø thoâi.
Leänh set bit IDL laø leänh ñöôïc thi haønh cuoái cuøng tröôùc khi CPU vaøo cheá ñoä idle. ÔÛ tín hieäu naøy cheá ñoä xung clock ñöôïc ngaét ra khoûi CPU, nhöng khoâng ngaét ra khoûi ngaét quaõng, timer vaø coång noái tieáp. Traïng thaùi CPU vaø noäi dung caùc thanh ghi ñöôïc baûo toaøn. Caùc chaân cuûa coång song song ñöôïc giöõ ôû möùc traïng thaùi cuûa chuùng. ALE vaø PSEN ôû möùc cao.
Caùc cheá ñoä idle keát thuùc khi coù baát kyø moät ngaét naøo hoaëc reset heä thoáng, ñoàng thôøi bit IDL bò xoùa.
+ Power down Mode
Bit
Kyù hieäu
Moâ taû
7
6
5
4
3
2
1
0
SOMD
GF1
GF0
PD
IDL
Toác ñoä keùp; khi ñöôïc set, toác ñoä truyeàn noái tieáp ñöôïc nhaân ñoâi caùc cheá ñoä 1,2,3.
Khoâng ñöôïc ñònh nghóa
“nt”
“nt”
Côø duøng cho muïc ñích toång quaùt 1
Côø duøng cho muïc ñích toång quaùt 2
Power down, set mode power down. Chæ thoaùt khi reset
Idle mode, set mode idle. Thoaùt khi coù ngaét hoaëc reset
Baûng 4.4 Toùm taét thanh ghi PCON
Leänh set bit PD laø leänh cuoái cuøng tröôùc khi CPU chuyeån sang mode power down.
ÔÛ cheá ñoä naøy: (1) boä dao ñoäng noäi ngöng hoaït ñoäng, (2) caùc chöùc naêng bò döøng, (3) noäi dung RAM noäi ñöôïc giöõ ôû möùc logic cuûa chuùn, (5) ALE vaø PSEN ôû möùc thaáp. Chæ coù theå thoaùt khoûi cheá ñoä naøy khi reset heä thoáng.
Khi ôû cheá ñoä power down, Vcc coù theå giaûm ñeán 2V. Löu yù caàn phaûi traû laïi möùc aùp 5V cho Vcc khi thoaùt khoûi cheá ñoä power down.
VI – BOÄ NHÔÙ NGOAØI
Môû roäng boä nhôù laø moät khaû naêng quan troïng ñoái vôùi vi ñieàu khieån nhaèm traùnh gaëp beá taéc trong vaán ñeà thieát keá. Hoï MCs-51 coù theå môû roäng 64Kbs vaø boä nhôù maõ leänh 64Kbs döõ lieäu. Caùc IC giao tieáp ngoaïi vi cuõng coù theå theâm vaøo ñeå taêng naêng xuaát nhaäp. Noù trôû thaønh moät phaàn cuûa boä döõ lieäu ngoaïi vaø ñöôïc giaûi maõ I/O nhö boä nhôù.
Khi boä nhôù ngoaøi ñöôïc söû duïng, port 0 khoâng ñöôïc duøng laøm coång xuaát nhaäp. Noù trôû thaønh bus duøng ñeå phaân keânh ñòa chæ vaø döõ lieäu, ALE choát noù nhö laø bytes thaáp cuûa bus ñòa chæ khi baét ñaàu moãi chu kyø truy xuaát boä nhôù ngoaøi. Port 2 thöôøng duøng laøm byte cao cuûa bus ñòa chæ.
Chu kyø boä nhôù
A0 ¸ A15 Ñòa chæ
D0 ¸ D7 Döõ lieäu
(a) Khoâng phaân keânh (24 chaân)
Chu kyø boä nhôù
AD8 ¸ AD15 Ñòa chæ
AD0 ¸ AD7 Ñòa chæ Döõ lieäu
(b) Phaân keânh (16 chaân)
Hình 4.5 Phaân keânh bus ñòa chæ vaø bus döõ lieäu
Hình treân moâ taû vieäc phaân keânh vaø khoâng phaân keânh bus ñòa chæ vaø bus döõ lieäu. Neáu khoâng phaân keânh, vôùi 16 chaân ñòa chæ vaø 8 chaân döõ lieäu ta coù 24 chaân cho bus ñòa chæ vaø bus döõ lieäu. Trong khi ñoù neáu phaân keânh, 8 chaân döõ lieäu ñöôïc duøng chung vôùi 8 chaân thuoäc byte thaáp cuûa bus ñòa chæ neân chæ coù 16 chaân cho bus ñòa chæ vaø bus döõ lieäu. Ñieàu naøy coù yù nghóa lôùn trong vieäc cheá taïo IC.
Thöù töï phaân keânh nhö sau : ôû nöõa chu kyø ñaàu, byte thaáp cuûa ñòa chæ xuaát ra port 0 vaø ñöôïc choát baèng ALE. Byte naøy ñöôïc choát ôû boä choát trong suoát chu kyø boä nhôù. Trong nöõa chu kyø tieáp theo port 0 laø bus döõ lieäu, coù theå xuaát nhaäp tuøy yù.
Truy xuaát boä nhôù maõ leänh ngoaøi (External Code memory):
Boä nhôù maõ ngoaøi ñöôïc ñoïc baèng tín hieäu PSEN (hình 4.6). Trong moät chu kyø maùy ALE taùc ñoäng 2 laàn vaø 2 bytes ñöôïc ñoïc töø boä nhôù chöông trình. Giaûn ñoà thôøi gian cuûa hoaït ñoäng naøy ñöôïc goïi laø chu kyø laáy leänh (hình 4.7).
Truy xuaát boä nhôù döõ lieäu ngoaøi (External Code memory):
Ñaây laø boä nhôù chöùa döõ lieäu, thöôøng laø RAM vaø ñöôïc truy xuaát bôûi tín hieäu RD vaø WR. Döõ lieäu naøy chæ ñöôïc truy xuaát baèng leänh MOVX thoâng qua thanh ghi con troû döõ lieäu DPTR, hoaëc R0, R1.
RAM giao tieáp vôùi 8051 gioáng nhö EPROM. Ngoaïi tröø chaân RD ñöôïc noái vôùi chaân OE vaø chaân WR ñöôïc noái vôùi chaân W. Coøn laïi caùc bus döõ lieäu vaø ñòa chæ noái nhö EPROM. Vôùi 16 ñöôøng ñòa chæ ta coù theå coù ñeán 64Kbs cho vuøng nhôù döõ lieäu.
Giaûn ñoà thôøi gian cuûa vieâc ñoïc vuøng nhoù döõ lieäu ngoaøi khi thi haønh leänh “MOV A,@DPRT” ñöôïc cho ôû hình 4.8. Löu yù chæ coù chaân RD ñöôïc duøng cho pheùp RAM.
Giaûn ñoà thôøi gian cuûa vieäc ghi cuõng töông töï töø ñöôøng WR xuoáng möùc thaáp vaø döõ lieäu xuaát ra port 0.
Port 2 coù theå khoâng duøng laøm byte cao cuûa bus ñòa chæ trong heä thoáng khoâng söû duïng vuøng nhôù maõ ngoaøi maø söû duïng vuøng nhôù döõ lieäu ngoaøi nhoû. Taùm bit ñòa chæ coù theå truy xuaát ñöôïc moät vuøng nhôù 256 bytes, ñöôïc goïi laø moät trang boä nhôù. Neáu vuøng nhôù naøy lôùn hôn 256 bytes ta coù theå duøng theâm moät vaøi chaân cuûa port 2 ñeå choïn trang.
Khi truy xuaát moät trang (256 bytes) cuûa vuøng döõ lieäu ngoaøi ta coù theå duøng R0 hoaëc R1 ñeå laøm con troû ñòa chæ troû ñeán byte döõ lieäu caàn truy xuaát. Ví duï nhöõng leänh ñoïc noäi dung cuûa RAM ngoaøi coù ñòa chæ 0050H vaøo thanh tích luõy.
MOV R0, #50H ;
MOV A, @R0 ;
Giaûi maõ ñòa chæ:
Neáu 8051 söû duïng caû EPROM vaø RAM ngoaøi ñoøi hoûi phaûi giaûi maõ ñòa chæ. Vieäc giaûi maõ ñòa chæ raát quen thuoäc ñoái vôùi haàu heát vi xöû lyù. Ví duï neáu duøng EPROM 8K vaø RAM 8K, bus ñòa chæ giaûi maõ ñeå choïn IC giôùi haïn trong 8Kbytes: 0000H ñeán 1FFFH, vaø 2000H ñeán 3FFFH, v.v…
Thoâng thöôøng ta duøng IC giaûi maõ 74138 vôùi ngoõ vaøo laø 3 bits cao nhaát cuûa bus ñòa chæ. Do ñoù moãi ngoõ töông öùng vôùi 8Kbs. Caùc ngoõ ra naøy ñöa vaøo caùc chaân CS cuûa caùc IC nhôù. Löu yù söï phaân chia tín hieäu cho pheùp xuaát cuûa EPROM vaø RAM khaùc nhau (RD cho RAM vaø PSEN cho EPROM). 8051 coù theå coù ñeán 64Kbytes cho moãi vuøng ROM vaø RAM.
Hình 4.8: Giaûn ñoà thôøi gian khi ñoïc döõ lieäu töø boä nhôù ngoaøi
Söï choàng laép cuûa vuøng maõ leänh vaø döõ lieäu ngoaøi:
Vì boä nhôù maõ leänh chæ ñöôïc ñoïc neân seõ baát tieän trong vieäc phaùt trieån phaàn meàm. Laøm theá naøo ñeå söûa loãi cuûa chöông trình naèm trong kit khi boä nhôù maõ leänh chæ coù theå ñoïc. Bieän phaùp thöôøng ñöôïc söû duïng ôû ñaây laø choàng laép hai vuøng maõ leänh vaø döõ lieäu leân nhau. Tín hieäu PSEN duøng ñeå ñoïc maõ leänh vaø tín hieäu RD duøng ñeå ñoïc döõ lieäu trong cuøng moät boä nhôù. RAM chöùa caû chöông trình vaø döõ lieäu. Hai tín hieäu RD vaø PSEN ñöôïc ñöa vaøo coång AND. Ngoõ ra cuûa coång AND noái vôùi chaân OE cuûa RAM. Maïch ôû hình 4.9 cho pheùp ghi döõ lieäu vaøo RAM. Vì vaäy chöông trình coù theå ñöôïc load vaøo RAM (baèng caùch ghi döõ lieäu vaøo RAM) vaø thi haønh (baèng caùch truy xuaát nhö boä nhôù maõ leänh).
RAM
W
OE
WR
RD
PSEN
Hình 4.9 Maïch taïo neân söï choàng laép hai vuøng nhôù
VII – HOAÏT ÑOÄNG RESET
8051 ñöôïc reset khi giöõ chaân RST ôû möùc cao ít nhaát trong hai chu kyø maùy vaø sau ñoù traû veà möùc thaáp. RST coù theå ñöôïc noái vôùi switch hoaëc maïng tuï, trôû ñeå taïo tính reset.
Traïng thaùi cuûa taát caû thanh ghi sau khi reset heä thoáng toùm taét trong baûng 4.5. Thanh ghi ñeám chöông trình ñöôïc naïp giaù trò 0000H sau khi reset. Khi RST xuoáng möùc thaáp chöông trình luoân baét ñaàu taïi ñieåm 0000H. Noäi dung caùc thanh ghi trong RAM noäi khoâng bò aûnh höôûng bôûi hoaït ñoäng reset.
Thanh ghi
Noäi dung
PC
ACC
B
PSW
SP
DPTR
PORT 0..3
IP
IE
Timer registers
SCON
SBUF
PCON (HMOS)
PCON (CMOS)
0000H
00H
00H
00H
07H
0000H
FFH
XXX00000B
0XX00000B
00H
00H
00H
0XXXXXXXB
0XXX0000B
Baûng 4.5 Giaù trò caùc thanh sau khi reset heä thoáng
Chöông IV
TOÙM TAÉT TAÄP LEÄNH
I – GIÔÙI THIEÄU:
Chöông trình ñöôïc xaây döïng neân töø taäp leänh, tuaân theo cuù phaùp vaø caáu truùc logic. Moät hoï vi xöû lyù luoân ñi keøm theo taäp leänh cuûa noù. Chöông naøy gôùi thieäu taäp leänh cuûa hoï MCs-51, vieäc ñònh vò vaø moät vaøi ví duï veà caùc tình huoáng gaëp phaûi khi laäp trình. Chöông naøy khoâng baøn veà kyõ thuaät laäp trình cuõng nhö veà trình bieân dòch.
Taäp leänh hoï vi ñieàu khieån MCx-51 toái öu cho caùc ñieàu khieån öùng duïng 8 bit. Noù cung caáp caùc caùch ñònh vò nhanh, goïn thuaän tieän cho vieäc truy xuaát döõ lieäu 8 bit trong vuøng RAM noäi. Taäp leänh cuõng ñöa ra moät soá leänh thao taùc treân bit thuaän tieän cho vieäc ñieàu khieån vaø caùc heä thoáng logic coù yeâu caàu xöû lyù luaän lyù.
Laø moät xöû lyù 8 bit, caùc leänh cuûa 8051 laø maõ 8 bit. Do ñoù taäp leänh coù toái ña 256 leänh. Trong ñoù 255 leänh ñöôïc ñònh nghóa. Trong moät leänh, ngoaøi maõ leänh (1 byte) ra coøn coù theå coù döõ lieäu vaø ñòa chæ. Trong taäp leänh 8051 coù 139 leänh 1 byte, 92 leänh 2 byte vaø 24 leänh 3 byte. Phaàn phuï luïc seõ moâ taû ñaày ñuû veà moãi maõ, veà maõ gôïi nhôù, soá byte leänh, soá chu kyø haønh leänh.
II – CAÙC MODE ÑÒNH VÒ (ADDRESSING MODE)
Khi leänh thao taùc treân döõ lieäu, moät caâu hoûi ñöôïc ñaët ra laø “döõ lieäu ôû ñaâu?”. Ñeå traû lôøi caâu hoûi naøy ta xem xeùt qua caùc mode ñònh vò cuûa 8051.
Ñònh vò döõ lieäu laø moät phaàn quan troïng trong taäp leänh. Chuùng xaùc ñònh döõ lieäu nguoàn vaø ñích theo nhöõng caùch khaùc nhau tuøy theo caùch laäp trình. Trong phaàn naøy ta seõ lhaûo saùt kyõ töøng mode ñònh vò vaø cho moãi loaïi moät ví duï. Coù 8 mode ñònh vò:
Thanh ghi
Tröïc tieáp
Giaùn tieáp
Töùc thôøi (Immediate)
Töông ñoái
Xa
Chæ soá
Ñònh vò baèng thanh ghi:
Ngöôøi laâp trình truy xuaát döõ lieäu chöùa trong caùc thanh ghi töø R0 ñeán R7 thoâng qua teân goïi cuûa chuùng. Ñòa chæ cuûa 8 thanh ghi naøy ñöôïc giaûi maõ thoâng qua bit thaáp nhaát cuûa chuùng. Do ñoù maõ leänh vaø toaùn haïng ñòa chæ ñöôïc gom chung vaøo 1 byte.
Opcode 5-bit
n
n
n
Ví duï leänh sau coäng noäi dung R7 vaøo thanh ghi tích luyõ:
ADD A, R7;
Maõ leänh laø 001011111B. Trong ñoù 5 bit cao 00101 chæ maõ leänh 3 bit thaáp 111 chæ thanh ghi R7.
Moät vaøi leänh xaùc ñònh tröïc tieáp treân thanh ghi nhö thanh ghi tích luyõ, con troû döõ lieäu …do ñoù khoâng caàn ñeán caùc bit ñòa chæ. Baûn thaân maõ leänh ñaõ moâ taû thanh ghi.
Ñònh vò tröïc tieáp :
Ñònh vò tröïc tieáp coù theå truy xuaát baát kyø byte naøo trong vuøng nhôù noäi hoaëc caùc thanh ghi chöùc naêng. Moät byte ñöôïc theâm vaøo maõ leänh ñeå xaùc ñònh vò trí thanh ghi ñöôïc duøng.
Opcode 8-bit
Direct Adress 8-bit
Tuøy thuoäc vaøo bit cao nhaát cuûa byte ñòa chæ tröïc tieáp, moät trong hai vuøng nhôù seõ ñöôïc choïn. Khi bit 7 cuûa ñòa chæ tröïc tieáp baèng 0: ñòa chæ tröïc tieáp coù giaù trò töø 0 ñeán 127 (00H – 0FH) vaø 128 bytes thaáp cuûa on chip RAM ñöôïc tham khaûo ñeán, Taát caû caùc I/O port, thanh ghi chöùc naêng. Thanh ghi ñieàu khieån, thanh ghi traïng thaùi coù ñòa chæ töø 128 ñeán 255 (80H-FFh). Khi bit 7=1 byte ñòa chæ tröïc tieáp naèm trong giôùi haïn naøy, töông öùng vôùi thanh ghi chöùc naêng seõ ñöôïc truy xuaát. Ví duï port 0 vaø port 1 coù ñòa chæ töông öùng laø 80H vaø 90H. Ta khoâng caàn phaûi bieát ñòa chæ cuûa nhöõng thanh ghi naøy, trình bieân dòch luoân hieåu caùc maõ gôïi nhôù ngaén goïn cuûa noù nhö P0, P1, TMOD…
Ñònh vò giaùn tieáp:
Laøm theá naøo ñeå nhaän daïng moät bieán, neáu ñòa chæ cuûa noù ñöôïc xaùc ñònh, tính toaùn, thay ñoåi khi chöông trình ñang chaïy. Vaán ñeà naøy ñöôïc ñaët ra khi thao taùc caùc vò trí nhôù lieân tuïc, chuoãi soá, hay xaâu kyù töï. Thanh ghi vaø ñòa chæ tröïc tieáp khoâng theå duøng vì toaùn haïng ñòa chæ phaûi ñöôïc nhaân bieát trong thôøi gian bieân dòch.
Ñeå giaûi quyeát vaán ñeà treân 8051 söû duïng ñòa chæ giaùn tieáp. R1 vaø R0 ñöôïc coi nhö nhöõng con troû. Noäi dung cuûa chuùng chæ ñeán moät ñòa chæ naøo ñoù trong RAM khi ñoïc hoaëc ghi döõ lieäu. Bit thaáp nhaát trong byte maõ leänh xaùc ñònh thanh ghi naøo (R0 hay R1) ñöôïc duøng laøm con troû.
Ngoân ngöõ assembly cuûa 8051 duøng kyù hieäu @ ñaët tröôùc R0 hay R1 ñeå moâ taû ñònh vò giaùn tieáp. Ví duï, neáu R1 chöùa 40H vaø taïi vò trí 40H trong boä nhôù noäi chöùa giaù trò 55H, leänh:
MOV A, @R1;
Chuyeån giaù trò 55H vaøo thanh ghi tích luyõ.
Opcode 7-bit
i
Ñònh vò giaùn tieáp trôû neân quan troïng khi phaûi thao taùc töøng byte boä nhôù noäi moät caùch lieân tuïc. Ví duï nhöõng leänh sau seõ xoùa vuøng RAM töø ñòa chæ 60H ñeán 70H:
MOV R0, #60H;
MOV @R0, #0;
LOOP: INC R0;
CJNE R0, #80H, LOOP;
Leänh ñaàu tieân khôûi ñoäng thanh ghi vôùi ñòa chæ ñaàu tieân cuûa khoái boä nhôù. Leänh thöù hai duøng leänh giaùn tieáp ñeå chuyeån giaù trò 00H vaøo vò trí ñöôïc troû bôûi R0. Leänh thöù 3 taêng giaù trò con troû ñeán ñòa chæ tieáp theo. Vaø leänh cuoái kieåm tra xem con troû ñeán cuoái khoái chöa. Leänh kieåm tra duøng giaù trò 80H chöù khoâng phaûi giaù trò 7FH vì vieäc xaûy ra sau vieäc dòch chuyeån giaùn tieáp. Nhö vaäy chaéc chaén cuoái cuøng seõ ñöôïc ghi tröôùc khi keát thuùc.
Ñònh vò töùc thôøi :
Khi moät toaùn haïng nguoàn laø moät haèng soá khoâng phaûi laø moät bieán. Haèng soá coù theå ñöôïc gom vaøo trong leänh nhö moät döõ lieäu töùc thôøi. Byte ñöôïc theâm vaøo seõ chöùa giaù trò.
Immediate data
Opcode
Trong ngoân ngöõ assembly toaùn haïng töùc thôøi ñöôïc ñaët tröôùc baèng kyù hieäu soá (#). Toaùn haïng coù theå laø moät haèng soá, kyù hieäu hoaëc toaùn töû. Trình bieân dòch seõ tính toaùn giaù trò vaø gaùn döõ lieäu töùc thôøi vaøo leänh.
Taát caû caùc leänh duøng ñònh vò töùc thôøi ñeàu söû duïng haèng döõ lieäu 8 bit. Ngoaïi tröø khi khôûi ñoäng thanh ghi con troû döõ lieäu (DPTR)
MOV DPTR, #40000H;
Laø moät leänh 3 bytes naïp soá 16 bit vaøo thanh ghi con troû.
Ñònh vò töông ñoái:
Ñònh vò töông ñoái chæ duøng trong caùc leänh jump. Ñòa chæ töông ñoái (offset) laø moät soá 8 bit coù daáu ñöôïc coäng vaøo thanh ghi ñeám chöông trình ñeå chæ ra ñòa chæ cuûa leänh tieáp theo phaûi thi haønh. Vì offset laø moät soá 8 bit coù daáu neân taàm nhaûy chæ giôùi haïn trong khoaûng caùch +127 vaø –128 vò trí.
Tröôùc khi coäng, thanh ghi ñeám chöông trình taêng leân ñeán ñòa chæ sau leänh jump. Vì vaäy, ñòa chæ môùi laø töông ñoái so vôùi ñòa chæ leänh keá tieáp chöù khoâng phaûi ñòa chæ leänh jump.
Thoâng thöôøng chi tieát naøy khoâng lieân quan ñeán ngöôøi laäp trình, khi maø ñích nhaûy ñeán ñöôïc moâ taû baèng moät nhaõn. Trình bieân dòch seõ ñònh giaù trò offset töông ñoái töông öùng.
Relative offset
Opcode
Ví duï neáu nhaõn THERE ñöôïc ñaët taïi leänh coù ñòa chæ 1040H vaø leänh
SJMP THERE
ÔÛ taïi vò trí 1000H vaø 1001H. Trình bieân dòch seõ gaùn giaù trò offset töông ñoái laø 3EH taïi byte thöù hai cuûa leänh.
Ñònh vò tuyeät ñoái:
Ñònh vò tuyeät ñoái chæ duøng ñoái vôùi caùc leänh ACALL, AJMP. Leänh 2 byte naøy cho pheùp reõ nhaùnh trong phaïm vi 2Kbytes boä nhôù. 5bit cao cuûa ñòa chæ ñích laø 5 bit cao hieän thôøi trong thanh ghi ñeám chöông trìng. Vì vaäy leänh theo sau leänh reõ nhaùnh vaø leänh keát thuùc reõ nhaùnh keát thuaùc naèm trong phaïm vi 2Kbytes.
Addr7 - Addr0
Addr 10 – Addr8
Opcode 5-bit
Ñònh vò xa:
Ñònh vò xa chæ söû duïng cho caùc leänh LCALL vaø LMP. Caùc leänh 3-byte naøy coù ñòa chæ ñích laø soá 16-bit ñaët trong byte 2 vaø byte 3. Ñieàu thuaän tieän laø toaøn boä vuøng maõ leänh ñeàu coù theå ñöôïc söû duïng. Nhöng moät ñieàu baát tieän laø leänh 3-byte quaù daøi vaø phuï thuoäc vò trí (position-dependent). Phuï thuoäc vò trí laø moät ñieäu baát tieän bôûi vì chöông trình khoâng theå thi haønh taïi moät ñòa chæ khaùc.
Opcode Addr15 – Addr8 Addr7 – Addr0
Ñònh vò chæ soá :
Ñònh vò chæ soá duøng moät thanh ghi cô sôû (PC hoaëc DPTR) vaø moät thanh ghi laøm offset (ACC) taïo ra moät ñòa chæ seõ bò taùc ñoäng bôûi caùc leänh JMP hoaëc MOVC.
Thanh ghi neàn offset ñòa chæ taùc ñoäng
PC or DPTR + ACC =
Caùc ví duï ñöôïc cung caáp trong phuï luïc cho caùc leänh:
MOVC A, @A+
JMP @A+DPTR
III – PHAÂN LOAÏI LEÄNH:
Caùc leänh 8051 ñöôïc chia thaønh 5 nhoùm nhö sau:
Soá hoïc
Logic
Trao ñoåi döõ lieäu
Luaän lyù
Reõ nhaùnh chöông trình
Caùc leänh soá hoïc
Caùc leänh soá hoïc thöôøng söû duïng 4 mode ñònh vò. Leänh ADD A coù theå ñöôïc vieát baèng nhieàu caùch khaùc nhau:
ADD A, 7FH (Ñònh vò tröïc tieáp)
ADD A, @R0 (---------giaùn tieáp)
ADD A, R7 (---------thanh ghi)
ADD A, #35H (--------- töùc thôøi)
Taát caû caùc leänh soá hoïc thi haønh trong moät chu kyø maùy, ngoaïi tröø leänh INC DPTR (2 chu kyø maùy), MUL AB vaø DIV AB (4 chu kyø maùy).
8051 cung caáp caùch ñònh vò raát maïnh cho vuøng RAM noäi cuûa noù. Baát kyø byte nhôù naøo cuõng ñeàu coù teå taêng, giaûm baèng ñònh vò tröïc tieáp maø khoâng caàn thoâng qua thanh ghi tích luyõ.
Leänh INC coù theå thao taùc treân con troû döõ lieäu (16 bit). Nhöng leänh DEC khoâng ñöôïc ñònh nghóa treân con troû. Do ñoù ñeå thöïc hieän ñöôïc ñieàu naøy ta coù caùc leänh sau:
DEC DPL ; giaûm byte thaáp DPTR
MOV R7, DPL ; chuyeån vaøo DPL
CJNE R7, #0FFH, SKIP ; neáu vöôït quaù FF
DEC DPH ; giaûm luoân byte cao
SKIP : (tieáp tuïc)
Caùc leânh MUL AB vaø DIV AB chæ thao taùc treân caùc thanh ghi A vaø B.
Leänh Logic :
Caùc leänh logic bieåu dieãn caùc toaùn töû luaän lyù nhö AND, OR, EA-OR vaø NOT … Caùc leänh naøy treân töøng bit cuûa byte döõ lieäu. Ví duï thanh ghi ACC chöùa soá 10101101B thì leänh:
ANL A, #10110010B
Chöùa keát quaû 10100000 vaøo thanh ghi ACC. Caùc mode ñònh vò trong leänh logic cuõng gioáng nhö trong leänh soá hoïc. Taát caû caùc leänh logic duøng ñeán thanh ghi ACC nhö moät toaùn haïng ñeàu laø nhöõng leänh moät chu kyø. Caùc leänh khaùc ñeàu chieám 2 chu kyø maùy.
Leänh logic coù theå thao taùc tröïc tieáp baát cöù byte naøo trong vuøng nhôù noäi. Leänh XRL , #data ñaûo nhanh vaø deã daøng caùc bit cuûa port.
XRL P1, #0FFH;
Leänh naøy moâ taû hoaït ñoäng read-modify-write. 8 bit cuûa port 1 ñöôïc ñoïc, sau ñoù moãi bit cuûa XOR vôùi bit töông öùng trong byte döõ lieäu töùc thôøi ñeàu laø 1, XOR seõ ñaûo moãi bit ñöôïc ñoïc. Keát quaû ñöôïc vieát trôû laïi port 1.
Caùc leänh chuyeån dòch döõ lieäu:
RAM noäi
Caùc leänh chuyeån dòch döõ lieäu trong vuøng RAM noäi chæ chieám 1 hoaëc 2 chu kyø maùy. Leänh coù daïng:
MOV ,
Moät neùt ñaëc tröng cuûa hoï MSC-51 laø stack naèm trong vuøng RAM noäi vaø lôùn daàn leân phía teân cuûa boä nhôù. Leänh PUSH tröôùc tieân taêng con troû stack, sau ñoù môùi sao cheùp byte vaøo stack. PUSH vaø POP chæ duøng ñònh vò tröïc tieáp. Theá nhöng baûn thaân stack laïi duøng ñònh vò tröïc tieáp thoâng qua con troû stack (SP).
8031/8051 khoâng duøng 128 byte cao trong vuøng nhôù noäi laøm stack. Neáu SP vöôït quaù 127 bytes ñöôïc push bò maát vaø byte ñöôïc pop khoâng xaùc ñònh.
Leänh dòch chuyeån döõ lieäu 16-bit (MOV duøng ñeå khôûi ñoäng con troû döõ lieäu.
Leänh
XCV A,
Chuyeån ñoåi döõ lieäu giöõa A vaø byte ñöôïc ñònh vò.
Leänh
XCHD A, @R1
chuyeån ñoåi 4 bit thaáp cuûa thanh ghi ACC vôùi byte ñöôïc R1 chæ ñeán.
RAM ngoaøi
Dòch chuyeån döõ lieäu giöõa boä nhôù trong vaø ngoaøi söû duïng mode ñònh vò giaùn tieáp. Ñòa chæ giaùn tieáp coù theå laø moät byte hay 2 byte (DPTR). Caùc leänh dòch chuyeån döõ lieäu thao taùc treân boä nhôù ngoaøi ñeàu chieám hai chu kyø maùy vaø duøng thanh ghi tích luyõ laøm toaùn haïng nguoàn hoaëc ñích.
Look-Up Tables
Hai leänh ñöôïc cho saün ñeå ñoïc moät baûng döõ lieäu trong boä nhôù chöông trình. Khi truy xuaát ñeán vuøng nhôù chöông trình thì noäi dung cuûa baûng chæ ñöôïc ñoïc maø khoâng ñöôïc ghi. Töø gôïi nhôù MOVC töùc laø “move constant”. MOVC duøng thanh ghi ñeám chöông trình cuõng nhö con troû döõ lieäu kaøm thanh ghi neàn vaø thanh ghi tích luyõ laøm offset.
MOVC A,@A+DPTR ;
Coù theå ñoïc ñöôïc moät soá trong baûng 256 phaàn töû vaøo thanh ghi tích luyõ. Trong ñoù thanh ghi tích luyõ chæ ñeán moät vò trí trong coøn con troû DPTR chæ ñeán vò trí ñaàu baûng.
MOVC A,@A+PC ;
Cuõng töông töï nhö treân, chæ khaùc laø thanh ghi PC ñöôïc duøng laøm thanh ghi neàn vaø baûng ñöôïc truy xuaát thoâng qua chöông trình con. Tröôùc tieân chæ soá yeâu caàu ñöôïc naïp cho thanh ghi tích luyõ sau ñoù chöông trình con ñöôïc goïi. Vieäc khôûi ñoäng vaø goïi cuï theå nhö sau:
MOV A,ENTRY_NUMBER
CALL LOOK_UP
.
.
.
LOOK_UP : INC A
MOVC A, @A+PC
Ret
TAB: DB data, data, data …
Baûng ñöôïc ñaët ngay sau leänh RET cuûa chöông trình con. Leänh INC caàn thieát vì PC seõ chæ ñeán leänh RET sau khi thi haønh MOVC. Vieäc taêng thanh ghi A cho pheùp nhaûy qua khoûi leänh RET.
Caùc leänh luaän lyù
Caùc leänh luaän lyù cuûa 8051 thao taùc treân bit ñôn. RAM noäi cung caáp 128 bit vaø caùc thanh ghi chöùc naêng cung caáp 128 bit khaùc. Leänh truy xuaát ñeán caùc bit thoâng thöôøng nhö set, xoùa, ñaûo, AND, OR …
Taát caû caùc bit ñeàu truy xuaát baèng ñònh vò tröïc tieáp vôùi caùc bit coù ñòa chæ töø 00H – 7Fh trong 128 ñòa chæ thaáp vaø 80H-FFH trong SFRs. Caùc bit trong vuøng ñòa chæ thaáp ñaït taïi 20F ñeán 2FH, ñöôïc ñaùnh soá laàn löôït töø bit 0 cuûa ñòa chæ 200H (bit 00H) ñeán bit 7 cuûa ñòa chæ 2FH (bit 7Fh).
Ví duï
SETB P.1.7 set bit 7 port 1
Bit carry trong PSW ñöôïc söû duïng nhö single-bit accumulator.
Ví duï
CLR C
CLR CY ; xoùa carry
Test bit
Caùc leänh test bit thöôøng laø caùc leänh reõ nhaùnh chöông trình. Chuùng kieåm tra traïng thaùi caùc bit ñeå nhaûy ñeán chöông trình töông öùng neáu thoûa ñieàu kieän.
Leänh reõ nhaùnh chöông trình
Coù moät soá leänh ñieàu khieån doøng chöông trình, chuùng goàm caùc leänh goïi chöông trình con vaø traû veà töø moät chöông trình con hoaëc reõ nhaùnh coù ñieàu kieän vaø khoâng coù ñieàu kieän. Nhöõng khaû naêng naøy coù theå ñöôïc caûi tieán hôn nöõa khi söû duïng 3 mode ñònh vò trong caùc leänh reõ nhaùnh chöông trình.
Coù 3 keänh JMP khaùc nhau:SJMP, LJMP vaø AJMP (töông öùng laø ñònh vò töông ñoái, ñònh vò xa vaø ñònh vò tuyeät ñoái). Trình bieân dòch Intel chaáp nhaän leänh chung chung JMP neáu ngöôøi laäp trình khoâng quan taâm ñeán söï thay ñoåi bieân dòch. Trong khi trình bieân dòch cuûa nhöõng haõng khaùc khoâng coù ñaëc tính naøy. JMP ñöôïc bieân dòch thaønh AJMP neáu ñích naèm ôû tröôùc vaø khoaûng nhaûy naèm trong phaïm vi 2Kbytes. Trong caùc tröôøng hôïp khaùc coù theå dòch thaønh LJMP. Leänh CALL cuõng töông töï nhö vaäy.
Leänh SJMP ñònh ñòa chæ ñích nhö moät offset töông ñoái. Vì vaäy leänh naøy daøi 2 bytes. Khoaûng caùch nhaûy bò giôùi haïn töø –128 ñeán +127 bytes töông ñoái so leänh sau leänh SJMP.
Leänh LJMP xaùc ñònh moät ñòa chæ ñích laø moät soá 16 bit. Vì vaäy leänh naøy daøi 3 bytes. Ñòa chæ ñích coù theå ôû baát kyø trong vuøng nhôù chöông trình 63KB.
Leänh AJMP xaùc ñònh ñòa chæ ñích laø moät soá 11 bit. Gioáng nhö SJMP, leänh naøy daøi 2 bytes, nhöng ñöôïc bieân dòch khaùc. Maõ leänh chöùa 3 bit trong voøng 11 bit ñòa chuû vaø byte thöù hai chöùa 8 bit coøn laïi cuûa ñòa chæ ñích. Khi leänh ñöôïc thi haønh 11 bit naøy ñöôïc ñaët vaøo 11 bit thaáp trong thanh ghi PC vaø 5 bit cao trong thanh ghi PC khoâng ñoåi. Vì vaäy ñích phaûi naèm trong phaïm vi 2 Kbytes.
Trong taát caû caùc tröôøng hôïp, ngöôøi laäp trình xaùc ñònh ñòa chæ bit baèng moät nhaõn hoaëc nhö moät soá 16 bit. Trình bieân dòch seõ ñaët ñòa chæ ñích vaøo vò trí ñuùng trong leänh ñöôïc bieân dòch.
Jump Tables
Leänh “JMP @ A+DPTR” cung caáp leänh nhaûy phuï thuoäc ñieàu kieän theo moät baûng nhaûy (jump tables). Ñòa chæ ñích seõ ñöôïc tính trong khi thi haønh chöông trình nhö toång cuûa DPTR vaø thanh ghi tích luyõ. Ñaàu tieân DPTR ñöôïc naïp ñòa chæ cuûa baûng vaø thanh ghi tích luyõ ñöôïc duøng laøm chæ soá. Ví duï neáu coù 5 tröôøng hôïp nhaûy, giaù trò töø 0 ñeán 4 ñöôïc naïp cho thanh ghi tích luyõ vaø leänh nhaûy töông öùng vôùi töøng tröôøng hôïp ñöôïc moâ taû nhö sau:
MOV DPTR, #JUMP_TABLE ;
MOV A, INDEX_NUMBER ;
RL A
JMP @A+DPTR
Leänh RL ôû treân ñoåi chæ soá (töø 0 ñeán 4) thaønh caùc soá chaün töø 0 ñeán 8, vì moãi ñieåm xaâm nhaäp trong baûng laø moät ñòa chæ 2-byte.
JNP_TABLE : AJMP CASE0
AJMP CASE1
AJMP CASE2
AJMP CASE3
Chöông trình vaø con ngaét
Coù hai leänh CALL khaùc nhau: ACALL vaø LCALL duøng ñònh vò tuyeät ñoái vaø xa. Gioáng nhö leänh JMP, leänh CALL ñöoâc trình bieân dòch cuûa Intel duøng khi ngöôøi laäp trình khoâng quan taâm ñeán ñòa chæ ñöôïc bieân dòch. Leänh naøy ñaåy thanh ghi PC vaøo stack vaø naïp PC vôùi giaù trò ñöôïc chæ ra trong leänh. Löu yù PC seõ ñöôïc traû laïi giaù trò ñòa chæ sau leänh CALL khi noù chaám döùt chöông trình con.
Caùc leänh LJMP vaø ACALL ñeàu coù nhöõng haïn cheá gioáng nhö LJMP vaø AJMP ñöôïc moâ taû ôû treân.
Chöông trình con keát thuùc baèng leänh RET, noù seõ traû ñieàu khieån laïi cho chöông trình chính. Khoâng coù gì bí aån khi RET traû ñieàu khieån laïi cho chöông trình chính, noù chæ ñôn giaûn laáy 2 bytes cuoái cuøng cuûa stack vaø ñaët chuùng vaøo thanh ghi PC.
Leänh RETI duøng ñeå quay trôû veà chöông trình chính töø trong chöông trình phuïc vuï ngaét. Söï khaùc nhau giöõa RET vaø RETI chæ laø RETI kyù hieäu cho ngaét ñieàu khieån heä thoáng.
Leänh nhaûy coù ñieàu kieän
8051 cung caáp moät soá leänh nhaûy coù ñieàu kieän. Taát caû nhöõng leänh naøy ñeàu xaùc ñònh ñòa chæ ñích baèng ñònh vò töông ñoái. Giôùi haïn khoaûng caùch nhaûy töø –128 ñeán +127 bytes keå töø sau leänh nhaûy coù ñieàu kieän. Tuy nhieân ngöôøi laäp trình cuõng coù theå ñònh moät ñòa chæ baèng nhhaõn hoaëc moät soá 16 bit.
Khoâng coù bit zero trong thanh ghi PSW. JZ vaø JNZ test noäi dung thanh ghi ACC cho ñieàu khieån nhaûy.
Leänh DJNZ (nhaûy neáu khaùc 0) ñöôïc duøng ñeå ñieàu khieån voøng laëp. Ñeå voøng laäp thi haønh N laàn, naïp bieán ñeám vôùi N vaø ñaët DJNZ ôû cuoái voøng laëp ñeå baét ñaàu voøng laëp. Ví duï voøng laëp sau thi haønh 10 laàn:
MOV R0,#10 ;
LOOPP: (baét ñaàu voøng laëp)
.
.
.
(keát thuùc voøng laëp)
DJNZ R7, LOOP ;
(tieáp tuïc)
Leänh CJNZ (so saùnh vaø nhaûy neáu khoâng baèng) cuõng duøng ñeå ñieàu khieån voøng laëp. Hai bytes ñöôïc xaùc ñònh trong vuøng toaùn haïng cuûa leänh vaø leänh nhaûy seõ thi haønh neáu hai bytes naøy khaùc nhau. Ví duï, neáu moät kyù töï ñöôïc ñoïc vaøo thanh ghi ACC töø coång noái tieáp vaø nhaûy ñeán nhaõn TERMINAL neáu kyù töï ñoïc vaøo laø CONTROL-C (03H) .
CJNE A, #03, SKIP ;
SJMP TERMINAL ;
SKIP: (tieáp tuïc)
Leänh jump chæ xaûy ra khi A=03H.
Moät öùng duïng khaùc cuûa leänh naøy laø so saùnh lôùn hôn vaø beù hôn. Hai byte trong mieàn toaùn haïng laø nhöõng soá khoâng daáu. Neáu toaùn haïng ñaàu nhoû hôn toaùn haïng thöù hai thì côø carry ñöôïc set. Neáu toaùn haïng ñaàu lôùn hôn hoaëc baèng toaùn haïng thöù hai thì côø carry ñöôïc xoùa. Ví duï neáu muoán nhaûy ñeán BIG neáu ACC lôùn hôn hoaëc baèng 20H, ta coù caùc leänh sau:
CJNE A,#20H,$+3
JNC BIG
Kyù hieäu dollars “$” laø moät kyù hieäu ñaët bieät cuûa trình bieân dòch thay theá cho ñòa chæ cuûa leänh hieän thôøi. Vì CJNE laø moät leänh 3-bytes, “$+3” laø ñòa chæ cuûa leänh tieáp theo.
Chöông V
GIÔÙI THIEÄU VEÀ KIT VI ÑIEÀU KHIEÅN 8051
I –CHÖÙC NAÊNG CAÙC PHÍM:
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
Hình 1
Q
G
T
P
K
I
C
D
E
F
R
8
9
A
B
S
4
5
6
7
0
1
2
3
Q
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)
S
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 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ôù 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.
P
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 ohí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øn htaï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 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
R
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
I
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”
T
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.
* Chuù yù: neáu nhaán phím “G” khoâng thoâng qua phím “P” vaø caùc phím khaùc thì chöông trình maëc nhieân seõ thöïc hieän taïi ñòa chæ 4000.
Coù 1 soá chöông trình chöùc naêng chöa naïp vaøo EPROM
II – GIÔÙI THIEÄU CAÁU TRUÙC PHAÀN CÖÙNG KIT VI XÖÛ LYÙ:
1 – Taàn soá laøm vieäc:
Kit vi ñieàu khieån söû 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 16KB 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 16KB 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
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.
Ñò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
Baûng ñoà nhôù cuûa 2 IC 8255
Caùc ngoõ ra cuûa IC 8255A –1, 8255 – 2, ñöa ra beân ngoaøi baèng connector 64 chaân coù sô ñoà chaân ôû 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öï Led1 ñeán Led8 theo höôùng töø phaûi sang traùi nhö hình 2.
LED4
LED5
LED6
LED 7
LED 1
LED 2
LED 3
LED8
a
b
c
d
e
f
g
p
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ø:
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 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 caùc döõ lieäu môùi ra ñòa chæ C000H thì döõ lieäu naøy seõ hieån thò ôû 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 led 8 seõ dòch vaø maát ñi.
LED8 LED7 LED6 LED5 LED4 LED3 LED2 LED1
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.
* 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.
LED 1
LED 2
LED 3
LED4
LED5
LED6
LED 7
LED8
80H 81H 82H 83H 84H 85H 86H 87H
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
Maõ
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
Maõ
T
10
S
14
G
11
15
R
12
P
16
13
K
17
PHAÀN II
THIEÁT KEÁ
Chöông I
THIEÁT KEÁ PHAÀN CÖÙNG
I – MAÏCH CHUYEÅN ÑOÅI AD:
1 – Giôùi thieäu ADC 0809
ADC 0809 laø thieát bò bieán ñoåi töông töï soá duøng kyõ thuaät CMOS. Toång coäng ngöôøi söû duïng coù 8 keânh laøm vieäc hoaøn toaøn ñoäc laäp vôùi nhau ñeå löïa choïn. ÔÛ ñaây coøn chuù yù laø caùc ñieän aùp ñöôïc ño so vôùi ñieän theá 0V. Coøn moät ñaëc ñieåm ñaùng quan taâm hôn laø söï tieâu thuï doøng ñieän cuûa vi maïch haàu nhö khoâng ñaùng keå (chæ côõ 300uA). Thôøi gian bieán ñoåi khoaûng 100 us. Caùc thoâng soá kyõ thuaät cuûa boä bieán ñoåi ADC 0809 ñöôïc keå ra nhö sau:
Khoâng caàn ñoøi hoûi ñieàu chænh ñieåm 0.
Queùt ñoäng 8 keânh baèng caùc logic ñòa chæ.
Giaûi tín hieäu loái vaøo Analog khi ñieän aùp nguoàn laø +5V.
Taát caû caùc tín hieäu töông thích TTL.
Ñoä phaân giaûi 8 bit.
Thôøi gian bieán ñoåi 100us.
Doøng tieâu thuï (bình thöôøng): 0.3 mA.
Taàn soá cung caáp cho chaân clock: 10KHz ÷ 1280KHz. Thoâng thöôøng vaøo khoaûng 640KHz.
Tín hieäu giöõ nhòp duøng cho boä bieán ñoåi AD caàn phaûi taïo ñöôïc ôû beân ngoaøi vaø ñöôïc daãn ñeán chaân clock. Ñieän aùp so saùnh ñöôïc ñöa qua taàng laëp laïi ñieän aùp ñeå laøm chaân REF+.
Chaân naøy coù ñieäntrôû loái vaøo côõ 2.5K. Maãu bit ôû caùc loái vaøo ñòa chæ A, B, C seõ xaùc ñònh xem keânh naøo phaûi ñöôïc löïa choïn.
2 – Nguyeân taéc hoaït ñoäng
Nguyeân taéc laøm vieäc cuûa boä bieán ñoåi ADC 0809 cuõng khoâng coù gì phöùc taïp. Moät xung döông ôû chaân start kích hoaït söï bieán ñoåi. Qua ñoù maãu bit ôû loái vaøo ñòa chæ A, B, C cuõng ñoàng thôøi ñöôïc choát vaø xaùc ñònh keânh caán bieán ñoåi. Trong quaù trình bieán ñoåi, chaân ra EOC (End of Conversion) ñöùng ôû möùc Low. Sau caû 100us möùc naøy seõ chuyeån sang high vaø baùo hieäu keát thuùc quaù trình chuyeån ñoåi. Sau ñoù keát quaû cuûa quaù trình chuyeån ñoåi seõ xeáp haøng ôû ñöôøng daãn döõ lieäu D0 ÷ D7. Khi OE (Output Enable) = 1, caùc ñöôøng daãn coù theå ñoïc tieáp.
3 – Maïch taïo dao ñoäng cho ADC 0809:
0,7
V0 (f= )
RC
Do taàn soá laøm vieäc töông ñoái cao, ta söû duïng boä ña haøi taïo soùng xuoáng duøng Trigger Schmitt theo coâng ngheä TTL. Vôùi maïch ñieän nhö treân ta coù taàn soá dao ñoäng:
F » 0,7 » 700 KHz
RC
4 – Maïch so saùnh laëp laïi ñieän aùp:
Ta söû duïng OP-AMP LM 358 ñeå laäp laïi ñieän aùp nhaèm phoái hôïp toång trôû vôùi ngoõ vaøo REF+ cuûa ADC 0809: ñoàng thôøi cung caáp möùc aùp chuaån ñeå ñöa vaøo REF+ ñeå taïo caùc möùc logic ôû ngoõ ra töông öùng.
Caùc ñieän trôû 1K, 2K. 10K vaø VR 10K nhaèm taïo caàu phaân aùp vaø choïn möùc aùp chuaån ñöa vaøo REF+
VZ = 5,6V oån aùp, giöõ ñieän aùp coá ñònh
Ngoõ ra boä so saùnh laø 5V. Vôùi giaù trò naøy ta coù söï thay ñoåi AV ôû ngoõ vaøo ñeå thay ñoåi 1 möùc logic ôû ngoõ ra laø:
AV = 5/256 » 20mV
5 – Maïch taïo giao tieáp vôùi KIT 8051:
8 bit ra cuûa 0809 ñöôïc noái vôùi PortA cuûa 8255 –1
3 chaân choïn keânh A0, A1, A2 cuûa 0809 ñöôïc noái PB0 ¸ PB2. Vì vaäy khi ghi moät döõ lieäu vaøo vuøng nhôù cuûa 0809 töùc choïn keânh cuûa noù.
Chaân Start noái PC4, ALE noái PC5
Chaân OE ñöôïc noái leân Vcc. Luoân ôû traïng thaùi cho pheùp ñoïc döõ lieäu.
Chaân EOC ñöôïc noái vôùi PCC. Trong quaù trình thöïc hieän chuyeån ñoåi vi ñieàu khieån seõ ñoïc giaù trò EOC taïi PCO. Neáu EOC = 1: hoaøn thaønh quaù trình chuyeån ñoåi, vi ñieàu khieån seõ ñoïc döõ lieäu löu tröõ vaøo RAM ñeå xöû lyù.
PC1 ñöôïc noái qua R1KW ñöa leân +5V (PC1 = 1). Khi coù aán phím PC1 = 0, ñöôïc ñöa vaøo vi ñieàu khieån ñeå baùo choïn keânh.
II – MAÏCH CHUYEÅN ÑOÅI DA 0808
DAC 0808 coù nhieäm vuï bieán ñoåi maõ nhò phaân thaønh doøng (tín hieäu analog). Doøng naøy coù chieàu chaïy vaøo Iout cuûa DAC 0808 vaø coù cöôøng ñoä thay ñoåi theo tæ leä vôùi data ôû ngaõ vaøo. Khi data thay ñoåi töø 0 ¸ 255 Iref, ôû maïch doøng maõ nhò phaân ñöôïc ñöa töø KIT 8051 qua Port A cuûa 8255-2 ñeå ñöa vaøo DAC 0808.
Tín hieäu DAC 0808 taïo ra doøng neân coøn phaûi coù maïch chuyeån doøng thaønh aùp duøng LM324. Ta caàn ñieän aùp thay ñoåi töø 0-5V maø doøng thay ñoåi töø 0 ¸ 2mA neân ta caàn ñieàu chænh VR 5K cho phuø hôïp.
Sô ñoà nguyeân lyù card chuyeån ñoåi A/D – D/A
SÔ ÑOÀ BOÁ TRÍ LINH KIEÄN
SÔ ÑOÀ MAÏCH IN MAËT TREÂN
Chöông II
THIEÁT KEÁ PHAÀN MEÀM
I – LÖU ÑOÀ GIAÛI THUAÄT
1 – Löu ñoà chöông trình chính:
START
Khôûi ñoäng 8255-1
MODE0
Naïp ñòa chæ cho keânh
ñaàu tieân vaøo r7
Chöông trình xoùa 8LED
Chöông trình hieån thò thöù töï
keânh choïn taïi LED 8
Chöông trình chuyeån ñoåi data
Chöông trình xuaát data ra D/A
Chöông trình ñoåi HEX-BCD
Chöông trình giaûi maõ LED 7 ñoaïn
Chöông trình hieån thò
Chöông trình delay
Khôûi ñoäng Port C
Kieåm tra nhaán phím N
PC4 = 0
Y
Taêng R7 ñeå doø keânh keá
N
R7= 08
Y
2 – Löu ñoà chöông trình con chuyeån ñoåi:
Khôûi ñoäng Port B
8255 -1
Ghi A vaøo 0809
Choïn keânh
Khôûi ñoäng 0809
ALE = 1, ST = 1
Löu keát quaû
START
Nhaäp keânh caàn queùt
r7 ® a
Chuyeån ñoåi N
keát thuùc
Y
END
II- CHÖÔNG TRÌNH:
Chöông trình chính chuyeån ñoåi A/D – D/A:
ORG 4000H
MOV A, #91H ; Khôûi taïo 8255-1 port A
MOV DPTR, #8003H
MOV @DPTR, A
X1 : MOV R7, #00H ; Naïp ñòa chæ ñeå choïn keânh queùt
X2: LCALL CLEAR ; Goïi chöông trình xoùa
LCALL DISPLAY – 1 ; Hieån thò soá keânh choïn ôû LED
LCALL CHUYENDOI ; Goïi chöông trình chuyeån ñoåi
LCALL OUT ; Goïi chöông trình xuaát ra D/A
LCALL HEX – BCD ; Goïi chöông trình chuyeån soá hex sang BCD
LCALL DECODE ; Goïi chöông trình giaûi maõ 7 ñoaïn
LCALL DISPLAY – 2 ; Goïi chöông trình hieån thò döõ lieäu vöøa chuyeån ñoåi
LCALL DELAY ; Goïi chöông trình delay
MOV DPTR, #8002 ; Kieåm tra nhaán phím
MOV A, @DPTR
ANL A, 02H
JNZ X2
INC R7 ; Taêng leân ñeå doø keânh keá
CJMP 08, X2 ; Kieåm tra ñaõ doø heát keânh chöa
LJMP X1 ; quay trôû laïi
***********************************************************
Caùc chöông trình con phuïc vuï cho chöông trình chính
***********************************************************
Chöông trình con xoùa vuøng data hieån thò cho 8 keânh töø 5000h – 507Fh
ORG 4880H
MOV DPTR, #5000H ; Duøng ram ngoaøi ñeå löu tröõ
MOV A, #00H
MOV R0, #80H ; Xoùa töø 5000h ñeán 507Fh
CLE1: MOVX @DPTR, A
INC DPTR
DJNZ R0, CLE1
RET
***********************************************************
Chöông trình con thöïc hieän quaù trình chuyeån ñoåi keânh thöù n trong R7
***********************************************************
ORG 4500H
MOV A, R7 ;Choïn keânh thöù n, ALE =0
MOV DPTR, A ; Ñieàu khieån quaù trình chuyeån ñoåi cho keânh thöù n
ORL A, #10H ; Cho ALE =1
MOVX @DPTR, A
ORL A, #20H ; Cho ALE =1, ST =1
MOVX @DPTR, A
NOP
NOP
NOP
CLR A ; Cho ALE =0, ST =0
MOVX @DPTR, A
; Kieåm tra quaù trình chuyeån ñoåi keát thuùc hay chöa
CTC1: MOV DPTR, #PORTC
MOVX A, @DPTR
ANL A, #01H
JZ CTC1 ; Neáu chöa xong thì quay laïi
; Xong quaù trình bieán ñoåi baét ñaàu nhaän döõ lieäu
MOV DPTR, #PORTA
MOVX A,@DPTR
RET
***********************************************************
Chöông trình hieån thò thöù töï soá keânh choïn
***********************************************************
ORG 4100H
MOV A, #80H ; Choïn vò trí led ñeå hieån thò
MOV DPTR, C001
MOVX @DPTR, A
MOV A, R7
MOV 83, 43 ; Naïp byte cao ñòa chæ chöùa maõ hieån thò
MOV 82, A ; Naïp byte thaáp ñòa chæ chöùa maõ hieån thò
MOV A, @DPTR ; Hieån thò ra Led
MOV DPTR, C000
MOVX @DPTR, A
LCALL DELAY
RET
***********************************************************
Chöông trình xuaát ra D/A
***********************************************************
ORG 4200H
MOV R0, A ; Caát döõ lieäu vaøo thanh ghi R0
MOV A, #80 ; Khôûi taïo 8255 – 2 Mode 0
MOV DPTR, A003
MOV @DPTR, A
MOV A, R0 ; Naïp trôû laïi döõ lieäu vaøo thanh ghi A
MOV DPTR, A000 ; Xuaát döõ lieäu ra Port A
MOV @DPTR, A
RET
***********************************************************
Chöông trình chuyeån soá HEX sang soá BCD
***********************************************************
ORG 4600H
MOV DPTR, #5008H
MOV B, #10 ; Naïp 10 vaøo thanh ghi B
DIV AB
MOV R0, A ; Caát taïm A sang R0
MOV A, B
MOVX @DPTR, A ; Caát data ñôn vò vaøo 5008H
INC DPTR ; Taêng leân ñeå löu haøng chuïc
MOV A, R0 ; Laáy laïi data haøng chuïc, haøng traêm
MOV B, #10 ; Naïp 10 vaøo thanh ghi B
DIV AB
MOV R0, A ; Caát taïm A sang R0
MOV A, B
MOVX @DPTR, A ;Caát data haøng chuïc vaøo 5009H
INC DPTR ;Taêng leân ñeå löu haøng traêm
MOV A, R0 ;Laáy laïi data haøng traêm
MOVX @DPTR, A ;Caát data haøng traêm vaøo 500AH
RET
***********************************************************
Chöông trình giaûi maõ 7 ñoaïn
***********************************************************
ORG 4700H
MOV R0, #08H ;Quaûn lyù byte ñòa chæ thaáp
MOV DPTR, #5000H
DECO1:PUSH 82 ; Caát DPTR
PUSH 83 ;Caát DPTR
MOV DPTR, #5000H
MOV A, R0
MOVC A, @A+DPTR
MOV DPTR, #0200H
MOVC A, @A+DPTR
POP 83H
POP 82H
MOVX @DPTR, A
INC DPTR
INC R0
CJNE R0, #0BH, DECO1
RET
********************************************************
Chöông trình hieån thò
********************************************************
ORG 4800H
MOV R0, #87H ; Töø ñieàu khieån 8279
MOV R1, #00 ; Ñòa chæ töông ñoái vuøng data
DISP: MOV DPTR, #CW79 ; Ñòa chæ ñieàu khieån 8279
MOV A, R0
MOV @DPTR, A
MOV DPTR, #5000H
MOV A, R1 ;Chuyeån ñòa chæ töông ñoái töø R1 sang A
MOVC A, @A+DPTR ;Laáy byte döõ lieäu
MOV DPTR, #DT79 ;Ñòa chæ hieån thò 8279
MOVX @DPTR, A
DEC R0
INC R1
CJNE R1, #08, DISP
RET
***********************************************************
Vuøng chöùa maõ hieån thò keânh choïn taïi LED 8
***********************************************************
ORG 4300H
4300 3F
4301 06
4302 5B
4303 4F
4304 66
4305 6D
4306 7D
4307 07
***********************************************************
Chöông trình con delay
***********************************************************
ORG 488CH
MOV 7DH, #05H
DEL3: MOV 7FH, #0A0H
DEL2: MOV 7EH, #0FFH
DEL1: DJNZ 7EH, DEL1
DJNZ 7FH, DEL2
DJNZ 7DH, DEL3
RET
KEÁT LUAÄN
Sau 6 tuaàn thöïc hieän ñeà taøi döôùi söï höôùng daãn cuûa thaày Leâ Thanh Ñaïo em nhaän thaáy kieán thöùc cuûa mình ñaõ ñöôïc cuûng coá vaø môû roäng hôn. Tuy vaäy ñeà taøi vaãn coøn raát nhieàu thieáu soùt, vì theá em raát mong ñöôïc söï ñoùng goùp chaân thaønh cuûa quyù thaày coâ ñeå ñeà taøi ngaøy caøng trôû neân phong phuù vaø hoaøn thieän.
Ngaøy 25 Thaùng 02 Naêm 2000
Sinh vieân thöïc hieän
Nguyeãn Vuõ Anh Duy
PHAÀN III
PHUÏ LUÏC
TAØI LIEÄU THAM KHAÛO
1 –Vi ñieàu khieån trong ño löôøng vaø ñieàu khieån
- Ngoâ Dieân Taäp
2 – Ño löôøng vaø ñieàu khieån baèng maùy tính
- Ngoâ Dieân Taäp
3 – Digital system principles and applications
- Ronald J.Tocci
4 – Electronic divices and circuits
- Theodore F.Bogart
5 – The 8051 Microcontroller
- I.Scott Mackenzie
Các file đính kèm theo tài liệu này:
- DO15.DOC