Tài liệu Đề tài Khái quát khảo sát vi điều khiển 8951: I. Đặt vấn đề:
Cùng với sự phát triển của nền kinh tế và khoa học kỹ thuật trên con đường công nghiệp hóa, hiện đại hóa đất nước. Ngành điện tử nói chung đã có những bước tiến vượt bậc và mang lại những thành quả đáng kể.
Trong đó vi xử lí là lĩnh vực đã thực sự mang lại những hiệu qủa chính xác và gọn nhẹ trong quá trình điều khiển, sản xuất.
Để sử dụng triệt để bộ nhớ EPROM bên trong cũng như sự cần thiết có một chương trình hệ thống nào đó được nạp vào trong EPROM để thi hành khi vừa mở máy.
II. Mục đích yêu cầu:
1. Mục đích:
Thực hiện mạch nạp EPROM cho vi điều khiển để sử dụng hiệu quả bộ nhớ của EPROM.
Viết một chương trình hệ thống nạp vào trong máy.
2. Yêu cầu:
Mạch hoạt động chính xác, khi nạp và đọc phải nạp đúng dữ liệu cần nạp hay đọc, đồng thời khi xoá thì phải xoá toàn bộ vùng nhớ.
Mạch gọn nhẹ, dễ sử dụng, dễ kiểm ...
100 trang |
Chia sẻ: hunglv | Lượt xem: 1040 | Lượt tải: 0
Bạn đang xem trước 20 trang mẫu tài liệu Đề tài Khái quát khảo sát vi điều khiển 8951, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
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
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.
4ms cho hoaït ñoäng nhaân hoaëc chia.
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:
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:
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.
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ôù:
Baûng toùm taét caùc vuøng nhôù 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.
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:
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.
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):
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.
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)
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.
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:
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) :
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.
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.
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:
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)
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
Thanh ghi tích luõyA
Thanh ghi B
Thanh ghi thaùi PSW
SP
DPRT
Port 0 ñeán port 3
IP
IE
Caùc thanh ghi ñònh thôøi
SCON SBUF
PCON (HMOS)
PCON (CMOS)
0000H
00H
00H
00H
07H
0000H
FFH
XXX0 0000 B
0X0X 0000 B
00H
00H
00H
0XXX XXXXH
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 28= 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ò.
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æ 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:
Direct Addressing
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.
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:
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 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 (A0…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).
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.
Ö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.
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,
ADD A, Rn : (A) (A) + (Rn)
ADD A, direct : (A) (A) + (direct)
ADD A, @ Ri : (A) (A) + ((Ri))
ADD A, # data : (A) (A) + # data
ADDC A, Rn : (A) (A) + (C) + (Rn)
ADDC A, direct : (A) (A) + (C) + (direct)
ADDC A, @ Ri : (A) (A) + (C) + ((Ri))
ADDC A, # data : (A) (A) + (C) + # data
SUBB A,
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
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
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
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
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
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)
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)
(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.
(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 , 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
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))
XCHD A, @ 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.
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 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).
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 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.
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
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.
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
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
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
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
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 :
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
I. Caáu truùc phaàn cöùng IC 8279
Sô ñoà chaân vaø sô ñoà logic
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
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ò 8 kyù 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õ
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
+ 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.
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
: Ñò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
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:
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:
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.
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
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.
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.
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 Ñ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…
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
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
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
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
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
;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
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
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;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
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
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
Các file đính kèm theo tài liệu này:
- MACH_GHI_DOC_EPROM_CHO_8951.DOC