Tài liệu Thiết kế và thi công hệ thống KIT vi điều khiển 8951: ... Ebook Thiết kế và thi công hệ thống KIT vi điều khiển 8951
112 trang |
Chia sẻ: huyen82 | Lượt xem: 1441 | Lượt tải: 0
Tóm tắt tài liệu Thiết kế và thi công hệ thống KIT vi điều khiển 8951, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
PHAÀN MÔÛ ÑAÀU
I. KHAÙI QUAÙT VAÁN ÑEÀ
Ngaøy nay kyõ thuaät vi ñieàu khieån ñaõ trôû neân quen thuoäc trong caùc ngaønh kyõ thuaät vaø trong daân duïng. Töø caùc daây chuyeàn saûn xuaát lôùn ñeán caùc thieát bò gia duïng, chuùng ta ñeàu thaáy söï hieän dieän cuûa vi ñieàu khieån. Caùc boä vi ñieàu khieån coù khaû naêng xöû lyù nhieàu hoaït ñoäng phöùc taïp maø chæ caàn moät chip vi maïch nhoû, noù ñaõ thay theá caùc tuû ñieàu khieån lôùn vaø phöùc taïp baèng nhöõng maïch ñieän goïn nheï, deã daøng thao taùc söû duïng.
Vi ñieàu khieån khoâng nhöõng goùp phaàn vaøo kyõ thuaät ñieàu khieån maø coøn goùp phaàn to lôùn vaøo vieäc phaùt trieån thoâng tin. Ñoù chính laø söï ra ñôøi cuûa haøng loaït thieát bò toái taân trong ngaønh vieãn thoâng, truyeàn hình, ñaëc bieät laø söï ra ñôøi cuûa maïng Internet –sieâu xa loä thoâng tin, goùp phaàn ñöa con ngöôøi ñeán ñænh cao cuûa neàn vaên minh nhaân loaïi.
Chính vì caùc lyù do treân, vieäc tìm hieåu, khaûo saùt vi ñieàu khieån laø ñieàu maø caùc sinh vieân ngaønh ñieän maø ñaëc bieät laø chuyeân ngaønh kyõ thuaät ñieän-ñieän töû phaûi heát söùc quan taâm. Ñoù chính laø moät nhu caàu caàn thieát vaø caáp baùch ñoái vôùi moãi sinh vieân, ñeà taøi naøy ñöôïc thöïc hieän chính laø ñaùp öùng nhu caàu ñoù.
Caùc boä ñieàu khieån söû duïng vi ñieàu khieån tuy ñôn giaûn nhöng ñeå vaän haønh vaø söû duïng ñöôc laïi laø moät ñieàu raát phöùc taïp. Phaàn coâng vieäc xöû lyù chính vaãn phuï thuoäc vaøo con ngöôøi, ñoù chính laø chöông trình hay phaàn meàm. Tuy chuùng ta thaáy caùc maùy tính ngaøy nay cöïc kyø thoâng minh, giaûi quyeát caùc baøi toaùn phöùc taïp trong vaøi phaàn trieäu giaây, nhöng ñoù cuõng laø döïa treân söï hieåu bieát cuûa con ngöôøi. Neáu khoâng coù söï tham gia cuûa con ngöôøi thì heä thoáng vi ñieàu khieån cuõng chæ laø moät vaät voâ tri. Do vaäy khi noùi ñeán vi ñieàu khieån cuõng gioáng nhö maùy tính bao goàm 2 phaàân laø phaàn cöùng vaø phaàn meàm.
Caùc boä vi ñieàu khieån theo thôøi gian cuøng vôùi söï phaùt trieån cuûa coâng ngheä baùn daãn ñaõ tieán trieån raát nhanh, töø caùc boä vi ñieàu khieån 4 Bit ñôn giaûn ñeán caùc boä vi ñieàu khieån 32 Bit. Vôùi coâng ngheä tieân tieán ngaøy nay caùc maùy tính coù theå ñi ñeán vieäc suy nghó, tri thöùc caùc thoâng tin ñöa vaøo, ñoù laø caùc maùy tính thuoäc theá heä trí tueä nhaân taïo.
Maëc duø vi ñieàu khieån ñaõ ñi ñöôïc nhöõng böôùc daøi nhö vaäy nhöng ñeå tieáp caän ñöôïc vôùi kyõ thuaät naøy khoâng theå laø moät vieäc coù ñöôïc trong moät sôùm moät chieàu. Vieäc hieåu ñöôïc cô cheá hoaït ñoäng cuûa boä vi ñieàu khieån 8 Bit laø cô sôû ñeå chuùng ta tìm hieåu vaø söû duïng caùc boä vi ñieàu khieån toái taân hôn, ñaây chính laø böôùc ñi ñaàu tieân khi chuùng ta muoán xaâm nhaäp saâu hôn vaøo lónh vöïc naøy.
Ñeå tìm hieåu boä vi ñieàu khieån moät caùch khoa hoïc vaø mang laïi hieäu quaû cao laøm neàn taûn cho vieäc xaâm nhaäp vaøo nhöõng heä thoáng toái taân hôn. Vieäc trang bò nhöõng kieán thöùc veà vi ñieàu khieån cho sinh vieân laø heát söùc caàn thieát. Xuaát phaùt töø thöïc tieån naøy em ñaõ ñi ñeán quyeát ñònh Thieát keá vaø thi coâng heä thoáng Kit Vi Ñieàu Khieån 8951. Nhaèm ñaùp öùng nhu caàu ham muoán hoïc hoûi cuûa baûn thaân.
II.GIÔÙI HAÏN VAÁN ÑEÀ
Do thôøi gian nghieân cöùu vaø thöïc hieän ñeà taøi chæ giôùi haïn trong voøng 7 tuaàn leã, voán kieán thöùc vaø vieäc tìm hieåu saâu veà moät heä vi ñieàu khieån coøn haïn cheá, luaän aùn naøy chæ thöïc hieän trong phaïm vi sau:
* Phaàn I : Giôùi thieäu caùc linh kieän söû duïng trong maïch
* Phaàn II : Thieát keá vaø thi coâng phaàn cöùng .
* Phaàn III : Thieát keá phaàn meàm
* Phaàn IV : Phuï luïc
III. MUÏC TIEÂU NGHIEÂN CÖÙU
Döïa treân cô sôû cuûa caùc ñeà taøi vi xöû lyù vaø vi ñieàu khieån, ñaëc bieät laø caùc tính naêng cuûa chuùng cuõng nhö caùc hoï IC giao tieáp, hieån thò vaø giaûi maõ …, nhaèm thieát keá moät heä thoáng vi ñieàu khieån goùp phaàn laøm phong phuù theâm cho vieäc hieåu bieát veà lónh vöïc naøy ñoàng thôøi coù theå môû roäng vaø ñònh höôùng cho nhöõng ñeà taøi sau.
PHAÀN I : GIÔÙI THIEÄU CAÙC LINH KIEÄN SÖÛ DUÏNG
TRONG MAÏCH
CHÖÔNG I KHAÛO SAÙT VI ÑIEÀU KHIeån 8951
I. GIÔÙI THIEÄU CAÁU TRUÙC PHAÀN CÖÙNG HOÏ MCS-51 (8951):
1.Giôùi thieäu hoï MCS-51:
MCS-51 laø hoï IC vi ñieàu khieån do haõng Intel saûn xuaát. Caùc IC tieâu bieåu cho hoï laø 8051 vaø 8031. Caùc saûn phaåm MCS-51 thích hôïp cho nhöõng öùng duïng ñieàu khieån. Vieäc xöû lyù treân Byte vaø caùc toaùn soá hoïc ôû caáu truùc döõ lieäu nhoû ñöôïc thöïc hieän baèng nhieàu cheá ñoä truy xuaát döõ lieäu nhanh treân RAM noäi. Taäp leänh cung caáp moät baûng tieän duïng cuûa nhöõng leänh soá hoïc 8 Bit goàm caû leänh nhaân vaø leänh chia. Noù cung caáp nhöõng hoå trôï môû roäng treân Chip duøng cho nhöõng bieán moät Bit nhö laø kieåu döõ lieäu rieâng bieät cho pheùp quaûn lyù vaø kieåm tra Bit tröïc tieáp trong ñieàu khieån vaø nhöõng heä thoáng logic ñoøi hoûi xöû lyù luaän lyù.
8951 laø moät vi ñieàu khieån 8 Bit, cheá taïo theo coâng ngheä CMOS chaát löôïng cao, coâng suaát thaáp vôùi 4 KB PEROM (Flash Programmable and erasable read only memory). Thieát bò naøy ñöôïc cheá taïo baèng caùch söû duïng boä nhôù khoâng boác hôi maät ñoä cao cuûa ATMEL vaø töông thích vôùi chuaån coâng nghieäp MCS-51 veà taäp leänh vaø caùc chaân ra. PEROM ON-CHIP cho pheùp boä nhôù laäp trình ñöôïc laäp trình trong heä thoáng hoaëc bôûi moät laäp trình vieân bình thöôøng. Baèng caùch keát hôïp moät CPU 8 Bit vôùi moät PEROM treân moät Chip ñôn, ATMEL AT89C51 laø moät vi ñieàu khieån maïnh (coù coâng suaát lôùn) maø noù cung aáp moät söï linh ñoäng cao vaø giaûi phaùp veà giaù caû ñoái vôùi nhieàu öùng duïng vi ñieàu khieån.
AT89C51 cung caáp nhöõng ñaëc tính chuaån nhö sau: 4 KB boä nhôù chæ ñoïc coù theå xoùa vaø laäp trình nhanh (EPROM), 128 Byte RAM, 32 ñöôøng I/O, 2 TIMER/COUNTER 16 Bit, 5 vectô ngaét coù caáu truùc 2 möùc ngaét, moät Port noái tieáp baùn song coâng, 1 maïch dao ñoäng taïo xung Clock vaø boä dao ñoäng ON-CHIP. Theâm vaøo ñoù, AT89C51 ñöôïc thieát keá vôùi logic tónh cho hoaït ñoäng ñeán möùc khoâng taàn soá vaø hoã trôï hai phaàn meàm coù theå löïa choïn nhöõng cheá ñoä tieát kieäm coâng suaát, cheá ñoä chôø (IDLE MODE) seõ döøng CPU trong khi vaãn cho pheùp RAM, timer/counter, port noái tieáp vaø heä thoáng ngaét tieáp tuïc hoaït ñoäng. Cheá ñoä giaûm coâng suaát seõ löu noäi dung RAM nhöng seõ treo boä dao ñoäng laøm maát khaû naêng hoaït ñoäng cuûa taát caû nhöõng chöùc naêng khaùc cho ñeán khi Reset heä thoáng.
Caùc ñaëc ñieåm cuûa 8951 ñöôïc toùm taét nhö sau:
4 KB boä nhôù coù theå laäp trình laïi nhanh, coù khaû naêng tôùi 1000 chu kyø ghi xoaù
Taàn soá hoaït ñoäng töø: 0Hz ñeán 24 MHz
3 möùc khoùa boä nhôù laäp trình
2 boä Timer/counter 16 Bit
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.
4 ms cho hoaït ñoäng nhaân hoaëc chia.
2.Sô ñoà khoái cuûa AT89C51 ñöôïc trình baøy ôû hình 1-1
OTHER REGISTER
128 byte RAM
128 byte RAM
8032\8052
ROM
0K:
8031\8032
4K:8951
8K:8052
INTERRUPT CONTROL
INT1\ INT0\
SERIAL PORT TEMER0
TEMER1
TEMER2 8032\8052
CPU
OSCILATOR
BUS CONTROL
I/O PORT
SERIAL PORT
EA\ RST
ALE\ PSEN\
P0 P1 P2 P3
Address\Data
TXD RXD
TEMER2 8032\8052
TEMER1
TEMER1
II. KHAÛO SAÙT SÔ ÑOÀ CHAÂN 8951, CHÖÙC NAÊNG TÖØNG CHAÂN:
1.Sô ñoà chaân 8951:
Vcc
XTAL.1
XTAL.2
PSEN\
ALE
EA\
RST
Vss
P0.7
P0.6
P0.5
P0.4
P0.3
P0.2
P0.1
P0.0
P1.7
P1.6
P1.5
P1.4
P1.3
P1.2
P1.1
P1.0
P2.7
P2.6
P2.5
P2.4
P2.3
P2.2
P2.1
P2.0
18
19
12 MHz
P3.7
P3.6
P3.5
P3.4
P3.3
P3.2
P3.1
P3.0
17
16
15
14
13
12
11
10
RD
WR
T1
T0
INT1
INT0
TXD
RXD
8951
29
30
31
9
20
32 AD7
33 AD6
34 AD5
35 AD4
36 AD3
37 AD2
38 AD1
39 AD0
8
7
6
5
4
3
2
1
28 A15
27 A14
26 A13
25 A12
24 A11
23 A10
22 A9
21 A8
40
30pF
30pF
Hình1-2 Sô ñoà chaân IC 8951
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 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:
r 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 IO. Ñ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.
r Port 1:
- Port 1 laø port IO treân caùc chaân 1-8. Caùc chaân ñöôïc kyù hieäu P1.0, P1.1, P1.2, … 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.
r 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.
r 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
P3.3
P3.4
P3.5
P3.6
P3.7
INT0\
INT1\
T0
T1
WR\
RD\
Ngoõ vaøo ngaét cöùng thöù 0.
Ngoõ vaøo ngaét cöùng thö 1.
Ngoõ vaøo cuûaTIMER/COUNTER thöù 0.
Ngoõ vaøo cuûaTIMER/COUNTER thöù 1.
Tín hieäu ghi döõ lieäu leân boä nhôù ngoaøi.
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:
r 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 0E\ (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 ROM noäi PSEN seõ ôû möùc logic 1.
r 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.
r Ngoõ tín hieäu EA\(External Access) :
- Tín hieäu vaøo EA\ ôû chaân 31 thöôøng ñöôïc maét leân möùc 1 hoaëc möùc 0. Neáu ôû möùc 1, 8951 thi haønh chöông trình töø ROM noäi trong khoaûng ñòa chæ thaáp 8 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 21V khi laäp trình cho Eprom trong 8951.
r 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.
r Caùc ngoõ vaøo boä giao ñ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.
r Chaân 40 (Vcc) ñöôïc noái leân nguoàn 5V.
III.CAÁU TRUÙC BEÂN TRONG VI ÑIEÀU KHIEÅN
1. Toå chöùc boä nhôù:
CODE Memory
Enable
via
PSEN
DATA
Memory
Enable
via
RD & WR
ON-CHIP
Memory
FFFF FFFF
FF
00
0000 0000
Baûng toùm taét caùc vuøng nhôù 8951.
Hình 1.3 : External Momery
Baûn ñoà boä nhôù Data treân Chip nhö sau:
Ñòa chæ
byte
Ñòa chæ
byte
Ñòa chæ bit
Ñòa chæ bit
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
RAM CAÙC THANH GHI CHÖÙC NAÊNG ÑAËC BIEÄT
- Boä nhôù trong 8951 bao goàm ROM 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.
Hai ñaëc tính caàn chuù yù laø:
u 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.
u Ngaên xeáp beân trong Ram noäi nhoû hôn so vôùi Ram ngoaïi nhö trong caùc boä Microprocontroller khaùc.
RAM beân trong 8951 ñöôïc phaân chia nhö sau:
u Caùc bank thanh ghi coù ñòa chæ töø 00H ñeán 1FH.
u RAM ñòa chæ hoùa töøng bit coù ñòa chæ töø 20H ñeán 2FH.
u RAM ña duïng töø 30H ñeán 7FH.
u 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 coù chöùa caùc ñòa chæ töø 20F ñ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 bít 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 bít.
- 128 bit truy xuaát töøng bit naøy cuõng coù theå truy xuaát nhö caùc byte hoaëc nhö 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 ñeán 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 ñeán 07H.
- Caùc leänh duøng caùc thanh ghi RO ñeán 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 ñeán 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.
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ä ñieá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 ñeán 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 ñaëc 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 moät ñ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 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 ghi 1 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 Port0 ôû ñò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ám16 bit ñöôïc duøng cho vieäc ñònh thôøi ñöôïc ñeám söï kieän. Timer0 ôû ñòa chæ 8AH (TL0: byte thaáp) vaø 8CH (TH0: 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õdöõ 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ät 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. 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ø ROM 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ôù. Port ñöôï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ôù ROM ñöôïc cho pheùp cuûa tín hieäu PSEN\. Söï keát noái phaàn cöùng cuûa boä nhôù EPROM nhö sau:
Port 0
EA
ALE
Port 2
PSEN
8951
D0 ¸ D7
A0 ¸ A7
A8 ¸ A15
OE
74HC373
O D
G
EPROM
Hình 1.4 : 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 moät 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ânWE \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
EA\
ALE
Port 2
RD\
WR\
8951
D0 ¸ D7
A0 ¸ A7
A8 ¸ A15
OE\
WE\
74HC373
O D
G
RAM
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 nhö caùc vi ñieàu khieån. 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.
CS
CS
D0 - D7
OE
EPROM
A0 ¸ A12
8K Bytes
CS
C
B
A
E
E0
E 1
0
1
2
3
4
5
6
7
CS
CS
OE D0 - D7
W
RAM
A0 ¸ A12
8K Bytes
CS
PSEN\
RD\
WR\
Address Bus (A0 ¸ A15)
Data Bus (D0 ¸ D7)
Select other
EPROM/RAM
74HC138
Hình 1.5 : 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ø ROM, 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 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:
RAM
WR\
OE\
PSEN\
WR\
RD
Hình 1.6 : Overlapping the External code and data space
-Vaäy moät chöông trình coù theå ñöôïc taûi 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:
Reset
10 mF
8.2 KW
100W
+5V
- 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 baèng tay baèng moät phím nhaán thöôøng hôû, sô ñoà maïch reset nhö sau:
Hình 1.7 : Manual Reset
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. HOAÏ._.T ÑOÄNG TIMER CUÛA 8951:
1. Giôùi Thieäu:
- Boä ñònh thôøi cuûa Timer laø moät chuoãi caùc Flip Flop ñöôïc chia laøm 2, noù nhaän tín hieäu vaøo laø moät nguoàn xung clock, xung clock ñöôïc ñöa vaøo Flip Flop thöù nhaát laø xung clock cuûa Flip Flop thöù hai maø noù cuõng chia taàn soá clock naøy cho 2 vaø cöù tieáp tuïc.
Vì moãi taàng keá tieáp chia cho 2, neân Timer n taàng phaûi chia taàn soá clock ngoõ vaøo cho 2n. Ngoõ ra cuûa taàng cuoái cuøng laø clock cuûa Flip Flop traøn Timer hoaëc côø maø noù kieåm tra bôûi phaàn meàm hoaëc sinh ra ngaét. Giaù trò nhò phaân trong caùc FF cuûa boä Timer coù theå ñöôïc nghæ nhö ñeám xung clock hoaëc caùc söï kieän quan troïng bôûi vì Timer ñöôïc khôûi ñoäng. Ví duï Timer 16 bit coù theå ñeám ñeán töø FFFFH sang 0000H.
(LSB) MSB FLAG
0 1 2 3 4 5 6 7
D Q
Q0
D Q
Q1
D Q
Q2
D Q
Q3
Flag FF
Clock
Q0 (LSB)
Q1
Q2 (MSB)
Count
Flag
Hình 1.8 : Timer Flip-Flops
- Hoaït ñoäng cuûa Timer ñôn giaûn 3 bit ñöôïc minh hoïa nhö sau:
Hình 1.9 : Bieåu Ñoà Thôøi Gian
- Trong hình treân moãi taàng laø moät FF loaïi D phuû ñònh taùc ñoäng caïnh xuoáng ñöôïc hoaït ñoäng ôû mode chia cho 2 (ngoõ ra Q\ ñöôïc noái vaøo D). FF côø laø moät boä choát ñôn giaûn loaïi D ñöôïc set bôûi taàng cuoái cuøng trong Timer. Trong bieåu ñoà thôøi gian, taàng ñaàu ñoåi traïng thaùi ôû ½ taàn soá clock, taàng thöù hai ñoåi traïng thaùi ôû taàn soá ¼ taàn soá clock … Soá ñeám ñöôïc bieát ôû daïng thaäp phaân vaø ñöôïc kieåm tra laïi deã daøng bôûi vieäc kieåm tra caùc taàng cuûa 3 FF. Ví duï soá ñeám “4” xuaát hieän khi Q2=1, Q1=0, Q0=0 (410=1002).
- Caùc Timer ñöôïc öùng duïng thöïc teá cho caùc hoaït ñoäng ñònh höôùng. 8951 coù 2 boä Timer 16 bit, moãi Timer coù 4 mode hoaït ñoäng. Caùc Timer duøng ñeå ñeám giôø, ñeám caùc söï kieän caàn thieát vaø söï sinh ra toác ñoä cuûa toác ñoä Baud bôûi söï gaén lieàn Port noái tieáp.
- Moãi söï ñònh thôøi laø moät Timer 16 bit, do ñoù taàng cuoái cuøng laø taàng thöù 16 seõ chia taàn soá clock vaøo cho 216 = 65.536.
- Trong caùc öùng duïng ñònh thôøi, 1 Timer ñöôïc laäp trình ñeå traøn ôû moät khoaûng thôøi gian ñeàu ñaën vaø ñöôïc set côø traøn Timer. Côø ñöôïc duøng ñeå ñoàng boä chöông trình ñeå thöïc hieän moät hoaït ñoäng nhö vieäc ñöa tôùi 1 taàng caùc ngoõ vaøo hoaëc gôûi döõ lieäu ñeám ngoõ ra. Caùc öùng duïng khaùc coù söû duïng vieäc ghi giôø ñeàu ñeàu cuûa Timer ñeå ño thôøi gian ñaõ troâi qua hai traïng thaùi (ví duï ño ñoä roäng xung).Vieäc ñeám moät söï kieän ñöôïc duøng ñeå xaùc ñònh soá laàn xuaát hieän cuûa söï kieän ñoù, töùc thôøi gian troâi qua giöõa caùc söï kieän.
- Caùc Timer cuûa 8951 ñöôïc truy xuaát bôûi vieäc duøng 6 thanh ghi chöùc naêng ñaëc bieät nhö sau:
Timer SFR
Purpose
Address
Bit-Addressable
TCON
Control
88H
YES
TMOD
Mode
89H
NO
TL0
Timer 0 low-byte
8AH
NO
TL1
Timer 1 low-byte
8BH
NO
TH0
Timer 0 high-byte
8CH
NO
TH1
Timer 1 high-byte
8DH
NO
2. Thanh ghi mode timer tmod (TIMER MODE REGITER):
- Thanh ghi mode goàm hai nhoùm 4 bit laø: 4 bit thaáp ñaët mode hoaït ñoäng cho Timer 0 vaø 4 bit cao ñaët mode hoaït ñoäng cho Timer 1. 8 bit cuûa thanh ghi TMOD ñöôïc toùm taét nhö sau:
Bit
Name
Timer
Description
7
GATE
1
Khi GATE = 1, Timer chæ laøm vieäc khi INT1=1
6
C/T
1
Bit cho ñeám söï kieän hay ghi giôø
C/T = 1 : Ñeám söï kieän
C/T = 0 : Ghi giôø ñeàu ñaën
5
M1
1
Bit choïn mode cuûa Timer 1
4
M0
1
Bit choïn mode cuûa Timer 1
3
GATE
0
Bit coång cuûa Timer 0
2
C/T
0
Bit choïn Counter/Timer cuûa Timer 0
1
M1
0
Bit choïn mode cuûa Timer 0
0
M0
0
Bit choïn mode cuûa Timer 0
Hai bit M0 vaø M1 cuûa TMOD ñeå choïn mode cho Timer 0 hoaëc Timer 1.
M1
M0
MODE
DESCRIPTION
0
0
0
Mode Timer 13 bit (mode 8048)
0
1
1
Mode Timer 16 bit
1
0
2
Mode töï ñoäng naïp 8 bit
1
1
3
Mode Timer taùch ra :
Timer 0 : TL0 laø Timer 8 bit ñöôïc ñieàu khieån bôûi caùc bit cuûa Timer 0. TH0 töông töï nhöng ñöôïc ñieàu khieån bôûi caùc bit cuûa mode Timer 1.
Timer 1 : Ñöôïc ngöøng laïi.
- TMOD khoâng coù bit ñònh vò, noù thöôøng ñöôïc LOAD moät laàn bôûi phaàn meàm ôû ñaàu chöông trình ñeå khôûi ñoäng mode Timer. Sau ñoù söï ñònh giôø coù theå döøng laïi, ñöôïc khôûi ñoäng laïi nhö theá bôûi söï truy xuaát caùc thanh ghi chöùc naêng ñaëc bieät cuûa Timer khaùc.
3. Thanh ghi ñieàu khieån timer tcon (TIMER CONTROL REGISTER) :
Thanh ghi ñieàu khieån bao goàm caùc bit traïng thaùi vaø caùc bit ñieàu khieån bôûi Timer 0 vaø Timer 1. Thanh ghi TCON coù bit ñònh vò. Hoaït ñoäng cuûa töøng bit ñöôïc toùm taét nhö sau:
Bit
Symbol
Bit Address
Description
TCON.7
TF1
8FH
Côø traøn Timer 1 ñöôïc set bôûi phaàn cöùng ôû söï traøn, ñöôïc xoùabôûi phaàn meàm hoaëc bôûi phaàn cöùng khi caùc vectôxöû lyù ñeán thuû tuïc phuïc vuï ngaét ISR
TCON.6
TR1
8EH
Bit ñieàu khieån chaïy Timer 1 ñöôïc set hoaëc xoùa bôûi phaàn meàm ñeå chaïy hoaëc ngöng chaïy Timer.
TCON.5
TF0
8DH
Côø traøn Timer 0(hoaït ñoäng töông töï TF1)
TCON.4
TR0
8CH
Bit ñieàu khieån chaïy Timer 0 (gioáng TR1)
TCON.3
IE1
8BH
Côø kieåu ngaét 1 ngoaøi. Khi caïnh xuoáng xuaát hieän treân INT1 thì IE1 ñöôïc xoùa bôûi phaàn meàm hoaëc phaàn cöùng khi CPU ñònh höôùng ñeán thuû tuïc phuïc vuï ngaét ngoaøi.
TCON.2
IT1
8AH
Côø kieåu ngaét 1 ngoaøi ñöôïc set hoaëc xoùa baèng phaán meàm bôûi caïnh kích hoaït bôûi söï ngaét ngoaøi.
TCON.1
IE0
89H
Côø caïnh ngaét 0 ngoaøi
TCON
IT0
88H
Côø kieåu ngaét 0 ngoaøi.
4. Caùc mode vaø côø traøn (TIMER MODES AND OVERFLOW) :
- 8951 coù 2ø Timer laø Timer 0 vaø timer 1. Ta duøng kyù hieäu TLx vaø Thx ñeå chæ 2 thanh ghi byte thaáp vaø byte cao cuûa Timer 0 hoaëc Tmer 1.
TLx (5 bit)
THx (8 bit)
TFx
Timer Clock
4.1. Mode Timer 13 bit (MODE 0) :
Overflow
- Mode 0 laø mode Timer 13 bit, trong ñoù byte cao cuûa Timer (Thx) ñöôïc ñaët thaáp vaø 5 bit troïng soá thaáp nhaát cuûa byte thaáp Timer (TLx) ñaët cao ñeå hôïp thaønh Timer 13 bit. 3 bit cao cuûa TLx khoâng duøng.
TLx (8 bit)
THx (8 bit)
TFx
Timer Clock
4.2. Mode Timer 16 bit (MODE 1):
Overflow
- Mode 1 laø mode Timer 16 bit, töông töï nhö mode 0 ngoaïi tröø Timer naøy hoaït ñoäng nhö moät Timer ñaày ñuû 16 bit, xung clock ñöôïc duøng vôùi söï keát hôïp caùc thanh ghi cao vaø thaáp (TLx, THx). Khi xung clock ñöôïc nhaän vaøo, boä ñeám Timer taêng leân 0000H, 0001H, 0002H, . . ., vaø moät söï traøn seõ xuaát hieän khi coù söï chuyeån treân boä ñeám Timer töø FFFH sang 0000H vaø seõ set côø traøn Time, sau ñoù Timer ñeám tieáp.
- Côø traøn laø bit TFx trong thanh ghi TCON maø noù seõ ñöôïc ñoïc hoaëc ghi bôûi phaàn meàm.
- Bit coù troïng soá lôùn nhaát (MSB) cuûa giaù trò trong thanh ghi Timer laø bit 7 cuûa THx vaø bit coù troïng soá thaáp nhaát (LSB) laø bit 0 cuûa TLx. Bit LSB ñoåi traïng thaùi ôû taàn soá clock vaøo ñöôïc chia 216 = 65.536.
- Caùc thanh ghi Timer TLx vaø Thx coù theå ñöôïc ñoïc hoaëc ghi taïi baát kyø thôøi ñieåm naøo bôûi phaàn meàm.
4..3. Mode töï ñoäng naïp 8 bit (MODE 2) :
TL x (8 bit)
TFx
TH x (8 bit)
Timer Clock
Overflow
Reload
Mode 2 laø mode töï ñoäng naïp 8 bit, byte thaáp TLx cuûa Timer hoaït ñoäng nhö moät Timer 8 bit trong khi byte cao THx cuûa Timer giöõ giaù trò Reload. Khi boä ñeám traøn töø FFH sang 00H, khoâng chæ côø traøn ñöôïc set maø giaù trò trong THx cuõng ñöôïc naïp vaøo TLx: Boä ñeám ñöôïc tieáp tuïc töø giaù trò naøy leân ñeán söï chuyeån traïng thaùi töø FFH sang 00H keá tieáp vaø cöù theá tieáp tuïc. Mode naøy thì phuø hôïp bôûi vì caùc söï traøn xuaát hieän cuï theå maø moãi luùc nghæ thanh ghi TMOD vaø THx ñöôïc khôûi ñoäng.
4.4 Mode Timer taùch ra (MODE 3):
TL1 (8 bit)
TH1 (8 bit)
TL1 (8 bit)
TH0 (8 bit)
TF0
TF1
Timer Clock
Timer Clock
Timer Clock
Overflow
Overflow
Overflow
- Mode 3 laø mode Timer taùch ra vaø laø söï khaùc bieät cho moãi Timer.
- Timer 0 ôû mode 3 ñöôïc chia laø 2 timer 8 bit. TL0 vaø TH0 hoaït ñoäng nhö nhöõng Timer rieâng leû vôùi söï traøn seõ set caùc bit TL0 vaø TF1 töông öùng.
- Timer 1 bò döøng laïi ôû mode 3, nhöng coù theå ñöôïc khôûi ñoäng bôûi vieäc ngaét noù vaøo moät trong caùc mode khaùc. Chæ coù nhöôïc ñieåm laø côø traøn TF1 cuûa Timer 1 khoâng bò aûnh höôûng bôûi caùc söï traøn cuûa Timer 1 bôûi vì TF1 ñöôïc noái vôùi TH0.
- Mode 3 cung caáp 1 Timer ngoaïi 8 bit laø Timer thöù ba cuûa 8951. Khi vaøo Timer 0 ôû mode 3, Timer coù theå hoaït ñoäng hoaëc taét bôûi söï ngaét noù ra ngoaøi vaø vaøo trong mode cuûa chính noù hoaëc coù theå ñöôïc duøng bôûi Port noái tieáp nhö laø moät maùy phaùt toác ñoä Baud, hoaëc noù coù theå duøng trong höôùng naøo ñoù maø khoâng söû duïng Interrupt.
5. Caùc nguoàn xung clock (CLOCK SOURCES):
Coù hai nguoàn xung clock coù theå ñeám giôø laø söï ñònh giôø beân trong vaø söï ñeám söï kieän beân ngoaøi. Bit C/T trong TMOD cho pheùp choïn 1 trong 2 khi Timer ñöôïc khôûi ñoäng.
On Chip
Osillator
¸12
C/T
T0 or T1
pin
Timer
Clock
0 = Up (internal Timing)
1 = Down (Event Counting)
Crystal
Hình 1.10 : Clock Source.
5.1 Söï baám giôø beân trong (Interval Timing):
- Neáu bit C/T = 0 thì hoaït ñoäng cuûa Timer lieân tuïc ñöôïc choïn vaøo boä Timer ñöôïc ghi giôø töø dao ñoäng treân Chip. Moät boä chia 12 ñöôïc theâm vaøo ñeå giaûm taàn soá clock ñeán 1 giaù trò phuø hôïp vôùi caùc öùng duïng. Caùc thanh ghi TLx vaø THx taêng ôû toác ñoä 1/12 laàn taàn soá dao ñoäng treân Chip. Neáu duøng thaïch anh 12MHz thì seõ ñöa ñeán toác ñoä clock 1MHz.
- Caùc söï traøn Timer sinh ra sau moät con soá coá ñònh cuûa nhöõng xung clock, noù phuï thuoäc vaøo giaù trò khôûi taïo ñöôïc LOAD vaøo caùc thanh ghi THx vaø TLx.
5.2 Söï ñeám caùc söï kieän (Event Counting):
- Neáu bit C/T = 1 thì boä Timer ñöôïc ghi giôø töø nguoàn beân ngoaøi trong nhieàu öùng duïng, nguoàn beân ngoaøi naøy cung caáp 1 söï ñònh giôø vôùi 1 xung treân söï xaûy ra cuûa söï kieän. Söï ñònh giôø laø söï ñeám söï kieän. Con soá söï kieän ñöôïc xaùc ñònh trong phaàn meàm bôûi vieäc ñoïc caùc thanh ghi Timer. Tlx/THx, bôûi vì giaù trò 16 bit trong caùc thanh naøy taêng leân cho moãi söï kieän.
- Nguoàn xung clock beân ngoaøi ñöa vaøo chaân P3.4 laø ngoõ nhaäp cuûa xung clock bôûi Timer 0 (T0) vaø P3.5 laø ngoõ nhaäp cuûa xung clock bôûi Timer 1 (T1).
- Trong caùc öùng duïng ñeám caùc thanh ghi Timer ñöôïc taêng trong ñaùp öùng cuûa söï chuyeån traïng thaùi töø 1 sang 0 ôû ngoõ nhaäp Tx. Ngoõ nhaäp beân ngoaøi ñöôïc thöû trong suoát S5P2 cuûa moïi chu kyø maùy: Do ñoù khi ngoõ nhaäp ñöa tôùi möùc cao trong moät chu kyø vaø möùc thaáp trong moät chu kyø keá tieáp thì boä ñeám taêng leân moät. Giaù trò môùi xuaát hieän trong caùc thanh ghi Timer trong suoát S5P1 cuûa chu kyø theo sau moät söï chuyeån ñoåi. Bôûi vì noù chieám 2 chu kyø maùy (2ms) ñeå nhaän ra söï chuyeån ñoåi töø 1 sang 0, neân taàn soá beân ngoaøi lôùn nhaát laø 500KHz neáu dao ñoäng thaïch anh 12 MHz.
6. Söï baét ñaàu, keát thuùc vaø söï ñieàu khieån caùc timer (STARTING, STOPPING AND CONTROLLING THE TIMER):
- Bit TRx trong thanh ghi coù bit ñònh vò TCON ñöôïc ñieàu khieån bôûi phaàn meàm ñeå baét ñaàu hoaëc keát thuùc caùc Timer. Ñeå baéêt ñaàu caùc Timer ta set bit TRx vaø ñeå keát thuùc Timer ta Clear TRx. Ví duï Timer 0 ñöôïc baét ñaàu bôûi leänh SETB TR0 vaø ñöôïc keát thuùc bôûi leänh CLR TR0 (bit Gate= 0). Bit TRx bò xoùa sau söï reset heä thoáng, do ñoù caùc Timer bò caám baèng söï maëc ñònh.
- Theâm phöông phaùp nöõa ñeå ñieàu khieån caùc Timer laø duøng bit GATE trong thanh ghi TMOD vaø ngoõ nhaäp beân ngoaøi INTx. Ñieàu naøy ñöôïc duøng ñeå ño caùc ñoä roäng xung. Giaû söû xung ñöa vaøo chaân INT0 ta khôûi ñoäng Timer 0 cho mode 1 laø mode Timer 16 bit vôùi TL0/TH0 = 0000H, GATE = 1, TR0 = 1. Nhö vaäy khi INT0 = 1 thì Timer “ñöôïc môû coång” vaø ghi giôø vôùi toác ñoä cuûa taàn soá 1MHz. Khi INT0 xuoáng thaáp thì Timer “ñoùng coång” vaø khoaûng thôøi gian cuûa xung tính baèng ms laø söï ñeám ñöôïc trong thanh ghi TL0/TH0.
INTO (P3.2)
16 Bit
0 = Up 0 = Up
1 = Down 1 = Down
On Chip
Osillator
¸ 12
TL0
TH0
TF0
C/T
TR0
GATE
12 MHz
T0 (P3.4)
Hình 1.11 : Timer Operating Mode 1.
7. Söï khôûi ñoäng vaø truy xuaát caùc thanh ghi timer:
- Caùc Timer ñöôïc khôûi ñoäng 1 laàn ôû ñaàu chöông trình ñeå ñaët mode hoaït ñoäng cho chuùng. Sau ñoù trong chöông trình caùc Timer ñöôïc baét ñaàu, ñöôïc xoùa, caùc thanh ghi Timer ñöôïc ñoïc vaø caäp nhaät . . . theo yeâu caàu cuûa töøng öùng duïng cuï theå.
Mode Timer TMOD laø thanh ghi ñaàu tieân ñöôïc khôûi gaùn, bôûi vì ñaët mode hoaït ñoäng cho caùc Timer. Ví duï khôûi ñoäng cho Timer 1 hoaït ñoäng ôû mode 1 (mode Timer 16bit) vaø ñöôïc ghi giôø baèng dao ñoäng treân Chip ta duøng leänh: MOV TMOD,# 00001000B.
Trong leänh naøy M1 = 0, M0 = 1 ñeå vaøo mode 1 vaø C/T = 0, GATE=0 ñeå cho pheùp ghi giôø beân trong ñoàng thôøi xoùa caùc bit mode cuûa Timer 0. Sau leänh treân Timer vaãn chöa ñeám giôø, noù chæ baét ñaàu ñeám giôø khi set bit ñieààu khieåân chaïy TR1 cuûa noù.
- Neáu ta khoâng khôûi gaùn giaù trò ñaàu cho caùc thanh ghi TLx/THx thì Timer seõ baét ñaàu ñeám töø 0000H leân vaø khi traøn töø FFFFH sang 0000H noù seõ baét ñaàu traøn TFx roài tieáp tuïc ñeám töø 0000H leân tieáp . . .
- Neáu ta khôûi gaùn giaù trò ñaàu cho TLx/THx, thì Timer seõ baét ñaàu ñeám töø giaù trò khôûi gaùn ñoù leân nhöng khi traøn töø FFFFH sang 0000H laïi ñeám töø 0000H leân.
- Chuù yù raèng côø traøn TFx töï ñoäng ñöôïc set bôûi phaàn cöùng sau moãi söï traøn vaø seõ ñöôïc xoùa bôûi phaàn meàm. Chính vì vaäy ta coù theå laäp trình chôø sau moãi laàn traøn ta seõ xoùa côø TFx vaø quay voøng laëp khôûi gaùn cho TLx/THx ñeå Timer luoân luoân baét ñaàu ñeám töø giaù trò khôûi gaùn leân theo yù ta mong muoán.
- Ñaëc bieät nhöõng söï khôûi gaùn nhoû hôn 256 ms, ta seõ goïi mode Timer töï ñoäng naïp 8 bit cuûa mode 2. Sau khi khôûi gaùn giaù trò ñaàu vaøo THx, khi set bit TRx thì Timer seõ baét ñaàu ñeám giaù trò khôûi gaùn vaø khi traøn töø FFH sang 00H trong TLx, côø TFx töï ñoäng ñöôïc set ñoàng thôøi giaù trò khôûi gaùn maø ta khôûi gaùn cho Thx ñöôïc naïp töï ñoäng vaøo TLx vaø Timer laïi ñöôïc ñeám töø giaù trò khôûi gaùn naøy leân. Noùi caùch khaùc, sau moãi traøn ta khoâng caàn khôûi gaùn laïi cho caùc thanh ghi Timer maø chuùng vaãn ñeám ñöôïc laïi töø giaù trò ban ñaàu.
8. Söï ñoïc thanh ghi timer treân tuyeán:
- Trong moät soá öùng duïng caàn thieát ñoïc giaù trò trong caùc thanh ghi Timer treân tuyeán, coù moät vaán ñeà tieàm naêng ñôn giaûn ñeå baûo veä laïi phaàn meàm. Bôûi vì 2 thanh ghi Timer phaûi ñöôïc ñoïc, neân “loãi giai ñoaïn” coù theå xuaát hieän neáu byte traøn vaø byte cao giöõa 2 hoaït ñoäng ñoïc. Moät giaûi phaùp ñeå khaéc phuïc laø ñoïc byte cao tröôùc, sau ñoù ñoïc byte thaáp, vaø ñoïc laïi byte cao: Neáu byte cao thay ñoåi thì laëp laïi caùc hoaït ñoäng ñoïc.
CHÖÔNG II
GIAO TIEÁP MAÙY TÍNH
I.CAÙC PHÖÔNG PHAÙP ÑIEÀU KHIEÅN VAØO RA
1.Vaøo ra ñieàu khieån baèng chöông trình
Thieát bò ngoaïi vi ñöôïc gheùp tôùi Bus cuûa heä thoáng vi ñieàu khieån thoâng qua caùc phaàn thích öùng veà coâng ngheä cheá taïo vaø logic. Thích öùng veà coâng ngheä cheá taïo laø ñieàu chænh coâng ngheä saûn xuaát thieát bò ngoaïi vi vaø coâng ngheä saûn xuaát cuûa maïch trong heä vi ñieàu khieån. Thích öùng veà logic laø nhieäm vuï taïo tín hieäu ñieàu khieån ngoaïi vi töû tín hieäu treân Bus heä thoáng.
Trong heä vi ñieàu khieån moät vuøng nhôù duøng laøm nôi chöùa ñòa chæ coång vaøo/ra vaø CPU xuaát hoaëc nhaäp döõ lieäu töø caùc coång vaøo/ra naøy baèng caùc leänh xuaát/nhaäp IN/OUT. Luùc naøy coång vaøo ra ñöôïc xem nhö moät thanh ghi ngoaøi, chuùng ñöôïc vieát vaøo hoaëc ñoïc ra nhö oâ nhôù RAM qua hai leänh treân. Ñeå phaân bieät höôùng xuaát hoaëc nhaäp döõ lieäu töø coång vaøo ra CPU phaùt ra tín hieäu ñieàu khieån ñoïc hoaëc vieát. Deå phaân bieät vuøng nhôù vôùi thieát bò vaøo ra CPU phaùt ra tín hieäu ñieàu khieån IO/M. Khi coù caùc leänh naøy thì leänh IN/OUT môùi coù taùc duïng.
Ngoaøi ra caùc leänh qui cheá ñoä nhôù, cuõng nhö khaû naêng trao ñoåi döõ lieäu giöõa thieát bò ngoaøi vaø heä vi ñieàu khieån. Luùc ñoù coång vaøo ra ñöôïc gaùn nhö ñòa chæ oâ nhôù cuûa boä nhôù. Caùc thanh ghi lieân quan ñeán coång vaøo ra ñöôïc xem nhö ngaên nhôù. Khi boä vi ñieàu khieån goïi ñòa chæ vaø xung ñieàu khieån ñoïc hay vieát boä nhôù, noù khoâng caàn xaùc ñònh nôi gôûi laø boä nhôù hay thieát bò vaøo ra. Noù chæ ñoøi hoûi nôi gôûi döõ lieäu vaøo trong khoaûng thôøi gian cho pheùp. Boä logic beân ngoaøi seõ giaûi maõ ñòa chæ keát hôïp vôùi xung MR, MW ñeå choïn thieát bò maø khoâng phaân bieät ngaên nhôù hay thieát bò vaøo ra.
2.Vaøo ra ñieàu khieån baèng ngaét:
Vôùi phöông phaùp ñieàu khieån vaøo ra baèng chöông trình CPU phaûi lieân tuïc kieåm tra traïng thaùi cuûa thieát bò ngoaïi vi ñeán khi saún saøng. Ñoù laø söï laõng phí thôøi gian cuûa CPU vaø laøm cho chöông trình daøi vaø phöùc taïp. Khi boä vi ñieàu khieån coù nhieàu thieát bò ngoaïi vi CPU khoâng ñaùp öùng ñöôïc nhu caàu cuûa chuùng. Coù theå ñaùp öùng ñöôïc yeâu caàu ngoaïi vi nhanh choùng vaø khoâng teo trình töï nhö ñònh trööôùc nhôø cô caáu ngaét cuûa CPU.
Nhôø tính chaát ñaùp öùng ngaét töùc thôøi cuûa caùc vi ñieàu khieån, khi coù yeâu caàu ngaét töø thieát bò ngoaïi vi. Do ñoù caùc ngaét thöôøng ñöôïc duøng ôû nhöõng tröôøng hôïp yeâu caàu ñaùp öùng nhanh, thôøi gian traû lôøi ngaén thöïc hieän ôû baát cöù thôøi ñieåm naøo. Khi ñoù CPU phaûi chuyeån ñeán chöông trình con phuïc vuï yeâu caàu ngaét ôû cuoái baát kyø leänh naøo trong chöông trình chính. Caùc chöông trình con phuïc vuï ngaét coù theå löu giöõ noäi dung caùc thanh ghi vaø khoâi phuïc laïi khi thöïc hieän xong chöông trình phuïc vuï ngaét vaø tröôùc khi trôû laïi chöông trình chính.
Phaàn cöùng naøy trôû neân phöùc taïp do phaûi giaûi quyeát öu tieân veà vaán ñeà maõ hoùa. Khi söû duïng heä ngaét ta xeùt ñeán caùc vaán ñeà sau:
Yeâu caàu ngaét: Kieåm tra ngaét ôû cuoái chu kyø leänh, moät chu kyø leänh coù theå keùo daøi neân tin hieäu yeâu caàu ngaét thöôøng ñöôïc choát laïi cho ñeán khi boä vi ñieàu khieån ghi nhaän. Ta coù theå duøng ñaàu vaøo ngaét cuûa vi ñieàu khieån cho nhieàu thieát bò ngoaïi vi nhöng CPU khoâng xaùc ñònh ñöôïc nguoàn yeâu caàu ngaét.
Chuyeån ñieàu kieän ngaét ñeán phuïc vuï ngaét : tuøy vaøo cheá ñoä ngaét, loaïi ñaàu vaøo ngaét, döõ lieäu vaøo vaø hoï vi ñieàu khieån ñöôïc chuyeån sang chöông trình phuïc vuï ngaét theo moãi caùch khaùc nhau.
Caát giöõ khoâi phuïc traïng thaùi: Taát caû caùc vi ñieàu khieån khi thöïc hieän ngaét phaûi töï ñoäng ngaét caát giöõ moät traïng thaùi ñieàu khieån, noù laø noäi dung thanh ghi boä ñeám chöông trình PC. Phaàn coøn laïi cuûa traïng thaùi ñöôïc caát giöõ tuøy theo yeâu caàu cuï theå cuûa phaàn meàm.
*Coù hai phöông phaùp caát giöõ traïng thaùi:
+ Duøng ngaên xeáp: Ñòa chæ ngaên xeáp ñöôïc ñieàu chænh vaø nhôù ôû thanh ghi con troû ngaên xeáp.
+ Trao ñoåi giöõa hai thanh ghi: chöông trình con phuïc vuï ngaét ñöôïc goïi ñeán baèng moät leänh. Khi ñoù CPU chuyeån sang laøm vieäc ôû thanh ghi thöù hai.
Xaùc ñònh nguoàn ngaét:
+ Phöông phaùp hoûi voøng: Thöù töï chính laø thöù töï öu tieân. Boä vi ñieàu khieån hoûi voøng khi chaéc chaén coù moät thieát bò yeâu caàu ngaét.
+ Phöông phaùp taïo vectô hoûi voøng: taát caû caùc nguoàn ngaét ñöôïc maõ hoùa ñeå taïo vectô ngaét. Vectô ngaét ñöôïc hieåu nhö moät phaàn cuûa ñòa chæ, phaân nhaùnh ñeán chöông trình con phuïc vuï ngaét hoaëc moät leänh maø vi ñieàu khieån phaûi thöïc hieän trong chu kyø leänh keá tieáp. Vectô ngaét ñöôïc ñöa vaøo Bus döõ lieäu baèng leänh ñieàu khieån cuûa CPU.
Öu tieân: vaán ñeà öu tieân trong thôøi ñieåm coù nhieàu yeâu caàu ngaét, ñeå döõ lieäu vaøo ra cuûa heä thoáng khoâng bò xaùo troän, thöôøng moãi thieát bi ngoaïi vi ñöôïc gaùn moät möùc öu tieân coá ñònh. CPU phuïc vuï theo möùc öu tieân giaûm daàn. Trong maïch ñieàu khieån ngaét, möùc öu tieân ngaét coù taùm möùc ñöôïc maõ hoùa töø 3 bit. Maõ ñoù ñöôïc so saùnh vôùi noäi dung öu tieân maø ngöôøi xöû duïng naïp vaøo chöông trình. Neáu möùc öu tieân cao hôn möùc qui ñònh thì yeâu caàu ngaét ñöôïc cho pheùp CPU ngaét.
Cho pheùp ngaét vaø caám ngaét: coù theå ñieàu khieån caùc ngaét vi ñieàu khieån baèng phaàn meàm. Nghóa laø ta coù theå thöïc hieän cho pheùp ngaét haëc caám ngaét vi ñieàu khieån baèng caùch thieát laäp cô ñieàu khieån baèng phaàn meàm.
Boä vi ñieàu khieån töï ñoäng caám ngaét trong caùc tröôøng hôïp sau:
+Khôûi ñoäng heä thoáng.
+Sau khi ngaét.
3.Vaøo ra ñieàu khieån baèng thaâm nhaäp tröïc tieáp (DMA).
Thaâm nhaäp tröïc tieáp laø phöông phaùp vaøo ra döõ lieäu nhanh nhaát baèng phaàn cöùng. Khi chueån döõ lieäu CPU khoâng caàn phaûi ñoïc, giaûi maõ vaø thöïc hieän caùc leänh chuyeån döõ lieäu maø noù chuyeån quyeàn ñieàu khieån caùc Bus cho DMAC. DMAC taïo ñòa chæ caùc tín hieäu caàn ñoïc.
Ñeå thöïc hieän moät pheùp chuyeån ñoåi DMAC moãi DMAC phaûi giaûi quyeát caùc vaán ñeà sau.
+ Thoâng baùo CPU yeâu caàu thöïc hieän DMAC.
+ Ñieàu khieån Bus vaø khoâng gaây aûnh höôûng ñeán hoaït ñoäng bình thöôøng cuûa CPU vaø khoâng gaây xung ñoät ôû Bus.
+ Xaùc ñònh ñòa chæ soá töø ñaõ chuyeån ñoåi
Ñeå thöïc hieän vieäc chuyeån ñoåi baèng caùch thaâm nhaäp tröïc tieáp, phöông phaùp thoâng duïng nhaát laø baét CPU töï treo thay vì yeâu caàu ngaét CPU. Thieát bò yeâu caàu ñeán DMAC khi nhaän ñöôïc tín hieäu yeâu caàu ngaét, DMAC taïo tín hieäu HOLD ñeán CPU. CPU döïa vaøo tín hieäu HOLD khi thöïc hieän chu kyø cuoái cuøng cuûa leänh hieän taïi sau ñoù töï treo vaø thoâng baùo ñeán DMAC baèng tín hieäu HALT. Khi nhaän ñöôïc tín hieäu traû lôøi HALT cuûa CPU, DMAC laáy quyeàn ñieàu khieån Bus, taïo ñòa chæ, ghi nhaän soá lieäu cuûa thieát bò ngoaïi vi baèng DACK. Soá lieäu ñöôïc chuyeån tröïc tieáp giöõa thieát bò ngoaïi vi vaø boä nhôù.
II.SÔ LÖÔÏC VEÀ CAÙCH GIAO TIEÁP GIÖÕA MAÙY TÍNH VAØ THEÁT BÒ NGOAÏI VI
Coù ba caùch giao tieáp giöõa maùy tính vaø thieát bò ngoaïi vi. Tuyø theo tröôøng hôïp öùng duïng cuï theå maø choïn caùch giao tieáp thích hôïp.
1.Giao tieáp baèng SLOT-CARD.
Trong maùy tính treân board maïch heä thoáng thöôøng cheá taïo saún caùc Slot chaèm muïc ñích môû roäng boä nhôù, cuõng nhö môû roäng phaïm vi öùng duïng cuûa maùy vi tính baèng caùch gaén theâm treân caùc board môû roäng vaøo caùc Slot naøy.
Moãi Slot ñeàu coù caùc Bus döõ lieäu, Bus ñòa chæ vaø caùc ñöôøng tín hieäu ñieàu khieån nhö: CLK, IOW, IOR,… Do ñoù vieäc thieát keá caùc SLOT-CARD töø caùc ñaàu caám Slot seõ ñôn giaûn soá linh kieän ít vaø taän duïng ñöôïc caùc nguoàn ñieän cuûa maùy vi tính (±5V, ±12V) neân giaù thaønh reû, deã daøng ñöa tín hieäu ñieàu khieån ra ngoaøi vaø toác ñoä truyeàn nhanh.
Beân caïnh nhöõng öu ñieåm noù coù moät soá nhöôïc ñieåm sau:
+ SLOT-CARD phaûi caém vaøo caùc Slot treân Board maïch heä thoáng neân phaûi gôõ naép maùy ra.
+ Phaïm vi truyeàn tín hieäu gaàn vaø caùc daïng phöùc taïp. Trong moät soá tröôøng hôïp khoâng thöïc hieän ñöôïc.
Vì vaäy khi söû duïng SLOT-CARD ñeå giao tieáp vôùi thieát bò ngoaïi vi phaûi caân nhaéc kyõ göa öu vaø khuyeát ñieåm. Tuyø theo muïc ñích söû duïng maø choïn caùch thích hôïp.
2.Giao tieáp baèng coång maùy in (Giao tieáp song song)
Port giao tieáp maùy in duøng ñeå giao tieáp vôùi maùy in. Trong caùch giao tieáp naøy döõ lieäu ñôïc truyeàn song song goàm 8 Bit vaø moät soá tín hieäu baét tay. Ñaàu noái (conecter) goàm 25 chaân trong ñoù coù 8 chaân ñöôïc noái vôùi 8 ñöôøng döõ lieäu, moät soá chaân coøn laïi ñöôïc noái vôùi tín hieäu baét tay (Hand-Shaking). Taát caû caùc ñöôøng döõ lieäu vaø tín hieäu ñieàu khieån ñeàu ôû möùc logic töông thích vôùi möùc TTL. Hôn nöõa ngöôøi laäp trình coù theå cho pheùp hay khoâng cho pheùp söû duïng caùc ngaét ôû ngoõ vaøo, neân vieäc giao tieáp ñöôïc deã daøng. Tuy nhieân vôùi möùc logic TTL thì khoâng theå truyeàn ñi xa döôïc maø chæ truyeàn döôïc khoaûng ngaén, caùp truyeàn cuõng phöùc taïp hôn coång COM. Ñaây laø nhöôïc ñieåm cuûa coång maùy in.
3.Giao tieáp baèng coång COM (Giao tieáp noái tieáp)
Khaùc vôùi coång maùy in, coång COM laø coång truyeàn döõ lieäu noái tieáp. Noù thöôøng ñöôïc duøng ñeå giao tieáp vôùi thieát bò ngoaïi vi coù toác ñoä xöû lyù döõ lieäu chaäm nhö: chuoät hoaëc moderm … coång naøy giao tieáp theo tieâu chuaån RS232.
Döõ lieäu ñöôïc truyeàn döôùi daïng noái tieáp theo töøng Bit moät. Toác ñoä truyeàn Bit do ngöôøi laäp trình quyeát ñònh (thöôøng laø 1200 bps, 2400bps, 4800bps, 9600bps, …) chieàu daøi döõ lieäu coù theå laø 5, 6, 7, hoaëc 8 Bit keøm theo caùc Bit Start, Stop, parity taïo thaønh moät khung goïi la Frame. Coång naøy goà caùc ñöôøng phaùt, ñöôøng thu vaø ñöôøng mass chung. Vì giao tieáp vôùi tieâu chuaån RS232 neân khoaûng truyeàn xa hôn so vôùi caùc truyeàn song song nhö coång maùy in nhöng noù coù toác ñoä truyeàn raát chaäm.
CHÖÔNG III
KHAÛO SAÙT VI MAÏCH 8279 QUEÙT BAØN PHÍM VAØ HIEÅN THÒ
I. CAÁU TRUÙC IC 8279
1 40
5
35
8279
10
30
15
25
20 21
RL7-RL0
DATA
SHIFT
CNTR/STB
RD\
WR\
CS\
A0
RESET
CLK
Û
SLO-SL3
OUT A3-A0
OUT B3-B0
BD\
Ü
Þ
Þ
Þ
Key data
display data
Scan
Sô Ñoà Chaân
Sô Ñoà Logic
RL2 VCCs
RL3 RL1 CPU interface
CLK RL0
IRQ CNTL/STB
RL4 SHIFT
RL5 SL3
RL6 SL2
RL7 SL1
RESET SL0
RD/ OUT B0
WR/ OUT B1
D0 OUT B2
D1 OUT B3
D2 OUT A0
D3 OUT A1
D4 OUT A2
D5 OUT A3
D6 BD/
D7 CS/
GND A0
Hình 1.12 : Sô Ñoà Chaân Vaø Sô Ñoà Logic
Teân caùc chaân 8279:
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\, Resert, 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æ Ao coù chöùc naêng löïa choïn nhö sau:
Ao = O2 : 8279 xem döõ lieäu töø vi ñieàu khieån gôûi ñeán laø döõ lieäu ñeå hieån thò.
Ao =12 : 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.
+ AI (automatically increment): ôû möùc moät 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 AI= 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.
+ AI (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 cho vieäc ñoïc byte döõ lieäu. Neáu AI=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.
+ AI (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 AI=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
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 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 ms) noù klhoâ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ï._.CALL CONVERT
102C E540 30 MOV A,40H
;LAY NOI DUNG O NHO 40H
102E 23 31 RL A
102F 44F1 32 ORL A,#0F1H
;OR VOI F1,KET QUA LAN DAU LA F1,F3,F7,FF
1031 F540 33 MOV 40H,A
1033 E533 34 MOV A,33H
1035 4A 35 ORL A,R2
1036 1201A1 36 LCALL CON4_8
1039 021021 37 LJMP X4
38 ;XU LY PHIM CHUC NANG
103C EA 39 X3: MOV A,R2
103D 020600 40 LJMP X5
41 ;PHIM CHUC NANG
0600 42 ORG 0600H
0600 B4172D 43 X5: CJNE A,#17H,X6
0603 853182 44 MOV DPL,31H
;NEU DUNG LA PHIM KEY_UP MA 17
0606 853083 45 MOV DPH,30H
0609 E537 46 MOV A,37H
060B F0 47 MOVX @DPTR,A
060C A3 48 INC DPTR
060D E0 49 X9: MOVX A,@DPTR
060E 858231 50 MOV 31H,DPL
MCS-51 MACRO ASSEMBLER BINH 02/15/:0 PAGE 2
LOC OBJ LINE SOURCE
0611 858330 51 MOV 30H,DPH
0614 F533 52 MOV 33H,A
0616 7540F3 53 MOV 40H,#0F3H
0619 1201A1 54 LCALL CON4_8
061C 7540F0 55 MOV 40H,#0F0H
061F 753300 56 MOV 33H,#00H
0622 753200 57 MOV 32H,#00H
0625 021021 58 LJMP X4
59
0630 60 ORG 0630H
0630 B41617 61 X6: CJNE A,#16H,X7
; NEU DUNG LA PHIM KEY_DOWN
0633 853182 62 MOV DPL,31H
0636 853083 63 MOV DPH,30H
0639 1582 64 DEC DPL
063B AD82 65 MOV R5,82H
063D BDFF02 66 CJNE R5,#0FFH,X8
0640 1583 67 DEC DPH
0642 02060D 68 X8: LJMP X9
;XU LY GIONG PHIM TANG
69
064A 70 ORG 064AH
064A B41513 71 X7: CJNE A,#15H,X10 ;PHIM CHUC NANG S
064D 853382 72 MOV DPL,33H
0650 853283 73 MOV DPH,32H
0653 02060D 74 LJMP X9
75
0660 76 ORG 0660H
0660 B41230 77 X10: CJNE A,#12H,X11
;NEU DUNG LA PIM CHUC NANG P
0663 758339 78 MOV DPH,#39H ;MA CHU C
0666 758273 79 MOV DPL,#73H ;MA CHU P
0669 1206A0 80 LCALL VVV1
066C 753A48 81 MOV 3AH,#48H
066F 1205D0 82 LCALL DISPLAY
0672 905FF0 83 MOV DPTR,#5FF0H
0675 E533 84 MOV A,33H
0677 F0 85 MOVX @DPTR,A
0678 905FF1 86 MOV DPTR,#5FF1H
067B E532 87 MOV A,32H
067D F0 88 MOVX @DPTR,A
067E 7540F0 89 MOV 40H,#0F0H
0681 753300 90 MOV 33H,#00H
0684 753200 91 MOV 32H,#00H
0687 021021 92 LJMP X4
93
0693 94 ORG 0693H
0693 020720 95 X11: LJMP X12
96
0720 97 ORG 0720H
0720 B4102D 98 X12: CJNE A,#10H,X13
0723 905FF2 99 MOV DPTR, #5FF2H
0726 7402 100 MOV A,#02H
;NAP MA 02 CUA LENH NHAY VAO O NHO 5FF2H
0728 F0 101 MOVX @DPTR,A
0729 905FF1 102 MOV DPTR,#5FF1H
;LAY NOI DUNG CUA O NHO 5FF1H DUA VAO 5FF3H
072C E0 103 MOVX A,@DPTR
072D 905FF3 104 MOV DPTR,#5FF3H
0730 F0 105 MOVX @DPTR,A
MCS-51 MACRO ASSEMBLER BINH 02/15/:0 PAGE 3
LOC OBJ LINE SOURCE
0731 905FF0 106 MOV DPTR,#5FF0H
;LAY NOI DUNG CUA O NHO 5FF0H DUA VAO O NHO 5FF4H
0734 E0 107 MOVX A,@DPTR
0735 905FF4 108 MOV DPTR,#5FF4H
0738 F0 109 MOVX @DPTR,A
0739 7540FF 110 MOV 40H,#0FFH
073C 75A8FF 111 MOV 0A8H,#0FFH
073F 025FF2 112 LJMP RUN
113
5FF2 114 ORG 5FF2H
115 RUN:
0750 116 ORG 0750H
0750 021021 117 X13: LJMP X4
;THOAT VE CHUNG TRINH CHINH
;CHUONG TRINH CON CONVERT CHUYEN NOI DUNG 2 O NHO
0180 119 ORG 0180H
0180 C0E0 120 CONVERT:PUSH 0E0H ;CAT A
0182 C000 121 PUSH 00H
0184 E532 122 MOV A,32H
0186 C4 123 SWAP A
0187 F532 124 MOV 32H,A
0189 7832 125 MOV R0,#32H
018B E533 126 MOV A,33H
018D C4 127 SWAP A
018E D6 128 XCHD A,@R0
018F 54F0 129 ANL A,#0F0H
0191 F533 130 MOV 33H,A
0193 8632 131 MOV 32H,@R0
0195 D000 132 POP 00H
0197 D0E0 133 POP 0E0H
0199 22 134 RET
135 ;CHUONG TRINH CON AN PHIM
0216 136 ORG 0216H
0216 120223 137 KEY_16:LCALL KEY_23
0219 FA 138 MOV R2,A
021A E541 139 MOV A,41H
021C 5541 140 ANL A,41H
021E 60F6 141 JZ KEY_16
0220 EA 142 MOV A,R2
0221 22 143 RET
; SU DUNG CAC O NHO VA THNH GHI R2,A,41H,DPTR,R6,R7
0223 145 ORG 0223H
0223 120247 146 KEY_23: LCALL KEY_47
0226 FA 147 MOV R2,A
0227 04 148 INC A
0228 600B 149 JZ M1
022A E541 150 MOV A,41H
022C 5541 151 ANL A,41H
022E 70F3 152 JNZ KEY_23
0230 14 153 DEC A
0231 F541 154 KE_1: MOV 41H,A
0233 EA 155 MOV A,R2
0234 22 156 RET
0235 7AFF 157 M1: MOV R2,#0FFH
0237 020231 158 LJMP KE_1
0247 159 ORG 0247H
0247 90C001 160 KEY_47: MOV DPTR,#0C001H
MCS-51 MACRO ASSEMBLER BINH 02/15/:0 PAGE 4
LOC OBJ LINE SOURCE
024A E0 161 MOVX A,@DPTR
024B 540F 162 ANL A,#0FH
024D 6010 163 JZ M2
024F 900C00 164 MOV DPTR,#0C00H
0252 E0 165 MOVX A,@DPTR
0253 FA 166 MOV R2,A
0254 74C2 167 MOV A,#0C2H
0256 90C001 168 MOV DPTR,#0C001H
0259 F0 169 MOVX @DPTR,A
025A 120270 170 LCALL DELAY
025D EA 171 MOV A,R2
025E 22 172 RET
025F 74FF 173 M2: MOV A,#0FFH
0261 22 174 RET
0270 175 ORG 0270H
0270 7E30 176 DELAY: MOV R6,#30H
0272 7FFF 177 DE2: MOV R7,#0FFH
0274 DFFE 178 DE1: DJNZ R7,DE1
0276 DEFA 179 DJNZ R6,DE2
0278 22 180 RET
;CHUONG TRINH CON 01A1H VA 01DDH LA HAI CHUONG TRINH HIEN THI 4 SO 0 BEN PHAI O
;LED DIA CHI VA TAT 4 LED DATA KHI KHOI DONG
01A1 184 ORG 01A1H
01A1 853034 185 CON4_8: MOV 34H,30H
01A4 853135 186 MOV 35H,31H
01A7 853236 187 MOV 36H,32H
01AA 853337 188 MOV 37H,33H
01AD 7834 189 MOV R0,#34H
01AF 7938 190 MOV R1,#38H
01B1 AA40 191 MOV R2,40H
01B3 900200 192 MOV DPTR,#0200H
01B6 E6 193 C_1: MOV A,@R0
01B7 08 194 INC R0
01B8 C0E0 195 PUSH 0E0H
01BA C4 196 SWAP A
01BB 1201DD 197 LCALL CON4_X
01BE D0E0 198 POP 0E0H
01C0 1201DD 199 LCALL CON4_X
01C3 70F1 200 JNZ C_1
01C5 8A40 201 MOV 40H,R2
01C7 1205D0 202 LCALL DISPLAY
01CA 22 203 RET
204
01DD 205 ORG 01DDH
01DD 540F 206 CON4_X: ANL A,#0FH
01DF F582 207 MOV DPL,A
01E1 E0 208 MOVX A,@DPTR
01E2 FB 209 MOV R3,A
01E3 E540 210 MOV A,40H
01E5 D3 211 SETB C
01E6 33 212 RLC A
01E7 F540 213 MOV 40H,A
01E9 EB 214 MOV A,R3
01EA 4002 215 JC CO_1
MCS-51 MACRO ASSEMBLER BINH 02/15/:0 PAGE 5
LOC OBJ LINE SOURCE
01EC 7400 216 MOV A,#00H
01EE F7 217 CO_1: MOV @R1,A
01EF 09 218 INC R1
01F0 7440 219 MOV A,#40H
01F2 C3 220 CLR C
01F3 99 221 SUBB A,R1
01F4 22 222 RET
223
05D0 224 ORG 05D0H
05D0 C083 225 DISPLAY:PUSH DPH
05D2 C082 226 PUSH DPL
05D4 C000 227 PUSH 00H
05D6 C002 228 PUSH 02H
05D8 7838 229 MOV R0,#38H
05DA 900C00 230 MOV DPTR,#0C00H
05DD 7A08 231 MOV R2,#08H
05DF E6 232 DIS_1: MOV A,@R0
05E0 F0 233 MOVX @DPTR,A
05E1 08 234 INC R0
05E2 DAFB 235 DJNZ R2,DIS_1
05E4 D002 236 POP 02H
05E6 D000 237 POP 00H
05E8 D082 238 POP DPL
05EA D083 239 POP DPH
05EC 22 240 RET
06A0 241 ORG 06A0H
06A0 C083 242 VVV1: PUSH DPH
06A2 C082 243 PUSH DPL
06A4 905FF0 244 MOV DPTR,#5FF0H
06A7 F0 245 MOVX @DPTR,A
06A8 F533 246 MOV 33H,A
06AA 905FF1 247 MOV DPTR,#5FF1H
06AD E0 248 MOVX A,@DPTR
06AE F532 249 MOV 32H,A
06B0 75400F 250 MOV 40H,#0FH
06B3 1201A1 251 LCALL CON4_8
06B6 D082 252 POP DPL
06B8 D083 253 POP DPH
06BA 858238 254 MOV 38H,DPL
06BD 858339 255 MOV 39H,DPH
06C0 1205D0 256 LCALL DISPLAY
06C3 754000 257 MOV 40H,#00H
06C6 C083 258 PUSH DPH
06C8 C082 259 PUSH DPL
06CA 753600 260 MOV 36H,#00H
06CD 753700 261 MOV 37H,#00H
06D0 0206EB 262 LJMP VVV_6
263
06DA 264 ORG 06DAH
06DA 1201A1 265 VVV_7: LCALL CON4_8
06DD D082 266 POP DPL
06DF D083 267 POP DPH
06E1 858238 268 MOV 38H,DPL
06E4 858339 269 MOV 39H,DPH
06E7 C083 270 PUSH DPH
MCS-51 MACRO ASSEMBLER BINH 02/15/:0 PAGE 6
LOC OBJ LINE SOURCE
06E9 C082 271 PUSH DPL
06EB 120216 272 VVV_6: LCALL KEY_16
06EE B4170F 273 CJNE A,#17H,VVV_5
06F1 D082 274 POP DPL
06F3 D083 275 POP DPH
06F5 853382 276 MOV DPL,33H
06F8 853283 277 MOV DPH,32H
06FB 22 278 RET
279
0700 280 ORG 0700H
0700 FB 281 VVV_5: MOV R3,A
0701 5410 282 ANL A,#10H
0703 70E6 283 JNZ VVV_6
0705 120180 284 LCALL CONVERT
0708 EB 285 MOV A,R3
0709 4233 286 ORL 33H,A
070B E540 287 MOV A,40H
070D D3 288 SETB C
070E 33 289 RLC A
070F 540F 290 ANL A,#0FH
0711 F540 291 MOV 40H,A
0713 0206DA 292 LJMP VVV_7
293 ;CHUONG TRINH CON KHOI TAO 8279
0280 294 ORG 0280H
0280 900C01 295 KD79: MOV DPTR,#0C01H
0283 7410 296 MOV A,#10H
0285 F0 297 MOVX @DPTR,A
0286 E534 298 MOV A,34H
0288 F0 299 MOVX @DPTR,A
0289 74C3 300 MOV A,#0C3H
028B F0 301 MOVX @DPTR,A
028C 7490 302 MOV A,#90H
028E F0 303 MOVX @DPTR,A
028F 7440 304 MOV A,#40H
0291 F0 305 MOVX @DPTR,A
0292 22 306 RET
307 END
Phaàn IV: PHUÏ LUÏC
Chöông I : TAÄP LEÄNH CUÛA 8951
I . 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, keát quaû cuûa chöông trình khaû quan.
- 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 :
n
n
Opcode
n
Register Addressing.
- Moät vaøi leänh duøng cuï theå cho 1 thanh ghi naøo ñoù nhö thanh ghi A, DPTR . . . maõ Opcode töï noù cho bieát thanh ghi vì caùc bit ñòa chæ khoâng caàn bieát ñeán.
1.2 Söï ñònh ñòa chæ tröïc tieáp (Direct Addressing) :
- Söï ñònh ñòa chæ tröïc tieáp coù theå truy xuaát baát kyø giaù trò naøo treân Chip hoaëc thanh ghi phaàn cöùng treân Chip. Moät byte ñòa chæ tröïc tieáp ñöôïc ñöa vaøo Opcode ñeå ñònh roõ vò trí ñöôïc duøng nhö sau :
Opcode
Direct Addressing
- 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.
i
Opcode
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:
Opcode
Immediate Data
1.5 Söï ñònh ñòa chæ töông ñoái:
- Söï ñònh ñòa chæ töông ñoái chæ söû duïng vôùi nhöõng leänh nhaûy naøo ñoù. Moät ñòa chæ töông ñoái (hoaëc Offset) laø moät giaù trò 8 bit maø noù ñöôïc coäng vaøo boä ñeám chöông trình PC ñeå taïo thaønh ñòa chæ moät leänh tieáp theo ñöôïc thöïc thi. Phaïm vi cuûa söï nhaûy naèm trong khoaûng -128 ¸ 127. Offset töông ñoái ñöôïc gaén vaøo leänh nhö moät byte theâm vaøo nhö sau:
Opcode
Relative Offset
- 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).
Opcode
Addr 7 ¸ Addr 0
Addr 10 ¸ Addr 8
- Söï ñònh vò tuyeät ñoái ñem laïi thuaän lôïi cho caùc leänh ngaén (2 byte), nhöng baát lôïi trong vieäc giôùi haïn phaïm vi nôi gôûi ñeán vaø cung caáp maõ coù vò trí ñoäc laäp.
1.7 Söï ñònh vò daøi (Long Addressing):
- Söï ñònh vò daøi ñöôïc duøng vôùi leänh LCALL vaø LJMP. Caùc leänh 3 byte naøy bao goàm moät ñòa chæ nôi gôûi tôùi 16 bit ñaày ñuû laø 2 byte vaø 3 byte cuûa leänh.
Opcode
Addr 15 ¸ Addr 8
Addr 7 ¸ Addr 0
- Öu ñieåm cuûa söï ñònh 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.
Base Register Offset Effective Address
PC (or PDTR)
ACC
Index Addressing.
- Caùc baûng cuûa leänh nhaûy hoaëc caùc baûng tra ñöôïc taïo neân moät caùch deã daøng baèng caùch duøng ñòa chæ phuï luïc.
II . CAÙC KIEÅU LEÄNH (INSTRUCTION TYPES) CUÛA 8951:
8951 chia ra 5nhoù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 :
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] Ü (A3¸A0) ¬ (A3¸A0) + 6.
Neáu [(A7-A4)>9] vaø [(C)=1] Ü (A7¸A4) ¬ (A7¸A4) + 6.
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 = 0¸6
(A0) ¬ (A7)
RLC A : Quay voøng thanh ghi A qua traùi 1 bit coù côø Carry
(An + 1) ¬ (An); n = 0¸6
(C) ¬ (A7)
(A0) ¬ (C)
RR A : Quay voøng thanh ghi A qua phaûi 1 bit
(An + 1) ® (An); n = 0¸6
(A0) ® (A7)
RRC A : Quay voøng thanh ghi A qua phaûi 1 bit coù côø Carry
(An + 1) ® (An); n = 0¸6
(C) ® (A7)
(A0) ® (C)
SWAP A : Ñoåi choå 4 bit thaáp vaø 4 bit cao cuûa A cho nhau (A3¸A0)Ö(A7¸A4).
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)) ¬ (PC7¸PC0)
(SP) ¬ (SP) + 1
((SP)) ¬ (PC15¸PC8)
(PC10¸PC0) ¬ page Address.
LCALL addr16: Leänh goïi daøi chöông trình con trong 64K.
(PC) ¬ (PC) + 3
(SP) ¬ (SP) + 1
((SP)) ¬ (PC7¸PC0)
(SP) ¬ (SP) + 1
((SP)) ¬ (PC15¸PC8)
(PC) ¬ Addr15¸Addr0.
RET : Keát thuùc chöông trình con trôû veà chöông trình chính.
(PC15¸PC8) ¬ (SP)
(SP) ¬ (SP) - 1
(PC7¸PC0) ¬ ((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
(PC10¸PC0) ¬ 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 (-128¸127) 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.
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))
(A3¸A0) Ö ((Ri3¸Ri0))
5. Caùc leänh luaän lyù (Boolean Instruction) :
8951 chöùa moät boä xöû lyù 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öû lyù 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öû lyù 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.
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û.
Chöông II .
KHAÛO SAÙT IC SÖÛ DUÏNG
I . Khaûo saùt boä nhôù EPROM 2764
Caùc boä nhôù EPROM thoâng duïng toàn taïi döôùi nhieàu kieåu maïch khaùc nhau. Hoï 27XXX coù caùc loaïi vi maïch sau:2708 (1Kx8), 2716 (2Kx8), 2732 (4Kx8), 2764 (8Kx8) …… vôùi Tac = 250_ 450 ns tuyø theo loaïi EPROM cuï theå. Soá ñöôøng ñòa chæ thay ñoåi tuøy thuoäc vaøo dung löôïng cuûa moãi loaïi EPROM, soá ñöôøng döõ lieäu laø 8. Hoaït ñoäng cuûa hoï 27XXX laø töông töï nhau, ôû ñaây do thôøi löôïng coù haïn neân chæ khaûo saùt moät EPROM ñöôïc söû duïng trong maïch laø EPROM 2764.
1 . Sô ñoà chaân:
Trong ñoù A0 – A12 : 13 ñöôøng ñòa chæ vaøo
O0 _ O7 : 8 ñöôøng döõ lieäu
OE\ : Output Enable
CE\ : Chip Enable
PGM\ : Naïp chöông trình
EPROM 2764 coù 13 ñöôøng ñòa chæ neân coù dung löôïng laø 8 KB vaø 8 ñöôøng döõ lieäu ngoõ vaøo cung caáp Vpp vaø Vcc. Ngoõ vaøo Vcc luoân ñöôïc noái leân 5v khi EPROM ñang ñoïc döõ lieäu vaø noái vôùi 30v khi naïp trình cho EPROM.
Thôøi gian truy xuaát laø Tac = 150 ns .
Hai ngoõ vaøo ñieàu khieån CE\ vaø OE\:
+ OE\ : Ñöôïc duøng ñeå ñieàu khieån boä ñeäm (Output Buffer) ñeå cho pheùp döõ lieäu cuûa EPROM coù ñöôïc xuaát ra ngoaøi hay khoâng.
+ CE\ : Laø ngoõ vaøo cho pheùp hai chöùc naêng:
Khi hoaït ñoäng bình thöôøng CE\ laø tín hieäu cho pheùp, ñeå ñoïc döõ lieäu töø EPROM CE\ phaûi ôû möùc logic 0 ,ñeå maïch ñieän beân ngoaøi löïa choïn döõ lieäu vaø chuyeån noù ñeán Output Buffer keát hôïp vôùi tín hieäu cho pheùp OE\ ôû möùc logic 0 thì döõ lieäu xuaát hieän ôû caùc ngoõ ra D7 – D0 .
Khi CE\ =1 thì EPROM ôû traïng thaùi chôø (Standby)
Coâng suaát tieâu thuï ôû traïng thaùi ñoïc döõ lieäu laø 525 mW, ôû traïng thaùi chôø laø 132 mW.
2 . Baûng traïng thaùi laøm vieäc cuûa EPROM 2764:
OE\
CE\
PGM
Vpp
Vcc
Output
Read
VIL
VIL
VIH
Vcc
Vcc
D out
Standby
VIH
X
X
Vcc
Vcc
High Z
Program
VIL
X
VIL
Vpp
Vcc
D in
Program Verify
VIL
VIL
VIH
Vpp
Vcc
D out
Program Inhibit
VIH
X
X
Vpp
Vcc
High Z
II . Khaûo saùt SRAM 6264
SRAM 6264 coù dung löôïng 8 KB duøng ñeå löu tröõ chöông trình vaø döõ lieäu.
1 . Sô ñoà chaân:
Trong ñoù A0 – A 12 :13 ñöôøng ñòa chæ vaøo
WR\ : cho pheùp ghi ôû möùc logic 0
OE\ : cho pheùp xuaát ôû möùc logic 0
CS \ : cho pheùp choïn vi maïch hoaït ñoäng ( möùc 0 )
NC : No Conection
Boä nhôù SRAM coù khaû naêng löu tröõ thoâng tin trong noù chöøng naøo coøn ñöôïc caáp ñieän
Thôøi gian truy xuaát Tac = 250 ns .
2 . Baûng traïng thaùi laøm vieäc cuûa SRAM 6264
WR\
CS\
CS
OE\
Output
Not Select
X
H
X
X
High Z
Not Select
X
X
L
X
High Z
Output Disable
H
L
H
H
High Z
Read
H
L
H
L
D Out
Write
L
L
H
H
D in
III . Khaûo saùt IC giaûi maõ 74138 :
Khi ta muoán coù nhieàu ñaàu ra choïn voû töø boä giaûi maõ maø vaãn duøng caùc maïch logic ñôn giaûn thì thieát keá seõ trôû neân raát coàng keành do soá löôïng caùc maïch cöûa taêng leân. Trong tröôøng hôïp nhö vaäy ta thöôøng duøng caùc maïch giaûi maõ coù saün. Moät trong caùc maïch giaûi maõ hay ñöôïc söû duïng laø 74LS138 ,maïch giaûi maõ 3 ra 8 ñöôøng.
1. Sô ñoà chaân:
Trong ñoù:
Y0-Y7: 8 ñaàu ra choïn maïch giaûi maõ.
A,B,C:Ba ñaàu vaøo choïn.
E1\,E2\,E3:ñaàu vaøo cho pheùp.
2. Baûng traïng thaùi laøm vieäc cuûa 74138:
Caùc ñaàu vaøo
Caùc ñaàu ra
Cho pheùp
Ñieàu khieån
C
B
A
G2B\
G2A\
G1
Y0\
Y1\
Y2\
Y3\
Y4\
Y5\
Y6\
Y7\
X
X
X
1
X
X
1
1
1
1
1
1
1
1
X
X
X
X
1
X
1
1
1
1
1
1
1
1
X
X
X
X
X
0
1
1
1
1
1
1
1
1
0
0
0
0
0
1
0
1
1
1
1
1
1
1
0
0
1
0
0
1
1
0
1
1
1
1
1
1
0
1
0
0
0
1
1
1
0
1
1
1
1
1
0
1
1
0
0
1
1
1
1
0
1
1
1
1
1
0
0
0
0
1
1
1
1
1
0
1
1
1
1
0
1
0
0
1
1
1
1
1
1
0
1
1
1
1
0
0
0
1
1
1
1
1
1
1
0
1
1
1
1
0
0
1
1
1
1
1
1
1
1
0
Trong ñoù : X laø giaù trò khoâng quan taâm.
IV: khaûo saùt IC giaûi maõ BCD to Decimal SN74145.
Sô ñoà chaân:
Trong ñoù :0-9 laø 10 ñaàu ra.
A,B,C,D laø 4 ñaàu vaøo.
Baûng traïng thaùi.
No
Input
output
D
C
B
A
0
1
2
3
4
5
6
7
8
9
0
0
0
0
0
0
1
1
1
1
1
1
1
1
1
1
0
0
0
1
1
0
1
1
1
1
1
1
1
1
2
0
0
1
0
1
1
0
1
1
1
1
1
1
1
3
0
0
1
1
1
1
1
0
1
1
1
1
1
1
4
0
1
0
0
1
1
1
1
0
1
1
1
1
1
5
0
1
0
1
1
1
1
1
1
0
1
1
1
1
6
0
1
1
0
1
1
1
1
1
1
0
1
1
1
7
0
1
1
1
1
1
1
1
1
1
1
0
1
1
8
1
0
0
0
1
1
1
1
1
1
1
1
0
1
9
1
0
0
1
1
1
1
1
1
1
1
1
1
0
Valid
1
0
1
0
1
1
1
1
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
0
1
1
1
1
1
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
TAØI LIEÄU THAM KHAÛO
Kyõ Thuaät Vi Xöû Lyù:
Taùc giaû: Traàn Vaên Troïng (ÑHSP Kyõ Thuaät-TP.HCM)
Xuaát baûn naêm 1995.
Giaùo trình Vi Xöû Lyù – Vi ñieàu khieån
Ngöôøi soaïn: Nguyeãn Ñình Phuù
Laäp Trình Cho Caùc Heä Vi Xöû Lyù
Bieân soïan: Huøynh Thuùc Cöôùc
Ñaëng Vaên Ñöùc
Nghieâm Myõ
Nguyeãn Vaên Tam
Traàn Baù Thaùi
Nguyeãn Chí Thöùc
Nhaø xuaát baûn Thoáng Keâ
Kyõ Thuaät Vi Ñieàu Khieån
Taùc giaû : Leâ Vaên Doanh
Phaïm Khaéc Chöông
Nhaø Xuaát Baûn Khoa Hoïc Vaø Kyõ Thuaät naêm 1998.
THE 8051 MICROCONTROLLER
Taùc Giaû: Scott MacKenzie
6. Trình Bieân Dòch ASM51.
._.
Các file đính kèm theo tài liệu này: