You are on page 1of 18

Chöông 2

HOÏVI ÑIEÀ
U KHIEÅ
N
MCS - 51

1. GIÔÙ
I THIEÄ
U HOÏ VI ÑIEÀ
U KHIEÅ
N MCS-51
2. TOÙ
M TAÉ
T PHAÀ
N CÖÙ
NG
3. CAÁ
U TRUÙ
C PHAÀ
N CÖÙ
NG
4. TOÅCHÖÙ
C BOÄNHÔÙNOÄ
I
5. GIAO TIEÁ
P NGOAÏI VI

1. GIÔÙI THIEÄU VI ÑIEÀU KHIEÅN HOÏ MCS-51

MCS-51 laø moät trong soá nhieàu hoï vi ñieàu khieån do nhieàu haõng
saûn xuaát. Haõng saûn xuaát vi ñieàu khieån noåi tieáng laø Atmel
(‘www.atmel.com’). Haõng naøy mua baûn thieát keá cuûa Intel vaø toå
chöùc saûn xuaát.
 Vi ñieàu khieån 80C31 laø chip ñaàu tieân trong hoï MCS-51. Chip
naøy khoâng coù boä nhôù noäi beân trong.
 Chip ra ñôøi sau 80C31 laø 80C51, coù 4 Kbyte boä nhôù noäi loaïi
PROM, chæ naïp chöông trình ñöôïc 1 laàn, khoâng theå xoaù ñeå
naïp laïi.
 Chip 87C51 coù 4Kbyte boä nhôù noäi loaïi EPROM, cho pheùp
naïp chöông trình nhieàu laàn. Tröôùc khi naïp moät chöông trình môùi,
phaûi xoaù chöông trình cuõ baèng caùch chieáu tia cöïc tím vaøo
cöûa soá xoaù.
 Chip 89C51 coù 4Kbyte boä nhôù noäi loaïi Flash ROM, cho
pheùp naïp chöông trình haøng ngaøn laàn. Tröôùc khi naïp chöông
trình môùi, chöông trình cuõ ñöôïc xoaù baèng ñieän. Vieäc naïp vaø
xoaù ñöôïc thöïc hieän nhôø maïch naïp. Vì vaäy vieäc naïp laïi chöông
trình trôû neân ñôn giaûn vaø thuaän tieän. Chip 89C51 vì theá ñöôïc
söû duïng phoå bieán nhaát.

33
Song song vôùi hoï MCS-51 laø hoï MCS-52 coù boä nhôù noäi dung
löôïng gaáp ñoâi (8 Kbyte) vaø coù ñeán 3 Timer (nhieàu hôn hoï MCS-51
moät Timer).
Caùc vi ñieàu khieån veà sau naøy coù tính naêng maïnh hôn, nhieàu
thanh ghi hôn, dung löôïng boä nhôù noäi lôùn hôn. Tuy nhieân vieäc khaûo
saùt vi ñieàu khieån 80C51, 89C51 laø neàn taûng cô baûn ñeå sinh vieân
coù theå töï hoïc caùch söû duïng caùc vi ñieàu khieån theá heä sau chuùng.
Vi vaäy trong taøi lieäu naøy, ta chæ khaûo saùt vi ñieàu khieån 89C51, laø
vi ñieàu khieån ñang ñöôïc söû duïng phoå bieán nhaát hieän nay.

2. TOÙM TAÉT PHAÀN CÖÙNG VI ÑIEÀU KHIEÅN HOÏ MCS-51

Taát caû caùc vi ñieàu khieån hoï MCS-51 ñeàu coù ñaëc ñieåm chung
nhö sau :
 Coù 4 Kbyte boä nhôù ROM noäi (ROM ñöôïc tích hôïp beân trong vi
ñieàu khieån) duøng ñeå löu chöông trình ñieàu khieån. Boä nhôù ROM
noäi naøy vì vaäy ñöôïc goïi laø boä nhôù chöông trình (Program
Memory) hay boä nhôù Code töùc maõ leänh (Code Memory).
 Coù 256 byte RAM noäi. Trong soá 256 byte naøy, 128 byte daønh
cho vieäc löu tröõ döõ lieäu taïm thôøi trong quaù trình xöû lyù,
128 byte coøn laïi daønh cho caùc thanh ghi chöùc naêng cuûa vi
ñieàu khieån.
 Coù 4 PORT xuaát nhaäp, moãi PORT 8 line, coù theå xuaát döõ lieäu
hoaëc nhaäp döõ lieäu neân ñöôïc goïi laø 32 ñöôøng I/O (töùc
Input/Output).
 Coù khaû naêng phaùt vaø thu döõ lieäu noái tieáp. Chöùc naêng
naøy ñöôïc duøng ñeå truyeàn döõ lieäu (daïng noái tieáp) giöõa vi
ñieàu khieån vôùi caùc IC ngoaïi vi hoaëc giöõa caùc vi ñieàu khieån
vôùi nhau trong caùc heä thoáng duøng nhieàu vi ñieàu khieån.
 Coù theå ñoïc boä nhôù ROM ngoaøi coù dung löôïng toái ña
ñeán 64 Kbyte. Tröôøng hôïp naøy ñöôïc duøng khi chöông trình coù
dung löôïng lôùn hôn 4 Kbyte (vöôït quaù khaû naêng chöùa cuûa boä
nhôù noäi). Boä nhôù ROM noäi trong tröôøng hôïp naøy khoâng ñöôïc
duøng. Toaøn boä chöông trình ñieàu khieån ñöôïc löu trong ROM
ngoaøi.
 Coù theå truy xuaát (ñoïc döõ lieäu hoaëc ghi döõ lieäu) boä nhôù
RAM ngoaøi dung löôïng toái ña ñeán 64 Kbyte.
 Coù 210 bit coù theå tri xuaát töøng bit. Chöùc naêng naøy cho
pheùp thay ñoåi noäi dung cuûa 1 bit maø khoâng laøm aûnh höôûng
ñeán traïng thaùi cuûa caùc bit khaùc naèm trong cuøng byte vôùi bit
ñöôïc truy xuaát.
Taát caû caùc vi ñieàu khieån cuøng hoï MCS-51 hoaëc MCS-52 coù taäp
leänh gioáng nhau, töùc laø caùch vieát chöông trình vaø leänh khoâng thay
ñoåi. Tuy nhieân veà caáu truùc phaàn cöùng thì caùc vi ñieàu khieån ra ñôøi
sau coù theâm moät soá phaùt trieån treân cô sôû caùc vi ñieàu khieån theá

34
heä tröôùc noù. Theá heä sau keá thöøa taát caû nhöõng gì maø theá heä
tröôùc noù ñaõ coù.
3. CAÁU TRUÙC CUÛA VI ÑIEÀU KHIEÅN 89C51

Loaïi 2 haøng chaân (haøn xuyeân Loaïi 4 haøng chaân (gaén Socket)
lôùp)
Caùc chaân cô baûn
 Vcc : Nguoàn +5VDC
 GND : Noái mass
 RST : Reset, taùc duïng möùc cao
 XTAL1 vaø XTAL2 : 2 ngoõ vaøo gaén tuï thaïch anh taïo xung Clock
