You are on page 1of 68

Khaûo saùt vi ñieàu khieån 8951

I. Ñaët vaán ñeà:


Cuøng vôùi söï phaùt trieån cuûa neàn kinh teá vaø khoa hoïc kyõ thuaät treân con
ñöôøng coâng nghieäp hoùa, hieän ñaïi hoùa ñaát nöôùc. Ngaønh ñieän töû noùi chung
ñaõ coù nhöõng böôùc tieán vöôït baäc vaø mang laïi nhöõng thaønh quaû ñaùng keå.
Trong ñoù vi xöû lí laø lónh vöïc ñaõ thöïc söï mang laïi nhöõng hieäu quûa chính
xaùc vaø goïn nheï trong quaù trình ñieàu khieån, saûn xuaát.
Ñeå söû duïng trieät ñeå boä nhôù EPROM beân trong cuõng nhö söï caàn thieát
coù moät chöông trình heä thoáng naøo ñoù ñöôïc naïp vaøo trong EPROM ñeå thi haønh
khi vöøa môû maùy.
II. Muïc ñích yeâu caàu:
1. Muïc ñích:
Thöïc hieän maïch naïp EPROM cho vi ñieàu khieån ñeå söû duïng hieäu quaû
boä nhôù cuûa EPROM.
Vieát moät chöông trình heä thoáng naïp vaøo trong maùy.
2. Yeâu caàu:
Maïch hoaït ñoäng chính xaùc, khi naïp vaø ñoïc phaûi naïp ñuùng döõ lieäu caàn
naïp hay ñoïc, ñoàng thôøi khi xoaù thì phaûi xoaù toaøn boä vuøng nhôù.
Maïch goïn nheï, deã söû duïng, deã kieåm soaùt vaø vaän haønh.
Trong thôøi gian giôùi haïn 7 tuaàn vaø kieán thöùc coøn nhieàu haïn cheá neân
ñeà taøi: “MAÏCH GHI ÑOÏC EPROM CHO VI ÑIEÀU KHIEÅN 8951” do em thöïc
hieän chaéc chaén coù nhöõng sai soùt, raát mong söï thoâng caûm, ñoùng goùp cuûa
caùc thaày, caùc coâ vaø caùc baïn tham khaûo ñeå ñeà taøi hoaøn thieän hôn vaø mang
laïi hieäu quaû thieát thöïc hôn trong thöïc teá.
I. Caáu taïo vi ñieàu khieån hoï MSC-51:
1. Giôùi thieäu caáu truùc phaàn cöùng hoï MSC-51 (8951):
Ñaëc ñieåm vaø chöùc naêng hoaït ñoäng cuûa caùc IC hoï MSC-51 hoaøn
toaøn töông töï nhö nhau. ÔÛ ñaây giôùi thieäu IC 8951 laø moät hoï IC vi ñieàu khieån
do haõng Intel cuûa Myõ saûn xuaát. Chuùng coù caùc ñaëc ñieåm chung nhö sau:
Caùc ñaëc ñieåm cuûa 8951 ñöôïc toùm taét nhö sau:
 4 KB EPROM beân trong.
 128 Byte RAM noäi.
 4 Port xuaát /nhaäp I/O 8 bit.
 Giao tieáp noái tieáp.
 64 KB vuøng nhôù maõ ngoaøi
Khaûo saùt vi ñieàu khieån 8951

 64 KB vuøng nhôù döõ lieäu ngoaïi.


 Xöû lyù Boolean (hoaït ñoäng treân bit ñôn).
 210 vò trí nhôù coù theå ñònh vò bit.
 4s cho hoaït ñoäng nhaân hoaëc chia.
Khaûo saùt vi ñieàu khieån 8951

2. Khaûo saùt sô ñoà chaân 8951 vaø chöùc naêng töøng chaân:

2.1 Sô ñoà chaân 8951:

U2

39 21
38 P0.0/AD0 P2.0/A8 22
37 P0.1/AD1 P2.1/A9 23
36 P0.2/AD2 P2.2/A10 24
35 P0.3/AD3 P2.3/A11 25
34 P0.4/AD4 P2.4/A12 26
33 P0.5/AD5 P2.5/A13 27
32 P0.6/AD6 P2.6/A14 28
P0.7/AD7 P2.7/A15
1 10
2 P1.0 P3.0/RXD 11
3 P1.1 P3.1/TXD 12
4 P1.2 P3.2/INTO 13
5 P1.3 P3.3/INT1 14
6 P1.4 P3.4/TO 15
7 P1.5 P3.5/T1 16
8 P1.6 P3.6/WR 17
P1.7 P3.7/RD
19 29
18 XTAL1 PSEN
9 XTAL2 30
RST ALE/PROG
31
EA/VPP

AT89C51

Sô ñoà chaân IC 8951

2.2 Chöùc naêng caùc chaân cuûa 8951


8951 coù taát caû 40 chaân coù chöùc naêng nhö caùc ñöôøng xuaát nhaäp.
Trong ñoù coù 24 chaân coù taùc duïng keùp (coù nghóa laø 1 chaân coù 2 chöùc naêng),
moãi ñöôøng coù theå hoaït ñoäng nhö ñöôøng xuaát nhaäp hoaëc nhö ñöôøng ñieàu
khieån hoaëc laø thaønh phaàn cuûa caùc bus döõ lieäu vaø bus ñòa chæ.
a.Caùc Port:
Port 0:
Port 0 laø port coù 2 chöùc naêng ôû caùc chaân 32 - 39 cuûa 8951. Trong caùc
thieát keá côõ nhoû khoâng duøng boä nhôù môû roäng noù coù chöùc naêng nhö caùc
ñöôøng I/O. Ñoái vôùi caùc thieát keá côõ lôùn coù boä nhôù môû roäng, noù ñöôïc keát
hôïp giöõa bus ñòa chæ vaø bus döõ lieäu.
Port 1:
Port 1 laø port I/O treân caùc chaân 1-8. Caùc chaân ñöôïc kyù hieäu P1.0, P1.1,
p1.2, ... p1.7 coù theå duøng cho giao tieáp vôùi caùc thieát bò ngoaøi neáu caàn. Port 1
khoâng coù chöùc naêng khaùc, vì vaäy chuùng chæ ñöôïc duøng cho giao tieáp vôùi
caùc thieát bò beân ngoaøi.
Port 2:
Khaûo saùt vi ñieàu khieån 8951

Port 2 laø 1 port coù taùc duïng keùp treân caùc chaân 21- 28 ñöôïc duøng nhö
caùc ñöôøng xuaát nhaäp hoaëc laø byte cao cuûa bus ñòa chæ ñoái vôùi caùc thieát bò
duøng boä nhôù môû roäng.
Port 3:
Port 3 laø port coù taùc duïng keùp treân caùc chaân 10-17. Caùc chaân cuûa port
naøy coù nhieàu chöùc naêng, caùc coâng duïng chuyeån ñoåi coù lieân heä vôùi caùc
ñaëc tính ñaëc bieät cuûa 8951 nhö ôû baûng sau:
Bit Teân Chöùc naêng chuyeån ñoåi
P3.0 RXT Ngoõ vaøo döõ lieäu noái tieáp.
P3.1 TXD Ngoõ xuaát döõ lieäu noái tieáp.
P3.2 INT0\ Ngoõ vaøo ngaét cöùng thöù 0
P3.3 INT1\ Ngoõ vaøo ngaét cöùng thöù 1
P3.4 T0 Ngoõ vaøo cuûaTIMER/COUNTER thöù 0.
P3.5 T1 Ngoõ vaøo cuûaTIMER/COUNTER thöù 1.
P3.6 WR\ Tín hieäu ghi döõ lieäu leân boä nhôù ngoaøi
P3.7 RD\ Tín hieäu ñoïc boä nhôù döõ lieäu ngoaøi.
b.Caùc ngoõ tín hieäu ñieàu khieån:
Ngoõ tín hieäu PSEN (Program store enable):
PSEN laø tín hieäu ngoõ ra ôû chaân 29 coù taùc duïng cho pheùp ñoïc boä nhôù
chöông trình môû roäng thöôøng ñöôïc noái ñeán chaân OE\ (output enable) cuûa Eprom
cho pheùp ñoïc caùc byte maõ leänh.
PSEN ôû möùc thaáp trong thôøi gian Microcontroller 8951 laáy leänh. Caùc maõ
leänh cuûa chöông trình ñöôïc ñoïc töø Eprom qua bus döõ lieäu vaø ñöôïc choát vaøo
thanh ghi leänh beân trong 8951 ñeå giaûi maõ leänh. Khi 8951 thi haønh chöông trình
trong EPROM noäi PSEN seõ ôû möùc logic 1.
Ngoõ tín hieäu ñieàu khieån ALE (Address Latch Enable)
Khi 8951 truy xuaát boä nhôù beân ngoaøi, port 0 coù chöùc naêng laø bus ñòa
chæ vaø bus döõ lieäu do ñoù phaûi taùch caùc ñöôøng döõ lieäu vaø ñòa chæ. Tín hieäu
ra ALE ôû chaân thöù 30 duøng laøm tín hieäu ñieàu khieån ñeå giaûi ña hôïp caùc
ñöôøng ñòa chæ vaø döõ lieäu khi keát noái chuùng vôùi IC choát.
Tín hieäu ra ôû chaân ALE laø moät xung trong khoaûng thôøi gian port 0 ñoùng
vai troø laø ñòa chæ thaáp neân choát ñòa chæ hoaøn toaøn töï ñoäng.
Caùc xung tín hieäu ALE coù toác ñoä baèng 1/6 laàn taàn soá dao ñoäng treân
chip vaø coù theå ñöôïc duøng laøm tín hieäu clock cho caùc phaàn khaùc cuûa heä
thoáng. Chaân ALE ñöôïc duøng laøm ngoõ vaøo xung laäp trình cho EPROM trong
8951.
Khaûo saùt vi ñieàu khieån 8951

Ngoõ tín hieäu EA\(External Access):


Tín hieäu vaøo EA\ ôû chaân 31 thöôøng ñöôïc maéc leân möùc 1 hoaëc möùc 0.
Neáu ôû möùc 1, 8951 thi haønh chöông trình töø EPROM noäi trong khoaûng ñòa chæ
thaáp 4 Kbyte. Neáu ôû möùc 0, 8951 seõ thi haønh chöông trình töø boä nhôù môû
roäng. Chaân EA\ ñöôïc laáy laøm chaân caáp nguoàn 12V khi laäp trình cho Eprom
trong 8951.
Ngoõ tín hieäu RST (Reset) :
Ngoõ vaøo RST ôû chaân 9 laø ngoõ vaøo Reset cuûa 8951. Khi ngoõ vaøo tín
hieäu naøy ñöa leân cao ít nhaát laø 2 chu kyø maùy, caùc thanh ghi beân trong ñöôïc
naïp nhöõng giaù trò thích hôïp ñeå khôûi ñoäng heä thoáng. Khi caáp ñieän maïch töï
ñoäng Reset.
Caùc ngoõ vaøo boä dao ñoäng X1,X2:
Boä dao ñoäng ñöôïc ñöôïc tích hôïp beân trong 8951, khi söû duïng 8951 ngöôøi
thieát keá chæ caàn keát noái theâm thaïch anh vaø caùc tuï nhö hình veõ trong sô ñoà.
Taàn soá thaïch anh thöôøng söû duïng cho 8951 laø 12Mhz.
Chaân 40 (Vcc) ñöôïc noái leân nguoàn 5V.

3. Caáu truùc beân trong vi ñieàu khieån:

3.1 Toå chöùc boä nhôù:

FFFF FFFF
Code Data
FF
Memory Memory

00 Enable via Enable via


On -Chip PSEN RD&WR
Memory 0000
0000

External Memory

Baûng toùm taét caùc vuøng nhôù 8951.


Khaûo saùt vi ñieàu khieån 8951

Boä nhôù trong 8951 bao goàm EPROM vaø RAM. RAM trong 8951 bao goàm
nhieàu thaønh phaàn: phaàn löu tröõ ña duïng, phaàn löu tröõ ñòa chæ hoùa töøng bit,
caùc bank thanh ghi vaø caùc thanh ghi chöùc naêng ñaëc bieät.
8951 coù boä nhôù theo caáu truùc Harvard: coù nhöõng vuøng boä nhôù rieâng
bieät cho chöông trình vaø döõ lieäu. Chöông trình vaø döõ lieäu coù theå chöùa beân
trong 8951 nhöng 8951 vaãn coù theå keát noái vôùi 64K byte boä nhôù chöông trình
vaø 64K byte döõ lieäu.
Khaûo saùt vi ñieàu khieån 8951

Baûn ñoà boä nhôù Data treân Chip nhö sau:


7F FF
F0 F7 F6 F5 F4 F3 F2 F1 F0 B
RAM ña duïng
E0 E7 E6 E5 E4 E3 E2 E1 E0 ACC

D0 D7 D6 D5 D4 D3 D2 D1 D0 PSW

30 B8 - - - BC BB BA B9 B8 IP
2F 7F 7E 7D 7C 7B 7A 79 78
2E 77 76 75 74 73 72 71 70 B0 B7 B6 B5 B4 B3 B2 B1 B0 P.3
2D 6F 6E 6D 6C 6B 6A 69 68
2C 67 66 65 64 63 62 61 60 A8 AF AC AB AA A9 A8 IE
2B 5F 5E 5D 5C 5B 5A 59 58
2A 57 56 55 54 53 52 51 50 A0 A7 A6 A5 A4 A3 A2 A1 A0 P2
29 4F 4E 4D 4C 4B 4A 49 48
28 47 46 45 44 43 42 41 40 99 khoâng ñöôïc ñòa chæ hoaù bit SBUF
27 3F 3E 3D 3C 3B 3A 39 38 98 9F 9E 9D 9C 9B 9A 99 98 SCON
26 37 36 35 34 33 32 31 30
25 2F 2E 2D 2C 2B 2A 29 28 90 97 96 95 94 93 92 91 90 P1
24 27 26 25 24 23 22 21 20
23 1F 1E 1D 1C 1B 1A 19 18 8D khoâng ñöôïc ñòa chæ hoaù bit TH1
22 17 16 15 14 13 12 11 10 8C khoâng ñöôïc ñòa chæ hoaù bit TH0
21 0F 0E 0D 0C 0B 0A 09 08 8B khoâng ñöôïc ñòa chæ hoaù bit TL1
20 07 06 05 04 03 02 01 00 8A khoâng ñöôïc ñòa chæ hoaù bit TL0
1F Bank 3 89 khoâng ñöôïc ñòa chæ hoaù bit TMOD
18 88 8F 8E 8D 8C 8B 8A 89 88 TCON
17 Bank 2 87 khoâng ñöôïc ñòa chæ hoaù bit PCON
10
0F Bank 1 83 khoâng ñöôïc ñòa chæ hoaù bit DPH
08 82 khoâng ñöôïc ñòa chæ hoaù bit DPL
07 Bank thanh ghi 0 81 khoâng ñöôïc ñòa chæ hoaù bit SP
00 (maëc ñònh cho R0 -R7) 88 87 86 85 84 83 82 81 80 P0
Hai ñaëc tính caàn chuù yù laø:
 Caùc thanh ghi vaø caùc port xuaát nhaäp ñaõ ñöôïc ñònh vò (xaùc ñònh)
trong boä nhôù vaø coù theå truy xuaát tröïc tieáp gioáng nhö caùc ñòa chæ
boä nhôù khaùc.
 Ngaên xeáp beân trong Ram noäi nhoû hôn so vôùi Ram ngoaïi nhö trong
caùc boä Microcontroller khaùc.
RAM beân trong 8951 ñöôïc phaân chia nhö sau:
Khaûo saùt vi ñieàu khieån 8951

· Caùc bank thanh ghi coù ñòa chæ töø 00H ñeán 1FH.
· RAM ñòa chæ hoùa töøng bit coù ñòa chæ töø 20H ñeán 2FH.
· RAM ña duïng töø 30H ñeán 7FH.
· Caùc thanh ghi chöùc naêng ñaëc bieät töø 80H ñeán FFH.
RAM ña duïng:
Maëc duø treân hình veõ cho thaáy 80 byte ña duïng chieám caùc ñòa chæ töø
30H ñeán 7FH, 32 byte döôùi töø 00H ñeán 1FH cuõng coù theå duøng vôùi muïc ñích
töông töï (maëc duø caùc ñòa chæ naøy ñaõ coù muïc ñích khaùc).
Moïi ñòa chæ trong vuøng RAM ña duïng ñeàu coù theå truy xuaát töï do duøng
kieåu ñòa chæ tröïc tieáp hoaëc giaùn tieáp.
RAM coù theå truy xuaát töøng bit:
8951 chöùa 210 bit ñöôïc ñòa chæ hoùa, trong ñoù coù 128 bit coù chöùa caùc
byte chöùa caùc ñòa chæ töø 20H ñeán 2FH vaø caùc bit coøn laïi chöùa trong nhoùm
thanh ghi coù chöùc naêng ñaëc bieät.
YÙ töôûng truy xuaát töøng bit baèng phaàn meàm laø caùc ñaêëc tính maïnh
cuûa microcontroller xöû lyù chung. Caùc bit coù theå ñöôïc ñaët, xoùa, AND, OR, … ,
vôùi 1 leänh ñôn. Ña soá caùc microcontroller xöû lyù ñoøi hoûi moät chuoãi leänh
ñoïc-söûa- ghi ñeå ñaït ñöôïc muïc ñích töông töï. Ngoaøi ra caùc port cuõng coù theå
truy xuaát ñöôïc töøng bit.
128 bit coù chöùa caùc byte coù ñòa chæ töø 00H -1FH cuõng coù theå truy xuaát
nhö caùc byte hoaëc caùc bit phuï thuoäc vaøo leänh ñöôïc duøng.
Caùc bank thanh ghi :
32 byte thaáp cuûa boä nhôù noäi ñöôïc daønh cho caùc bank thanh ghi. Boä leänh
8951 hoå trôï 8 thanh ghi coù teân laø R0 -R7 vaø theo maëc ñònh sau khi reset heä
thoáng, caùc thanh ghi naøy coù caùc ñòa chæ töø 00H - 07H.
Caùc leänh duøng caùc thanh ghi RO - R7 seõ ngaén hôn vaø nhanh hôn so vôùi
caùc leänh coù chöùc naêng töông öùng duøng kieåu ñòa chæ tröïc tieáp. Caùc döõ lieäu
ñöôïc duøng thöôøng xuyeân neân duøng moät trong caùc thanh ghi naøy.
Do coù 4 bank thanh ghi neân taïi moät thôøi ñieåm chæ coù moät bank thanh ghi
ñöôïc truy xuaát bôûi caùc thanh ghi RO - R7 ñeåà chuyeån ñoåi vieäc truy xuaát caùc
bank thanh ghi ta phaûi thay ñoåi caùc bit choïn bank trong thanh ghi traïng thaùi.

3.2 Caùc thanh ghi coù chöùc naêng ñaëc bieät:


Caùc thanh ghi noäi cuûa 8951 ñöôïc truy xuaát ngaàm ñònh bôûi boä leänh.
Khaûo saùt vi ñieàu khieån 8951

Caùc thanh ghi trong 8951 ñöôïc ñònh daïng nhö moät phaàn cuûa RAM treân
chip vì vaäy moãi thanh ghi seõ coù moät ñòa chæ (ngoaïi tröø thanh ghi boä ñeám
chöông trình vaø thanh ghi leänh vì caùc thanh ghi naøy hieám khi bò taùc ñoäng tröïc
tieáp). Cuõng nhö R0 ñeán R7, 8951 coù 21 thanh ghi coù chöùc naêng ñaëc bieät (SFR:
Special Function Register) ôû vuøng treân cuûa RAM noäi töø ñòa chæ 80H - FFH.
Chuù yù: taát caû 128 ñòa chæ töø 80H ñeán FFH khoâng ñöôïc ñònh nghóa, chæ
coù 21 thanh ghi coù chöùc naêng ñaëc bieät ñöôïc ñònh nghóa saün caùc ñòa chæ.
Ngoaïi tröø thanh ghi A coù theå ñöôïc truy xuaát ngaàm nhö ñaõ noùi, ña soá
caùc thanh ghi coù chöùc naêng ñieät bieät SFR coù theå ñòa chæ hoùa töøng bit hoaëc
byte.
Thanh ghi traïng thaùi chöông trình (PSW: Program Status Word):
Töø traïng thaùi chöông trình ôû ñòa chæ D0H ñöôïc toùm taét nhö sau:

Bit Symbol Address Description


PSW.7 CY D7H Cary Flag
PSW.6 AC D6H Auxiliary Cary Flag
PSW.5 F0 D5H Flag 0
PSW4 RS1 D4H Register Bank Select 1
PSW.3 RS0 D3H Register Bank Select 0
00=Bank 0; address 00H07H
01=Bank 1; address 08H0FH
10=Bank 2; address 10H17H
11=Bank 3; address 18H1FH
PSW.2 OV D2H Overlow Flag
PSW.1 - D1H Reserved
PSW.0 P DOH Even Parity Flag
Chöùc naêng töøng bit traïng thaùi chöông trình
Côø Carry CY (Carry Flag):
Côø nhôù coù taùc duïng keùp. Thoâng thöôøng noù ñöôïc duøng cho caùc leänh
toaùn hoïc: C=1 neáu pheùp toaùn coäng coù söï traøn hoaëc pheùp tröø coù möôïn vaø
ngöôïc laïi C=0 neáu pheùp toaùn coäng khoâng traøn vaø pheùp tröø khoâng coù
möôïn.
Côø Carry phuï AC (Auxiliary Carry Flag):
Khaûo saùt vi ñieàu khieån 8951

Khi coäng nhöõng giaù trò BCD (Binary Code Decimal), côø nhôù phuï AC ñöôïc
set neáu keát quaû 4 bit thaáp naèm trong phaïm vi ñieàu khieån 0AH - 0FH. Ngöôïc laïi
AC=0.
Côø 0 (Flag 0):
Côø 0 (F0) laø 1 bit côø ña duïng duøng cho caùc öùng duïng cuûa ngöôøi duøng.
Nhöõng bit choïn bank thanh ghi truy xuaát:
RS1 vaø RS0 quyeát ñònh daõy thanh ghi tích cöïc. Chuùng ñöôïc xoùa sau khi
reset heä thoáng vaø ñöôïc thay ñoåi bôûi phaàn meàm khi caàn thieát.
Tuøy theo RS1, RS0 = 00, 01, 10, 11 seõ ñöôïc choïn Bank tích cöïc töông öùng
laø Bank 0, Bank1, Bank2, Bank3.

RS1 RS0 BANK


0 0 0
0 1 1
1 0 2
1 1 3
Côø traøn OV (Over Flag):
Côø traøn ñöôïc set sau moät hoaït ñoäng coäng hoaëc tröø neáu coù söï traøn
toaùn hoïc. Khi caùc soá coù daáu ñöôïc coäng hoaëc tröø vôùi nhau, phaàn meàm coù
theå kieåm tra bit naøy ñeå xaùc ñònh xem keát quaû coù naèm trong taàm xaùc ñònh
khoâng. Khi caùc soá khoâng coù daáu ñöôïc coäng bit OV ñöôïc boû qua. Caùc keát
quaû lôùn hôn +127 hoaëc nhoû hôn -128 thì bit OV=1.
Bit Parity (P) :
Bit töï ñoäng ñöôïc set hay Clear ôû moãi chu kyø maùy ñeå laäp Parity chaün
vôùi thanh ghi A. Söï ñeám caùc bit 1 trong thanh ghi A coäng vôùi bit Parity luoân
luoân chaün. Ví duï A chöùa 10101101B thì bit P set leân 1 ñeå toång soá bit 1 trong A
vaø P taïo thaønh soá chaün.
Bit Parity thöôøng ñöôïc duøng trong söï keát hôïp vôùi nhöõng thuû tuïc cuûa
Port noái tieáp ñeå taïo ra bit Parity tröôùc khi phaùt ñi hoaëc kieåm tra bit Parity sau khi
thu.
Thanh ghi B :
Thanh ghi B ôû ñòa chæ F0H ñöôïc duøng cuøng vôùi thanh ghi A cho caùc
pheùp toaùn nhaân chia. Leänh MUL AB seõ nhaän nhöõng giaù trò khoâng daáu 8 bit
trong hai thanh ghi A vaø B, roài traû veà keát quaû 16 bit trong A (byte cao) vaø B(byte
thaáp). Leänh DIV AB laáy A chia B, keát quaû nguyeân ñaët vaøo A, soá dö ñaët vaøo
B.
Khaûo saùt vi ñieàu khieån 8951

Thanh ghi B coù theå ñöôïc duøng nhö moät thanh ghi ñeäm trung gian ña muïc
ñích. Noù laø nhöõng bit ñònh vò thoâng qua nhöõng ñòa chæ töø F0H - F7H.
Con troû Ngaên xeáp SP (Stack Pointer) :
Con troû ngaên xeáp laø moät thanh ghi 8 bit ôû ñòa chæ 81H. Noù chöùa ñòa
chæ cuûa cuûa byte döõ lieäu hieän haønh treân ñænh ngaên xeáp. Caùc leänh treân
ngaên xeáp bao goàm caùc leänh caát döõ lieäu vaøo ngaên xeáp (PUSH) vaø laáy döõ
lieäu ra khoûi ngaên xeáp (POP). Leänh caát döõ lieäu vaøo ngaên xeáp seõ laøm taêng
SP tröôùc khi ghi döõ lieäu vaø leänh laáy ra khoûi ngaên xeáp seõ laøm giaûm SP.
Ngaên xeáp cuûa 8031/8051 ñöôïc giöõ trong RAM noäi vaø giôùi haïn caùc ñòa chæ
coù theå truy xuaát baèng ñòa chæ giaùn tieáp, chuùng laø 128 byte ñaàu cuûa 8951.
Ñeå khôûi ñoäng SP vôùi ngaên xeáp baét ñaàu taïi ñòa chæ 60H, caùc leänh
sau ñaây ñöôïc duøng:
MOV SP , #5F
Vôùi leänh treân thì ngaên xeáp cuûa 8951 chæ coù 32 byte vì ñòa chæ cao
nhaát cuûa RAM treân chip laø 7FH. Sôû dó giaù trò 5FH ñöôïc naïp vaøo SP vì SP
taêng leân 1 laø 60H tröôùc khi caát byte döõ lieäu.
Khi Reset 8951, SP seõ mang giaù trò maëc ñònh laø 07H vaø döõ lieäu ñaàu
tieân seõ ñöôïc caát vaøo oâ nhôù ngaên xeáp coù ñòa chæ 08H. Neáu phaàn meàm öùng
duïng khoâng khôûi ñoäng SP moät giaù trò môùi thì bank thanh ghi1 coù theå caû 2 vaø
3 seõ khoâng duøng ñöôïc vì vuøng RAM naøy ñaõ ñöôïc duøng laøm ngaên xeáp.
Ngaên xeáp ñöôïc truy xuaát tröïc tieáp baèng caùc leänh PUSH vaø POP ñeå löu tröõ
taïm thôøi vaø laáy laïi döõ lieäu, hoaëc truy xuaát ngaàm baèng leänh goïi chöông trình
con (ACALL, LCALL) vaø caùc leänh trôû veà (RET, RETI) ñeå löu tröõ giaù trò cuûa
boä ñeám chöông trình khi baét ñaàu thöïc hieän chöông trình con vaø laáy laïi khi keát
thuùc chöông trình con ...
Con troû döõ lieäu DPTR (Data Pointer):
Con troû döõ lieäu (DPTR) ñöôïc duøng ñeå truy xuaát boä nhôù ngoaøi laø moät
thanh ghi 16 bit ôû ñòa chæ 82H (DPL: byte thaáp) vaø 83H (DPH: byte cao). Ba leänh
sau seõ ghi 55H vaøo RAM ngoaøi ôû ñòa chæ 1000H:
MOV A , #55H
MOV DPTR, #1000H
MOV @DPTR, A
Leänh ñaàu tieân duøng ñeå naïp 55H vaøo thanh ghi A. Leänh thöù hai duøng
ñeå naïp ñòa chæ cuûa oâ nhôù caàn löu giaù trò 55H vaøo con troû döõ lieäu DPTR.
Leänh thöù ba seõ di chuyeån noäi dung thanh ghi A (laø 55H) vaøo oâ nhôù RAM beân
ngoaøi coù ñòa chæ chöùa trong DPTR (laø 1000H)
Khaûo saùt vi ñieàu khieån 8951

Caùc thanh ghi Port (Port Register):


Caùc Port cuûa 8951 bao goàm Port 0 ôû ñòa chæ 80H, Port1 ôû ñòa chæ 90H,
Port2 ôû ñòa chæ A0H, vaø Port3 ôû ñòa chæ B0H. Taát caû caùc Port naøy ñeàu coù
theå truy xuaát töøng bit neân raát thuaän tieän trong khaû naêng giao tieáp.
Caùc thanh ghi Timer (Timer Register):
8951 coù chöùa hai boä ñònh thôøi/boä ñeám 16 bit ñöôïc duøng cho vieäc ñònh
thôøi ñöôïc ñeám söï kieän. Timer0 ôû ñòa chæ 8AH (TLO: byte thaáp) vaø 8CH ( THO:
byte cao). Timer1 ôû ñòa chæ 8BH (TL1: byte thaáp) vaø 8DH (TH1 : byte cao). Vieäc
khôûi ñoäng timer ñöôïc SET bôûi 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.
Caùc thanh ghi Port noái tieáp (Serial Port Register):
8951 chöùa moät Port noái tieáp 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 giao tieáp noái tieáp vôùi caùc IC khaùc. Moät
thanh ghi ñeäm döõ lieäu noái tieáp (SBUF) ôû ñòa chæ 99H seõ giöõ caû hai döõ lieäu
truyeàn vaø döõ lieäu nhaäp. Khi truyeàn döõ lieäu ghi leân SBUF, khi nhaän döõ lieäu
thì ñoïc SBUF. Caùc mode vaän 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.
Caùc thanh ghi ngaét (Interrupt Register):
8951 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 bò 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æ A8H. Caû hai ñöôïc ñòa chæ hoùa töøng bit.
Thanh ghi ñieàu khieån nguoàn PCON (Power Control Register):
Thanh ghi PCON khoâng coù bit ñònh vò. Noù ôû ñòa chæ 87H chöùa nhieàu bit
ñieàu khieån. Thanh ghi PCON ñöôïc toùm taét nhö sau:
· Bit 7 (SMOD) : Bit coù toác ñoä Baud ôû mode 1, 2, 3 ôû Port noái tieáp
khi set.
· Bit 6, 5, 4 : Khoâng coù ñòa chæ.
· Bit 3 (GF1) : Bit côø ña naêng 1.
· Bit 2 (GF0) : Bit côø ña naêng 2.
· Bit 1 * (PD) : Set ñeå khôûi ñoäng mode Power Down vaø thoaùt ñeå
reset.
· Bit 0 * (IDL) : Set ñeå khôûi ñoäng mode Idle vaø thoaùt khi ngaét maïch
hoaëc reset.
Khaûo saùt vi ñieàu khieån 8951

Caùc bit ñieàu khieån Power Down vaø Idle coù taùc duïng chính trong taát
caû caùc IC hoï MSC-51 nhöng chæ ñöôïc thi haønh trong söï bieân dòch cuûa CMOS.

3.3 Boä nhôù ngoaøi (External Memory):


8951 coù khaû naêng môû roäng boä nhôù leân ñeán 64K byte boä nhôù chöông
trình vaø 64k byte boä nhôù döõ lieäu ngoaøi. Do ñoù coù theå duøng theâm RAM vaø
EPROM neáu caàn.
Khi duøng boä nhôù ngoaøi, Port0 khoâng coøn chöc naêng I/O nöõa. Noù ñöôïc
keát hôïp 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 cuûa bus ñòa chæ chæ khi baét ñaàu moãi chu kyø boä nhôù. Port2 ñöôïc cho
laø byte cao cuûa bus ñòa chæ.
Truy xuaát boä nhôù maõ ngoaøi (Acessing External Code Memory):
Boä nhôù chöông trình beân ngoaøi laø boä nhôù EPROM ñöôïc cho pheùp cuûa
tín hieäu PSEN\. Söï keát noái phaàn cöùng cuûa boä nhôù EPROM nhö sau:

Port 0 D0-D7

74HC373
8051 EA Port 0 EPROM
D
O

ALE G

Port 2 A8-A15

PSEN OE

Accessing External Code Memory (Truy xuaát boä nhôù maõ ngoaøi)
Trong moät chu kyø maùy tieâu bieåu, tín hieäu ALE tích cöïc 2 laàn. Laàn thöù
nhaát cho pheùp 74HC373 môû coång choát ñòa chæ byte thaáp, khi ALE xuoáng 0 thì
byte thaáp vaø byte cao cuûa boä ñeám chöông trình ñeàu coù nhöng EPROM chöa xuaát
vì PSEN\ chöa tích cöïc, khi tín hieäu leân 1 trôû laïi thì Port 0 ñaõ coù döõ lieäu laø
Opcode. ALE tích cöïc laàn thöù hai ñöôïc giaûi thích töông töï vaø byte 2 ñöôïc ñoïc töø
boä nhôù chöông trình. Neáu leänh ñang hieän haønh laø leänh 1 byte thì CPU chæ ñoïc
Opcode, coøn byte thöù hai boû ñi.
Truy xuaát boä nhôù döõ lieäu ngoaøi (Accessing External Data Memory) :
Khaûo saùt vi ñieàu khieån 8951

Boä nhôù döõ lieäu ngoaøi laø moät boä nhôù RAM ñöôïc ñoïc hoaëc ghi khi
ñöôïc cho pheùp cuûa tín hieäu RD\ vaø WR. Hai tín hieäu naøy naèm ôû chaân P3.7
(RD) vaø P3.6 (WR). Leänh MOVX ñöôïc duøng ñeå truy xuaát boä nhôù döõ lieäu
ngoaøi vaø duøng moät boä ñeäm döõ lieäu 16 bit (DPTR), R0 hoaëc R1 nhö laø moät
thanh ghi ñòa chæ.
Caùc RAM coù theå giao tieáp vôùi 8951 töông töï caùch thöùc nhö EPROM
ngoaïi tröø chaân RD\ cuûa 8951 noái vôùi chaân OE\ (Output Enable) cuûa RAM vaø
chaân WR\ cuûa 8951 noái vôùi chaân WE\ cuûa RAM. Söï noái caùc bus ñòa chæ vaø
döõ lieäu töông töï nhö caùch noái cuûa EPROM.

Port 0 D0-D7

74HC373
8051 EA A0-A7 RAM
D
O

ALE G

Port 2 A8-A15
RD OE
WR WE

Accessing External Data Memory (Truy xuaát boä nhôù döõ lieäu ngoaøi)
Söï giaûi maõ ñòa chæ (Address Decoding):
Söï giaûi maõ ñòa chæ laø moät yeâu caàu taát yeáu ñeå choïn EPROM, RAM,
8279, … Söï giaûi maõ ñòa chæ ñoái vôùi 8951 ñeå choïn caùc vuøng nhôù ngoaøi. Neáu
caùc con EPROM hoaëc RAM 8K ñöôïc duøng thì caùc bus ñòa chæ phaûi ñöôïc giaûi
maõ ñeå choïn caùc IC nhôù naèm trong phaïm vi giôùi haïn 8K: 0000H - 1FFFH ;
2000H - 3FFFH, …
Moät caùch cuï theå, IC giaûi maõ 74HC138 ñöôïc duøng vôùi nhöõng ngoõ ra
cuûa noù ñöôïc noái vôùi nhöõng ngoõ vaøo choïn Chip CS (Chip Select) treân nhöõng
IC nhôù EPROM, RAM, … Hình sau ñaây cho pheùp keát noái nhieàu EPROM vaø
RAM.
Khaûo saùt vi ñieàu khieån 8951

Address Bus (A0- A15)

Data Bus (D0-D7)

WR RD
2764 6264

PSEN OE D0-D7 OE D0-D7


WE
A0-A12 EPROM A0-A12 RAM
8KBytes 8KBytes
CS text CS RAM

CS CS RAM

CS CS

C 0
B 1
A 2
3
4
74HC138
5
Select another EPROM/RAM
E 6
E 7
E

Address Decoding (Giaûi maõ ñòa chæ)


Söï ñeø leân nhau cuûa caùc vuøng nhôù döõ lieäu ngoaøi:
Vì boä nhôù chöông trình laø EPROM, neân naûy sinh moät vaán ñeà baát tieän
khi phaùt trieån phaàn meàm cho vi ñieàu khieån. Moät nhöôïc ñieåm chung cuûa 8951
laø caùc vuøng nhôù döõ lieäu ngoaøi naèm ñeø leân nhau, vì tín hieäu PSEN\ ñöôïc
duøng ñeå ñoïc boä nhôù maõ ngoaøi vaø tín hieäu RD\ ñöôïc duøng ñeå ñoïc boä nhôù
döõ lieäu, neân moät boä nhôù RAM coù theå chöùa caû chöông trình vaø döõ lieäu
baèng caùch noái ñöôøng OE\ cuûa RAMù ñeán ngoõ ra moät coång AND coù hai ngoõ
vaøo PSEN\ vaø RD\. Sô ñoà maïch nhö hình sau cho pheùp boä nhôù RAM coù hai
chöùc naêng vöøa laø boä nhôù chöông trình vöøa laø boä nhôù döõ lieäu:
Khaûo saùt vi ñieàu khieån 8951

RAM

W W

RD
OE
PSEN

Overlapping the External code and data space


Vaäy moät chöông trình coù theå ñöôïc load vaøo RAM baèng caùch xem noù nhö
boä nhôù döõ lieäu vaø thi haønh chöông trình baèng caùch xem noù nhö boä nhôù
chöông trình.
Hoaït ñoäng Reset:
8951 coù ngoõ vaøo reset RST taùc ñoäng ôû möùc cao trong khoaûng thôøi gian
2 chu kyø xung maùy, sau ñoù xuoáng möùc thaáp ñeå 8951 baét ñaàu laøm vieäc. RST
coù theå kích tay baèng moät phím nhaán thöôøng hôû, sô ñoà maïch reset nhö sau:
Manual Reset (Reset baèng tay)

+5V +5V

100 RESET
10uF
RST

8.2KOhm

Traïng thaùi cuûa taát caû caùc thanh ghi trong 8951 sau khi reset heâ thoáng
ñöôïc toùm taét nhö sau:
Thanh ghi Noäi dung
Ñeám chöông trình PC 0000H
Thanh ghi tích luõyA 00H
Thanh ghi B 00H
Thanh ghi thaùi PSW 00H
SP 07H
Khaûo saùt vi ñieàu khieån 8951

DPRT 0000H
Port 0 ñeán port 3 FFH
IP XXX0 0000 B
IE 0X0X 0000 B
Caùc thanh ghi ñònh 00H
thôøi 00H
SCON SBUF 00H
PCON (HMOS) 0XXX XXXXH
PCON (CMOS) 0XXX 0000 B

Thanh ghi quan troïng nhaát laø thanh ghi boä ñeám chöông trình PC ñöôïc reset
taïi ñòa chæ 0000H. Khi ngoõ vaøo RST xuoáng möùc thaáp, chöông trình luoân baét
ñaàu taïi ñòa chæ 0000H cuûa boä nhôù chöông trình. Noäi dung cuûa RAM treân chip
khoâng bò thay ñoåi bôûi taùc ñoäng cuûa ngoõ vaøo reset.
II. Toùm taét taäp leänh cuûa 8951 :
Caùc chöông trình ñöôïc caáu taïo töø nhieàu leänh, chuùng ñöôïc xaây döïng
logic, söï noái tieáp cuûa caùc leänh ñöôïc nghó ra moät caùch hieäu quaû vaø nhanh
choùng, keát quaû cuûa chöông trình khaû thi.
Taäp leänh hoï MSC-51 ñöôïc söï kieåm tra cuûa caùc mode ñònh vò vaø caùc
leänh cuûa chuùng coù caùc Opcode 8 bit. Ñieàu naøy cung caáp khaû naêng 2 8= 256
leänh ñöôïc thi haønh vaø moät leänh khoâng ñöôïc ñònh nghóa. Vaøi leänh coù 1 hoaëc
2 byte bôûi döõ lieäu hoaëc ñòa chæ theâm vaøo Opcode. Trong toaøn boä caùc leänh
coù 139 leänh 1 byte, 92 leänh 2 byte vaø 24 leänh 3 byte.
1. Caùc mode ñònh vò (Addressing Mode) :
Caùc mode ñònh vò laø moät boä phaän thoáng nhaát cuûa taäp leänh. Chuùng
cho pheùp ñònh roõ nguoàn hoaëc nôi gôûi tôùi cuûa döõ lieäu ôû caùc ñöôøng khaùc
nhau tuøy thuoäc vaøo traïng thaùi cuûa ngöôøi laäp trình. 8951 coù 8 mode ñònh vò
ñöôïc duøng nhö sau:
· Thanh ghi.
· Tröïc tieáp.
· Giaùn tieáp.
· Töùc thôøi.
· Töông ñoái.
· Tuyeät ñoái.
· Daøi.
· Ñònh vò.
Khaûo saùt vi ñieàu khieån 8951

1.1 Söï ñònh vò thanh ghi (Register Addressing):


Coù 4 daõy thanh ghi 32 byte ñaàu tieân cuûa RAM döõ lieäu treân Chip ñòa chæ
00H - 1FH, nhöng taïi moät thôøi ñieåm chæ coù moät daõy hoaït ñoäng caùc bit PSW3,
PSW4 cuûa töø traïng thaùi chöông trình seõ quyeát ñònh daõy naøo hoaït ñoäng.
Caùc leänh ñeå ñònh vò thanh ghi ñöôïc ghi maät maõ baèng caùch duøng bit
troïng soá thaáp nhaát cuûa Opcode leänh ñeå chæ moät thanh ghi trong vuøng ñòa chæ

Opcode n n n

theo logic naøy. Nhö vaäy 1 maõ chöùc naêng vaø ñòa chæ hoaït ñoäng coù theå ñöôïc
keát hôïp ñeå taïo thaønh moät leänh ngaén 1 byte nhö sau:
Register Addressing.
Moät vaøi leänh duøng cuï theå cho 1 thanh ghi naøo ñoù nhö thanh ghi A,
DPTR.... maõ Opcode töï noù cho bieát thanh ghi vì caùc bit ñòa chæ khoâng caàn bieát
ñeán.

1.2 Söï ñònh ñòa chæ tröïc tieáp (Direct Addressing):


Söï ñònh ñòa chæ tröïc tieáp coù theå truy xuaát baát kyø giaù trò naøo treân Chip
hoaëc thanh ghi phaàn cöùng treân Chip. Moät byte ñòa chæ tröïc tieáp ñöôïc ñöa vaøo
Opcode ñeå ñònh roõ vò trí ñöôïc duøng nhö sau:

Opcode

Direct Addressing

Direct Addressing
Khaûo saùt vi ñieàu khieån 8951

Tuøy thuoäc caùc bit baäc cao cuûa ñòa chæ tröïc tieáp maø moät trong 2 vuøng
nhôù ñöôïc choïn. Khi bit 7 = 0, thì ñòa chæ tröïc tieáp ôû trong khoaûng 0 - 127 (00H -
7FH) vaø 128 vò trí nhôù thaáp cuûa RAM treân Chip ñöôïc choïn.
Taát caû caùc Port I/O, caùc thanh ghi chöùc naêng ñaëc bieät, thanh ghi ñieàu
khieån hoaëc thanh ghi traïng thaùi bao giôø cuõng ñöôïc quy ñònh caùc ñòa chæ trong
khoaûng 128 - 255 (80 - FFH). Khi byte ñòa chæ tröïc tieáp naèm trong giôùi haïn naøy
(öùng vôùi bit 7 = 1) thì thanh ghi chöùc naêng ñaëc bieät ñöôïc truy xuaát. Ví duï Port 0
vaø Port 1 ñöôïc quy ñònh ñòa chæ tröïc tieáp laø 80H vaø 90H, P0, P1 laø daïng thöùc
ruùt goïn thuaät nhôù cuûa Port, thì söï bieán thieân cho pheùp thay theá vaø hieåu daïng
thöùc ruùt goïn thuaät nhôù cuûa chuùng. Chaúng haïn leänh: MOV P1, A söï bieân dòch
seõ xaùc ñònh ñòa chæ tröïc tieáp cuûa Port 1 laø 90H ñaët vaøo hai byte cuûa leänh
(byte 1 cuûa port 0).

1.3 Söï ñònh vò ñòa chæ giaùn tieáp (Indirect Addressing):


Söï ñònh ñòa chæ giaùn tieáp ñöôïc töôïng tröng bôûi kyù hieäu @ ñöôïc ñaët
tröôùc R0, R1 hay DPTR. R0 vaø R1 coù theå hoaït ñoäng nhö moät thanh ghi con troû
maø noäi dung cuûa noù cho bieát moät ñòa chæ trong RAM noäi ôû nôi maø döõ lieäu
ñöôïc ghi hoaëc ñöôïc ñoïc. Bit coù troïng soá nhoû nhaát cuûa Opcode leänh seõ xaùc
ñònh R0 hay R1 ñöôïc duøng con troû Pointer.

Opcode i

1.4 Söï ñònh ñòa chæ töùc thôøi (Immediate Addressing):


Söï ñònh ñòa chæ töùc thôøi ñöôïc töôïng tröng bôûi kyù hieäu # ñöôïc ñöùng
tröôùc moät haèng soá, 1 bieán kyù hieäu hoaëc moät bieåu thöùc soá hoïc ñöôïc söû
duïng bôûi caùc haèng, caùc kyù hieäu, caùc hoaït ñoäng do ngöôøi ñieàu khieån. Trình
bieân dòch tính toaùn giaù trò vaø thay theá döõ lieäu töùc thôøi. Byte leänh theâm voâ
chöùa trò soá döõ lieäu töùc thôøi nhö sau:
Khaûo saùt vi ñieàu khieån 8951

Opcode

Immediate Data

1.5 Söï ñònh ñòa chæ töông ñoái:


Söï ñònh ñòa chæ töông ñoái chæ söû duïng vôùi nhöõng leänh nhaûy naøo ñoù.
Moät ñòa chæ töông ñoái (hoaëc Offset) laø moät giaù trò 8 bit maø noù ñöôïc coäng
vaøo boä ñeám chöông trình PC ñeå taïo thaønh ñòa chæ moät leänh tieáp theo ñöôïc
thöïc thi. Phaïm vi cuûa söï nhaûy naèm trong khoaûng -128 – 127. Offset töông ñoái
ñöôïc gaén vaøo leänh nhö moät byte theâm vaøo nhö sau :
Nhöõng nôi nhaûy ñeán thöôøng ñöôïc chæû roõ bôûi caùc nhaõn vaø trình bieân

Opcode

Relative Offset

dòch xaùc ñònh Offset Relative cho phuø hôïp.


Söï ñònh vò töông ñoái ñem laïi thuaän lôïi cho vieäc cung caáp maõ vò trí ñoäc
laäp, nhöng baát lôïi laø chæ nhaûy ngaén trong phaïm vi -128 – 127 byte.

1.6 Söï ñònh ñòa chæ tuyeät ñoái (Absolute Addressing):


Söï ñònh ñòa chæ tuyeät ñoái ñöôïc duøng vôùi caùc leänh ACALL vaø AJMP.
Caùc leänh 2 byte cho pheùp phaân chia trong trang 2K ñang löu haønh cuûa boä nhôù
maõ cuûa vieäc cung caáp 11 bit thaáp ñeå xaùc ñònh ñòa chæ trong trang 2K (A 0…A10
goàm A10…A8 trong Opcode vaø A7…A0 trong byte) vaø 5 bit cao ñeå choïn trang 2K (5
bit cao ñang löu haønh trong boä ñeám chöông trình laø 5 bit Opcode).
Khaûo saùt vi ñieàu khieån 8951

Addr10 - Addr8 Opcode

Addr7 - Addr0

Söï ñònh vò tuyeät ñoái ñem laïi thuaän lôïi cho caùc leänh ngaén (2 byte), nhöng
baát lôïi trong vieäc giôùi haïn phaïm vi nôi gôûi ñeán vaø cung caáp maõ coù vò trí
ñoäc laäp.

1.7 Söï ñònh vò daøi (Long Addressing):


Söï ñònh vò daøi ñöôïc duøng vôùi leänh LCALL vaø LJMP. Caùc leänh 3 byte
naøy bao goàm moät ñòa chæ nôi gôûi tôùi 16 bit ñaày ñuû laø 2 byte vaø 3 byte cuûa
leänh.

Opcode

Addr15 - Addr8

Addr7 - Addr0

Öu ñieåm cuûa söï ñònh vò daøi laø vuøng nhôù maõ 64K coù theå ñöôïc duøng
heát, nhöôïc ñieåm laø caùc leänh ñoù daøi 3 byte vaø vò trí leä thuoäc. Söï phuï thuoäc
vaøo vò trí seõ baát lôïi bôûi chöông trình khoâng theå thöïc thi taïi ñòa chæ khaùc.

1.8 Söï ñònh ñòa chæ phuï luïc (Index Addressing):


Söï ñònh ñòa chæ phuï luïc duøng moät thanh ghi cô baûn (cuõng nhö boä ñeám
chöông trình hoaëc boä ñeám döõ lieäu) vaø Offset (thanh ghiA) trong söï hình thaønh 1
ñòa chæ lieân quan bôûi leänh JMP hoaëc MOVC.
Khaûo saùt vi ñieàu khieån 8951

Base Register Offset Effective Address

PC (or PDTR) ACC

Index Addressing.
Caùc baûng cuûa leänh nhaûy hoaëc caùc baûng tra ñöôïc taïo neân moät caùch
deã daøng baèng caùch duøng ñòa chæ phuï luïc.
2. Caùc kieåu leänh (Instruction Types):
8951 chia ra 5 nhoùm leänh chính:
· Caùc leänh soá hoïc.
· Leänh logic.
· Dòch chuyeån döõ lieäu.
· Lyù luaän.
· Reõ nhaùnh chöông trình.
Töøng kieåu leänh ñöôïc moâ taû nhö sau:

2.1 Caùc leänh soá hoïc (Arithmetic Instrustion):


ADD A, <src, byte>
ADD A, Rn : (A) (A) + (Rn)
ADD A, direct : (A) (A) + (direct)
ADD A, @ Ri : (A) (A) + ((Ri))
ADD A, # data : (A) (A) + # data
ADDCA, Rn : (A) (A) + (C) + (Rn)
ADDCA, direct : (A) (A) + (C) + (direct)
ADDCA, @ Ri : (A) (A) + (C) + ((Ri))
ADDCA, # data : (A) (A) + (C) + # data
SUBB A, <src, byte>
SUBB A, Rn : (A) (A) - (C) - (Rn)
SUBB A, direct : (A) (A) - (C) - (direct)
SUBB A, @ Ri : (A) (A) - (C) - ((Ri))
SUBB A, # data : (A) (A) - (C) - # data
INC <byte>
Khaûo saùt vi ñieàu khieån 8951

INC A : (A) (A) + 1


INC direct : (direct) (direct) + 1
INC Ri : ((Ri)) ((Ri)) + 1
INC Rn : (Rn) (Rn) + 1
INC DPTR : (DPTR) (DPTR) + 1
DEC <byte>
DEC A : (A) (A) - 1
DEC direct : (direct) (direct) - 1
DEC @Ri : ((Ri)) ((Ri)) - 1
DEC Rn : (Rn) (Rn) - 1
MULL AB : (A) LOW [(A) x (B)];coù aûnh höôûng côø OV
: (B) HIGH [(A) x (B)];côø Cary ñöôïc xoùa.
DIV AB : (A) Integer Result of [(A)/(B)]; côø OV
: (B) Remainder of [(A)/(B)]; côø Carry xoùa
DA A :Ñieàu chænh thanh ghi A thaønh soá BCD ñuùng
trong pheùp coäng BCD (thöôøng DA A ñi keøm vôùi ADD, ADDC)
· Neáu [(A3-A0)>9] vaø [(AC)=1] (A3A0) (A3A0) + 6.
· Neáu [(A7-A4)>9] vaø [(C)=1] (A7A4) (A7A4) + 6.

2.2 Caùc hoaït ñoäng logic (Logic Operation):


Taát caû caùc leänh logic söû duïng thanh ghi A nhö laø moät trong nhöõng toaùn
haïng thöïc thi moät chu kyø maùy, ngoaøi A ra maát 2 chu kyø maùy. Nhöõng hoaït
ñoäng logic coù theå ñöôïc thöïc hieän treân baát kyø byte naøo trong vò trí nhôù döõ
lieäu noäi maø khoâng qua thanh ghi A.
Caùc hoaït ñoäng logic ñöôïc toùm taét nhö sau:
ANL <dest - byte> <src - byte>
ANL A, Rn : (A) (A) AND (Rn).
ANL A, direct : (A) (A) AND (direct).
ANL A,@ Ri : (A) (A) AND ((Ri)).
ANL A, # data : (A) (A) AND (# data).
ANL direct, A : (direct) (direct) AND (A).
ANL direct, # data : (direct) (direct) AND # data.
ORL <dest - byte> <src - byte>
Khaûo saùt vi ñieàu khieån 8951

ORL A, Rn : (A) (A) OR (Rn).


ORL A, direct : (A) (A) OR (direct).
ORL A,@ Ri : (A) (A) OR ((Ri)).
ORL A, # data : (A) (A) OR # data.
ORL direct, A : (direct) (direct) OR (A).
ORL direct, # data : (direct) (direct) OR # data.
XRL <dest - byte> <src - byte>
XRL A, Rn : (A) (A) (Rn).
XRL A, direct : (A) (A) (direct).
XRL A,@ Ri : (A) (A) ((Ri)).
XRL A, # data : (A) (A) # data.
XRL direct, A : (direct) (direct) (A).
XRL direct, # data : (direct) (direct) # data.
CLR A : (A) 0
CLR C : (C) 0
CLR Bit : (Bit) 0
RL A : Quay voøng thanh ghi A qua traùi 1 bit
(An + 1) (An); n = 06
(A0) (A7)
RLC A : Quay voøng thanh ghi A qua traùi 1 bit coù côø
Carry
(An + 1) (An); n = 06
(C) (A7)
(A0) (C)
RR A : Quay voøng thanh ghi A qua phaûi 1 bit
(An + 1) (An); n = 06
(A0) (A7)
RRC A : Quay voøng thanh ghi A qua phaûi 1 bit coù côø
Carry
(An + 1) (An); n = 06
(C) (A7)
(A0) (C)
Khaûo saùt vi ñieàu khieån 8951

SWAP A : Ñoåi choå 4 bit thaáp vaø 4 bit cao cuûa A cho nhau
(A3A0)(A7A4).

2.3 Caùc leänh reõ nhaùnh:


Coù nhieàu leänh ñeå ñieàu khieån leân chöông trình bao goàm vieäc goïi hoaëc
traû laïi töø chöông trình con hoaëc chia nhaùnh coù ñieàu kieän hay khoâng coù ñieàu
kieän.
Taát caû caùc leänh reõ nhaùnh ñeàu khoâng aûnh höôûng ñeán côø. Ta coù theå
ñònh nhaûn caàn nhaûy tôùi maø khoâng caàn roõ ñòa chæ, trình bieân dòch seõ ñaët ñòa
chæ nôi caàn nhaûy tôùi vaøo ñuùng khaåu leänh ñaõ ñöa ra.
Sau ñaây laø söï toùm taét töøng hoaït ñoäng cuûa leänh nhaûy.
JC rel : Nhaûy ñeán “rel” neáu côø Carry C = 1.
JNC rel : Nhaûy ñeán “rel” neáu côø Carry C = 0.
JB bit, rel : Nhaûy ñeán “rel” neáu (bit) = 1.
JNB bit, rel : Nhaûy ñeán “rel” neáu (bit) = 0.
JBC bit, rel : Nhaûy ñeán “rel” neáu bit = 1 vaø xoùa bit.
ACALL addr11: Leänh goïi tuyeät ñoái trong page 2K.
(PC) (PC) + 2
(SP) (SP) + 1
((SP)) (PC7PC0)
(SP) (SP) + 1
((SP)) (PC15PC8)
(PC10PC0) page Address.
LCALL addr16: Leänh goïi daøi chöông trình con trong 64K.
(PC) (PC) + 3
(SP) (SP) + 1
((SP)) (PC7PC0)
(SP) (SP) + 1
((SP)) (PC15PC8)
(PC) Addr15Addr0.
RET : Keát thuùc chöông trình con trôû veà chöông trình
chính.
(PC15PC8) (SP)
Khaûo saùt vi ñieàu khieån 8951

(SP) (SP) - 1
(PC7PC0) ((SP))
(SP) (SP) -1.
RETI : Keát thuùc thuû tuïc phuïc vuï ngaét quay veà
chöông trình chính hoaït ñoäng töông töï nhö RET.
AJMP Addr11 : Nhaûy tuyeät ñoái khoâng ñieàu kieän trong 2K.
(PC) (PC) + 2
(PC10PC0) page Address.
LJMP Addr16 : Nhaûy daøi khoâng ñieàu kieän trong 64K
Hoaït ñoäng töông töï leänh LCALL.
SJMP rel :Nhaûy ngaén khoâng ñieàu kieän trong (-128127)
byte
(PC) (PC) + 2
(PC) (PC) + byte 2
JMP @ A + DPTR:Nhaûy khoâng ñieàu kieän ñeán ñòa chæ (A) + (DPTR)
(PC) (A) + (DPTR)
JZ rel : Nhaûy ñeán A = 0. Thöïc haønh leänh keá neáu A 0.
(PC) (PC) + 2
(A) = 0 (PC) (PC) + byte 2
JNZ rel : Nhaûy ñeán A 0. Thöïc haønh leänh keá neáu A = 0.
(PC) (PC) + 2
(A) < > 0 (PC) (PC) + byte 2
CJNE A, direct, rel : So saùnh vaø nhaûy ñeán A direct
(PC) (PC) + 3
(A) < > (direct) (PC) (PC) + Relative Address.
(A) < (direct) C = 1
(A) > (direct) C = 0
(A) = (direct). Thöïc haønh leänh keá tieáp
CJNE A, # data, rel : Töông töï leänh CJNE A, direct, rel.
CJNE Rn, # data, rel : Töông töï leänh CJNE A, direct, rel.
CJNE @ Ri, # data, rel : Töông töï leänh CJNE A, direct, rel.
DJNE Rn, rel : Giaûm Rn vaø nhaûy neáu Rn 0.
Khaûo saùt vi ñieàu khieån 8951

(PC) (PC) + 2
(Rn) (Rn) -1
(Rn) < > 0 (PC) (PC) + byte 2.
DJNZ direct, rel : Töông töï leänh DJNZ Rn, rel.

2.4 Caùc leänh dòch chuyeån döõ lieäu:


Caùc leänh dòch chuyeån döõ lieäu trong nhöõng vuøng nhôù noäi thöïc thi 1
hoaëc 2 chu kyø maùy. Maãu leänh MOV <destination>, <source> cho pheùp di chuyeån
döõ lieäu baát kyø 2 vuøng nhôù naøo cuûa RAM noäi hoaëc caùc vuøng nhôù cuûa caùc
thanh ghi chöùc naêng ñaëc bieät maø khoâng thoâng qua thanh ghi A.
Vuøng Ngaên xeáp cuûa 8951 chæ chöùa 128 byte RAM noäi, neáu con troû
Ngaên xeáp SP ñöôïc taêng quaù ñòa chæ 7FH thì caùc byte ñöôïc PUSH vaøo seõ maát
ñi vaø caùc byte POP ra thì khoâng bieát roõ.
Caùc leänh dòch chuyeån boä nhôù noäi vaø boä nhôù ngoaïi duøng söï ñònh vò
giaùn tieáp. Ñòa chæ giaùn tieáp coù theå duøng ñòa chæ 1 byte (@ Ri) hoaëc ñòa chæ 2
byte (@ DPTR). Taát caû caùc leänh dòch chuyeån hoaït ñoäng treân toaøn boä nhôù
ngoaøi thöïc thi trong 2 chu kyø maùy vaø duøng thanh ghi A laøm toaùn haïng
DESTINATION.
Vieäc ñoïc vaø ghi RAM ngoaøi (RD vaø WR) chæ tích cöïc trong suoát quaù
trình thöïc thi cuûa leänh MOVX, coøn bình thöôøng RD vaø WR khoâng tích cöïc
(möùc 1).
Taát caû caùc leänh dòch chuyeån ñeàu khoâng aûnh höôûng ñeán côø. Hoaït
ñoäng cuûa töøng leänh ñöôïc toùm taét nhö sau:
MOV A,Rn : (A) (Rn)
MOV A, direct : (A) (direct)
MOV A, @ Ri : (A) ((Ri))
MOV A, # data : (A) # data
MOV Rn, A : (Rn) (A)
MOV Rn, direct : (Rn) (direct)
MOV Rn, # data : (Rn) # data
MOV direct, A : (direct) (A)
MOV direct, Rn : (direct) (Rn)
MOV direct, direct : (direct) (direct)
MOV direct, @ Ri : (direct) ((Ri))
MOV direct, # data : (direct) data
Khaûo saùt vi ñieàu khieån 8951

MOV @ Ri, A : ((Ri)) (A)


MOV @ Ri, direct : ((Ri)) (direct)
MOV @ Ri, # data : ((Ri)) # data
MOV DPTR, # data16 : (DPTR) # data16
MOV A, @ A + DPTR : (A) (A) + (DPTR)
MOV @ A + PC : (PC) (PC) + 1
(A) (A) + (PC)
MOVX A, @ Ri : (A) ((Ri))
MOVX A, @ DPTR : (A) ((DPTR))
MOVX @ Ri, A : ((Ri)) (A)
MOVX @ DPTR, A : ((DPTR)) (A)
PUSH direct : Caát döõ lieäu vaøo Ngaên xeáp
(SP) (SP) + 1
(SP) (Drirect)
POP direct : Laáy töø Ngaên xeáp ra direct
(direct) ((SP))
(SP) (SP) - 1
XCH A, Rn : Ñoåi choå noäi dung cuûa A vôùi Rn
(A) (Rn)
XCH A, direct : (A) (direct)
XCH A, @ Ri : (A) ((Ri))
XCHDA, @ Ri : Ñoåi choå 4 bit thaáp cuûa (A) vôùi ((Ri))
(A3A0) ((Ri3Ri0))

2.5 Caùc leänh luaän lyù (Boolean Instruction):


8951 chöùa moät boä xöû lí luaän lyù ñaày ñuû cho caùc hoaït ñoäng bit ñôn, ñaây
laø moät ñieåm maïnh cuûa hoï vi ñieàu khieån MSC-51 maø caùc hoï vi ñieàu khieån
khaùc khoâng coù.
RAM noäi chöùa 128 bit ñôn vò vaø caùc vuøng nhôù caùc thanh ghi chöùc naêng
ñaëc bieät caáp leân ñeán 128 ñôn vò khaùc. Taát caû caùc ñöôøng Port laø bit ñònh vò,
moãi ñöôøng coù theå ñöôïc xöû lí nhö Port ñôn vò rieâng bieät. Caùch truy xuaát caùc
bit naøy khoâng chæ caùc leänh reõ nhaùnh khoâng, maø laø moät danh muïc ñaày ñuû
caùc leänh MOVE, SET, CLEAR, COMPLEMENT, OR, AND.
Khaûo saùt vi ñieàu khieån 8951

Toaøn boä söï truy xuaát cuûa bit duøng söï ñònh vò tröïc tieáp vôùi nhöõng ñòa
chæ töø 00H - 7FH trong 128 vuøng nhôù thaáp vaø 80H - FFH ôû caùc vuøng thanh ghi
chöùc naêng ñaëc bieät.
Bit Carry C trong thanh ghi PSW\ cuûa töø traïng thaùi chöông trình vaø ñöôïc
duøng nhö moät söï tích luõy ñôn cuûa boä xöû lí luaän lyù. Bit Carry cuõng laø bit ñònh
vò vaø coù ñòa chæ tröïc tieáp vì noù naèm trong PSW. Hai leänh CLR C vaø CLR CY
ñeàu coù cuøng taùc duïng laø xoùa bit côø Carry nhöng leänh naøy maát 1 byte coøn
leänh sau maát 2 byte.
Hoaït ñoäng cuûa caùc leänh luaän lyù ñöôïc toùm taét nhö sau:
CLR C : Xoùa côø Carry xuoáng 0. Coù aûnh höôûng côø Carry.
CLR BIT : Xoùa bit xuoáng 0. Khoâng aûnh höôûng côø Carry
SET C : Set côø Carry leân 1. Coù aûnh höôûng côø Carry.
SET BIT : Set bit leân 1. Khoâng aûnh höôûng côø Carry.
CPL C : Ñaûo bit côø Carry. Coù aûnh höôûng côø Carry.
CPL BIT : Ñaûo bit. Khoâng aûnh höôûng côø Carry.
ANL C, BIT: (C) (C) AND (BIT) : Coù aûnh höôûng côø Carry.
ANL C, /BIT : (C) (C) AND NOT (BIT):Khoâng aûnh höôûng côø
Carry.
ORL C, BIT: (C) (C) OR (BIT) : Taùc ñoäng côø Carry.
ORL C, /BIT : (C) (C) OR NOT (BIT) : Taùc ñoäng côø Carry.
MOV C, BIT: (C) (BIT) : Côø Carry bò taùc ñoäng.
MOV BIT, C: (BIT) (C) : Khoâng aûnh höôûng côø Carry.

2.6 Caùc leänh xen vaøo (Miscellamous Intstruction):


NOP : Khoâng hoaït ñoäng gì caû, chæ toán 1 byte vaø 1 chu kyø maùy. Ta
duøng ñeå delay nhöõng khoaûng thôøi gian nhoû.
III. Chöông trình ngoân ngöõ Assembly cuûa 8951:
1. Giôùi thieäu :
Ngoân ngöõ assembly giöõa ngoân ngöõ maùy vaø ngoân ngöõ caáp cao. Ngoân
ngöõ caáp cao ñöôïc ñaëc tröng nhö: Pascal, C ... Coøn chöông trình ngoân ngöõ maùy
laø moät chuoãi caùc byte nhò phaân ñöôïc ñaëc tröng bôûi caùc leänh maø maùy tính
coù theå thöïc thi.
Ngoân ngöõ assembly thay theá caùc maõ nhò phaân cuûa ngoân ngöõ maùy ñeå
söû duïng caùc “thuaät nhôù“ deã daøng trong quaù trình laäp trình. Ví duï leänh coäng
Khaûo saùt vi ñieàu khieån 8951

trong ngoân ngöõ maùy ñöôïc ñaëc tröng bôûi maõ nhò phaân “10110011” trong khi
ngoân ngöõ assembly laø “ADD“.
Moät chöông trình ngoân ngöõ assembly khoâng theå thöïc thi bôûi maùy tính
maø noù phaûi ñöôïc dòch sang maõ nhò phaân ngoân ngöõ maùy.
Moät linker laø moät chöông trình maø noù keát hôïp caùc chöông trình ñaëc
tröng Relocatable (modul) vaø thieát keá moät chöông trình ñaëc tröng tuyeät ñoái thöïc
thi baèng maùy tính.
Segment laø moät phaàn cuûa boä nhôù maõ hoaëc döõ lieäu, noù coù theå taùi
ñònh vò ñöôïc (Relocatable) hoaëc tuyeät ñoái (Absolute ). Segment Relocatable coù
teân, kieåu vaø coù theå ñöôïc keát noái vôùi Segment cuïc boä khaùc. Segment Absolute
khoâng coù teân vaø khoâng theå ñöïôc keát noái Segment khaùc.
Modul chöùa 1 hoaëc nhieàu segment hay caùc segment cuïc boä . Moät modul
coù theå laø moät “file” ôû nhieàu tröôøng hôïp caù bieät .
Moät chöông trình Modul Absolute ñôn ñöôïc hoøa vaøo toaøn boä caùc Segment
Absolute vaø Segment Relocatable töø taát caû caùc mode nhaäp.

Chöông trình chæ chöùa caùc maõ nhò phaân thay cho caùc leänh (vôùi caùc ñòa chæ
vaø caùc haèng döõ lieäu ) ñöôïc hieåu bôûi maùy tính.
2. Hoaït ñoäng cuûa trình bieân dòch (Assembler Operation)
Coù nhieàu trình bieân dòch vôùi muïc ñích khaùc nhau coù taùc duïng laø deã
hieåu caùc öùng duïng vi ñieàu khieån. ASM51 laø tieâu bieåu chuaån bieân dòch cuûa
hoï MSC-51. ASM51 laø trình bieân dòch maïnh coù taùc duïng höõu hieäu treân heä
thoáng phaùt trieån INTEL vaø hoï IBM PC cuûa maùy vi tính.
ASM51 ñöôïc goïi hieän leân töø söï chæ daãn cuûa heä thoáng bôûi:
ASM51 Source file (Assembly Control).
Trình bieân dòch nhaän moät file nguoàn vôùi tö caùch laø ngoõ nhaäp
(PROGRAM.SCR) vaø hoï phaùt ra moät file ñoái töôïng (PROGRAM.OBJ) vaø file
listing (PROGRAM.LST).
Khaûo saùt vi ñieàu khieån 8951

PROGRAM.OBJ

PROGRAM.SCR ASM51

PROGRAM.LST

Vì haàu heát caùc bieân dòch xem xeùt chöông trình nguoàn 2 laàn trong luùc thi
haønh söï dòch ngoân ngöõ maùy, neân chuùng ñöôïc moâ taû qua 2 Pass bieân dòch laø
Pass1 vaø Pass2.
Trong pass1, file nguoàn ñöôïc xem xeùt töøng doøng vaø baûng kyù hieäu xaây
döïng.
Boä ñeám Location maëc nhieân choïn 0 hoaëc ñöôïc ñaët bôûi chæ thò ORG
(ñaët Origin).
Cuõng nhö file ñöôïc xem xeùt, boä ñeám Location ñöôïc taêng leân baèng ñoä
daøi moãi leänh.
Chæ thò data ñònh nghóa (ñaëc bieät hoaëc DW) taêng boä ñeám Location baèng
vôùi soá byte ñònh roõ, caùc chæ thò nhôù löu tröõ (DSO taêng boä ñeám Location bôûi
soá byte döï tröõ). Moãi laàn moät nhaõn ñöôïc tìm thaáy ôû söï baét ñaàu cuûa moät
ñöôøng, thì noù ñöôïc ñaëc trong baûng kyù hieäu theo giaù trò hieän haønh cuûa boä
ñeám Location. Caùc kyù hieäu ñöôïc ñònh nghóa bôûi duøng caùc chæ thò töông ñöông
(EQU) ñöôïc ñaëc trong baûng kyù hieäu, ñöôïc caát giöõ vaø sau ñoù duøng trong
pass2.
Trong Pass2, file Object vaø file Listing ñöôïc taïo ra, caùc thuaät nhôù ñöôïc
bieán ñoåi thaønh Opcode vaø ñaët trong caùc file output. Caùc toaùn haïng ñöôïc xaùc
ñònh giaù trò vaø ñaët phía sau Opcode leänh. ÔÛ nôi caùc kyù hieäu xuaát hieän trong
toaùn haïng, caùc kyù hieäu cuûa chuùng seõ ñöôïc laáy laïi töø baûng kyù hieäu (ñöôïc
taïo ra trong suoát Pass1 vaø duøng trong söï saép xeáp döõ lieäu ñuùng hoaëc ñuùng ñòa
chæ bôûi caùc leänh).
Bôûi vì Pass2 ñöôïc thöïc thi neân chöông trình nguoàn coù theå duøng “söï tham
khaûo tröôùc “ laø duøng kyù hieäu tröôùc khi ñònh nghóa.
File Object neáu tuyeät ñoái thì chæ chöùa caùc byte nhò phaân (00H - FFH) cuûa
chöông trình ngoân ngöõ maùy. File Object Relocatable chöùa moät baûng kyù hieäu vaø
thoâng tin khaùc ñöôïc yeâu caàu bôûi söï keát hôïp vaø xaùc ñònh ñuùng vò trí. File
Khaûo saùt vi ñieàu khieån 8951

Listing chöùa maõ nguyeân baûng ASCII (20H – 7FH) cho caû hai chöông trình nguoàn
vaø caùc byte Hexadecimal trong chöông trình ngoân ngöõ maùy.
3. Söï saép ñaët chöông trình ngoân ngöõ Assmebly:
Chöông trình ngoân ngöõ Asembly bao goàm: Caùc leänh maùy, lôøi chæ chò
cuûa trình bieân dòch, söï ñieàu khieån bieân dòch vaø caùc chuù thích.
Caùc leänh maùy laø caùc kyõ xaûo cuûa leänh coù theå thöïc thi (ví duï nhö
ANL). Caùc chæ thò cuûa trình bieân dòch laø caùc leänh ñeå trình bieân dòch ñònh caáu
truùc chöông trình, caùc döõ lieäu, kyù hieäu, haèng, … (ví duï Org ). Caùc söï ñieàu
khieån trình bieân dòch set caùc mode cuûa trình bieân dòch vaø ñieàu khieån söï chaïy
chöông trình Assembly (ví duï STILLE ).
Caùc chuù thích hoaït ñoäng cuûa leänh.
Caùc leänh phaûi ghi theo nguyeân taéc roõ raøng ñeå ñöôïc trình bieân dòch
hieåu.
Söï saép xeáp cuûa chuùng nhö sau:
(Label:) mnemonic [operand][:operand][...][:comment]

3.1 Vuøng nhaõn (label Field ):


Moät nhaõn töôïng tröng cho ñòa chæ cuûa leänh (hoaëc döõ lieäu ) theo sau
nhaõn. Khi caùc reõ nhaùnh ñeán leänh naøy, nhaõn ñöôïc duøng trong vuøng toaùn
haïng cuûa nhaùnh (hoaëc leänh nhaûy).
Caùc “nhaõn“ laø moät kieåu kyù hieäu, sau nhaõn phaûi coù daáu hai chaám (:)
coøn sau kyù hieäu thì khoâng.
Caùc kieåu kyù hieäu ñöôïc quy cho caùc giaù trò hoaëc quy cho vieäc duøng
caùc chæ thò nhö: EQU, SEGMENT, BIT, DATA, … Caùc kyù hieäu coù theå laø ñòa
chæ, haèng, data, teân caùc segment hoaëc söï xaây döïng khaùc ñöôïc hieåu bôûi ngöôøi
laäp trình. Sau ñaây laø moät ví duï ñeå phaân bieät nhaõn vaø kyù hieäu:
PRA EQU 500 : PRA laø kyù hieäu töôïng tröng giaù trò 500
START :MOV A , #0FFH :START laø nhaõn töông tröng ñòa chæ leänh MOV
Moät kyù hieäu hoaëc moät nhaõn phaûi baét ñaàu moät chöõ caùi daáu “?”,
hoaëc daáu “-“; phaûi ñöôïc theo sau baèng moät chöõ caùi, caùc soá, daáu “?” hay “-“,
vaø coù theå chöùa tôùi 31 kyù töï.

3.2 Vuøng thuaät nhôù (Mnemonic Field ):


Caùc thuaät nhôù hay caùc chæ chò bieân dòch ñi vaøo vuøng thuaät nhôù theo
sau vuøng nhaõn. Ví duï caùc thuaät nhôù leänh nhö: ADD, MOV, DIV, INC, … ; caùc
chæ thò bieân dòch nhö : ORG , EQU.
Khaûo saùt vi ñieàu khieån 8951

3.3 Vuøng toaùn haïng (Operand Field):


Vuøng toaùn haïng theo sau vuøng thuaät nhôù. Vuøng naøy chöùa ñòa chæ hay
döõ lieäu ñöôïc duøng bôûi leänh. Moät nhaõn coù theå duøng ñeå töôïng tröng cho
haèng döõ lieäu. Caùc khaû naêng cho pheùp vuøng toaùn haïng phuï thuoäc lôùn vaøo
caùc hoaït ñoäng. Moät vaøi hoaït ñoäng khoâng coù toaùn haïng nhö : RET, NOP trong
khi caùc hoaït ñoäng khaùc cho pheùp nhieàu toaùn haïng ñöôïc phaân ra baèng daáu
phaåy.

3.4 Vuøng chuù thích (Comment Field ):


Caùc chuù thích phaûi deã hieåu ñaët ñeå giaûi thích leänh, vaø coù daáu chaám
phaåy ôû ñaàu. Khoái chuù thích trong khung ñeå giaûi thích tính chaát chung cuûa
phaàn chöông trình ñöôïc caét ra beân döôùi.

3.5 Caùc kyù hieäu bieân dòch ñaëc bieät (Special Assembler Symbol ):
Caùc kyù hieäu bieân dòch ñaëc bieät ñöôïc duøng trong caùc mode ñònh vò
thanh ghi cuï theå chuùng bao goàm caùc thanh ghi A, Ro – R7, DPTR, PC,C, AB, hay
caùc kyù hieäu $ ñöôïc duøng ñeå quy vaøo giaù trò hieän haønh cuûa boä ñeám
Location.
Ví duï : leänh JNZ T1 , $ töông ñöông vôùi leänh sau : HERE : JNZ T1, HERE

3.6 Ñòa chæ giaùn tieáp (Indirect Address):


Ñoái vôùi moät soá leänh duøng toaùn haïng coù theå xaùc ñònh thanh ghi maø
noù chöùa ñòa chæ giaùn tieáp vaø noù chæ coù theå duøng vôùi R0, R1 , DPTR. Ví duï
leänh MOV A, @R0 khoâi phuïc laïi byte döõ lieäu töø RAM noäi taïi ñòa chæ ñöôïc
ñònh roõ trong R0.
Leänh MOVC, @A + PC khoâi phuïc laïi byte döõ lieäu töø boä nhôù döõ lieäu
ngoaøi taïi ñòa chæ ñöôïc taïo thaønh bôûi vieäc coäng noäi dung thanh ghi tích luõy A
vaø boä ñeám chöông trình.

3.7 Döõ lieäu töùc thôøi (Immediate Data ):


Caùc leänh duøng söï ñònh vò töùc thôøi cung caáp döõ lieäu vaøo vuøng toaùn
haïng, kyù hieäu # ñaët tröôùc döõ lieäu töùc thôøi. Ví duï:
CONSTANT EQU 100
MOV A, 0FFH
ORL 40H, # CONSTANT
Khaûo saùt vi ñieàu khieån 8951

3.8 Ñòa chæ döõ lieäu (Data Address):


Nhieàu leänh truy xuaát caùc vuøng nhôù duøng söï ñònh vò tröïc tieáp vaø ñoøi
hoûi moät ñòa chæ nhôù döõ lieäu treân chip (00 – FFH) hay moät ñòa chæ SFR (80H –
FFH) treân vuøng toaùn haïng. Caùc kyù hieäu ñaõ ñöôïc ñònh nghóa coù theå ñöôïc
duøng cho caùc ñòa chæ SFR. Ví duï:
MOV A, 45H hay MOV A, SBUF.

3.9 Ñòa chæ Bit (Bit Address):


Moät trong nhöõng ñieåm maïnh cuûa 8951 laø khaû naêng truy xuaát caùc bit
rieâng leû, khoâng caàn caùc hoaït ñoäng trang bò treân byte. Caùc leänh truy xuaát caùc
bit ñònh vò phaûi cung caáp moät ñòa chæ trong boä nhôù döõ lieäu noäi (00H – 7FH)
hoaëc ñòa chæ bit trong caùc SFR (80H - FFH).
Coù 3 caùch ñeå xaùc ñònh ñòa chæ bit trong oâ nhôù döõ lieäu: Duøng ñòa chæ
bit tröïc tieáp, duøng hoaït ñoäng ñieåm giöõa ñòa chæ byte vaø ñòa chæ bit, duøng kyù
hieäu bieân dòch ñaõ ñöôïc ñònh nghóa.
Ví duï:
SETB 0E7H : Duøng ñòa chæ tröïc tieáp.
SETB ACC, 7 :Duøng hoaït ñoäng ñieåm.
JNZ T1 ,$ : Duøng kyù hieäu ñöôïc ñònh nghóa “TT”.

3.10 Ñòa chæ maõ (Code Address):


Ñòa chæ maõ ñöôïc duøng trong toaùn haïng cho caùc leänh nhaûy, bao goàm
caùc söï nhaûy töông ñoái (nhö SJMP vaø caùc leänh nhaûy coù ñieàu kieän), caùc söï
nhaûy vaø caùc söï goïi tuyeät ñoái (ACALL , AJMP). Ñòa chæ maõ thöôøng ñöôïc cho
ôû daïng nhaõn sau:
HERE:
_
_
_
SJMP HERE
ASM51 seõ xaùc ñònh ñòa chæ maõ ñuùng vaø loàng vaøo Offset ñuùng ñöôïc
kyù hieäu 8 bit leänh, ñòa chæ trang 11 bit hoaëc ñòa chæ daøi 16 bit cho thích hôïp.
Khaûo saùt vi ñieàu khieån 8951

3.11 Caùc söï nhaûy vaø goïi chung ( generic Jump and Calls):
ASM51 cho pheùp ngöôøi laäp trình duøng thuaät nhôù JMP chung hay CALL
chung. Leänh “JMP “coù theå ñöôïc duøng thay cho “SJMP, AJMP, LJMP“ vaø “CALL”
coù theå thay cho ACALL hay LCALL. Söï bieân dòch bieán ñoåi thuaät nhôù chung
ñeám moät leänh “thöïc teá“ sau vaøi qui luaät ñôn giaûn, thuaät nhôù chung bieán ñoåi
thaønh daïng tuyeät ñoái neáu nhaûy hay goïi trong trang 2k. Neáu caùc daïng ngaén vaø
tuyeät ñoái khoâng duøng thì seõ ñöôïc chuyeån thaønh daïng daøi.
4. Söï tính toaùn bieåu thöùc cuûa Assemble Time (Assemble Time Expression
Evaluation):
Khi moät bieåu thöùc ñöôïc duøng, söï bieân dòch tính toaùn giaù trò loàng vaøo
leänh ñoù.

4.1 Caùc cô sôû soá (Number Basses):


Cô sôû caùc haèng soá phaûi ñöôïc theo sau caùc soá nhò phaân “B”, theo sau soá
Octal “O”, hoaëc “Q”, theo sau soá thaäp phaân “D” hay khoâng coù gì , theo soá Hexa
“H”. Ví duï:
MOV A, # 15 : Thaäp phaân
MOV A , 1111B : Nhò phaân
MOV A , 30H : Hex
MOV A , 315D : Thaäp phaân
MOV A , 317Q : Octal

4.2 Caùc chuoãi kyù töï (Character String):


Chuoåi duøng moät hay 2 kyù töï coù theå duøng nhö caùc toaùn haïng trong caùc
bieåu thöùc. Caùc maõ ASSCII ñöôïc bieán ñoåi thaønh nhò phaân töông ñöông bôûi söï
bieân dòch.
Caùc haèng ñöôïc ñi keøm theo sau 1 daáu ngoaëc keùp (‘).
Ví duï : CJNZ A , # ‘Q’, AGAIN

4.3 Caùc kyù hieäu soá hoïc (Arithmetic Operations):


+ : Coäng
_ : Tröø
. : Nhaân
/ : Chia
Khaûo saùt vi ñieàu khieån 8951

MOD :Pheùp laáy dö


Ví duï leänh MOV A, # 10 + 10H vaø leänh MOV A, # 1AH töông töï 2 leänh
MOV A, # 25 MOD 7 vaø MOV A, # 4 cuõng gioáng nhau.

4.4 Caùc hoaït ñoäng logic (Logic Operations):


Caùc hoaït ñoäng logic laø OR, AND, XOR, NOT. Hoaït ñoäng ñöôïc aùp duïng
treân caùc bit töông öùng trong moãi toaùn haïng. Söï hoaït ñoäng phaûi ñöôïc phaân ra
töø caùc toaùn haïng bôûi moät khoaûng caùch kyù töï hoaëc nhieàu khoaûng kyù töï.
Ví duï 3 leänh MOV sau ñaây gioáng nhau:
THERE EQU
MINUS – THERE EQU- 3
MOV A, #(NOT THERE) + 1
MOV A, MINUS – THERE
MOV A, #11111101B

4.5 Caùc hoaït ñoäng ñaëc bieät (special Operation):


Caùc hoaït ñoäng ñaëc bieät laø: SHR (dòch phaûi), SHL (dòch traùi), HIGH
(byte cao), LOW (byte thaáp).
Ví duï: leänh MOV A, # HIGH 1234H vaø leänh MOV A, 12H töông ñöông.

4.6 Caùc hoaït ñoäng lieân quan:


