Professional Documents
Culture Documents
Mach Ghi-Doc Eprom Cho 8951
Mach Ghi-Doc Eprom Cho 8951
2. Khaûo saùt sô ñoà chaân 8951 vaø chöùc naêng töøng chaân:
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
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
FFFF FFFF
Code Data
FF
Memory Memory
External Memory
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
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.
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:
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.
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 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.
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
WR RD
2764 6264
CS CS RAM
CS CS
C 0
B 1
A 2
3
4
74HC138
5
Select another EPROM/RAM
E 6
E 7
E
RAM
W W
RD
OE
PSEN
+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
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.
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).
Opcode i
Opcode
Immediate Data
Opcode
Relative Offset
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.
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.
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:
SWAP A : Ñoåi choå 4 bit thaáp vaø 4 bit cao cuûa A cho nhau
(A3A0)(A7A4).
(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.
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.
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.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.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ù.
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)
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.
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
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
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
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
+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
1E 52 FF AT89C52
1E 52 05 AT89C52
1E 62 FF AT89VL52
1E 62 05 AT89VL52
1E 11 AT89C1051
1E 21 AT89C2051
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:
BEGIN
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
Hieån thò
Lcall Key No
Yes
Yes
Hieån thò
END
Höôùng phaùt trieån cuûa ñeà taøi
BEGIN
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
Ñieàu khieån V pp
=5V, PROG=H
Ñieàu khieån
P 2.6
=L;P 2.7
=H;P 3.6
=H;P 3.7
=H
Delay 100us
Yes
Ñöôï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
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.
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,#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
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
;
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