33. Luaân vaên toát nghieäp
Leänh ñaàu tieân duøng ñòa chæ töùc thôøi ñeå taûi döõ lieäu 55H vaøo
thanh ghi tích luõy, leänh thöù hai cuõng duøng ñòa chæ töùc thôøi, laàn naøy
ñeå taûi döõ lieäu 16 bit 1000H vaøo con troû döõ lieäu. Leänh thöù ba duøng
ñòa chæ giaùn tieáp ñeå di chuyeån döõ lieäu trong A (55H) ñeán RAM
ngoaøi ôû ñòa chæ ñöôïc chöùa trong DPTR (1000H)
e. Caùc thanh ghi port xuaát nhaäp:
Caùc port cuûa 8051/8031 bao goàm Port 0 ôû ñòa chæ 80H, Port 1 ôû
ñòa chæ 90 H, Port 2 ôû ñòa chæ A0H vaø Port 3 ôû ñòa chæ B0H. Taát caû
caùc Port ñeàu ñöôïc ñòa chæ hoùa töøng bit. Ñieàu ñoù cung caáp moät
khaû naêng giao tieáp thuaän lôïi.
f. Caùc thanh ghi timer:
8051/8031 chöùa 2 boä ñònh thôøi ñeám 16 bit ñöôïc duøng trong vieäc
ñònh thôøi hoaëc ñeám söï kieän. Timer 0 ôû ñòa chæ 8AH (TL0:byte thaáp)
vaø 8CH (TH0:byte cao).Timer 1 ôû ñòa chæ 8BH (TL1:byte thaáp) vaø 8DH
(TH1: byte cao). vieäc vaän haønh timer ñöôïc set bôûi thanh ghi Timer Mode
(TMOD) ôû ñòa chæ 89H vaø thanh ghi ñieàu khieån timer (TCON) ôû ñòa
chæ 88H. Chæ coù TCON ñöôïc ñòa chæ hoùa töøng bit.
g. Caùc thanh ghi port noái tieáp:
8051/8031 chöùc moät port noái tieáp treân chip daønh cho vieäc trao
ñoåi thoâng tin vôùi caùc thieát bò noái tieáp nhö maùy tính, modem hoaëc
cho vieäc giao tieáp vôùi caùc IC khaùc coù giao tieáp noái tieáp (coù boä
chuyeån ñoåi A/D, caùc thanh ghi dòch..). Moät thanh ghi goïi laø boä ñeäm
döõ lieäu noái tieáp (SBUF) ôû ñòa chæ 99H sseõ giöõ caû hai giöõ lieäu
truyeàn vaø nhaän. Khi truyeàn döõ lieäu thì ghi leân SBUf, khi nhaän döõ
lieäu thì ñoïc SBUF. Caùc mode vaän haønh khaùc nhau ñöôïc laäp trình qua
thanh ghi ñieàu khieån port noái tieáp (SCON) (ñöôïc ñòa chæ hoùa töøng bit)
ôû ñòa chæ 98H.
h. Caùc thanh ghi ngaét:
8051/8031 coù caáu truùc 5 nguoàn ngaét, 2 möùc öu tieân. Caùc ngaét
bò caám sau khi reset heä thoáng vaø seõ ñöôïc cho pheùp baèng vieäc ghi
thanh ghi cho pheùp ngaét (IE) ôû ñòa chæ 8AH. Caû hai thanh ghi ñöôïc ñòa
chæ hoùa töøng bit.
i. Caùc thanh ghi ñieàu khieån coâng suaát:
Trang 33
34. Luaân vaên toát nghieäp
Thanh ghi ñieàu khieån coâng suaát (PCON) ôû ñòa chæ 87H chöùa
nhieàu bit ñieàu khieån. Chuùng ñöôïc toùm taét trong baûng sau:
Bit Kyù hieäu Yù nghóa
SMOD Bit gaáp ñoâi toác ñoä baud, neáu ñöôïc
set thì toác ñoä baud seõ taêng gaáp ñoâi
trong caùc mode 1,2 vaø 3 cuûa port noái
6 tieáp
5 Khoâng ñònh nghóa
4 Khoâng ñònh nghóa
3 GF1 Khoâng ñònh nghóa
2 GF0 Bit côø ña duïng 1
1 PD Bit côø ña duïng 0
Giaûm coâng suaát, ñöôïc set ñeå kích
0 IDL hoaït mode giaûm coâng suaát, chæ
thoaù khi reset
Mode chôø, set ñeå kích hoaït mode
chôø, chæ thoaùt khi coù ngaét hoaëc
reset heä thoáng.
Baûng 2.2 :Thanh ghi ñieàu khieån coâng suaát (PCON)
5/. Boä nhôù ngoaøi.
8051/8031 coù khaû naêng môû roäng boä nhôù ñeán 64K boä nhôù
chöông trình vaø 64K boä nhôù döõ lieäu beân ngoaøi. Do ñoù coù theå
duøng theâm ROM vaø RAM neáu caàn.
Khi duøng boä nhôù ngoaøi, port 0 khoâng coøn laø moät port I/O
thuaàn tuùy nöõa. Noù ñöôïc hôïp keânh giöõa bus ñòa chæ (A0-A7) vaø bus
döõ lieäu (D0-D7) vôùi tín hieäu ALE ñeå choát byte thaáp cuûa ñòa chæ khi
baét ñaàu moãi chu kyø boä nhôù. Port 2 thoâng thöôøng ñöôïc duøng cho
byte cao cuûa bus ñòa chæ.
Trong nöûa ñaàu cuûa moãi chu kyø boä nhôù, byte thaáp cuûa
ñòa chæ ñöôïc caáp trong port 0 vaø ñöôïc choát baèng xung ALE. Moät IC
choát 74HC373 (hoaëc töông ñöông) seõ giöõ byte ñòa chæ thaáp trong
Trang 34
35. Luaân vaên toát nghieäp
phaàn coøn laïi cuûa chu kyø boä nhôù. Trong nöûa sau cuûa chu kyø boä
nhôù port 0 ñöôïc duøng nhö bus döõ lieäu vaø ñöôïc ñoïc hoaëc ghi tuøy
theo leänh.
a/ Truy xuaát boä nhôù chöông trình ngoaøi:
Boä nhôù chöông trình ngoaøi laø moä IC ROM ñöôïc pheùp bôûi tín
hieäu PSEn. Hình sau moâ taû caùch noái moät EPROM vaøo 8051/8031:
Port D0-D7
0
D
Q A0-A7
EA 74HC37
8051 3 EPROM
ALE G
A8-A15
Port
2 OE
Hình 2.5 Giao tieáp giöõa 8051/8031 vaø EPROM
Moät chu kyø maùy cuûa 8051/8031 coù 12 chu kyø xung nhòp. Neáu
PSEN
boä dao ñoäng treân chip ñöôïc laùi bôûi moät thaïch anh 12MHz thì chu kyø
maùy keùo daøi 1µs. Trong moät chu kyø maùy seõ coù 2 xung ALE vaø 2
byte ñöôïc ñoïc töø boä nhôù chöông trình (neáu leänh hieän haønh laø moät
M o ät c h u k y ø m a ùy
byte thì byte thöù hai seõ ñöôïc loaïi boû). Giaûn ñoà thôøi gian cuûa moät
S1 S2 S3 S4 S5 S6 S1
laàn laáy leänh ñöôïc veõ ôû hình sau:
P1 P2 P1 P2 P1 P2 P1 P2 P1 P2 P1 P2 P1 P2
O SC
A L E
PSEN
P o rt 2 PC H PC H
P o rt 1
PC L O pcode PC L
Trang 35
36. Luaân vaên toát nghieäp
Hình 2.6: Giaûn ñoà thôøi gian ñoïc boä nhôù chöông trình ngoaøi.
b/ Truy xuaát boä nhôù döõ lieäu ngoaøi:
Port 0
D0-D7
74HC373 RAM
8051
O D
EA
G A0-A7
ALE
A8-A15
Port 2
Hình 2.7: Giao tieáp giöõa 8051/8031 vaø RAM
RD OE
Boä nhôù döõ lieäu ngoaøi laø moät boä nhôù RAM ñöôïc cho pheùp
ghi/ñoïc baèng caùc tín heäu WR vaø RD (caùc chaânWE P3.6 vaø P3.7 thay
WR
ñoåi chöùc naêng). chæ coù moät caùch truy xuaát boä nhôù döõ lieäu ngoaøi
laø vôùi leänh MOVX duøng con troû döõ lieäu (DPTR) 16 bit hoaëc R0 vaø
R1 xem nhö thanh ghi ñòa chæ.
Trang 36
37. Luaân vaên toát nghieäp
Keát noái bus ñòa chæ vaø bus döõ lieäu giöõa RAM vaø 8051/8031
cuõng gioáng EPROM vaø do ñoù cuõng coù theå leân ñeán 64 byte boä
nhôù RAM. Ngoaøi ra, chaân RD cuûa 8051/8031 ñöôïc noái tôùi chaân cho
pheùp xuaát (OE) cuûa RAM vaø chaân WR ñöôïc noái tôùi chaân ghi (WR)
cuûa RAM.
Giaûn ñoà thôøi gian cho leänh ñoïc boä nhôù döõ lieäu ngoaøi ñöôïc
veõ treân hình sau ñoái vôùi leänh MOVX A, @DPTR:
M o ä c h u k y øm a ù
t y M o ä c h u k y øm a ù
t y
S1 S2 S3 S4 S5 S6 S1 S2 S3 S4 S5 S6
A L E
PSEN
R D
P o rt 2 PC H D PH
P o rt 0
PC L O pcode D PL D A TA
Hình 2.8: Giaûn ñoà thôøi gian cuûa leänh MOVX
Giaûn ñoà thôøi gian cho leänh ghi (MOVX @DPTR, A) cuõng töông töï
chæ khaùc ñöôøng WR seõ thay vaøo ñöôøng RD vaø döõ lieäu ñöôïc xuaát
ra treân port 0 (RD vaãn giöõ möùc cao).
6/. Leänh reset.
8051/8031 ñöôïc reset baèng caùch giöõ chaân RST ôû möùc cao ít
nhaát trong 2 chu kyø maùy vaø traû noù veà muùc thaáp. RST coù theå
+5V
+5V
ñöôïc kích khi caáp ñieän duøng moät maïch R-C.
100 10UF
Trang 37 8 , 2 K
38. Luaân vaên toát nghieäp
Hình 2.9: Maïch reset heä thoáng.
Traïng thaùi cuûa taát caû caùc thanh ghi cuûa 8051/8031 sau khi reset
heä thoáng ñöôïc toùm taét trong baûng sau:
Noäi dung
Thanh ghi
Ñeám chöông trình 0000H
Tích luõy 00H
B 00H
PSW 00H
SP 07H
DPTR 0000H
Port 0-3 FFH
IP XXX00000B
IE 0XX00000B
Caùc thanh ghi ñònh thôøi 00H
SCON 00H
SBUF 00H
PCON(HMOS) 0XXXXXXB
PCON(CMOS) 0XXX0000B
Baûng 2.3: Traïng thaùi caùc thanh ghi sau khi reset
Quan troïng nhaát trong caùc thanh ghi treân laø thanh ghi ñeám
chöông trình, noù ñöôïc ñaët laïi 0000H. Khi RST trôû laïi möùc thaáp, vieäc
thi haønh chöông trình luoân baét ñaàu ôû ñòa chæ ñaàu tieân trong boä
Trang 38
56. Luaân vaên toát nghieäp
Port noái tieáp
Caùc Vector ngaét.
Vector reset heä thoáng (RST ôû ñòa chæ 0000H) noù gioáng nhö moät
ngaét. Noù ngaét chöông trình chính vaø taûi vaøo PC moät giaù trò môùi.
Khi chæ ñeán moät ngaét “côø gaây ngaét töï ñoäng bò xoùa bôûi
phaàn cöùng, tröø ra R1, T1 cho caùc ngaét coång noái tieáp. Vì coù hai
nguoàn coù theå coù cho ngaét naøy, khoâng thöïc teá ñeå CPU xoùa côø
ngaét naøy. Caùc bit phaûi ñöôïc kieåm tra trong ISR ñeå xaùc ñònh nguoàn
ngaét vaø côø taïo ngaét seõ ñöôïc xoùa baèng phaàn meàm.
9.3 Caùc ngaét cuûa 8051.
a. Caùc ngaét timer.
Caùc ngaét timer coù ñòa chæ Vector ngaét laø 000BH (timer 0) vaø
001BH (timer 1). Ngaét timer xaåy ra khi caùc thanh ghi timer (TLx ITHx)
traøn vaø set côø baùo traøn (TFx) leân 1. Caùc côø timer (TFx) khoâng bò
xoùa baèng phaàn meàm. Khi cho pheùp caùc ngaét, TFx töï ñoäng bò xoùa
baèng phaàn cöùng khi CPU chuyeån ñeán ngaét.
b. Caùc ngaét coång noái tieáp.
Ngaét coång noái tieáp xaåy ra khi hoaëc côø phaùt (TI) hoaëc côø
ngaét thu (KI) ñöôïc ñaët leân 1. Ngaét phaùt xaåy ra khi moät kyù töï ñaõ
ñöôïc nhaän xong vaø ñang ñôïi trong SBUP ñeå ñöôïc ñoïc.
Caùc ngaét coång noái tieáp khaùc vôùi caùc ngaét timer. Côø gaây ra
ngaét coång noái tieáp khoâng bò xoùa baèng phaàn cöùng khi CPU chuyeån
tôùi ngaét. Do coù hai nguoàn ngaét coång noái tieáp Ti vaø RI. Nguoàn
ngaét phaûi ñöôïc xaùc ñònh trong ISR vaø côø taïo ngaét seõ ñöôïc xoùa
baèng phaàn meàm. Caùc ngaét timer côø ngaét côø ngaét ñöôïc xoùa baèng
phaàn cöùng khi CPU höôùng tôùi ISR.
c. Caùc ngaét ngoaøi.
- Caùc ngaét ngoaøi xaåy ra khi coù moät möùc thaáp hoaëc caïnh xuoáng
treân chaân INT0 hoaëc INT1 cuûa vi ñieàu khieån. Ñaây laø chöùc naêng
chuyeån ñoåi cuûa caùc bit Port 3.(Port 3.2 vaø Port 3.3).
Caùc côø taïo ngaét naøy laø caùc bit IE0 vaù IE1 trong TCON. Khi quyeàn
ñieàu khieån ñaõ chuyeån ñeán ISR, côø taïo ra ngaét chæ ñöôïc xoùa neáu
ngaét ñöôïc tích cöïc baèng caïnh xuoáng. Neáu ngaét ñöôïc tích cöïc theo
Trang 56
57. Luaân vaên toát nghieäp
möùc, thì nguoàn yeâu caàu ngaét beân ngoaøi seõ ñieàu khieån möùc cuûa
côø thay cho phaàn cöùng.
Söï löïa choïn ngaét tích cöïc möùc thaáp hay tích cöïc caïnh xuoáng
ñöôïc laäp trình qua caùc bit IT0 vaø IT1 trong TCON. Neáu IT1 = 0, ngaét
ngoaøi 1 ñöôïc taùc ñoäng baèng muùc thaáp ôû chaân IT1. Neáu IT1 = 1
ngaét ngoaøi 1 seõ ñöôïc taùc ñoäng baèng caïnh xuoáng. trong cheá ñoä
naøy, neáu caùc maãu lieân tieáp treân chaân INT1 chæ möùc cao trong
moät chu kyø vaø chæ möùc thaáp trong chu kyø keá, côø yeâu caàu ngaét
IE1 trong TCON ñöôïc ñaët leân 1, roài bit IEÙ yeâu caàu ngaét.
Neáu ngaét ngoaøi ñöôïc taùc ñoäng baèng caïnh xuoáng thì nguoàn
beân ngoaøi phaûi giöõ chaân taùc ñoäng ôû möùc cao toái thieåu moät chu
kyø vaø giöõ noù ôû möùc thaáp theâm moät chu kyø nöõa ñeå ñaûm baûo
phaùt hieän ñöôïc caïnh xuoáng. Neáu ngaét ngoaøi ñöôïc taùc ñoäng theo
möùc thì nguoàn beân ngoaøi phaûi giöõ tín hieäu yeâu caàu taùc ñoäng cho
ñeán khi ngaét ñöôïc yeâu caàu ñöôïc thaät söï taïo ra vaø khoâng taùc ñoäng
yeâu caàu ngaét tröôùc khi ISR ñöôïc hoaøn taát . Neáu khoâng moät ngaét
khaùc seõ ñöôïc laëp laïi.
10. Taäp leänh cuûa 8051/8031.
Taäp leänh 8051/8031 coù 255 leänh goàm 139 leänh 1 byte, 92 leänh
2 byte vaø 24 leänh 3 byte.
10.1. Caùc cheá ñoä ñaùnh ñòa chæ: trong taäp leänh coù 8 cheá
ñoä ñaùnh ñòa chæ:
a. Thanh ghi ñòa ghi:
8051/8031 coù 4 bank thanh ghi, moãi bank coù 8 thanh ghi ñ1nh soá
töø R0 ñeán R7. Taïi moãi thôøi ñieåm chæ coù moät bank thanh ghi ñöôïc
tích cöïc. Muoán choïn bank thanh ghi naøo ta chæ caàn gaùn caùc bit nhò
phaân thích hôïp vaøo RSI (PSW.4) vaø RS0(PSW.3) trong thanh ghi traïng
thaùi chöông trình (PSW).
M a õ l e än h n n n
Ñòa chæ thanh ghi.
Trang 57
58. Luaân vaên toát nghieäp
Ngoaøi ra, moät soá thanh ghi ñaëc bieät nhö thanh ghi tích luõy, con troû
döõ lieäu.. cuõng ñöôïc xaùc ñònh trong caùc leänh neân khoâng caàn caùc
bit ñòa chæ. Trong caùc leänh naøy thanh ghi tích luõy ñöôïc xaùc ñònh laø
“A”, con troû döõ lieäu laø “DPTR”, thanh ghi ñeám chöông trình laø “PC”, côø
nhôù laø “C”, caëp thanh ghi tích luõy B laø “AB”.
b. Ñòa chæ tröïc tieáp.
Trong cheá ñoä naøy, caùc thanh ghi beân trong 8051/8031 ñöôïc ñaùnh ñòa
chæ tröïc tieáp baèng 8 bit ñòa chæ naèm trong byte thöù hai cuûa maõ
leänh.
M a õ l e än h Ñ òa c h æ t r ö ïc t i e áp
Ñòa chæ tröïc tieáp.
Duø vaäy, trình hôïp dòch cho pheùp goïi teân caùc thanh ghi chöùc naêng
ñaëc bieät (coù ñòa chæ tröïc tieáp töø 80H ñeán FFH) ví duï :P0 cho port 0,
TMOD cho thanh ghi cheá ñoä timer...
c. Ñòa chæ giaùn tieáp.
R0 vaø R1 ñöôïc duøng ñeå chöùa ñòa chæ oâ nhôù maø leänh taùc ñoäng
ñeán. ngöôøi ta quy öôùc duøng daáu @ tröôùc R0 hoaëc R1.
M a õ l e än h i
Ñòa chæ giaùn tieáp.
d. Ñòa chæ töùc thôøi:
Ngöôøi ta duøng # tröôùc caùc toaùn haïng töùc thôøi. Caùc toaùn haïng ñoù
coù theå laø moät haèng soá, moät kyù soá hay moät bieåu thöùc toaùn
hoïc... Tröôøng hôïp dòch seõ töï ñoäng tính toaùn vaø thay theá döõ lieäu
tröïc tieáp vaøo maõ leänh.
M a õ l e än h D ö l i e äu t ö ùc t h ô øi
Trang 58
59. Luaân vaên toát nghieäp
Ñòa chæ töùc thôøi.
e. Ñòa chæ töông ñoái:
Ñòa chæ töông ñoái ñöôïc duøng trong caùc leänh nhaûy 8051/8031
duøng giaù trò 8 bit coù daáu ñeå coäng theâm vaøo thanh ghi ñeám chöông
trình (PC). Taàm nhaûy cuûa leänh naøy trong khoaûng töø –128 ñeán 127 oâ
nhôù. Tröôùc khi coäng , thanh ghi PC seõ taêng ñeán ñòa chæ theo sau
leänh nhaûy roài tính toaùn ñòa chæ offset caàn thieát ñeå nhaûy ñeán ñòa
chæ yeâu caàu. Nhö vaäy ñòa chæ môùi laø ñòa chæ töông ñoái so vôùi
leänh keá tieáp chöù khoâng phaûi laø baûn thaân leänh nhaûy. Thöôøng
leänh naøy coù lieân quan ñeán nhaõn ñöôïc ñònh nghóa tröôùc.
M a õ l e än h O f f s e t t ö ô n g ñ o ái
Ñòa chæ töông ñoái.
f. Ñòa chæ tuyeät ñoái:
Ñòa chæ tuyeät ñoái chæ duøng trong caùc leänh ACALL vaø JIMP. Caùc
leänh 2 byte naøy duøng ñeå reõ nhaùnh vaøo moät trang 2 Kbyte cuûa boä
nhôù tröông trình baèng caùch caáp 11 bit ñòa chæ thaáp (A0-A10) ñeå xaùc
ñònh ñòa chæ ñích trong trang maõ. Coøn 5 bit cao cuûa ñòa chæ ñích (A11-
A15) chính laø 5 bit cao hieän haønh trong thanh ghi ñeám chöông trình. Vì
vaäy ñòa chæ cuûa leänh theo sau leänh reõ nhaùnh vaø ñòa chæ ñích cuûa
leänh reõ nhaùnh vaø ñòa chæ ñích cuûa leänh reõ nhaùnh caàn phaûi cuøng
trang maõ 2 Kbyte (coù cuøng 5 bit ñòa chæ cao).
A15 A11 A10 A0
xaùc ñònh trang maõxaùc ñònh ñòa cchæ trong trang maõ
A 1 0 -A 8 M aõ O f f s e t t ö ô n g ñ o ái
Trang 59