Khi moät hoaït ñoäng coù lieân quan ñöôïc duøng giöõa hai toaùn haïng thì keát
quûa hoaëc sai (0000h) hoaëc ñuùng (FFFFH). Caùc hoaït ñoäng laø:
EQ = : Equals (baèng)
NE <> : Not equals (khoâng baèng)
LT < : Less than (nhoû hôn)
LE <= : Less than or equal (nhoû hôn hoaëc baèng)
GT > : Greater than (lôùn hôn)
GE >= : Greater than or equal (lôùn hôn hoaëc baèng)
Ví duï:
MOV A, #5
MOV A, 100 GE 50
MOV A, 5 NE 4
Khaûo saùt vi ñieàu khieån 8951

Caû ba leänh treân ñeàu ñuùng neân caû ba töông ñöông vôùi leänh sau: MOV
A,# 0FFH
5. Caùc chæ thò bieân dòch:
ASM51 cung caáp caùc chæ thò sau:
 Söï ñieàu khieån traïng thaùi bieân dòch (ORG, AND, USING)
 Söï xaùc ñònh kyù hieäu (SEGMENT, EQU, SET, DATA, NDATA, BIT,
CODE)
 Söï khôûi gaùn löu tröõ hay ñeå daønh tröôùc söï löu tröõ (DS, DBIT, DB,
DW)
 Söï keát noái chöông trình (PUBLIC, EXTRN, NAME)
 Söï choïn segment (PSEG, CSEG, DSEG, ISEG, BSEG, XSEG)

5.1 Söï ñieàu khieån traïng thaùi bieân dòch:


Chæ thò ORG thay ñoåi boä ñeám vuøng nhôù ñeå ñaët söï khôûi ñaàu moät
chöông trình môùi bôûi traïng thaùi theo sau ñoù, daïng cuûa chæ thò ORG laø: ORG
Expression
Chæ thò END ñaët ôû cuoái cuøng trong file nguoàn. Daïng cuûa noù laø END.
Chæ thò USING cung caáp cho ASM51 daõy thanh ghi tích cöïc hieän haønh.
Daïng chæ thò cuûa noù laø USING Expression
Vieäc duøng ñòa chæ caùc thanh ghi kyù hieäu ñöôïc ñònh nghóa tröôùc AR0-
AR7 seõ bieán thaønh ñòa chæ tröïc tieáp phuø hôïp cuûa daõy thanh ghi tích cöïc.
Ví duï : USING 3 : Duøng Bank 3 trong daõy thanh ghi.
PUSH AR7 : Push R7 (R7=1FH)
PUSH AR7 : Push R7 (R7=0FH)

5.2 Ñònh nghóa kyù hieäu (Symbol Definition):


Daïng chæ thò cuûa segment nhö sau: symbol SEGMENT segmenttype
Trong ñoù symbol laø teân cuûa segment coù theå ñoåi choã ñöôïc. Caùc kieåu
segment coù theå CODE (segment maõ), XDATA (vuøng döõ lieäu ngoaøi), DATA
(vuøng döõ lieäu noäi) coù theå truy xuaát baèng söï ñònh vò tröïc tieáp töø (00H-7FH),
IDATA (toaøn boä vuøng döõ lieäu noäi), BIT (vuøng BIT töø 20H-2FH döõ lieäu noäi).
Ví duï : EPROM SEGMENT CODE cho bieát EPROM cuûa moät segment kieåu
code.
Daïng chæ thò EQU : symbol EQU Expression
Daïng chæ thò BIT : symbol BITExpression
Khaûo saùt vi ñieàu khieån 8951

Löu yù raèng neáu ta duøng chæ thò BIT nhö FLAGS BIT 05H thì ta coù theå
SETB FLAGS maø khoâng ñöôïc duøng leänh MOV.

5.3 Söï khôûi gaùn/daønh löu tröõ tröôùc (Storage Initilization/Reservation)


Caùc chæ thò cuûa Storage Initilization khôûi gaùn vaø Storage Reservation ñeå
daønh moät vuøng nhôù trong töø, byte hoaëc caùc ñôn vò bit. Vuøng ñöôïc daønh
tröôùc khi baét ñaàu taïi vuøng nhôù ñöôïc chæ roõ bôûi giaù trò hieän haønh cuûa boä
ñeám vuøng nhôù trong segment tích cöïc ñang hieän haønh. Caùc chæ thò naøy coù theå
ñöùng tröôùc moät nhaõn.
5.3.1 Khai baùo löu tröõ DS (Define Storage)
Daïng phaùt bieåu DS laø : [label:]DS Expression
Phaùt bieåu DS daønh moät vuøng nhôù trong ñôn vò byte. Noù coù theå ñöôïc
duøng trong baát kyø phaùt bieåu segment naøo ngoaïi tröø BIT. Khi phaùt bieåu DS
ñöôïc baét gaëp trong chöông trình thì boä ñeám vò trí location cuûa segment hieän
haønh ñöôïc taêng leân moät khoaûng baèng giaù trò cuûa bieåu thöùc. Toång cuûa boä
ñeám location vaø bieåu thöùc ñaõ ñöôïc ñònh roõ seõ khoâng vöôïc quaù söï haïn cheá
cuûa vuøng hieän haønh.
Phaùt bieåu sau taïo ra moät vuøng ñeäm 40 byte trong segment döõ lieäu noäi.
DSEG AT 30 : Ñaët vaøo segment data noäi.
LENGTH EQU 40
BEFFER : DS LENGTH : 40 byte ñöôïc daønh tröôùc
Nhaõn BUFFER töôïng tröng cho ñòa chæ cuûa location ñaàu tieân cuûa vuøng
nhôù ñöôïc löu tröõ. Trong ví duï treân buffer ñaét ñaàu ôû ñòa chæ 30H bôûi töø “AT
30” ñöôïc ñònh roõ bôûi DSEG. Vuøng ñeäm naøy coù theå xoaù nhö sau:
MOV R7,#LENGTH : R7 chöùa con soá LENGTH laø 40
MOV R0,#BUFFER : R0 chöùa ñòa chæ taïi buffer laø 30H
LOOP : MOV @R0,#0 : Laàn löôït xoaù
DJNZ,R7,LOOP
(continue)
Ñeå taïo ra vuøng ñeäm 1000 byte trong RAM ngoaïi baét ñaàu taïi ñòa chæ
4000H, caùc chæ thò sau ñaây coù theå ñöôïc duøng:
XSTART EQU 4000H
XLENGTH EQU 1000H
XSEG AT XSTART : Phaân ñoaïn data ngoaøi baét ñaàu ôû 4000H
XBUFFER: DS XLENGTH : Taïo ra moät vuøng ñeäm coù ñoä daøi 1000byte
Khaûo saùt vi ñieàu khieån 8951

Caùc leänh sau ñaây coù theå duøng ñeå xoaù vuøng ñeäm treân :
MOV DPTR,#BUFFER: Ñöa ñòa chæ 4000H vaø DPTR
LOOP : CLR A
MOVX @DPTR : Xoaù noäi duïng töø ñòa chæ 4000H trôû ñi
INC DPTR : Taêng theâm 1 ( tröôøng hôïp ñaàu trôû thaønh 4001H)
MOV A,DPL
CJNZ A,#LOW (XBUFFER=LENGTH+1),LOOP
MOV A,DPH
CJNZ A,HIGH (XBUFFER=XLENGTH+1),LOOP
(Continue)
Neáu so saùnh hai caùch duøng treân daønh cho byte thaáp vaø byte cao DPTR,
Vì leänh CJNZ chæ laøm nhieäm vuï ñoái vôùi thanh ghi A hoaëc thanh ghi Rn, do ñoù
byte thaáp hoaëc byte cao cuûa boä ñeám döõ lieäu phaûi ñöôïc MOV vaøo A tröôùc khi
ñeán leänh CJNZ. Voøng laëp chæ keát thuùc khi boä ñeám döõ lieäu ñaõ ñöôïc ñoïc ñòa
chæ XBUFFER+XLENGTH+1
5.3.2 Khai baùo DBIT (Define Bit)
Söï thaønh laäp : [label:] DBIT expression
Chæ thò DBIT daønh tröôùc vuøng nhôù caùc ñôn vò bit, noù coù theå ñöôïc
duøng trong 1 segment bit. Khi phaùt bieåu naøy ñöôïc baét gaëp trong chöông trình thì
boä ñeám vò trí cuûa segment hieän haønh ñöôïc coäng theâm giaù trò cuûa bieåu thöùc.
5.3.3 Khai baùo byte DB (Define Byte)
Söï thaønh laäp chæ thò ÑAËC BIEÄT : [label:] ÑAËC BIEÄT Expression
[,Expression][...]
Chæ thò DB khôûi gaùn boä maõ neân segment CODE phaûi tích cöïc. Danh
saùch bieåu thöùc laø moät chuoãi cuûa moät hay nhieàu giaù trò byte (moãi caùch coù
theå laø moät bieåu thöùc) ñöôïc phaân ra bôûi daáu phaåy.
Chæ thò DB cho pheùp caùc chuoãi kyù töï (ñöôïc keøm trong daáu ngoaëc keùp
ñôn) daøi hôn 2 kyù töï. Moãi kyù töï trong chuoãi ñöôïc bieán thaønh maõ ASCII töông
öùng. Neáu moät nhaõn ñöôïc duøng thì nhaõn ñoù ñaõ ñöôïc aán ñònh ñòa chæ cuûa
byte ñaàu tieân.
Ví duï : CSEG AT 0100H
DSQUARES : DB 0,1,4,9,16,25 :Bình phöông töø 0-5
Keát quaû cuûa söï phaân chia boä nhôù hexa cuûa boä nhôù maõ ngoaøi nhö
sau :
Khaûo saùt vi ñieàu khieån 8951

Address Content Note


0100H 00H Cöûa soá 0
0101H 01H Cöûa soá 1
0102H 04H Cöûa soá 4
0103H 9H Cöûa soá 9
0104H 10H Cöûa soá
16
0105H 19H Cöûa soá
25
5.3.4 Khai baùo töø DW (Define Word)
Söï thaønh laäp : [label:]DW Expression [,Expression][...]
Chæ thò gioáng chæ thò DB ngoaïi tröø hai vò trí nhôù 16 bit ñöôïc chia laøm
moãi khoaûng döõ lieäu.
Ví duï :
CSEG AT 200H
DW 1234H,2

Address Content Note


0200H 12H Byte cao 1234H
0201H 34H Byte thaáp 1234H
0202H 00H Byte cao cuûa 2
0203H 02H Byte thaáp cuûa 2
Khaûo saùt vi maïch 8279

I. Caáu truùc phaàn cöùng IC 8279


Sô ñoà chaân vaø sô ñoà logic

CPU Interface
U 1
12 38
13 D B 0 R L 0 39
14 D
D
B
B
1
2
R
R
L
L
1
2
1 DATA RL7-RL10
15 2
D B 3 R L 3
16
17 D B 4 R L 4
5
6
KEY
D B 5 R L 5
18
19 D B 6 R L 6
7
8 SHIFT DATA
D B 7 R L 7
10
11 R D SH FT
36
37
CNTR/STB
22 W R C N /S T 23
3 C S BD
9 C LK 3 2 RD
21 R ESET
A0
S
S
L
L
0
1
3 3 SL0-SL3 SCAN
4 3 4
IR Q S L 2
S L 3
3 5
WR
2 7
O A 0 2 6
O
O
A
A
1
2
2 5 CS
O A 3
2
3
4
1
OUT A3-A0
O B 0 3 0
O B 1 2 9 A0 DISPLAY
O B 2 2 8
O B 3 DATA
8279 RESET
OUT B3-B0
CLK
BD

Teân caùc chaân vaø chöùc naêng:


Teân I/O Chöùc naêng
DB7 - DB0 I/O Data bus (Bi-Direction)
CLK I Clock input
RESET I Reset input
CS\ I Chip select
RD\ I Read input
WR\ I Write input
A0 I Address
IRQ 0 Interrupt Request input
SL0 - SL3 0 Scan Lines
RL0 - RL7 I Return Lines
SHIFT I Shift input
CNTL/STB I Control/Strobe input
OUT A3-0 0 Display (A) output
OUT B3-0 0 Display (B) output
Khaûo saùt vi maïch 8279

BD\ 0 Blank Display Output


8279 keát noái vôùi vi ñieàu khieån thoâng qua 3 bus goàm bus döõ lieäu D7-D0,
bus ñòa chæ coù moät ñöôøng A0, bus ñieàu khieån RD\, WR\, CS\, Reset, CLK.
Tín hieäu choïn CS\ ñöôïc keát noái ñeán moät ngoõ ra cuûa IC giaûi maõ ñòa
chæ. Neáu xem boä nhôù thì boä nhôù naøy coù 2 oâ nhôù.
II. Caáu truùc phaàn meàm cuûa 8279
IC 8279 coù 1 ñöôøng ñòa chæ A0 coù chöùc naêng löïa choïn nhö sau:
· A0 =0 : 8279 xem döõ lieäu töø vi ñieàu khieån gôûi ñeán laø döõ lieäu ñeå
hieån thò.
· A0 =1 : 8279 xem döõ lieäu töø vi ñieàu khieån gôûi ñeán laø döõ lieäu cuûa
leänh ñieàu khieån 8279.
Caùc leänh ñieàu khieån cuûa 8279:
1. Keyboard/ Display Mode Set:
+ Maõ:
O O O D D K K K
+ Trong ñoù 2 bit DD duøng ñeå thieát laäp mode hieån thò, 3 bit KKK duøng ñeå
thieát laäp mode queùt baøn phím.
+ Hai bit DD:
DD=00 : hieån thò 8 kyù töï - loái vaøo traùi.
DD=01 : hieån thò 16 kyù töï - loái vaøo traùi.
DD=10 : hieån thò 8kyù töï - loái vaøo phaûi.
DD=11 : hieån thò 16 kyù töï - loái vaøo phaûi.
+ Ba bit KKK :
000 encode scan keyboard - 2 key lockout.
001 decode scan keyboard - 2 key lockout.
010 encode scan keyboard - N key rollover.
011 decode scan keyboard - N key rollover.
100 encode scan sensor matrix.
101 decode scan sensor matrix.
110 strobe input, encode display scan.
111 strobe input, decode display scan .
2. Program Clock:
+ Maõ
Khaûo saùt vi maïch 8279

O O 1 P P P P P

+ Leänh naøy coù chöùc naêng chia taàn soá xung clock ôû ngoõ vaøo clk ôû
chaân soá 3, caùc bit PPPPP duøng ñeå xaùc ñònh soá chia naèm trong khoaûng töø 2
ñeán 30, taàn soá hoaït ñoäng cuûa maïch queùt hieån thò vaø choùng doäi cuûa 8279
thöôøng laø 100 Khz, neáu taàn soá ôû ngoõ vaøo laø 2Mhz thì phaûi chia cho 20 ñeå
ñöôïc 100 Khz, khi ñoù caùc bit PPPPP coù giaù trò laø 10100.
3. Read FIFO / sensor RAM:
+Maõ
O 1 1 AI X A A A
8279 coù 8 byte RAM beân trong ñeå chöùa maõ cuûa phím aán hay maõ cuûa
caùc sensor, ñeå truy xuaát ñeán töøng byte döõ lieäu maõ cuûa phím aán hay cuûa
sensor ta coù theå ñieàu chænh caùc bit AAA töông öùng. Boä nhôù naøy thuoäc kieåu
FIFO.
+ Al ( automatically increment): ôû möùc 1 coù chöùc naêng laøm con troû töï
ñoäng taêng leân byte keá ñeå saün saøng cho vieäc ñoïc döõ lieäu. Neáu Al= 0 con troû
seõ khoâng thay ñoåi.
4. Read Display RAM:
+ Maõ
O 1 1 Al A A A A
+ 8279 coù 16 byte RAM beân trong do con troû 4 bit AAAA quaûn lyù, 16 byte
RAM naøy duøng ñeå chöùa döõ lieäu caàn hieån thò do vi ñieàu khieån gôûi ñeán, ñeå
ñoïc döõ lieäu oâ nhôù naøo trong vuøng nhôù RAM naøy ta coù theå ñieàu chænh caùc
bit AAA töông öùng. Boä nhôù hieån thò naøy thuoäc kieåu FIFO.
+ Al (Automatically Increment): ôû möùc 1 chöùc naêng laøm con troû töï ñoäng
taêng leân byte keá ñeå saün saøng cho vieäc ñoïc byte döõ lieäu. Neáu Al=0 con troû
seõ khoâng thay ñoåi.
5. End Interrupt:
+ Maõ
1 1 1 E 0 0 0 0
+ Bit E baèng 1 seõ xoùa ngaét IRQ veà möùc logic 0.
6. Leänh Write Display Ram:
+ Maõ
1 0 0 Al A A A A
Khaûo saùt vi maïch 8279

+ 8279 coù 16 byte RAM beân trong con troû 4 bit AAAA quaûn lyù, 16 oâ nhôù
RAM naøy duøng ñeå chöùa döõ lieäu caàn hieån thò do vi ñieàu khieån gôûi ñeán, ñeå
gôûi döõ lieäu ñeán 8279 taïi byte Ram thöù maáy trong 16 byte RAM ta coù theå ñieàu
chænh caùc bit AAAA töông öùng.
+ Al (automatically increment): ôû möùc moät chöùc naêng laøm con troû töï
ñoäng taêng leân byte keá ñeå saün saøng nhaän döõ lieäu. Neáu Al=0 con troû seõ
khoâng thay ñoåi do ñoù byte döõ lieäu sau seõ ghi ñeø leân byte döõ lieäu tröôùc ñoù.
7. Leänh Clear:
+ Maõ
1 1 0 CD CD CF CA
+ Nhöõng bit CD trong leänh naøy duøng ñeå xoùa taát caû caùc haøng cuûa Ram
hieån thò ñeán moät maõ xoùa ñöôïc choïn loïc nhö sau:
CD CD

0 X Taát caû laø 0 (X : khoâng quan taâm)


1 0 AB = Hex 20 (0010 0000)
1 1 Taát caû laø 1
Cho pheùp xoùa hieån thò khi =1 (hoaëc bôûi
CA=1)
+ Trong suoát thôøi gian Ram hieån thò ñang xoùa (160 s) noù khoâng ñöôïc vieát
vaøo, bit lôùn nhaát cuûa töø traïng thaùi FIFO ñöôïc ñaët leân 1 trong suoát thôøi gian
naøy. Khi Ram hieån thò ñöôïc söû duïng laïi thì bit naøy ñöôïc reset veà 0.
+ Neáu nhö bit CF tích cöïc (CF =1), töø traïng thaùi FIFO seõ bò xoùa vaø ngoõ
ra Interrupt bò reset.
+ Bit CA coù chöùc naêng xoùa taát caû caùc bit, noù coøn aûnh höôûng bôûi bit
CD vaø CF. Noù duøng bit CD ñeå xoùa maõ treân Ram hieån thò vaø noù cuõng xoùa
luoân traïng thaùi FIFO.
Giôùi thieäu kit vi ñieàu khieån 8951

I. Sô ñoà khoái kit vi ñieàu khieån 8951:


Caáu taïo cuûa kit vi ñieàu khieån 8951 goàm 4 phaàn chuû yeáu: Ñôn vò xöû lí
trung taâm CPU. Boä nhôù (bao goàm RAM vaø EPROM) khoái I/0 vôùi ñaàu giao tieáp
laø 8255. Khoái queùt baøn phím vaø hieån thò duøng IC queùt 8279.
1. Ñôn vò xöû lyù trung taâm:
Phaàn töû trung taâm laø vi ñieàu khieån 8951 ñaõ ñöôïc giôùi thieäu phaàn treân
goàm caùc chaân nhö sau:
 16 ñöôøng ñòa chæ : A0 – A15.
 8 ñöôøng döõ lieäu :D0 – D7.
 Caùc ñöôøng ñieàu khieån : /RD , /WR , /PSEN
 4 KB EPROM noäi ñöôïc ñieàu khieån chaân /EA: /EA=1 choïn EPROM noäi. /EA =
0 choïn EPROM ngoaøi.
 526 byte RAM noäi töø ñòa chæ töø 00 – FF, trong ñoù coù 216 vò trí oâ nhôù coù
theå truy xuaát bit coù ñòa chæ töø 20H – 2FH. 80 byte RAM muïc ñích chung ñòa
chæ töø 30H – 7FH.
2. Boä nhôù:

2.1 Boä nhôù coá ñònh EPROM:


 EPROM 1: Coù ñòa chæ töø 0000H – 1FFFH (8KB), chöùa chöông trình
heä thoáng ñieàu khieån taát caû caùc quaù trình hoaït ñoäng cuûa maùy.
 EPROM 2: Coù ñòa chæ töø 2000H – 3FFFH (8KB), chöùa chöông trình
öùng duïng cho maïch ghi ñoïc EPROM.

2.2 Boä nhôù truy xuaát baát kyø (RAM):


Chöùa caùc chöông trình coøn söõa ñoåi hoaëc chöùa döõ lieäu vaø keát quaû
taïm thôøi trong quaù trình tính toaùn. Ñaëc ñieåm cuûa loaïi naøy laø döõ lieäu seõ maát
khi heä thoáng maát ñieän.
Trong KIT vi ñieàu khieån duøng hai RAM, loaïi 2764 coù ñòa chæ toång coäng
töø 4000H – 7FFFH (16KB).

2.3 Khoái I/O:


Khoái I/O coù nhieäm vuï giao tieáp giöõa kit vi ñieàu khieån vôùi nhöõng heä
thoáng öùng duïng beân ngoaøi, ñoù laø 2 vi maïch 8255, ñòa chæ cuûa port, thanh ghi
ñieàu khieån nhö sau:
5255-1 : Ñòa chæ port A : 8000H
Giôùi thieäu kit vi ñieàu khieån 8951

: Ñòa chæ port B : 8001H


: Ñòa chæ port C : 8002H
: Ñòa chæ thanh ghi töø ñieàu khieån (CW ): 8003H
8255-2 : Ñòa chæ port A : A000H
: Ñòa chæ port B: A001H
: Ñòa chæ port C: A002H
: Ñòa chæ thanh ghi töø ñieàu khieån (CW ): A003H

2.4 Khoái queùt baøn phím vaø hieån thò:


Goàm coù IC queùt phím 8279, baøn phím vaø boä hieån thò 8 led 7 ñoaïn:
IC 8279 ñaõ ñöôïc giôùi thieäu ôû treân.
Baøn phím goàm 26 phím, 16 phím soá thaäp luïc phaân töø 0 – F duøng ñeå
nhaäp caùc leänh vaø caùc döõ lieäu, coøn laïi laø caùc phím chöùc naêng.
Boä hieån thò : laø thieát bò xuaát duøng ñeå quan saùt vieäc thöïc hieän chöông
trình, kieåm tra döõ lieäu … goàm 8 led 7 ñoaïn ñöôïc ñieàu khieån bôûi IC queùt 8279
thoâng qua caùc BJT SWITCH vaø IC ñeäm.
Quan heä giöõa ñôn vò xöû lí trung taâm vaø caùc khoái treân lieân heä nhau döïa
vaøo caùc bus.
Bus döõ lieäu: duøng ñeå chuyeån soá lieäu qua laïi giöõa caùc khoái, dung löôïng
cuûa khoái phuï thuoäc vaøo khaû naêng cuûa ñôn vò xöû tí trung taâm.
Bus ñòa chæ: Ñöôïc truyeàn töø ñôn vò xöû lí trung taâm ñeáùn caùc khoái, ñòa
chæ naøy seõ xaùc ñònh khoái ñöôïc choïn laøm vieäc vôùi CPU. Coù toång coäng 16
ñöôøng ñòa chæ, soá oâ nhôù coù ñöôïc seõ laø: 216= 56536.
Bus ñieàu khieån : Goàm caùc tín hieäu ñieàu khieån ñeå ñaûm baûo söï hoaït
ñoäng ñoàng boä nhau giöõa caùc khoái .
Vuøng ñòa chæ: EPROM1 : 0000H – 1FFFH
EPROM2 : 2000H – 3FFFH
RAM1 : 4000H – 5FFFH
RAM2 : 6000H – 7FFFH
8255-1: 8000H
8255-2: A000H
Höôùng phaùt trieån cuûa ñeà taøi

I. Giôùi thieäu:
Ñeå laäp trình cho EPROM noäi cuûa vi ñieàu khieån 8951 coù nhieàu phöông
phaùp khaùc nhau nhö: duøng kit vi xöû lí, maùy tính … ÔÛ ñaây em duøng kit vi ñieàu
khieån 8951 laäp trình cho EPROM noäi thoâng qua 2 IC giao tieáp 8255.
Vì moãi phöông phaùp coù nhöõng öu ñieåm vaø khuyeát ñieåm rieâng neân tuøy
töøng tröôøng hôïp cuï theå maø ta löïa choïn phöông phaùp phuø hôïp.
Veà phaàn cöùng maïch naïp EPROM noäi do em thieát keá coù theå laäp trình
ñöôïc hai caáp ñieän aùp Vpp=5v hoaëc Vpp=12v.
II. Sô ñoà keát noái maïch naïp EPROM noäi:
Höôùng phaùt trieån cuûa ñeà taøi
Höôùng phaùt trieån cuûa ñeà taøi

Caùch keát noái maïch nhö sau:


· A0 – A7 (P1.0 – P1.7) cuûa 8951 keát noái vôùi portA cuûa 8255-1.
· A8 – A11 (P2.0 – P2.3) cuûa 8951 keát noái vôùi portB-L cuûa 8255-1.
· P2.6, P2.7, P3.6, P3.7 cuûa 8951 laàn löôït keát noái vôùi portC-L cuûa
8255-1.
· Do – D7 (P0.0 – P0.7) cuûa 8951 keát noái vôùi port A cuûa 8255-2.
· PROG\ALE, Vpp\EA laàn löôït keát noái vôùi PC0, PC1 (portC cuûa
8255-2)
· Chaân RST ñöôïc noái leân Vcc.
· Chaân PSEN\ ñöôïc noái mass.
· Caùc chaân XTAL1, XTAL2 ñöôïc noái vôùi thaïch anh 12M.
Nguoàn 12v ñöôïc ñieàu khieån caáp cho Vpp nhö sau:

+12V
Vcc

D2
1K 4001
D1

Vpp
PC1 C828
4001
10K

Khi PC1=L thì Q ngaét laøm cho D2 phaân cöïc thuaän neân Vpp=12v.
Khi PC1=H, Q daãn laøm cho D1 phaân cöïc thuaän neân Vpp=5v.
Höôùng phaùt trieån cuûa ñeà taøi
Höôùng phaùt trieån cuûa ñeà taøi

III. Khôûi taïo coång giao tieáp 8255:


Coång giao tieáp duøng ñeå giao tieáp giöõa kit vi ñieàu khieån vôùi maïch naïp
EPROM noäi. Coång naøy laøm vieäc theo phöông phaùp giao tieáp song song vaø laøm
vieäc ôû cheá ñoä xuaát nhaäp I/0.
Ñeå thieát laäp töø ñieàu khieån 8255 ta thieát laäp ñoaïn chöông trình sau:
MOV A , Haèng soá.
MOV DPTR , Ñòa chæ töø ñieàu khieån.
MOVX @DPTR ,A
ÔÛ ñaây giaù trò cuûa töø ñieàu khieån nhaäp vaøo laø haèng soá thaäp luïc
phaân, noäi dung cuûa töø ñieàu khieån seõ quyeát ñònh caùc coång xuaát hay nhaäp
theo yeâu caàu thieát keá. Caùc coång naøy phaûi ñöôïc ñieàu khieån tröôùc khi xuaát
hay nhaäp döõ lieäu qua coång.
IV. Chöông trình ñoïc döõ lieäu töø EPROM noäi:
Giaûi thuaät laäp trình:
· Khôûi taïo 8255.
· Xuaát caùc tín hieäu ñieàu khieån.
· Xuaát ñòa chæ caàn ñoïc.
· Nhaän döõ lieäu töø bus döõ lieäu.
· Giaûi maõ hieån thò.
· Keát thuùc.
Khi chöa naïp döõ lieäu vaøo hoaëc sau khi chaïy chöông trình xoùa, neáu chöông
trình ñuùng thì döõ lieäu ñoïc ra laø FFH.
Khi ñaõ chaïy chöông trình naïp roài thì döõ lieäu ñoïc ra laødöõ lieäu maø ta
caàn naïp.
Taïi caùc ñòa chæ 030H, 031H, 032H ñoïc ra coù noäi dung laø:1EH, 51H, FFH
(read-signature) ñoái vôùi loaïi AT89C51, ñaây laø loaïi IC maø ta thöïc hieän vieäc laäp
trình.
Ñoái vôùi caùc loaïi khaùc thuoäc hoï AT89 thì signature theo baûng sau:
Signature Moâtaû
1E 51 FF AT89C51
1E 51 05 AT89C51
1E 61 FF AT89VL51
1E 61 05 AT89VL51
Höôùng phaùt trieån cuûa ñeà taøi

1E 52 FF AT89C52
1E 52 05 AT89C52
1E 62 FF AT89VL52
1E 62 05 AT89VL52
1E 11 AT89C1051
1E 21 AT89C2051

V. Chöông trình naïp EPROM noäi:


Vi ñieàu khieån AT89C51 ñöôïc tung ra thò tröôøng vôùi maûng boä nhôù beân
trong roãng (nghóa laø noäi dung =FFH) vaø saün saøng ñöôïc laäp trình. Chöông trình
naïp EPROM noäi seõ ñöôïc laäp trình moät trong hai möùc ñieän aùp 12v hoaëc 5v.
Vaäy ñeå xaùc ñònh möùc ñieän aùp laäp trình ta ñoïc signature taïi caùc ñòa chæ:
030H, 031H, 032H nhö sau:
Adress Vpp=5v Vpp=12v
030H 1EH 1EH
031H 51H 51H
032H 05H FFH

Maët khaùc ta coù theå xem top -side - mark (nhaõn) nhö sau:

Vpp=12v Vpp=5v
AT8951 AT8951
XXXX XXXX-5
YYWW YYWW
ÔÛ ñaây loaïi IC maø em laäp trình laø 12v.
Giaûi thuaät laäp trình:
· Khôûi taïo 8255.
· Troû ñòa chæ ñeán vuøng nhôù caàn naïp.
· Xuaát döõ lieäu ra bus döõ lieäu.
· Xuaát caùc tín hieäu ñieàu khieån.
· Naâng ñieän aùp Vpp leân 12v.
· Taïo xung laäp trình ALE/PROG.
· Keát thuùc.
Chuù yù: Chu kyø vieát 1byte khoâng quaù 1,5ms.
Höôùng phaùt trieån cuûa ñeà taøi

Khi naïp döõ lieäu cho vi ñieàu khieån thì chöông trình naïp phaûi naïp töøng
byte, ñoàng thôøi phaûi chaïy chöông trình xoùa tröôùc khi laäp trình cho EPROM noäi.
Giaûn ñoà thôøi gian laäp trình cho EPROM noäi:

VI. Chöông trình xoaù EPROM noäi:


Chöông trình xoaù phaûi ñöôïc thöïc hieän tröôùc khi laäp trình. Khi xoaù thì
xoaù toaøn boä vuøng nhôù beân trong.
Giaûi thuaät laäp trình:
· Khôûi taïo 8255.
· Xuaát caùc tín hieäu ñieàu khieån.
· Ñieàu khieån ñieän aùp Vpp=12v.
· Ñieàu khieån xung ALE /PROG.
· Keát thuùc.
Chuù yù: Ñeå xoaù ñöôïc noäi dung beân trong ñoøi hoûi xung laäp trình PROG\
phaûi ôû möùc thaáp khoaûng 10ms.
Höôùng phaùt trieån cuûa ñeà taøi

L ÖU ÑOÀ CHÖÔNG TRÌNH ÑOÏC MAÕ DÖÕ LIEÄU

BEGIN

Khôûi taïo 8255 1-2

PROG=L;V pp =5V

Ñieàu khieån
P 2.6 =L;P 2.7 =L;P 3.6 =H;P 3.7 =H

Chuyeån ñòa chæ baét ñaàu vaø keát thuùc


EPROM vaøo oâ nhôù

Xuaát ñòa chæ caàn ñoïc ra EPROM

Nhaän döõ lieäu töø EPROM

Giaûi maõ ñòa chæ vaø döõ lieäu

Hieån thò

Lcall Key No

Yes

Taêng ñòa chæ ñoïc EPROM

So saùnh vôùi ñòa chæ cuoái No

Yes

Hieån thò

END
Höôùng phaùt trieån cuûa ñeà taøi

L ÖU ÑOÀ CHÖÔNG TRÌNH XOAÙ EPROM

BEGIN

Khôûi taïo 8255 1-2

Xuaát tín hieäu ñieàu khieån

V pp
=12V

Taïo xung L

Delay 100ms

Taïo xung H

END
Höôùng phaùt trieån cuûa ñeà taøi
L ÖU ÑOÀ CHÖÔNG TRÌNH NAÏP EPROM
BEGIN

Khôûi taïo 8255 1-2

Ñieàu khieån V pp
=5V, PROG=H

Chuyeån ñòa chæ baét ñaàu vieát cho


EPROM vaøo oâ nhôù

Chuyeån ñòa chæ ñaàu döõ lieäu vaø keát


thuùc döõ lieäu vaøo oâ nhôù

Goïi ñòa chæ caàn naïp ra EPROM


cuûa 8255

Giaûi maõ hieån thò ñòa chæ vaø döõ lieäu


caàn naïp

Ñieàu khieån
P 2.6
=L;P 2.7
=H;P 3.6
=H;P 3.7
=H

Taïo xung L vaø V pp


=12V

Delay 100us

Ñieàu khieån PROG=H,V pp


=5V

Taêng ñòa chæ caàn vieát cho EPROM

Taêng ñòa chæ vuøng döõ lieäu caàn naïp

So saùnh caàn naïp vôùi ñòa chæ


No
cuoái vuøng döõ lieäu

Yes

Hieån thò END END


Höôùng phaùt trieån cuûa ñeà taøi

THI COÂNG MAÏCH

Ñöôïc söï giuùp ñôõ cuûa thaày Nguyeãn Ñình Phuù, trong thôøi gian thi coâng
em thöïc hieän ñöôïc moät soá phaàn vaø traûi qua caùc böôùc sau:
· Tieán haønh laøm maïch in (öùng duïng phaàn meàm veõ maïch in EAGLE).
· Kieåm tra maïch in.
· Raùp vaø haøn linh kieän.
· Keát noái board maïch vôùi kit vi ñieàu khieån thoâng qua connector.
· Kieåm tra maïch.
· Naïp chöông trình.
Höôùng phaùt trieån cuûa ñeà taøi

HÖÔÙNG PHAÙT TRIEÅN ÑEÀ TAØI


Sau thôøi gian thöïc hieän em thaáy raèng ñeà taøi coøn nhieàu haïn cheá veà khaû naêng
söû duïng roäng raõi trong thöïc teá. Neáu coù ñieàu kieän thì ñeà taøi neân phaùt trieån theo
höôùng sau ñaây:
Maïch coù theå môû roäng ghi ñoïc cho caùc loaïi vi ñieàu khieån thuoäc hoï AT89 nhö:
AT89C51, AT89VL51, AT89C52, AT89VL52, AT89C1051, AT89C2051.
Maïch coù theå ghi ñoïc cho loaïi vi ñieàu khieån nhoû (loaïi 20 chaân).
Neáu chæ ñôn thuaàn laø ghi ñoïc thì keát noái tröïc tieáp vi ñieàu khieån vôùi vi ñieàu
khieån khaùc maø khoâng caàn thoâng qua 8255 ñeå maïch coù tính kinh teá hôn.
Neáu khoâng duøng kit vi ñieàu khieån thì coù theå duøng card naïp töø maùy vi tính
thoâng qua coång COM. Khi ñoù ngoân ngöõ laäp trình coù theå laø ngoân ngöõ Pascal, ngoân
ngöõ C…
Phuï luïc

KEÁT LUAÄN
Sau 7 tuaàn laøm vieäc khaån tröông cuøng vôùi söï nhieät tình cuûa thaày
höôùng daãn Nguyeãn Ñình Phuù. Ñeà taøi: “MAÏCH GHI ÑOÏC EPROM CHO VI
ÑIEÀU KHIEÅN 8951” ñaõ hoaøn thaønh ñuùng thôøi gian qui ñònh. Ñaây laø ñeà taøi
mang tính toång hôïp, keát hôïp giöõa kyõ thuaät ñieän töû vaø kyõ thuaät laäp trình.
Vôùi söï quyeát taâm vaø noã löïc khoâng ngöøng, taäp luaän vaên naøy ñaõ
giuùp cho em böôùc ñaàu laøm quen vôùi ñeà taøi khoa hoïc vaø em ñaõ thaät söï tích
luõy moät soá kieán thöùc cô baûn veà vi ñieàu khieån, thieát keá maïch vaø kyõ thuaät
laäp trình.
Maët duø thôøi gian haïn heïp, taøi lieäu tham khaûo quaù ít, vaø coù nhieàu vaán
ñeà naûy sinh trong quaù trình thieát keá phaàn meàm, nhöng em ñaõ coá gaéng heát
söùc mình cuõng nhö söï taän taâm giuùp ñôõ cuûa thaày höôùng daãn neân ñaõ ñaït
ñöôïc nhöõng yeâu caàu ñaët ra.
Qua quaù trình thöïc hieän luaän vaên, em ñaõ töï ñaùnh giaù ñöôïc phaàn naøo
coøn haïn cheá vaø ít nhieàu boå xung caùc kieán thöùc coøn haïn heïp trong thôøi gian
hoïc taïi tröôøng nhaát laø moân kyõ thuaät vi xöû lí.
Em xin chaân thaønh caûm ôn moïi söï giuùp ñôõ taän tình, quùy baùu cuûa caùc
thaày - coâ trong tröôøng vaø thaày höôùng daãn, ñaõ taïo nhieàu ñieàu kieän giuùp
chuùng em hoaøn thaønh toát nhieäm vuï ñöôïc giao ñuùng thôøi gian qui ñònh.
Moät laàn nöõa, em raát mong söï ñoùng goùp yù kieán cuûa quí thaày - coâ
cuøng vôùi caùc baïn sinh vieân tham khaûo ñeå taäp luaän vaên ñöôïc hoaøn haûo hôn.

Thaønh Phoá Hoà Chí Minh. Ngaøy 28-02-2000

Sinh vieân thöïc hieän


BUØI VAÊN TRÍ
Phuï luïc

PHUÏ LUÏC
Noäi dung chöông trình
porta1 equ 8000h ;quan li dia chi thap a7-a0
portb1 equ 8001h ;quan li dia chi cao a11-a8
portc1 equ 8002h
cw1 equ 8003h
porta2 equ 0a000h
portb2 equ 0a001h
portc2 equ 0a002h
cw2 equ 0a003h
ht equ 0c000h
dk equ 0c001h
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;chuong trinh kiem tra - hien thi
org 5200h
mov dptr,#cw1 ; khoi tao 8255
mov a,#80h
movx @dptr,a
mov dptr,#cw2
mov a,#90h
movx @dptr,a

mov dptr,#portc2 ;pc0=prog\=H


mov a,#03h ;pc1=Vpp=H
movx @dptr,a

mov dptr,#portc1 ;P2.6=PC0=L; P2.7=PC1=L; P3.6= PC2=H


mov a,#0ch ;P3.7=PC3=H
movx @dptr,a
;chuyen dia chi bat dau doc va dia chi ket thuc vao cac o nho ben trong
mov dptr,#4f00h ;nap dia chi luu Begin_Addr can doc
movx a,@dptr
mov 10h,a ;cat tam byte B_A_L vao o nho 10h
inc dptr
movx a,@dptr
mov 11h,a ;cat tam byte B_A_H vao o nho 11h
inc dptr
movx a,@dptr
mov 12h,a ;cat tam byte E_A_L vao o nho 12h
inc dptr
movx a,@dptr
mov 13h,a ;cat tam byte E_A_H vao o nho 13h
;goi dia chi can doc ra 8255 de dieu khien Addr cua EPROM trong 8951
Phuï luïc

rd2: mov dptr,#porta1


mov a,10h ;chuyen byte B_A_L vao dpl
movx @dptr,a
mov dptr,#portb1
mov a,#11h ;chuyen byte B_A_H vao dph
movx @dptr,a

mov dptr,#porta2
movx a,@dptr ;xuat data ra thanh ghi a
mov 14h,a ;cat byte data vua doc vao o nho 14h
lcall decode ;goi chtr con giai ma hien thi
lcall display ;goi chtr con hien thi

rd5: lcall key ;goi chtr quet phim cho nhan phim de doc byte ke
cjne a,#0ffh,rd4
sjmp rd5 ;quay lai cho

rd4: mov a,11h ;chuyen dia chi byte H vao a de so sanh


cjne a,13h,rd1 ;so sanh dia chi byte H neu chua bang thi tang len 1
mov a,10h ;chuyen dia chi byte L vao a de so sanh
cjne a,12h,rd1 ;so sanh dia chi byte L neu chua bang thi tang len 1
;hien thi chu END de bao ket thuc
mov 25h,#79h ;ma chu E
mov 26h,#37h ;ma chu N
mov 27h,#5eh ;ma chu d
lcall display
sjmp $ ;ngung

rd1: inc 10h ;tang B_A_L len 1


mov a,10h ;kiem tra xem co bang 0 hay khong
cjne a,#00,rd2 ;nhay ve vi chua bang 0
inc 11h ;tang B_A_H len 1
sjmp rd2

;chuong trinh con giai ma hien thi


org 5280h
decode: mov dptr,#0200h
mov a,11h ;lay byte B_A_H de giai ma hien thi
push 0e0h ;cat A
swap a ;xu li so thu nhat
anl a,#0fh
mov dpl,a
movx a,@dptr
mov 20h,a
pop 0e0h ;lay lai A
Phuï luïc

anl a,#0fh ;xu li so thu 2


mov dpl,a
movx a,@dptr
mov 21h,a

mov a,10h ;lay byte B_A_L de giai ma hien thi


push 0e0h ;cat A
swap a ;xu li so thu nhat
anl a,#0fh
mov dpl,a
movx a,@dptr
mov 22h,a
pop 0e0h ;lay lai A
anl a,#0fh ;xu li so thu 2
mov dpl,a
movx a,@dptr
mov 23h,a

mov a,14h ;lay byte DATA de giai ma hien thi


push 0e0h ;cat A
swap a ;xu li so thu nhat
anl a,#0fh
mov dpl,a
movx a,@dptr
mov 26h,a
pop 0e0h ;lay lai A
anl a,#0fh ;xu li so thu 2
mov dpl,a
movx a,@dptr
mov 27h,a
mov 24h,#00
mov 25h,#00
ret
org 52d5h
display:
mov r1,#80h ;tu dieu khien 8279 chong nhap nhay
mov r0,#20h ;quan li dia chi ma hien thi
dis1: mov dptr,#dk
mov a,r1
movx @dptr,a
mov dptr,#ht
mov a,@r0
movx @dptr,a
inc r1
inc r0
Phuï luïc

mov a,r0
cjne a,#28h,dis1
ret
org 0223h
key:
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;chuong trinh nap EPROM trong 8951 co hien thi dia chi va du lieu
org 5300h
mov dptr,#cw1 ; khoi tao 8255
mov a,#80h
movx @dptr,a
mov dptr,#cw2
mov a,#80h
movx @dptr,a
;dieu khien Vpp = 5V
mov dptr,#portc2 ;pc0=prog\=H
mov a,#00000011b ;pc1=Vpp=H=5v
movx @dptr,a
;chuyen dia chi bat dau Write cho EPROM vao cac o nho noi
;dia chi bat dau DATA va dia chi ket thuc DATA vao cac o nho ben trong
mov dptr,#4f10h ;nap dia chi luu Begin_Addr can doc
movx a,@dptr
mov 16h,a ;cat tam byte B_A_E_L vao o nho 16h
inc dptr
movx a,@dptr
mov 17h,a ;cat tam byte B_A_E_H vao o nho 17h
inc dptr
movx a,@dptr
mov 18h,a ;cat tam byte B_D_L vao o nho 18h
inc dptr
movx a,@dptr
mov 19h,a ;cat tam byte B_D_H vao o nho 19h
inc dptr
movx a,@dptr
mov 1Ah,a ;cat tam byte E_A_H vao o nho 1Ah
inc dptr
movx a,@dptr
mov 1Bh,a ;cat tam byte E_A_H vao o nho 1Bh
;goi ADDR can write ra 8255 de dieu khien Addr cua EPROM trong 8951
wr4: mov dptr,#porta1
mov a,16h ;chuyen byte B_A_E_L vao dpl
movx @dptr,a
mov dptr,#portb1
mov a,#17h ;chuyen byte B_A_E_H vao dph
movx @dptr,a
Phuï luïc

;goi DATA ra data bus de nap cho EPROM


mov dpl,18h ;lay Addr_L quan li vung data
mov dph,19h ;lay Addr_H quan li vung data
movx a,@dptr ;lay DATA can nap tu RAM ngoai
mov dptr,#porta2 ;nap dia chi dieu khien DATA vao dptr
movx @dptr,a ;xuat DATA ra bus data
;chuyen dia chi va data can nap de hien thi
mov 10h,16h ;chuyen dia chi cua EPROM
mov 11h,17h
mov 14h,a ;cat tam vao o nho 14H de giai ma hien thi
lcall decode ;goi chtr con giai ma
lcall display ;goi chtr con hien thi
;tao xung Vpp va PROG\
mov dptr,#portc1 ;P2.6=PC0=L; P2.7=PC1=H; P3.6= PC2=H
mov a,#00001110b ;P3.7=PC3=H
movx @dptr,a

mov dptr,#portc2 ;pc0=prog\=H


mov a,#01h ;pc1=Vpp=L tuong duong 12V
movx @dptr,a ;pc0=prog\=L
mov a,#00h ;pc1=Vpp=L
movx @dptr,a

mov 1fh,#10 ;delay


wr1: djnz 1fh,wr1

mov a,#01h ;pc1=Vpp=L tuong duong 12V


movx @dptr,a ;pc0=prog\=H

mov a,#03h ;pc1=Vpp=H tuong duong 5V


movx @dptr,a ;pc0=prog\=H
;ket thuc doan chtr tao xung nap cham dut qua trinh nap 1 BYTE

inc 16h ;tang ADDR_L cua EPROM len 1


mov a,16h
cjne a,#00h,wr2
inc 17h ;tang ADDR_H cua EPROM len 1 khi byte L ve 00h

wr2: mov a,19h ;chuyen dia chi byte H vao a de so sanh


cjne a,1bh,wr3 ;so sanh dia chi byte H neu chua bang thi tang len 1

mov a,18h ;chuyen dia chi byte L vao a de so sanh


cjne a,1ah,wr3 ;so sanh dia chi byte L neu chua bang thi tang len 1

;hien thi chu END de bao ket thuc


Phuï luïc

mov 25h,#79h ;ma chu E


mov 26h,#37h ;ma chu N
mov 27h,#5eh ;ma chu d
lcall display
sjmp $ ;ngung

wr3: inc 18h ;tang B_A_L len 1


mov a,18h ;kiem tra xem co bang 0 hay khong
cjne a,#00,wr4 ;nhay ve vi chua bang 0
inc 19h ;tang B_A_H len 1
sjmp wr4

;
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
x
;chuong trinh xoa eprom
org 5400h ; dia chi xoa
mov dptr ,# cw1 ; tu dieu khien 8255-1
mov a, #80h ; A,B,C: xuat
movx @dptr,a
mov dptr, #cw2 ; tu dieu khien 8255-2
mov a ,#80h ; A,B,C:xuat
movx @dptr ,a
;xuat cac tin hieu dieu khien xoa eprom
mov dptr,#portc1
mov a,#01h ;p2.6=h , p2.7=p3.6=p3.7=l
movx @dptr,a
mov dptr,#portc2 ;tao xung prog\ =h
movx @dptr ,a
mov a,#00h ;tao xung prog\ =l
movx @dptr ,a
;toa xung delay 10ms
push #06h
push #07h
mov r6,#28h
y2: mov r7,#FFh
y1: djnz r7 ,y1 ;nhay neu r7 chua bang ffh
djnz r6 ,y2 ;nhay neu r6 chua bang 28h
pop #07h
pop #06h
mov a,#01h
movx @dptr ,a
;ket thuc hien thi chu END
mov 25h ,79h ;ma chu E
mov 26h ,37h ;ma chu N
Phuï luïc

mov 27h ,5eh ;ma chu D


lcall display ; goi chuong trinh hien thi
sjmp $ ; ngung
end.
Muïc luïc
Trang
Chöông I : Daãn nhaäp
I. Ñaët vaán ñeà:......................................................................................................1
II. Muïc ñích yeâu caàu:..........................................................................................1
1. Muïc ñích.........................................................................................................1
2. Yeâu caàu :......................................................................................................1
Chöông II: Khaûo saùt vi ñieàu khieån 8951
I. Caáu taïo vi ñieàu khieån hoï MSC-51................................................................2
1. Giôùi thieäu caáu truùc phaàn cöùng hoï MSC-51 (8951):............................2
2. Khaûo saùt sô ñoà chaân 8951 vaø chöùc naêng töøng chaân :......................3
3. Caáu truùc beân trong vi ñieàu khieån............................................................5
II. Toùm taét taäp leänh cuûa 8951 :.....................................................................17
1. Caùc mode ñònh vò (Addressing Mode) :....................................................17
2. Caùc kieåu leänh (Instruction Types):..........................................................22
III. Chöông trình ngoân ngöõ Assembly cuûa 8951:............................................31
1. Giôùi thieäu :.................................................................................................31
2. Hoaït ñoäng cuûa trình bieân dòch (Assembler Operation)..........................31
3. Söï saép ñaët chöông trình ngoân ngöõ Assmebly :.....................................33
4. Söï tính toaùn bieåu thöùc cuûa Assemble Time (Assemble Time Expression
Evaluation):...................................................................................................................36
5. Caùc chæ thò bieân dòch :.............................................................................38
Chöông III: Khaûo saùt vi maïch 8279
I. Caáu truùc phaàn cöùng IC 8279.......................................................................43
II. Caáu truùc phaàn meàm cuûa 8279..................................................................44
Chöông IV: Giôùi thieäu kit vi ñieàu khieån 8951
I. Sô ñoà khoái kit vi ñieàu khieån 8951:..............................................................48
1. Ñôn vò xöû lyù trung taâm :.........................................................................48
2. Boä nhôù :.....................................................................................................48
Chöông V: Thieát keá phaàn meàm
I. Giôùi thieäu :......................................................................................................51
II. Sô ñoà keát noái maïch naïp EPROM noäi :....................................................51
III. Khôûi taïo coång giao tieáp 8255 :..................................................................55

Luaän vaên toát nghieäp


IV. Chöông trình ñoïc döõ lieäu töø EPROM noäi :.............................................55
V. Chöông trình naïp EPROM noäi :....................................................................56
VI. Chöông trình xoaù EPROM noäi :..................................................................57
Thi coâng maïch........................................................................................62
Höôùng phaùt trieån ñeà taøi...................................................................63
Keát luaän..................................................................................................64
Taøi lieäu tham khaûo..................................................................................
Phuï luïc....................................................................................................65

Luaän vaên toát nghieäp

You might also like