cho vi ñieàu khieån.
 P0.7 → P0.0 : Caùc chaân cuûa PORT 0
 P1.7 → P1.0 : Caùc chaân cuûa PORT 1
 P2.7 → P2.0 : Caùc chaân cuûa PORT 2
 P3.7 → P3.0 : Caùc chaân cuûa PORT 3
Löu yù (chaân Px.7 laø MSB ñoái vôùi döõ lieäu nhaäp hoaëc
xuaát)
Moät soá chaân khaùc vaø ñaëc tính xuaát nhaäp cuûa caùc PORT seõ
trình chi tieát sau.

Caùc ñaëc tính cô baûn


 Tuoåi thoï : 1000 laàn ghi/xoaù
 Taàn soá xung Clock toái ña : 24MHz (thöôøng söû duïng 12MHz).
 Nhieät ñoä cho pheùp khi laøm vieäc : -550C → +1250C
 Nhieät ñoä cho pheùp khi baûo quaûn : -650C → +1500C
 Ñieän aùp cho pheùp taùc ñoäng leân baát kyø chaân naøo : -1V →
+7V

35
 Ñieän aùp nguoàn toái ña cho pheùp : 6,6V
 Doøng ñieän ngoõ ra toái ña cho pheùp : 15mA

Sô ñoà khoái beân trong vi ñieàu khieån hoï MCS-51

Boä nhôù RAM Boä nhôù Flash


löu döõ lieäu ROM löu
taïm thôøi chöông trình

Thanh ghi
ñòa chæ
boä nhôù
ngaên xeáp

Thanh ghi
ñòa ñòa
Khoái xöû chæ boä
lyù trung nhôù
taâm

Khoái giaûi
maõ leänh
vaø ñieàu
khieån

Thanh ghi
leänh

Khoái ñònh
Maïch dao thôøi
ñoäng taïo
xung Clock

Hoaït ñoäng cuûa heä thoáng coù theå moâ taû toång quaùt nhö sau
:
Khi vi ñieàu khieån ñöôïc RESET (maïch RESET phaûi coù khaû naêng
RESET töï ñoäng vaøo thôøi ñieåm môùi caáp ñieän cho heä thoáng), byte
maõ leänh ñaàu tieân löu trong boä nhôù ROM ôû ñòa chæ 0000h seõ ñöôïc
naïp vaøo thanh ghi leänh (INSTRUCTION REGISTER, goïi taét laø thanh ghi
IR). Maïch giaûi maõ beân trong khoái “TIMING AND CONTROL” seõ giaûi maõ
leänh ñang löu tröõ trong thanh ghi IR vaø xuaát caùc tín hieäu ñieàu khieån

36
ñeán caùc khoái khaùc tuyø theo noäi dung cuûa maõ leänh. Caùc khoái
trong heä thoáng khi nhaän tín hieäu ñieàu khieån naøy seõ hoaït ñoäng
ñoàng boä theo xung Clock ñeå thöïc hieän moät coâng vieäc naøo ñoù (tuyø
theo noäi dung cuûa leänh).
Khi moät leänh ñöôïc thi haønh xong, leänh keá seõ ñöôïc ñoïc vaøo
thanh ghi IR vaø seõ ñöôïc giaûi maõ ñeå thöïc hieän. Ñeå cuï theå hoaù
vaán ñeà, sau ñaây ta seõ trình baøy vai troø cuûa khoái vaø caùc thanh ghi
ñaëc bieät trong heä thoáng.

3.1 Thanh ghi boä ñeám chöông trình (PROGRAM COUNTER – PC).
Ñaây laø thanh ghi 16 bit chöùa ñòa chæ cuûa moät vò trí trong boä
nhôù maø vò trí naøy seõ ñöôïc ñoïc ngay sau khi leänh hieän haønh ñöôïc
thöïc hieän xong. Ngay sau khi RESET vi ñieàu khieån, noäi dung cuûa thanh
ghi naøy laø 0000h. Noäi dung naøy seõ ñöôïc chuyeån vaøo thanh ghi ñòa
chæ (PROGRAM ADDRESS REGISTER) ñeå chæ ñònh oâ nhôù ñöôïc truy
xuaát. Khi oâ nhôù ñöôïc truy xuaát, noäi dung cuûa noù seõ ñöôïc naïp ngay
vaøo thanh ghi leänh (IR) vaø ñöôïc giaûi maõ ñeå thöïc hieän leänh. Trong
thôøi gian leänh ñang ñöôïc giaûi maõ thì noäi dung cuûa PC töï ñoäng taêng
leân moät ñôn vò ñeå chuaån bò ñoïc oâ nhôù keá trong boä nhôù. Trong khi
ñoù noäi dung cuûa thanh ghi ñòa chæ khoâng taêng. Khi leänh ñöôïc thöïc
hieän xong, noäi dung cuûa PC môùi ñöôïc chuyeån vaøo thanh ghi ñòa chæ
vaø luùc naøy oâ nhôù keá ñöôïc chæ ñònh ñeå ñoïc leänh tieáp theo.

3.2 Thanh ghi leänh (INSTRUCTION REGISTER)


Thanh ghi naøy laø nôi chöùa maõ leänh tröôùc khi ñöôïc giaûi maõ ñeå
thöïc hieän moät coâng vieäc töông öùng.

3.3 Khoái ALU (Arithmetic Logic Unit)


Ñaây laø khoái xöû lyù trung taâm cuûa vi xöû lyù noùi chung vaø vi
ñieàu khieån noùi rieâng. Khoái naøy coù nhieäm vuï thöïc hieän caùc pheùp
tính toaùn nhö coäng, tröø, nhaân, chia, caùc leänh logic nhö AND, OR, NOT,
EXOR, dòch traùi, dòch phaûi, v.v. Ñeå thöïc hieän moät pheùp xöû lyù, caàn
coù 2 nguoàn döõ lieäu. Vì vaäy coù hai thanh ghi ôû ngoõ vaøo cuûa khoái
ALU ñoù laø thanh ghi TMP1 vaø TMP2 (TMP : Temporary : taïm thôøi). Hai
thanh ghi naøy löu tröõ hai döõ lieäu seõ ñöôïc thöïc hieän bôûi ALU. Ví duï
muoán thöïc hieän leänh coäng hai döõ lieäu 02h vôùi 03h thì hai döõ lieäu
naøy phaûi naèm trong hai thanh ghi TMP1 vaø TMP2. Keát quaû cuûa pheùp
xöû lyù bôùi ALU ñöôïc löu trong thanh ghi ACC hay A. Moät soá tröôøng hôïp
ñaëc bieät nhö khi thöïc hieän pheùp nhaân hai soá 8 bit thì keát quaû laø
soá 16 bit. Tröôøng hôïp naøy thanh ghi A (chæ coù 8 bit) khoâng ñuû choã
chöùa keát quaû neân caàn theâm thanh ghi B ñeå chöùa byte cao cuûa keát
quaû. Ví duï khi thöïc hieän nhaân hai soá 08h vôùi FAh thì keát quaû nhö
sau :
 08h = 0.161 + 8.160 = 16
 FAh=15.161 + 10.160 = 250

37
 08h.FAh = 16.250 = 4000 = 0FA0h

Sau pheùp nhaân naøy ta coù :


 Noäi dung trong thanh ghi B laø : 0Fh (byte cao cuûa keát quaû)
 Noäi dung trong thanh ghi A laø : A0h (byte thaáp cuûa keát quaû)
Thanh ghi B coøn ñöôïc söû duïng khi thöïc hieän pheùp chia. Moät pheùp
chia hai soá nhò phaân luoân toàn taïi phaàn nguyeân vaø soá dö (soá dö =
0 laø moät tröôøng hôïp rieâng). Phaàn nguyeân seõ ñöôïc löu trong thanh
ghi A vaø soá dö seõ ñöôïc löu trong B.

3.4 Thanh ghi traïng thaùi


Thanh ghi traïng thaùi coøn ñöôïc goïi laø thanh ghi côø. Thanh ghi naøy
coù 8 bit. Moãi bit coù moät chöùc naêng rieâng. Sôû dó thanh ghi naøy
ñöôïc goïi laø thanh ghi côø (Flag Register) vì traïng thaùi cuûa moät bit naøo
ñoù seõ cho bieát keát quaû thöïc hieän bôûi ALU nhö theá naøo, ñieàu naøy
cuõng gioáng nhö ta phaát côø ñeå baùo hieäu moät ñieàu gì ñoù. Côø ñöôïc
phaát (öùng vôùi bit coù traïng thaùi 1) öùng vôùi moät traïng thaùi naøo
ñoù. Thanh ghi traïng thaùi ñoái vôùi hoï vi ñieàu khieån MCS-51 ñöôïc toå
chöùc nhö sau :
PSW.7 PSW.6 PSW.5 PSW.4 PSW.3 PSW.2 PSW.1 PSW.0

C AC Z RS1 RS0 OV - P

Côønhôù Côønhôù CôøZero Choïn bank Côøtraø


n Côøchaún
phuï thanh ghi leû

Côø nhôù C :
Bit C ñöôïc goïi laø bit Carry hay côø Carry khi thöïc hieän moät pheùp
coäng. Neáu pheùp coäng cho keát quaû laø moät soá > FF töùc laø keát
quaû bò traøn thì côø Carry ñöôïc phaát (töùc laø C = 1).
Bit C ñöôïc goïi laø bit Borrow hay côø Borrow khi thöïc hieän pheùp
tröø. Côø ñöôïc phaát khi soá bò tröø beù hôn soá tröø.

Côø nhôù phuï AC.

Côø nhôø phuï seõ ñöôïc phaát (AC = 1) neáu coù soá nhôù ñöôïc taïo ra
töø bit 3 hoaëc keát quaû 4 bit thaáp trong thanh ghi A coù giaù trò lôùn hôn
9.

Côø Zero:

Côø naøy ñöôïc phaát khi keát quaû cuûa moät pheùp toaùn coù giaù trò
baèng 0

RS1 vaø RS0 (caùc bit choïn bank thanh ghi).


32 byte coù ñòa chæ thaáp nhaát töø 00h ñeán 1Fh trong boä nhôù RAM
noäi goïi laø vuøng nhôù 4 bank. Trong vuøng nhôù naøy boá trí 8 thanh ghi

38
duøng ñeå löu tröõ döõ lieäu taïm thôøi trong quaù trình xöû lyù. Caùc thanh
ghi naøy coù teân laø R0 ñeán R7 vaø ñöôïc ñaët trong bank naøo tuyø
thuoäc vaøo 2 bit RS1 vaø RS0 trong thanh ghi traïng thaùi.
RS1RS0 = 00 RS1RS0 = 01 RS1RS0 = 10 RS1RS0 = 11
Cheá ñoä maëc (Phaûi thieát (Phaûi thieát (Phaûi thieát
ñònh laäp) laäp) laäp)

1F 1F 1F 1F R7
1E 1E 1E 1E R6
1D 1D 1D 1D R5
1C 1C 1C 1C R4
Bank 3 Bank 3 Bank 3 Bank 3
1B 1B 1B 1B R3
1A 1A 1A 1A R2
19 19 19 19 R1
18 18 18 18 R0
17 17 17 R7 17
16 16 16 R6 16
15 15 15 R5 15
14 14 14 R4 14
Bank 2 Bank 2 Bank 2 Bank 2
13 13 13 R3 13
12 12 12 R2 12
11 11 11 R1 11
10 10 10 R0 10
0F 0F R7 0F 0F
0E 0E R6 0E 0E
0D 0D R5 0D 0D
0C 0C R4 0C 0C
Bank 1 Bank 1 Bank 1 Bank 1
0B 0B R3 0B 0B
0A 0A R2 0A 0A
09 09 R1 09 09
08 08 R0 08 08
07 R7 07 07 07
06 R6 06 06 06
05 R5 05 05 05
04 R4 04 04 04
Bank 0 Bank 0 Bank 0 Bank 0
03 R3 03 03 03
02 R2 02 02 02
01 R1 01 01 01
00 R0 00 00 00
Address Address Address Address

Vôùi caùch boá trí naøy, moät thanh ghi baát kyø trong soá 8 thanh ghi
töø R0 ñeán R7, ví duï thanh ghi R1, coù theå naèm ôû 4 vò trí khaùc nhau.
Neáu RS1RS0 = 00 thì ñòa chæ cuûa R1 laø 01h. Neáu RS1RS0 = 01 thì ñòa chæ
cuûa R1 laø 08h. Ñieàu naøy thuaän lôïi ôû choã khi moät chöông trình chính
coù söû duïng thanh ghi coù teân R1 thì trong chöông trình con ta cuõng coù
theå söû duïng thanh ghi coù teân R1 nhöng tröôùc khi thöïc hieän caùc
leänh trong chöông trình con ñoù, ta thay ñoåi caùc bit R S1 vaø RS0 ñeå choïn
bank thanh ghi khaùc.
Ví duï: Trong chöông trình chính, RS1RS0 = 00 vaø thanh ghi R1 coù ñòa
chæ 01h. Giaû söû trong chöông trình chính coù söû duïng leänh MOV
R1,#05h (leänh naøy seõ chuyeån soá 05h = 0000 0101b vaøo thanh ghi
R1). Sau leänh naøy oâ nhôù ôû ñòa chæ 01h coù noäi dung laø 05h.
Baây giôø giaû söû chöông trình chính coù chöùa moät chöông trình con
maø trong chöông trình con coù söû duïng leänh MOV R1,#03h nhöng
tröôùc khi thöïc hieän leänh naøy coù leänh : SETB RS0 (leänh naøy laøm
cho bit RS0 = 1). Cheá ñoä maëc ñònh laø RS1RS0 = 00. Nhö vaäy sau leänh
SETB RS0 ta coù RS1RS0 = 01 vaø thanh ghi R1 baây giôø coù ñòa chæ laø
08h. Sau leänh MOV R1,#03h thì oâ nhôù ôû vò trí 08h coù noäi dung laø
03h. Ñieàu naøy coù nghóa laø noäi dung cuûa oâ nhôù ôû ñòa chæ 01h
(töông öùng vôùi thanh ghi R1 trong chöông trình chính) khoâng heà aûnh
höôûng gì sau leänh MOV R1,#03h trong chöông trình con.

39
Nhö vaäy maëc duø chöông trình chính vaø chöông trình con ñeàu söû
duïng thanh ghi coù cuøng teân laø R1 nhöng thöïc teá laø söû duïng 2 oâ
nhôù ôû hai vò trí khaùc nhau. Tuy nhieân khi chöông trình con thöïc hieän
xong, tröôùc khi quay veà chöông trình chính, phaûi thöïc hieän leänh CLR
RS0 ñeå traû laïi RS1RS0 = 00 thì ñòa chæ cuûa R1 trong chöông trình chính
môùi ñuùng laø 01h.
Löu yù :
ÔÛ cheá ñoä maëc ñònh, töùc laø cheá ñoä do vi ñieàu khieån töï thieát
laäp (ngöôøi laäp trình khoâng can thieäp) ngay sau khi vi ñieàu khieån
ñöôïc RESET thì RS1RS0 = 00 vaø caùc thanh ghi R0 ñeán R7 naèm trong bank
0. Luùc naøy caùc oâ nhôù töø 08h trôû leân coù theå khoâng duøng ñöôïc vì
noù laø vuøng maëc ñònh daønh rieâng cho ngaên xeáp (seõ trình baøy sau).
Ñeå söû duïng vuøng nhôù naøy, ta phaûi dôøi vuøng nhôù ngaên xeáp ñeán
vò trí khaùc. Vieäc naøy ñöôïc goïi laø khôûi taïo boä nhôù ngaên xeáp. Sau
khi ñaõ thieát laäp moät vuøng khaùc cho ngaên xeáp thì caùc bank 1, 2, 3
coù theå ñöôïc söû duïng ñeå chöùa caùc thanh ghi R0→R7 cuûa chöông
trình con 1, 2, 3 (toái ña laø 3).

3.5 Thanh ghi con troû ngaên xeáp (Stack Pointer - SP)
Ngaên xeáp laø moät phaàn cuûa boä nhôù RAM ñöôïc duøng laøm
nôi löu tröõ döõ lieäu taïm thôøi. Vuøng nhôù naøy ñöôïc tri xuaát theo kieåu
LI-FO (Last In – First Out töùc laø Vaøo sau – Ra tröôùc). Döõ lieäu naøo
ñöôïc “caát” vaøo sau cuøng thì seõ ñöôïc “laáy” ra tröôùc nhaát. Ñieàu naøy
cuõng gioáng nhö ta xeáp saùch leân giaù vaø sau ñoù laáy saùch treân giaù
xuoáng.
Thanh ghi SP chöùa ñòa chæ cuûa oâ nhôù trong vuøng nhôù ngaên xeáp
nôi maø döõ lieäu seõ ñöôïc “caát” vaøo hoaëc “laáy” ra. Tuy nhieân tröôùc
khi “caát” döõ lieäu vaøo, noäi dung cuûa SP töï ñoäng taêng theâm moät
ñôn vò vaø tröôùc khi “laáy” ra, noäi dung cuûa SP töï ñoäng giaûm ñi moät
ñôn vò.
Ñòa chæ thaáp nhaát cuûa vuøng nhôù ngaên xeáp (ôû cheá ñoä maéc
ñònh, töùc laø ngay sau khi RESET vi ñieàu khieån) laø 08h. Ñieàu naøy coù
nghóa laø noäi dung cuûa thanh ghi SP (ôû cheá ñoä maëc ñònh laø 07h).
Neáu muoán dôøi vuøng nhôù ngaên xeáp ñeán choã khaùc thì sau khi
RESET heä thoáng, ta phaûi naïp vaøo thanh ghi SP moät ñòa chæ môùi
phuø hôïp. Vieäc naøy ñöôïc goïi laø khôûi taïo vuøng nhôù ngaên xeáp.
Vuøng nhôù ngaên xeáp phaûi ñöôïc boá trí ôû nôi khoâng chöùa caùc thanh
ghi chöùc naêng vaø vuøng ñoù khoâng duøng ñeå löu döõ lieäu naøo khaùc
ngoaøi döõ lieäu ñöôïc caát vaøo bôùi leänh PUSH hoaëc caùc leänh goïi
chöông trình con (ACALL vaø LCALL).
Hoaït ñoäng cuûa leänh PUSH
Caáu truùc toång quaùt cuûa leänh laø : PUSH direct
direct laø töø khoaù mang tính toång quaùt theå hieän kieåu ñònh ñòa
chæ tröïc tieáp. Khi vieát chöông trình, noù seõ seõ ñöôïc thay baèng moät
ñòa chæ cuï theå nôi maø vi ñieàu khieån seõ laáy döõ lieäu ôû ñoù löu vaøo

40
moät oâ nhôù trong vuøng nhôù ngaên xeáp. Thanh ghi SP chöùa chæ nôi
löu vaøo. Tröôùc khi löu, noäi dung cuûa SP töï ñoäng taêng theâm 1 ñôn vò.

Ví duï : Giaû söû thanh ghi SP ñang chöùa döõ lieäu laø 07h = 0000
0111b
Baây giôø thöïc hieän leänh PUSH 03h
Quaù trình xaûy ra nhö sau :
 Vi ñieàu khieån troû ñeán oâ nhôù coù ñòa chæ 03h trong vuøng
nhôù RAM
 Noäi dung cuûa SP taêng theâm moät ñôn vò töùc laø : SP = 07h +
01h = 08h
 Döõ lieäu trong oâ nhôù ôû ñòa chæ 03h ñöôïc laáy ra
 Vi ñieàu khieån ñoïc noäi dung trong SP, keát quaû ñoïc ñöôïc laø
08h
 Vi ñieàu khieån troû ñeán oâ nhôù coù ñòa chæ 08h
 Döõ lieäu ñaõ laáy ra töø oâ nhôù ôû ñòa chæ 03h baây giôø ñöôïc
löu vaøo oâ nhôù coù ñòa chæ 08h.

Hoaït ñoäng cuûa leänh POP


Caáu truùc toång quaùt cuûa leänh laø : POP direct
direct seõ ñöôïc thay baèng moät ñòa chæ cuï theå nôi maø döõ lieäu
laáy ra töø moät oâ nhôù trong ngaên xeáp seõ ñöôïc “caát” vaøo ñoù.
Thanh ghi SP chöùa chæ nôi laáy döõ lieäu. Tröôùc khi laáy, noäi dung cuûa
SP töï ñoäng giaûm ñi 1 ñôn vò.
Ví duï : Giaû söû thanh ghi SP ñang chöùa döõ lieäu laø 08h = 0000
1000b
Baây giôø thöïc hieän leänh POP 03h
Quaù trình xaûy ra nhö sau :
 Noäi dung cuûa SP töï ñoäng giaûm ñi moät ñôn vò töùc SP = 08h -
01h = 07h
 Vi ñieàu khieån ñoïc noäi dung trong SP, keát quaû ñoïc ñöôïc laø
07h
 Vi ñieàu khieån troû ñeán oâ nhôù coù ñòa chæ 07h trong vuøng
nhôù RAM
 Döõ lieäu trong oâ nhôù ôû ñòa chæ 07h ñöôïc laáy ra
 Vi ñieàu khieån troû ñeán oâ nhôù coù ñòa chæ 03h
 Döõ lieäu ñaõ laáy ra töø oâ nhôù ôû ñòa chæ 07h baây giôø ñöôïc
löu vaøo oâ nhôù coù ñòa chæ 03h.
Qua 2 ví duï trình baøy treân ñaây ta thaáy raèng leänh PUSH vaø POP
hoaït ñoäng ngöôïc nhau. Ta duøng leänh PUSH ñeå duy chuyeån döõ lieäu
taïi moät oâ nhôù xaùc ñònh vaøo moät oâ nhôù khaùc trong vuøng ngaên
xeáp, nôi löu döõ lieäu ñöôïc xaùc ñònh baèng noäi dung trong SP + 1.

41
Ngöôïc laïi : Leänh POP ñöôïc duøng ñeå duy chuyeån döõ lieäu töø
vuøng nhôù ngaên xeáp ñeán moät oâ nhôù xaùc ñònh. Nôi laáy döõ lieäu
ñöôïc xaùc ñònh baèng noäi dung trong SP – 1.
Hai leänh PUSH vaø POP treân ñaây thöôøng duøng khi caàn hoaùn ñoåi
döõ lieäu giöõa hai oâ nhôù. Vieäc naøy coù theå hieåu ñôn giaûn hôn nhö
sau.
Giaû söû ta coù hai bieán a vaø b vaø hieän taïi thì : a = 2 vaø b = 5
Baây giôø ta caàn hoaùn ñoåi giaù trò cuûa a vôùi b. Töùc laø sau khi
hoaùn ñoåi ta coù a = 5 vaø b = 2. Quaù trình coù theå giaûi quyeát nhö sau
:

Ban 2 5
ñaàu a b
GIAÛI THUAÄT HOAÙN ÑOÅI NOÄI DUNG A VAØ B
Coâng vieäc Keát quaû sau khi
thöïc hieän

Sau böôùc naøy


taïm ta coù taïm = 2
Böôùc
1 2 5
a b
Chuyeån noäi dung trong a vaøo
moät bieán taïm

2
Sau böôùc naøy noäi
taïm
dung trong a seõ
Böôùc
ñöôïc thay theá baèng
2 5 noäi dung trong b
a b töùc laø a = 5
Chuyeån noäi dung cuûa b cho a

2
Sau böôùc naøy noäi
taïm
Böôùc dung trong b seõ
3 ñöôïc thay theá baèng
5 noäi dung trong taïm
a b
Chuyeån noäi dung trong taïm
cho b

Nhö vaäy sau 3 böôùc ta coù : a = 5 vaø b = 2 töùc laø noäi dung trong
a vaø b ñaõ ñöôïc hoaùn ñoåi cho nhau. Ñeå thöïc hieän vieäc naøy ta caàn
moät bieán trung gian laø bieán taïm vaø caàn coù 3 laàn duy chuyeån döõ
lieäu.

42
 Laàn thöù nhaát laø töø a vaøo taïm (haõy lieân töôûng ñeán leänh
PUSH)
 Laàn thöù hai laø töø b vaøo a
 Laàn thöù ba laø töø taïm vaøo b (haõy lieân töôûng ñeán leänh POP)
AÙp duïng ví duï treân, SV haõy vieát moät ñoaïn chöông trình ñeå thöïc
hieän hoaùn ñoåi noäi dung giöõa hai oâ nhôù coù ñòa chæ 03h vaø 05h.
Cho bieát leänh duy chuyeån döõ lieäu töø oâ nhôù coù ñòa chæ 05h ñeán
oâ nhôù coù ñòa chæ 03h laø : MOV 03h,05h

Caùc leänh goïi chöông trình con vaø leänh trôû veà.
Leänh goïi chöông trình con (ôû xa vò trí leänh ñang thöïc thi)
Caáu truùc toång quaùt : LCALL addr16
addr16 laø töø khoaù toång quaùt ñaïi dieän cho moät soá nhò phaân 16
bit (coù theå vieát döôùi daïng nhò phaân hoaëc HEXA). Khi laäp trình,
addr16 ñöôïc thay baèng moät soá 16bit maø soá naøy chính laø ñòa chæ
nôi chöông trình seõ “nhaûy ñeán” thöïc hieän taïi ñoù.
Ta bieát raèng chöông trình laø moät taäp hôïp caùc maõ leänh ñöôïc
saép xeáp theo moät trình töï nhaát ñònh ñeå thöïc hieän tuaàn töï caùc
coâng vieäc nhaèm giaûi quyeát moät vaán ñeà gì ñoù. Taát nhieân ta cuõng
caàn bieát raèng caùc maõ leänh naøy khoâng phaûi do chuùng ta vieát ra
maø chuùng ta chæ vieát caùc doøng leänh baèng caùc töø gôïi nhôù, ví duï
leänh duy chuyeån coù töø khoaù laø MOV. Chöông trình bieân dòch seõ
giuùp chuyeån caùc töø gôïi nhôù naøy thaønh soá nhò phaân (maõ leänh)
vaø sau ñoù trình ñieàu khieån maïch naïp seõ naïp caùc byte nhò phaân
naøy vaøo boä nhôù ROM cuûa vi ñieàu khieån ñeå thöïc hieän.
Khi chöông trình ñang thöïc hieän, noäi dung trong thanh ghi PC
luoân laø ñòa chæ cuûa leänh saép ñöôïc thöïc hieän. Vaäy neáu vi
ñieàu khieån ñang thi haønh leänh ôû vò trí x cuûa boä nhôù vaø leänh ñoù
laø leänh goïi chöông trình con (ACALL hoaëc LCALL) thì vi ñieàu khieån seõ
phaûi “haønh ñoäng” nhö theá naøo ñeå khi thi haønh xong chöông trình con
thì thöïc hieän ñuùng leänh keá ngay sau leänh ACALL hoaëc LCALL. “Haønh
ñoäng” ñoù nhö sau :
 Tröôùc nhaát vi ñieàu khieån “caát” noäi dung trong PC chính laø ñòa
chæ cuûa leänh keá vaøo vuøng nhôù ngaên xeáp. Noäi dung naøy
chieám 2 byte vì PC laø thanh ghi 16 bit.
 Ñòa chæ maø ta khai baùo ôû choã addr16 seõ ñöôïc naïp vaøo thanh
ghi PC.
 Noäi dung cuûa PC ñöôïc chuyeån cho thanh ghi ñòa chæ.
 Vi ñieàu khieån troû ñeán oâ nhôù coù ñòa chæ ñang hieän haønh
trong thanh ghi ñòa chæ.
 Döõ lieäu trong oâ nhôù chæ ñònh ñöôïc naïp vaøo IR ñeå giaûi maõ.
 Trong thôøi gian giaûi maõ, PC töï ñoäng taêng theâm 1 ñeå chuaån bò
ñoùn leänh keá.

43
Nhö vaäy vi ñieàu khieån ñang thi haønh chöông trình ôû moät ñòa chæ
môùi (ñaây laø chöông trình con).

“Haønh ñoäng” tieáp theo khi thi haønh xong chöông trình con laø gì ?
ÔÛ cuoái chöông trình con seõ coù moät leänh laø RET (vieát taét cuûa
töø RETURN töùc laø trôû veà) ñoái vôùi chöông trình con bình thöôøng
hoaëc RETI (vieát taét cuûa töø RETURN from INTERRUPT töùc laø trôû veà
töø chöông trình xöû lyù ngaét). Khi gaëp leänh naøy, vi ñieàu khieån seõ
laáy laïi döõ lieäu maø tröôùc ñaây noù ñaõ caát vaøo ngaên xeáp ñeå naïp
laïi cho PC. Sau ñoù noäi dung cuûa PC seõ chuyeån cho thanh ghi ñòa chæ.
Nhö vaäy vi ñieàu khieån seõ thi haønh leänh tieáp theo ngay sau leänh
ACALL hoaëc LCALL maø tröôùc ñaây noù chöa thöïc hieän.
Phaàn trình baøy treân chæ nhaèm muïc ñích giuùp ta hieåu roõ veà
hoaït ñoäng cuûa thanh ghi SP vaø vuøng nhôù ngaên xeáp. Ta seõ trình
baøy kyõ hôn veà caùc leänh cuõng nhö nhö theá naøo laø ngaét vaø xöû lyù
ngaét trong caùc phaàn tieáp sau.

4. TOÅ CHÖÙC BOÄ NHÔÙ NOÄI CUÛA VI ÑIEÀU KHIEÅN 89C51

Boä nhôù noäi cuûa vi ñieàu khieån hoï MCS-51 goàm hai phaàn laø boä
nhôù RAM duøng ñeå löu tröõ döõ lieäu taïm thôøi vaø boä nhôù ROM duøng
ñeå löu chöông trình ñieàu khieån.
Ñoái vôùi 89C51, boä nhôù RAM coù 256 byte chia thaønh 2 phaàn:
128 byte ñòa chæ thaáp ñöôïc chia thaønh 3 vuøng.
 Vuøng thöù nhaát laø 32 byte ñaàu tieân töø ñòa chæ 00h ñeán
1Fh. Ngöôøi ta thöôøng goïi vuøng nhôù naøy laø vuøng nhôù 4 bank,
moãi bank 8 byte. Caùc thanh ghi töø R0 ñeán R7 ñöôïc boá trí trong
bank naøo tuyø thuoäc vaøo traïng thaùi cuûa 2 bit RS1 vaø RS0 trong
thanh ghi traïng thaùi (PSW). Ñieàu naøy ñaõ ñöôïc trình baøy chi tieát
ôû phaàn tröôùc.
 16 byte tieáp theo töø ñòa chæ 20h ñeán 2Fh laø vuøng nhôù cho
pheùp truy caäp ñeán töøng bit. Moãi bit coù moät ñòa chæ rieâng.
Trong vuøng nhôù naøy ta coù theå truy xuaát byte hoaëc truy xuaát
bit tuyø yù.
 80 byte coøn laïi töø ñòa chæ 30h ñeán 7Fh laø vuøng RAM ña
duïng. Vuøng nhôù naøy chæ coù theå truy xuaát byte vaø cho pheùp
laäp trình vieân tuyø yù söû duïng. Ngöôøi ta thöôøng daønh ra moät
soá byte ôû cuoái vuøng nhôù naøy ñeå laøm vuøng nhôù ngaên xeáp.
Ví duï neáu sau khi RESET heä thoáng ta duøng leänh : MOV SP,#5Fh
thì thanh ghi SP seõ coù noäi dung laø 5Fh = 0101 1111b vaø vuøng
nhôù ngaên xeáp seõ coù ñòa chæ töø 60h ñeán 7Fh. Tröôøng hôïp
naøy ta ñaõ daønh 32 byte cho vuøng nhôù ngaên xeáp.

128 byte ñòa chæ cao cuûa boä nhôù RAM laø vuøng nhôù daønh
rieâng cho caùc thanh ghi chöùc naêng cuûa vi ñieàu khieån. Trong soá naøy
44
coù moät soá vò trí chöa duøng ñeán. Chi tieát veà boä nhôù RAM cuûa vi
ñieàu khieån 89C51 ñöôïc trình baøy treân hình veõ sau.

7F FF

...
F0 F7 F6 F5 F4 F3 F2 F1 F0 B

...
RAM ña duïng
(80 byte) E0 E7 E6 E5 E4 E3 E2 E1 E0 ACC (hay A)

...
D0 D7 D6 D5 D4 D3 D2 D1D0 PSW
30

...
2F 7F 7E 7D 7C 7B 7A 79 78 B8 - - - BC BB BA B9 B8 IP

...
2E 77 76 75 74 73 72 71 70
2D 6F 6E 6D 6C 6B 6A 69 68 B0 B7 B6 B5 B4 B3 B2 B1 B0 P3
...
2C 67 66 65 64 63 62 61 60
2B 5F 5E 5D 5C 5B 5A 59 58 A8 AF - - AC AB AA A9 A8 IE
2A 57 56 55 54 53 52
...

51 50
29 4F 4E 4D 4C 4B 4A 49 48 A0 A7 A6 A5 A4 A3 A2 A1 A0 P2
28 47 46 45 44 43 42 41 40
...

27 3F 3E 3D 3C 3B 3A 39 38 99 SBUF
26 37 36 35 34 33 32 31 30 98 9F 9E 9D 9C 9B 9A 99 98 SCON
25 2F 2E 2D 2C 2B 2A 29 28
...

24 27 26 25 24 23 22 21 20
23 1F 1E 1D 1C 1B 1A 19 18 90 97 96 95 94 93 92 91 90
22 17 16 15 14 13 12 11 10
...

21 0F 0E 0D 0C 0B 0A 09 08
20 07 06 05 04 03 02 01 00 8D TH1 (Timer 1)
1F 8C TH0
Bank 3
8B TL1
...

(8 byte)
18 8A TL0 (Timer 0)
17 89 TMOD
Bank 2
...

(8 byte) 88 8F 8E 8D 8C 8B 8A 89 88 TCON
10 87 PCON
0F
...

Bank 1
...

(8 byte)
08 83 DPH
DPTR
07 82 DPL
Bank 0
...

(8 byte) 81 SP
00 80 87 86 85 84 83 82 81 80 P0
Address Address Name

Moät soá vò trí nhôù cho pheùp truy xuaát tôùi töøng bit. Moät soá vò trí
nhôù ngoaøi ñòa chæ coùn coù moät teân. Ví duï ôû vò trí nhôù coù ñòa chæ
byte A0 laø moät thanh ghi 8 bit coù teân laø P2. Moãi bit cuûa thanh ghi
naøy laïi coù moät ñòa chæ rieâng. Ta coù theå truy xuaát thanh ghi naøy

45
(ghi döõ lieäu leân thanh ghi hoaëc ñoïc döõ lieäu töø thanh ghi) baèng
nhieàu caùch.

Ví duï Ñeå ghi döõ lieäu 0111 0110b = 76h leân thanh ghi P2 ta coù 3
caùch nhö sau:
 Caùch 1 : MOV P2,#76h (P2 laø teân cuûa thanh ghi nôi döõ lieäu
seõ ghi vaøo)
 Caùch 2 : MOV A0,#76h (A0 laø ñòa chæ nôi döõ lieäu seõ ghi
vaøo)
 Caùch 3 :
CLR 0A7h (xoaù bit ôû ñòa chæ A7h, soá 0 ñöôïc
theâm vaøo neáu ñòa chæ hoaëc döõ
lieäu coù chöùa kyù töï).
SETB 0A6h (Set bit ôû ñòa chæ A6h)
SETB 0A5h (Set bit ôû ñòa chæ A5h)
SETB 0A4h (Set bit ôû ñòa chæ A4h)
CLRB 0A3h (Xoaù bit ôû ñòa chæ A3h)
SETB 0A2h (Set bit ôû ñòa chæ A2h)
SETB 0A1h (Set bit ôû ñòa chæ A1h)
CLR 0A0h (Xoaù bit ôû ñòa chæ A0h)
Caùch thöù 3 daøi nhaát nhöng noù seõ tieän duïng trong tröôøng hôïp
sau :
Giaû söû trong thanh ghi P2 ñang chöùa döõ lieäu laø : 0111 0110b =
76h (cuõ)
Baây giôø muoán thay ñoåi döõ lieäu trong P2 thanh : 0110 0110b =
66h (môùi)
Nhaän thaáy döõ lieäu môùi khaùc vôùi döõ lieäu cuõ duy nhaát 1 bit,
ñoù laø bit thöù 4 (löu yù laø bit taän cuøng beân traùi laø bit thöù 0). Bit
naøy trong döõ lieäu cuõ laø 1 nhöng trong döõ lieäu môùi laø 0. Caùch ñôn
giaûn ñeå ñoåi döõ lieäu trong P2 theo yeâu caàu treân laø duøng leänh :
CLR 0A4h (leänh naøy seõ xoaù bit thöù 4, ñòa chæ cuûa bit laø A4h).
Ngoaøi ra coøn coù hai caùch khaùc laø :
Caùch 1 : MOV P2,#66h
Caùch 2 : MOV A0,#66h
Hai caùch sau naøy coù theå aûnh höôûng nhaát thôøi leân caùc bit
khaùc trong quaù trình duy chuyeån döõ lieäu. Ngoaøi ra, leänh ñöôïc duøng
ôû caùch thöù 2 chieám 3 byte trong boä nhôù (daøi hôn leänh CLR 0A4h
moät byte).

Boä nhôù ROM


Boä nhôù ROM trong 89C51 laø loaïi FLASH ROM (ROM cho pheùp
naïp/xoaù baèng ñieän) dung löôïng 4 Kbyte töùc 4096 byte. Nhö vaäy boä
nhôù naøy coù theå chöùa ñöôïc 4096 byte maõ leänh. Moãi leänh coù theå
46
coù 1, 2 hoaëc 3 byte. Neáu laáy trung bình moãi leänh chieám 2 byte thì
boä nhôù noäi coù theå chöùa 1 chöông trình daøi trung bình khoaûng 2000
leänh. Vôùi caùc chöông trình daøi hôn, coù theå phaûi duøng ROM ngoaøi
hoaëc duøng vi ñieàu khieån coù dung löôïng boä nhôù noäi lôùn hôn (ví duï
hoï MCS-52 coù dung löôïng boä nhôù noäi ñeán 8 Kbyte).
Byte maõ leänh ñaàu tieân cuûa chöông trình luoân ñöôïc naïp vaøo oâ
nhôù coù ñòa chæ 0000h vì vi ñieàu khieån luoân ñoïc oâ nhôù naøy ñaàu
tieân ngay sau khi RESET.
5. CAÙC KEÁT NOÁI PHAÀN CÖÙNG

+5V
+
RESET 10µF +
150
47µF 0,1µF
Maïch RESET 10kΩ
+Auto 1 P1.0 Vcc 40
+ Handy Maïch loïc
2 P1.1 P0.0 39 nhieãu
nguoàn
3 P1.2 P0.1 38
PORT 1

4 P1.3 P0.2 37

PORT 0
5 P1.4 P0.3 36

6 P1.5 P0.4 35

7 P1.6 P0.5 34

8 P1.7 P0.6 33

9 RST (Reset) P0.7 32


AT89C51

10 P3.0 EA 31

11 P3.1 ALE 30

12 P3.2 PSEN 29
PORT 3

13 P3.3 P2.7 28

14 P3.4 P2.6 27

15 P3.5 P2.5 26
PORT 2

Caùc linh kieän


ngoaøi duøng 16 P3.6 P2.4 25
cho maïch taïo
xung Clock 17 P3.7 P2.3 24
33pF
18 XTAL2 P2.2 23
12M
19 XTAL1 P2.1 22
33pF
20 GND P2.0 21

Moät soá chaân chöùc naêng


47
 Chaân RST
Ñaây laø ngoõ vaøo RESET vi ñieàu khieån, taùc duïng ôû möùc cao. Ta
coù theå duøng maïch ñieän nhö moâ taû treân ñeå thöïc hieän chöù naêng
Auto RESET ngay khi heä thoáng vöøa ñöôïc caáp ñieän vaø RESET baèng
tay (nhaán nuùt RESET) baát cöù khi naøo caàn thieát khi vi ñieàu khieån
ñang laøm vieäc.
 Chaân EA (External Access)
Chaân naøy laø ngoõ vaøo, ñöôïc noái leân nguoàn (möùc 1) khi duøng
boä nhôù noäi ñeå löu chöông trình hoaëc noái mass (möùc 0) khi duøng boä
ngoaøi.

 Chaân ALE (Address Latch Enable).


Chaân ALE ñöôïc söû duïng trong tröôøng hôïp duøng boä nhôù chöông
trình ngoaøi (töùc boä nhôù ROM ngoaøi). Khi ñoù ñòa chæ truy xuaát caùc
oâ nhôù trong boä nhôù ngoaøi ñöôïc vi ñieàu khieån gôûi ra ôû PORT 0 vaø
PORT 1. Döõ lieäu xuaát ra treân PORT 0 luùc ñaàu laø 8 bit ñòa chæ thaáp,
giai ñoaïn naøy tín hieäu taïi ALE ôû möùc 1. Tuy nhieân giai ñoaïn sau ALE
chuyeån xuoáng möùc thaáp vaø PORT 0 ñöôïc duøng ñeå nhaäp döõ lieäu
töø ROM. Do vaäy ngöôøi ta duøng tín hieäu ALE ñeå choát caùc ñòa chæ
vaøo moät vi maïch choát tröôùc khi PORT 0 trôû thaønh PORT nhaäp döõ
lieäu.
Khi khoâng duøng boä nhôù ROM ngoaøi, chaân ALE ñöôïc boû troáng.
Taïi chaân ALE coù tín hieäu xung vuoâng taàn soá baèng 1/6 taàn soá cuûa
tuï thaïch anh gaén vaøo vi ñieàu khieån. Vôùi tuï thaïch anh coù taàn soá
12MHz thì taàn soá tín hieäu taïi ALE laø 2MHz. Do ñoù coù theå duøng tín
hieäu taïi chaân ALE ñeå laøm xung Clock cho caùc phaàn töû khaùc trong
heä thoáng.

 Chaân PSEN (Program store Enable)


Chaân naøy laø ngoõ ra, ñöôïc duøng ñeå noái ñeán ngoõ vaøo OE hoaëc
RD cuûa ROM khi söû duïng boä nhôù ROM ngoaøi. Khi khoâng duøng boä
nhôù ROM ngoaøi, chaân PSEN boû troáng.

Sô ñoà keát noái vi ñieàu khieån vôùi boä nhôù ROM ngoaøi

48
JP1
+5V Vcc Vcc U1 Vcc Vcc
1

20
40
U2
2 U3

28
1 39 D0 D0 2 19 A0
P1.0 P0.0/AD0 1D 1Q

VCC

VCC
2 38 D1 D1 3 18 A1
0 3 P1.1 P0.1/AD1 37 D2 D2 4 2D 2Q 17 A2 A12 2
P1.2 P0.2/AD2 3D 3Q A12

VCC
4 36 D3 D3 5 16 A3 A11 23
5 P1.3 P0.3/AD3 35 D4 D4 6 4D 4Q 15 A4 A10 21 A11
6 P1.4 P0.4/AD4 34 D5 D5 7 5D 5Q 14 A5 A9 24 A10
7 P1.5 P0.5/AD5 33 D6 D6 8 6D 6Q 13 A6 A8 25 A9 11 D0
8 P1.6 P0.6/AD6 32 D7 D7 9 7D 7Q 12 A7 A7 3 A8 D0 12 D1
P1.7 P0.7/AD7 8D 8Q A6 4 A7 D1 13 D2
9 31 Vcc 11 A5 5 A6 D2 15 D3
RST EA 30 C A4 6 A5 D3 16 D4
10 ALE 29 1 A3 7 A4 D4 17 D5
P3.0/RXD PSEN OC A3 D5

GND
11 A2 8 18 D6
12 P3.1/TXD 28 A1 9 A2 D6 19 D7
P3.2/INT0 P2.7/A15 74LS373 A1 D7
13 27 A0 10

10
14 P3.3/INT1 P2.6/A14 26 A0
15 P3.4/T0 P2.5/A13 25 A12
16 P3.5/T1 P2.4/A12 24 A11 0 Vcc 27
17 P3.6/WR P2.3/A11 23 A10 WE
P3.7/RD P2.2/A10 22 A9 22
18 P2.1/A9 21 A8 OE
XTAL2 P2.0/A8 20
19 CE
XTAL1
GND

GND
AT89C51 28C64A

14
20

0 0 0

Caùc PORT xuaát nhaäp


Caùc PORT cuûa vi ñieàu khieån ñeàu laø PORT xuaát/nhaäp, coù nghóa
laø coù theå caáp tín hieäu ñeán ñoù (khi PORT ñöôïc duøng laøm PORT
nhaäp) hoaëc laáy tín hieäu töø ñoù (khi PORT ñöôïc duøng laøm PORT
xuaát).
Caáu truùc cuûa PORT xuaát nhaäp nhö sau :

+5V
...
...
...
...
...
...
...

Read Latch Read Pin


Rp
Chaâ
n PORT
D Q MOS-FET
(keâ
nh N)
Write to latch

Moät PORT coù theå chæ duøng laøm PORT nhaäp hoaëc chæ duøng laøm
PORT xuaát. Tuy nhieân moät soá tröôøng hôïp öùng duïng ñaëc bieät naøo
ñoù, ngöôøi ta duøng PORT vöøa ñeå xuaát, vöøa ñeå nhaäp.
Ngay sau khi RESET heä thoáng, taát caû caùc boä choát ôû moãi PORT
ñeàu ñöôïc SET leân 1 laøm cho MOS-FET noái vôùi chaân PORT ngöng daãn.

49
Luùc naøy PORT ôû traïng thaùi saún saøng cho vieäc nhaäp döõ lieäu. Moät
leänh nhaäp döõ lieäu, ví duï : MOV A,P1 seõ ñoïc traïng thaùi caùc chaân
cuûa PORT 1 (Read Pin) vaø nhaäp caùc traïng thaùi ñoù vaøo thanh ghi A.
Neáu PORT ñöôïc duøng laøm PORT xuaát thì ngay sau khi RESET, traïng
thaùi tín hieäu treân caùc chaân PORT ñeàu laø möùc 1 do caùc maïch choát
ñöôïc SET. Sau ñoù traïng thaùi caùc chaân PORT seõ do chöông trình ñieàu
khieån.
Neáu moät PORT vöøa laøm PORT nhaäp, vöøa laøm PORT xuaát thì
tröôùc khi nhaäp phaûi SET boä choát. Vieäc naøy ñöôïc töï ñoäng thöïc
hieän ngay sau khi RESET, tuy nhieân caàn thöïc hieän laïi baèng leänh trong
chöông trình vì coù theå moät leänh xuaát tröôùc ñoù ñaõ xoaù moät bit
naøo ñoù trong boä choát vaø khi ñoù MOS-FET töông öùng vôùi ngoõ ra bò
xoaù seõ daãn baõo hoaø, keùo chaân PORT xuoáng möùc thaáp, coù theå
laøm sai döõ lieäu nhaäp.
Ñieän trôû keùo leân (Rp) chæ coù trong PORT 1, 2 vaø 3. PORT 0 khoâng
coù ñieän trôû naøy. Vì vaäy khi duøng PORT 0, ta caàn maéc theâm ñieän
trôû keùo leân (coù giaù trò khoaûng 1kΩ). Ñieän trôû naøy neân duøng loaïi
maûng cho goïn.
+5V Ñieä
n trôûmaû
ng
PORT0

Hình thöïc cuûa ñieän trôû


maûng
Giao tieáp giöõa vi ñieàu khieån vôùi taûi.
Ñeå giao tieáp giöõa vì ñieàu khieån vôùi caùc loaïi taûi, caàn coù maïch
ñeäm vaø maïch Driver, nhieàu khi caàn caû maïch giao tieáp quang ñeå
ñaûm baûo an toaøn cho vi ñieàu khieån. Phaàn naøy xin tham khaûo theâm
“Baøi giaûng kyõ thuaät soá”.

50

You might also like