Giao Tiep 8951 Voi May Tinh

You might also like

Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 90

Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

BOÄ GIAÙO DUÏC VAØ ÑAØO TAÏO


ÑAÏI HOÏC QUOÁC GIA THAØNH PHOÁ HOÀ CHÍ
MINH
TRÖÔØNG ÑAÏI HOÏC SÖ PHAÏM KYÕ THUAÄT
KHOA ÑIEÄN- ÑIEÄN TÖÛ
BOÄ MOÂN ÑIEÄN TÖÛ

LUAÄN VAÊN TOÁT NGHIEÄP

Ñeà taøi:

Sinh Vieân Thöïc Hieän : Phan Tieán Hieáu


Lôùp : 95KÑÑ
Giaùo Vieân Höôùng Daãn : NGUYEÃN ÑÌNH
PHUÙ

SVTH : Phan Tieán Hieáu Trang :


1
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

MUÏC LUÏC
Trang
Lôøi noùi ñaàu
Phaàn A : LYÙ THUYEÁT
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ï MSC_51 2
II. Khaûo Saùt Sô Ñoà Chaân 8951
1. Sô ñoà chaân 8951 4
2. Chöùc naêng töøng chaân 4
III. Caáu Truùc Beân Trong Cuûa Vi Ñieàu Khieån 8951
1. Toå chöùc boä nhôù 6
2. Caùc thanh ghi chöùc naêng ñaëc bieät 7
3. Boä nhôù ngoaøi 13
IV. Hoaït Ñoäng Timer Cuûa Vi Ñieàu Khieån 8951
1. Giôùi thieäu 17
2. Caùc thanh ghi ñieàu khieån timer 19
3. Caùc cheá ñoä timer vaø côø traøn 24
V. Hoaït Ñoäng Port Noái Tieáp Cuûa Vi Ñieàu Khieån 8951
1. Giôùi thieäu 26
2. Caùc thanh ghi ñieàu khieån vaø caùc cheá ñoä cuûa port noái tieáp 26
3. Toå chöùc ngaét trong 8951 31
VI. Toùm Taét Taäp Leänh Cuûa 8951
1. Caùc cheá ñoä ñònh ñòa chæ 32
Chöông II: Giao Tieáp Maùy Tính Vôùi Caùc Thieát Bò Ngoaïi Vi
I. Sô Löôïc Veà Caáu Truùc Maùy Tính
1. Sô ñoà khoái chöùc naêng 38
2. Ñôn vò xöû lyù trung taâm (CPU) 38
3. Boä nhôù ( Memory) 38
4. Thieát bò nhaäp/xuaát (I/O) 38
5. Ñoàng hoà heä thoáng 39
II. Caùc Phöông Thöùc Giao Tieáp Qua Maùy Tính Vôùi Caùc
Thieát Bò Ngoaïi Vi
1. Giao tieáp qua Slot card 39
2. Giao tieáp qua coång maùy in 39
3. Giao tieáp qua coång noái tieáp RS_232 39
4. Giôùi thieäu IC giao tieáp noái tieáp Max 232 42

III. Giôùi Thieäu Veà KIT Vi Ñieàu Khieån 8951


1. Giôùi thieäu 43
2. Baøn phím 44
3. Caáu truùc phaàn cöùng cuûa KIT 46

Phaàn B: THI COÂNG


Chöông I: Giao Tieáp Giöõa Kit Vi Ñieàu Khieån 8951 Vôùi Maùy Vi Tính
I. Phaàn Cöùng

SVTH : Phan Tieán Hieáu Trang :


2
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

1. Thieát keá cart giao tieáp giöõa 8951 vaø maùy vi tính 49
II. Phaàn Meàm
1. Giôùi thieäu phaàn meàm 50
2. Giôùi thieäu ngoân ngöõ Assembly 50
3. Löu ñoà vaø chöông trình giao tieáp 51
III. ñaùnh giaù keát quaû thi coâng 66
KEÁT LUAÄN
HÖÔÙNG PHAÙT TRIEÅN ÑEÀ TAØI
TAØI LIEÄU THAM KHAÛO
Phaàn C: PHUÏ LUÏC

SVTH : Phan Tieán Hieáu Trang :


3
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

LÔØI CAÛM TAÏ


Sinh vieân thöïc hieän xin baøy toû
loøng bieát ôn ñeán thaày Nguyeãn Ñình
Phuù treân cöông vò laø ngöôøi höôùng
daãn chính cuûa ñeà taøi ñaõ taän tình
giuùp ñôõ trong suoát quaù trình thöïc
hieän luaän vaên.
Sinh vieân thöïc hieän cuõng xin baøy
toû loøng bieát ôn ñeán caùc thaày coâ
trong tröôøng Ñaïi Hoïc Sö Phaïm Kyõ
Thuaät ñaõ taän tình daïy doã vaø truyeàn
thuï nhöõng kinh nghieäm quyù baùu trong
suoát thôøi gian qua.
Cuoái cuøng sinh vieân thöïc hieän xin
chaân thaønh caûm ôn söï ñoùng goùp
yù kieán cuaû taát caû caùc baïn sinh
vieân trong suoát quaù trình thöïc hieän
luaän vaên.

Sinh vieân thöïc hieän.

PHAN TIEÁN HIEÁU

SVTH : Phan Tieán Hieáu Trang :


4
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

ÑAÏI HOÏC QUOÁC GIA TP . HCM COÄNG HOØA XAÕ HOÄI CHUÛ NGHÓA
TRÖÔØNG ÑAÏI HOÏC SÖ PHAÏM KYÕ VIEÄT NAM
THUAÄT ÑOÄC LAÄP _ TÖ ÏDO _ HAÏNH PHUÙC

. . . . . . . . . *o0o*. . . . . . . . .

KHOA ÑIEÄN - ÑIEÄN TÖÛ


BOÄ MOÂN ÑIEÄN TÖÛ
NHIEÄM VUÏ LUAÄN VAÊN TOÁT NGHIEÄP

Hoï vaø teân sinh vieân : PHAN TIEÁN HIEÁU


Lôùp : 95 KÑÑ
Maõ soá sinh vieân : 95101058
Ngaønh : Ñieän - Ñieän Töû
Teân ñeà taøi:
GIAO TIEÁP GIÖÕA KIT VI XÖÛ LYÙ 8951 VAØ MAÙY VI TÍNH
1. Giao tieáp giöõa kit vi xöû lyù 8951 vaø maùy vi tính
............................................................................................................................
............................................................................................................................
2. Caùc soá lieäu ban ñaàu:
...............................................................................................................
...............................................................................................................
...............................................................................................................
3. Noäi dung:
...............................................................................................................
...............................................................................................................
...............................................................................................................
4. Caùc phaàn lieân quan:
...............................................................................................................
...............................................................................................................
5. Giaùo vieân höôùng daãn: NGUYEÃN ÑÌNH PHUÙ
6. Ngaøy giao nhieäm vuï: 13/12/99
7. Ngaøy hoaøn thaønh nhieäm vuï:28/02/2000
Thoâng qua boä moân
Ngaøy thaùng naêm 2000 Ngaøy thaùng naêm 2000
Giaùo vieân höôùng daãn Chuû nhieäm boä moân

SVTH : Phan Tieán Hieáu Trang :


5
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

BAÛN NHAÄN XEÙT


LUAÄN VAÊN TOÁT NGHIEÄP CUÛA GIAÙO VIEÂN HÖÔÙNG DAÃN

Hoï vaø teân sinh vieân : PHAN TIEÁN HIEÁU


Lôùp : 95 KÑÑ
Maõ soá sinh vieân : 95101058
Ngaønh : Ñieän - Ñieän töû
Teân ñeà taøi:
GIAO TIEÁP GIÖÕA KIT VI XÖÛ LYÙ 8951 VAØ MAÙY VI TÍNH

Nhaän xeùt cuûa giaùo vieân höôùng daãn:


............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
Ngaøy thaùng naêm 2000

Giaùo vieân höôùng daãn

SVTH : Phan Tieán Hieáu Trang :


6
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

BAÛN NHAÄN XEÙT


LUAÄN VAÊN TOÁT NGHIEÄP CUÛA GIAÙO VIEÂN PHAÛN BIEÄN

Hoï vaø teân sinh vieân : PHAN TIEÁN HIEÁU


Lôùp : 95 KÑÑ
Maõ soá sinh vieân : 95101058
Ngaønh : Ñieän - Ñieän töû
Teân ñeà taøi:
GIAO TIEÁP GIÖÕA KIT VI XÖÛ LYÙ 8951 VAØ MAÙY VI TÍNH

Nhaän xeùt cuûa giaùo vieân phaûn bieän:


............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................

Ngaøy thaùng naêm 2000


Giaùo vieân phaûn bieän

SVTH : Phan Tieán Hieáu Trang :


7
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

BAÛN NHAÄN XEÙT


LUAÄN VAÊN TOÁT NGHIEÄP CUÛA HOÄI ÑOÀNG GIAÙM KHAÛO

Hoï vaø teân sinh vieân : PHAN TIEÁN HIEÁU


Lôùp : 95 KÑÑ
Maõ soá sinh vieân : 95101058
Ngaønh : Ñieän - Ñieän töû
Teân ñeà taøi:
GIAO TIEÁP GIÖÕA KIT VI XÖÛ LYÙ 8951 VAØ MAÙY VI TÍNH

Nhaän xeùt cuûa hoäi ñoàng giaùm khaûo:


............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................

Ngaøy thaùng naêm 2000


Hoäi ñoàng giaùm khaûo

SVTH : Phan Tieán Hieáu Trang :


8
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

PHAÀN A:

SVTH : Phan Tieán Hieáu Trang :


9
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

LÔØI NOÙI ÑAÀU


Hieän nay ñaát nöôùc ta ñang chuyeån mình theo söï phaùt trieån chung cuûa theá
giôùi vaø khu vöïc Chaâu AÙ baèng neàn saûn xuaát ña daïng vaø ñaày tieàm naêng.
Neàn saûn xuaát naøy khoâng chæ ñoøi hoûi moät soá löôïng lao ñoäng khoång loà
maø coøn yeâu caàu veà trình ñoä, chaát löôïng tay ngheà, kyõ thuaät lao ñoäng vaø
thieát bò saûn xuaát. Treân ñaø phaùt trieån ñoù, vaán ñeà töï ñoäng hoaù trong quaù
trình saûn xuaát, nghieân cöùu trôû thaønh moät nhu caàu caàn thieát. Thoaït ñaàu
vaán ñeà töï ñoäng hoaù ñöôïc thöïc hieän rieâng leû töø cô khí hoaù ñeán caùc maïch
ñieän töû. Ngaøy nay, vôùi söï xuaát hieän cuaû caùc Chip vi xöû lyù vaø maùy tính
cuøng vôùi vieäc söû duïng roäng raõi cuûa noù ñaõ ñaåy vaán ñeà töï ñoäng hoaù
leân moät böôùc cao hôn vaø thôøi löôïng nhanh hôn …
Trong ñoù, vieäc öùng duïng Maùy Vi Tính vaøo kyõ thuaät ño löôøng vaø ñieàu
khieån ñaõ ñem laïi nhöõng keát quaû ñaày tính öu vieäc. Caùc thieát bò, heä thoáng
ño löôøng vaø ñieàu khieån gheùp noái vôùi Maùy Vi Tính coù ñoä chính xaùc cao,
thôøi gian thu thaäp soá lieäu ngaén. Ngoaøi ra, maùy tính coøn coù phaàn giao dieän
leân maøn hình raát tieän lôïi cho ngöôøi söû duïng.
Vieäc duøng maùy tính ñeå ñieàu khieån vaø thoâng tin lieân laïc vôùi nhau thì
vaán ñeà truyeàn döõ lieäu raát quan troïng. Hieän nay chuùng ta coù theå duøng maùy
tính ñeå lieân laïc vôùi nhau thoâng qua heä thoáng maïng nhö: maïng cuïc boä (LAN)
hay maïng toaøn caàu Internet. Do ñoù, trong phaïm vi hieåu bieát cuaû mình, em ñaõ
tìm hieåu vaø thöïc hieän ñeà taøi: “Giao Tieáp Giöõa Vi Ñieàu Khieån 8951 vaø
Maùy Vi Tính” thoâng qua coång noái tieáp vaø vieát chöông trình phaàn meàm ñeå
truyeàn soá lieäu giöõa hai heä thoáng.
Maëc duø em ñaõ coá gaéng raát nhieàu ñeå hoaøn thaønh quyeån luaän vaên
naøy, song do giôùi haïn veà thôøi gian cuõng nhö kieán thöùc neân noäi dung coøn
nhieàu thieáu soùt. Raát mong söï ñoùng goùp yù kieán cuûa quyù thaày coâ vaø caùc
baïn sinh vieân ñeå luaän vaên ñöôïc hoaøn thieän hôn. Xin chaân thaønh caûm ôn.

Sinh vieân thöïc hieän

PHAN TIEÁN HIEÁU

SVTH : Phan Tieán Hieáu Trang :


10
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

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Ï 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 IC8951 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 :
 8 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öû lí Boolean (hoaït ñoäng treân bit ñôn).


 210 vò trí nhôù coù theå ñònh vò bit.

 4 s cho hoaït ñoäng nhaân hoaëc chia.

SVTH : Phan Tieán Hieáu Trang :


11
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

Sô ñoà khoái cuûa 8951:

SERIAL PORT
INT1\
TIMER 0
INT0\
TIMER 1
TIME 2

128 byte TIMER 2


ROM
RAM
4K: 8031
8051\8052
4K: 8051
TIMER1
EPROM
INTERRUPT OTHER 128 byte 4K: 8951
CONTROL RAM TIMER1
REGISTER

CPU

BUS SERIAL
CONTROL I/O PORT PORT
OSCILATOR

EA\ ALE\
PSEN\ P0 P 1 P 2 P 3
RST TXD RXD
Address\Data

SVTH : Phan Tieán Hieáu Trang :


12
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

II. KHAÛO SAÙT SÔ ÑOÀ CHAÂN 8951, CHÖÙC NAÊNG TÖØNG CHAÂN:
1.Sô ñoà chaân 8951:
30pF 40
19 Vcc
XTAL.1
32 AD7
12 MHz P0.7 33 AD6
P0.6
XTAL.2 P0.5
34 AD5
35 AD4
18 P0.4 36 AD3
30pF P0.3
PSEN\ P0.2
37 AD2
38 AD1
29 P0.1 39 AD0
P0.0
ALE
8
30 EA\ P1.7 7
P1.6 6
P1.5 5
31 P1.4
RST P1.3
4
3
9 8951 P1.2 2
P1.1 1
P1.0

17 28 A15
RD P3.7 P2.7 27 A14
16
WR P3.6 P2.6 26 A13
15
T1 P3.5 P2.5 25 A12
14
T0 P3.4 P2.4 24 A11
13
INT1 P3.3 P2.3 23 A10
12
INT0 P3.2 P2.2
TXD
11 P3.1 Vss P2.1
22 A9
10 21 A8
RXD P3.0 P2.0

20

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:
 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.
 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.

SVTH : Phan Tieán Hieáu Trang :


13
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

 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ûa TIMER/COUNTER
P3.5 T1 thöù 0.
P3.6 WR\ Ngoõ vaøo cuûa TIMER/COUNTER
P3.7 RD\ 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.

. 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 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.
 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öø 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ôû

SVTH : Phan Tieán Hieáu Trang :


14
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

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.
 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 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.
III. CAÁU TRUÙC BEÂN TRONG VI ÑIEÀU KHIEÅN
1. Toå chöùc boä nhôù:

FFFF FFFF
CODE DATA
FF
Memory Memory

00
Enable Enable
via via
On - Chip 0000 PSEN 0000 RD & WR
Memory

External Memory

SVTH : Phan Tieán Hieáu Trang :


15
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

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


Baûn ñoà boä nhôù Data treân Chip nhö sau :
Ñòa chæ Ñòa chæ
byte Ñòa chæ bit byte Ñò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.

SVTH : Phan Tieán Hieáu Trang :


16
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

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 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 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 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ä ñ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:

SVTH : Phan Tieán Hieáu Trang :


17
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

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.

SVTH : Phan Tieán Hieáu Trang :


18
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

 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) :

SVTH : Phan Tieán Hieáu Trang :


19
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

- Con troû ngaên xeáp laø moät thanh ghi 8 bit ôû ñòa chæ 81H. Noù chöùa ñòa chæ
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 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 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):

SVTH : Phan Tieán Hieáu Trang :


20
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

- 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. 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.

SVTH : Phan Tieán Hieáu Trang :


21
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

- 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æ 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 (Accessing 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 D0  D7

EA A0  A7
74HC373
8951 O D
ALE
G EPROM
Port 2 A8  A15
PSEN OE
- Trong moät chu kyø maùy tieâu bieåu, tín hieäu ALE tích 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â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.

SVTH : Phan Tieán Hieáu Trang :


22
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

Port 0
D0  D7
RAM
EA\ 74HC373
8951 O D
A0  A7
G
ALE

Port 2 A8  A15

RD\ OE\
WR\ WE\
 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.

SVTH : Phan Tieán Hieáu Trang :


23
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

Address Bus (A0 


A15)
Data Bus (D0  D7)

PSEN D0 - D7 RD\ OE D0 - D7
\ OE
EPROM
WR\ W
RAM
A0  A12 A0  A12
8K Bytes 8K Bytes
CS CS

74HC138 CS CS
CS CS

C
0
B 1
A 2
3
4 Select other
E 5 EPROM/RAM
E0 6
Address
E1 7 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\ WR\
RD\
OE\
PSEN\

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.
SVTH : Phan Tieán Hieáu Trang :
24
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

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 baèng tay baèng moät phím nhaán thöôøng hôû, sô ñoà
maïch reset nhö sau:
+5V

100 Reset
10 F
RST

8.2 K

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 0000H
PC 00H
Thanh ghi tích luõy A 00H
Thanh ghi B 00H
Thanh ghi thaùi PSW 07H
SP 0000H
DPRT FFH
Port 0 ñeán port 3 XXX0 0000 B
IP 0X0X 0000 B
IE 00H
Caùc thanh ghi ñònh 00H
thôøi
00H
SCON SBUF
0XXX XXXXH
PCON (MHOS)
0XXX 0000 B
PCON (CMOS)

-Thanh ghi quan troïng nhaát laø thanh ghi boä ñeám chöông trình PC ñöôïc
reset tai ñò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.

SVTH : Phan Tieán Hieáu Trang :


25
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

VI. 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.

- Hoaït ñoäng cuûa Timer ñôn giaûn 3 bit ñöôïc minh hoïa nhö sau:

Flag FF
D Q D Q D Q D Q

Q0 Q1 Q2 Q3

LSB MSB Flag

Timer Flip Flops.

Clock

Q0 (LSB)

Q1 0 1 2 3 4 5 6 7

Q2 (MSB)
Count
Flag
- 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).

SVTH : Phan Tieán Hieáu Trang :


26
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

- 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

SVTH : Phan Tieán Hieáu Trang :


27
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

2. CAÙC THANH GHI ÑIEÀU KHIEÅN TIMER


2.1. Thanh ghi ñieàu khieån cheá ñoä timer TMOD (timer mode register) :
- 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

SVTH : Phan Tieán Hieáu Trang :


28
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

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.
2.2. 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 Description
Address

TCON.7 TF1 8FH Côø traøn Timer 1 ñöôïc set bôûi phaàn cöùng
ôû söï traøn, ñöôïc xoùa bôûi phaàn meàm
hoaëc bôûi phaàn cöùng khi caùc vectô xöû lí
ñ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.

SVTH : Phan Tieán Hieáu Trang :


29
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

2.3. Caùc nguoàn xung nhòp cho timer (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.
Crystal

On Chip Timer
Oscillator Clock
12

T0 or T1
pin
C/T
0 = Up (internal Timing)
1 = Down (Event Counting)
 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.
 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
SVTH : Phan Tieán Hieáu Trang :
30
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

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 (2s) ñ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.
2.4. 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 s laø söï ñeám ñöôïc trong thanh ghi TL0/TH0.

On Chip
Oscillator
 12 TL0 TH0 TF0

12 MHz
T0 (P3.4)

C/T

TR0

GATE

INTO (P3.2)
Timer Operating Mode 1.

SVTH : Phan Tieán Hieáu Trang :


31
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

2.5. 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öø 0000Hleâ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 s, 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.
3. CAÙC CHEÁ ÑOÄ TIMER 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 Timer 1.
3.1. Mode Timer 13 bit (MODE 0) :

Timer Clock
TLx (5 bit) THx (8 bit) TFx
Overflow

SVTH : Phan Tieán Hieáu Trang :


32
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

- 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.
3.2. Mode Timer 16 bit (MODE 1) :

Timer Clock
TLx (8 bit) THx (8 bit) TFx

- 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.
3.3. Mode töï ñoäng naïp 8 bit (MODE 2) :
Timer Clock
TL x (8 bit) TFx

Overflow
Reload
TH x (8 bit)

-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.
3.4 Mode Timer taùch ra (MODE 3) :

SVTH : Phan Tieán Hieáu Trang :


33
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

Timer Clock
TL1 (8 bit) TH1 (8 bit) Overflow

Timer Clock
TL1 (8 bit) TF0

Timer Clock
TH0 (8 bit) TF1

- 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.
V. HOAÏT ÑOÄNG PORT NOÁI TIEÁP
1. Giôùi thieäu
8951 coù moät port noái tieáp trong chip coù theå hoaït ñoäng ôû nhieàu cheá ñoä
treân moät daõy taàn soá roäng. Chöùc naêng chuû yeáu laø thöïc hieän chuyeån ñoåi
song song sang noái tieáp vôùi döõ lieäu xuaát vaø chuyeån ñoåi noái tieáp sang song
song vôùi döõ lieäu nhaäp.
Port noái tieáp cho hoaït ñoäng song coâng (full duplex: thu vaø phaùt ñoàng
thôøi) vaø ñeäm thu (receiver buffering) cho pheùp moät kyù töï seõ ñöôïc thu vaø
ñöôïc giöõ trong khi kyù töï thöù hai ñöôïc nhaän. Neáu CPU ñoïc kyù töï thöù nhaát
tröôùc khi kyù töï thöù hai ñöôïc thu ñaày ñuû thì döõ lieäu seõ khoâng bò maát.
Hai thanh ghi chöùc naêng ñaëc bieät cho pheùp phaàn meàm truy xuaát ñeán port
noái tieáp laø: SBUF vaø SCON. Boä ñeäm port noái tieáp (SBUF) ôû ñiaï chæ 99H
nhaän döõ lieäu ñeå thu hoaëc phaùt. Thanh ghi ñieàu khieån port noái tieáp (SCON)
ôû ñiaï chæ 98H laø thanh ghi coù ñiaï chæ bit chöùa caùc bit traïng thaùi vaø caùc bit
ñieàu khieån. Caùc bit ñieàu khieån ñaët cheá ñoä hoaït ñoäng cho port noái tieáp, vaø
caùc bit traïng thaùi Baùo caùo keát thuùc vieäc phaùt hoaëc thu kyù töï . Caùc bit
traïng thaùi coù theå ñöôïc kieåm tra baèng phaàn meàm hoaëc coù theå laäp trình ñeå
taïo ngaét.

SVTH : Phan Tieán Hieáu Trang :


34
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

2. Caùc thanh ghi vaø caùc cheá ñoä hoaït ñoäng cuûa port noái tieáp:
2.1. Thanh ghi ñieàu khieån port noái tieáp:
Cheá ñoä hoaït ñoäng cuûa port noái tieáp ñöôïc ñaët baèng caùch ghi vaøo thanh
ghi cheá ñoä port noái tieáp (SCON) ôû ñòa chæ 98H .Sau ñaây caùc baûn toùm taét
thanh ghi SCON vaø caùc cheá ñoä cuûa port noái tieáp:
Bit Kyù Ñòa chæ Moâ taû
hieäu
SCON.7 SM0 9FH Bit 0 cuûa cheá ñoä port noái tieáp
SCON.6 SM1 9EH Bit 1 cuûa cheá ñoä port noái tieáp
SCON.5 SM3 9DH Bit 2 cuûa cheá ñoä port noái tieáp . Cho pheùp truyeàn
thoâng xöû lyù trong caùc cheá ñoä 2 vaø 3, RI seõ
khoâng bò taùc ñoäng neáu bit thöù 9 thu ñöôïc laø 0
SCON.4 REN 9CH Cho pheùp boä thu phaûi ñöôïc ñaët leân 1 ñeå thu caùc
SCON.3 TB8 9BH kyù töï
Bit 8 phaùt, bit thöù 9 ñöôïc phaùt trong cheá ñoä 2 vaø
SCON.2 RB8 9AH 3, ñöôïc ñaët vaø xoùa baèng phaàn meàm.
SCON.1 TI 99H B it 8 thu, bit thöù 9 thu ñöôïc
Côø ngaét phaùt. Ñaët leân 1 khi keát thuùc phaùt kyù
SCON.0 RI 98H töï, ñöôïc xoùa baèng phaàn meàm
Côø ngaét thu. Ñaët leân 1 khi keát thuùc thu kyù töï,
ñöôïc xoùa baèng phaàn meàm

Toùm taét thanh ghi cheá ñoä port noái tieáp


SM0 SM1 Cheá ñoä Moâ taû Toác ñoä baud
0 0 0 Thanh ghi Coá ñònh (Fosc /12 )
0 1 1 dòch Thay ñoåi ( ñaët baèng timer )
1 0 2 UART 8 bit Coá ñònh (Fosc /12 hoaëc Fosc/64 )
1 1 3 UART 9 bit Thay ñoåi ( ñaët baèng timer )
UART 9 bit

Caùc cheá ñoä port noái tieáp


Tröôùc khi söû duïng port noái tieáp, phaûi khôûi ñoäng SCON cho ñuùng cheá
ñoä. Ví duï, leänh sau:
MOV SCON, #01010010B
Khôûi ñoäng port noái tieáp cho cheá ñoä 1 (SM0/SM1=0/1), cho pheùp boä thu
(REN=1) vaø côø ngaét phaùt (TP=1) ñeå boä phaùt saún saøng hoaït ñoäng.
2.2. Cheá ñoä 0 (Thanh ghi dòch ñôn 8 bit):
Cheá ñoä 0 ñöôïc choïn baèng caùc thanh ghi caùc bit 0 vaøo SM1 vaø SM2 cuûa
SCON, ñöa port noái tieáp vaøo cheá ñoä thanh ghi dòch 8bit. Döõ lieäu noái tieáp
vaøo vaø ra qua RXD vaø TXD xuaát xung nhòp dòch, 8 bit ñöôïc phaùt hoaëc thu
vôùi bit ñaàu tieân laø LSB. Toác ñoä baud coá ñònh ôû 1/12 taàn soá dao ñoäng treân
chip.
Vieäc phaùt ñi ñöôïc khôûi ñoäng baèng baát cöù leänh naøo ghi döõ lieäu vaøo
SBUF. Döõ lieäu dòch ra ngoaøi treân ñöôøng RXD (P3.0) vôùi caùc xung nhòp ñöôïc

SVTH : Phan Tieán Hieáu Trang :


35
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

göûi ra ñöôøng TXD (P3.1). Moãi bit phaùt ñi hôïp leä (treân RXD) trong moät chu
kyø maùy, tín hieäu xung nhaäp xuoáng thaáp ôû S3P1 vaø trôû veà cao ôû S6P1.

Moät chu kyø maùy


S1 S2 S3 S4 S5 S6

P1 P2 P1 P2 P1 P2 P1 P2 P1 P2 P1
OSC

ALE

Data Out Bit Data Hôïp Leä

Shift Clock S3P1 S6P1

WRITE to
Phoùng to
SBUF

ALE
Data Out
RXD

Shift Clock Giaûn ñoà thôøi gian Port noái tieáp phaùt ôû cheá
(TXD) ñoä 0
Vieäc thu ñöôïc khôûi ñoäng khi cho pheùp boä thu (REN) laø 1 vaø bit ngaét
thu (RI) laø 0. Quy taéc toång quaùt laø ñaët REN khi baét ñaàu chöông trình ñeå
khôûi ñoäng port noái tieáp, roài xoaù RI ñeå baét ñaàu nhaän döõ lieäu. Khi RI bò
xoaù, caùc xung nhòp ñöôïc ñöa ra ñöôøng TXD, baét ñaàu chu kyø maùy keá tieáp
vaø döõ lieäu theo xung nhòp ôû ñöôøng RXD. Laáy xung nhòp cho döõ lieäu vaøo
port noái tieáp xaûy ra ôû caïnh ñöôøng cuûa TXD.

SVTH : Phan Tieán Hieáu Trang :


36
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

Moät chu kyø maùy

Data out D0 D1 D2 D3 D4 D5 D6 D7

Shift clock

Giaûn ñoà thôøi gian phaùt noái tieáp ôû cheá


ñoä 0
2.3. Cheá ñoä 1 (UART 8 bit vôùi toác ñoä baud thay ñoåi ñöôïc):
ÔÛ cheá ñoä 1, port noái tieáp cuûa 8951 laøm vieäc nhö moät UART 8 bit vôùi
toác ñoä baud thay ñoåi ñöôïc. Moät UART (Boä thu phaùt ñoàng boä vaïn naêng) laø
moät duïng cuï thu phaùt döõ lieäu noái tieáp vôùi moãi kyù töï döõ lieäu ñi tröôùc laø
bit start ôû möùc thaáp vaø theo sau bit stop ôû möùc cao. Ñoâi khi xen theâm bit
kieåm tra chaün leû giöõa bit döõ lieäu cuoái cuøng vaø bit stop. Hoaït ñoäng chuû
yeáu cuûa UART laø chuyeån ñoåi song song sang noái tieáp vôùi döõ lieäu nhaäp.
ÔÛ cheá ñoä 1, 10 bit ñöôïc phaùt treân TXD hoaëc thu treân RXD. Nhöõng bit
ñoù laø: 1 bit start (luoân luoân laø 0), 8 bit döõ lieäu (LSB ñaàu tieân) vaø 1 bit stop
(luoân luoân laø 1). Vôùi hoaït ñoäng thu, bit stop ñöôïc ñöa vaøo RB8 trong SCON.
Trong 8951 cheá ñoä baud ñöôïc ñaët baèng toác ñoä baùo traøn cuûa timer 1.
Taïo xung nhòp vaø ñoàng boä hoùa caùc thanh ghi dòch cuûa port noái tieáp
trong caùc cheá ñoä 1,2 vaø 3 ñöôïc thieát laäp baèng boä ñeám 4 bit chia cho 16,
ngoõ ra laø xung nhòp toác ñoä baud. Ngoõ vaøo cuûa boä ñeám naøy ñöôïc choïn qua
phaàn meàm

Toác ñoä  16
baud

Xung nhòp toác ñoä baud


Thanh ghi dòch port noái
tieáp
2.4. UART 9 bit vôùi toác ñoä baud coá ñònh (cheá ñoä 2):
Khi SM1=1 vaø SM0=0, coång noái tieáp laøm vieäc ôû cheá ñoä 2, nhö moät
UART 9bit coù toác ñoä baud coá ñònh, 11 bit seõ ñöôïc phaùt hoaëc thu:1bit start, 8
bit data, 1 bit data thöù 9 coù theå ñöôïc laäp trình vaø 1 bit stop. Khi phaùt bit thöù 9
laø baát cöù gì ñaõ ñöôïc ñöa vaøo TB8 trong SCON (coù theå laø bit Parity) .Khi thu
bit thöù 9 thu ñöôïc seõ ôû trong RB8. Toác ñoä baud ôû cheá ñoä 2 laø 1/32 hoaëc
1/16 taàn soá dao ñoäng treân chip.
2.5. UART 9 bit vôùi toác ñoä baud thay ñoåi ñöôïc (cheá ñoä 3):
Cheá ñoä naøy gioáng nhö ôû cheá ñoä 2 ngoaïi tröø toác ñoä baud coù theå
laäp trình ñöôïc vaø ñöôïc cung caáp bôûi Timer.Thaät ra caùc cheá ñoä 1, 2, 3 raát

SVTH : Phan Tieán Hieáu Trang :


37
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

gioáng nhau. Caùi khaùc bieät laø ôû toác ñoä baud (coá ñònh trong cheá ñoä 2, thay
ñoåi trong cheá ñoä 1 vaø 3) vaø ôû soá bit data (8 bit trong cheá ñoä 1,9 trong cheá
ñoä 2 vaø 3).
2.6. Khôûi ñoäng vaø truy xuaát caùc thanh ghi coång noái tieáp:
 Cho Pheùp Thu
Bit cho pheùp boä thu (REN=Receiver Enable) Trong SCON phaûi ñöôïc ñaët leân
1baèng phaàn meàm ñeå cho pheùp thu caùc kyù töï thoâng thöôøng thöïc hieän vieäc
naøy ôû ñaàu chöông trình khi khôûi ñoäng coång noái tieáp, timer … Coù theå thöïc
hieän vieäc naøy theo hai caùch. Leänh:
SETB REN ; ñaët REN leân 1
Hoaëc leänh
MOV SCON,#XXX1XXXXB ; ñaët REN leân 1 hoaëc xoaù caùc bit
khaùc treân SCON khi caàn (caùc X phaûi laø 0 hoaëc 1 ñeå ñaët cheá ñoä laøm vieäc)
Bit döõ lieäu thöù 9:
Bit döõ lieäu thöù 9 caàn phaùt trong caùc cheá ñoä 2 vaø 3 phaûi ñöôïc naïp vaøo
trong TB8 baèng phaàn meàm. Bit döõ lieäu thöù 9 thu ñöôïc ñaët ôû RB8. Phaàn
meàm coù theå caàn hoaëc khoâng caàn bit döõ lieäu thöù 9, phuï thuoäc vaøo ñaëc
tính kyõ thuaät cuûa thieát bò noái tieáp söû duïng (bit döõ lieäu thöù 9 cuõng ñoùng
vai troø quan troïng trong truyeàn thoâng ña xöû lyù )
Theâm 1 bit parity:
Thöôøng söû duïng bit döõ lieäu thöù 9 ñeå theâm parity vaøo kyù töï. Nhö ñaõ
nhaän xeùt ôû chöông tröôùc, bit P trong töø traïng thaùi chöông trình (PSW) ñöôïc
ñaët leân 1 hoaëc bò xoaù bôûi chu kyø maùy ñeå thieát laäp kieåm tra chaún vôùi 8
bit trong thanh tích luõy.
Caùc côø ngaét:
Hai côø ngaét thu vaø phaùt (RI vaø TI) trong SCON ñoùng moät vai troø quan
troïng trong truyeàn thoâng noái tieáp duøng 8951/8051. Caû hai bit ñöôïc ñaët leân 1
baèng phaàn cöùng, nhöng phaûi ñöôïc xoaù baèng phaàn meàm.
2.7. Toác ñoä baud port noái tieáp
Nhö ñaõ noùi, toác ñoä baud coá ñònh ôû caùc cheá ñoä 0 vaø 2. Trong cheá ñoä 0
noù luoân luoân laø taàn soá dao ñoäng treân chip ñöôïc chia cho 12. Thoâng thöôøng
thaïch anh aán ñònh taàn soá dao ñoäng treân chip nhöng cuõng coù theå söû duïng
nguoàn xung nhòp khaùc.

SVTH : Phan Tieán Hieáu Trang :


38
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

Dao ñoäng  12 Xung


nhòp
treân chip toác ñoä
baud
a. Cheá ñoä 0
 64

SMOD=0
Dao ñoäng Xung nhòp toác
treân chip  32 SMOD=1 ñoä baud

b. Cheá ñoä 2

Dao ñoäng
 32 SMOD=0
treân chip Xung nhòp toác
ñoä baud
SMOD=1
 16
c. Cheá ñoä 1 vaø 3
Caùc nguoàn taïo xung nhòp cho port noái tieáp
Maëc nhieân sau khi reset heä thoáng, toác ñoä baud cheá ñoä 2 laø taàn soá
boä dao ñoäng chia cho 64, toác ñoä baud cuõng bò aûnh höôûng bôûi 1 bit trong
thanh ghi ñieàu khieån nguoàn cung caáp (PCON) bit 7 cuûa PCON laø bit SMOD.
Ñaët bit SMOD leân 1 laøm gaáp ñoâi toác ñoä baud trong caùc cheá ñoä 1, 2 vaø 3.
Trong cheá ñoä 2, toác ñoä baud coù theå bò gaáp ñoâi töø giaù trò maëc nhieân cuûa
1/64 taàn soá dao ñoäng (SMOD=0) ñeán 1/32 taàn soá dao ñoäng (SMOD=1)
Vì PCON khoâng ñöôïc ñònh ñòa chæ theo bit, neân ñeå ñaët bit SMOD leân 1
caàn phaûi theo caùc leänh sau:
MOV A,PCON ; laáy giaù trò hieän thôøi cuûa PCON
SETB ACC.7 ; ñaët bit SMOD leân 1
MOV PCON,A ; ghi giaù trò ngöôïc veà PCON
Caùc toác ñoä baud trong caùc cheá ñoä 1 vaø 3 ñöôïc xaùc ñònh baèng toác
ñoä traøn cuûa timer 1. Vì timer hoaït ñoäng ôû taàn soá töông ñoái cao, traøn timer
ñöôïc chia theâm cho 32 (hoaëc 16 neáu SMOD =1 ) tröôùc khi cung caáp toác ñoä
xung nhòp cho port noái tieáp.
3. Toå chöùc ngaét trong 8051
Vi Ñieàu Khieån coù 5 nguoàn ngaét:2 nguoàn ngaét ngoaøi,2 ngaét timer vaø 1 ngaét
Port noái tieáp, taát caû caùc nguoàn ngaét bò caám sau khi reset heä thoáng vaø cho
pheùp bôûi phaàn meàm
3.1.Cho Pheùp vaø Khoâng Cho Pheùp Ngaét
Moãi nguoàn ngaét ñöôïc cho pheùp hoaëc khoâng cho pheùp thoâng qua
thanh ghi chöùc naêng ñaëc bieät coù caùc bit ñöôïc ñòa chæ hoùa IE (Interrupt
Enable) taïi ñòa chæ 0A8H.
BIT SYMBOL BIT ADDRESS DESCRIPTION

SVTH : Phan Tieán Hieáu Trang :


39
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

(1:ENABLE,0:DISABLE)
IE.7 EA AFH Global Enable/Disable
IE.6 EA AEH Undefined
IE.5 ET2 ADH Enable Timer 2 Interrupt (8052)
IE.4 ES ACH Enable Serial Port Interrupt
IE.3 ET1 ABH Enable Timer 1 Interrupt
IE.2 EX1 AAH Enable External 1 Interrupt
IE.1 ET0 A9H Enable Timer 0 Interrupt
IE.0 EX0 A8H Enable External 0 Interrupt

3.2. VeùcTô Ngaét


Khi ngaét ñöôïc chaáp nhaän giaù trò ñöôïc ñöa vaøo PC (Program Counter) goïi laø
vector ngaét (Interrupt Vector)

INTERRUPT FLAG VECTOR ADDRESS


System Reset RST 0000 H
External 0 IE0 0003 H
Timer 0 TF0 000B H
External 1 IE1 0013 H
Timer 1 TF1 001B H
Serial Port RI OR TI 0023 H
Timer 2 TF2 OR EXF2 002B H

3.3. Ngaét Port noái Tieáp


Ngaét Port noái tieáp xaûy ra khi caû 2 côø ngaét truyeàn (TI) hoaëc côø ngaét
nhaän (RI) ñöôïc ñaët. Ngaét truyeàn xaûy ra khi bit cuoái cuøng trong SBUF truyeàn
xong töùc laø luùc naøy thanh ghi SBUF roãng .Ngaét nhaän xaûy ra khi SBUF ñaõ
hoaøn thaønh vieäc nhaän vaø ñang ñôïi ñeå ñoïc töùc laø luùc naøy thanh ghi SBUF
ñaày. Caû hai côø ngaét naøy ñöôïc ñaêt bôûi phaàn cöùng vaø xoùa baèng phaàn
meàm.
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,
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 2 8= 256
leänh ñöôïc thi haønh vaø moät leänh khoâng ñöôïc ñònh nghóa. Vaøi leänh coù 1
hoaëc 2 byte bôûi döõ lieäu hoaëc ñòa chæ theâm vaøo Opcode. Trong toaøn boä caùc
leänh coù 139 leänh 1 byte, 92 leänh 2 byte vaø 24 leänh 3 byte.
1. Caùc cheá ñoä ñònh vò ñòa chæ (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

SVTH : Phan Tieán Hieáu Trang :


40
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

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:

Opcode n n 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

SVTH : Phan Tieán Hieáu Trang :


41
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

- 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ún 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

SVTH : Phan Tieán Hieáu Trang :


42
Relative Offset
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

- 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).

Addr 10  Addr Opcode


8

Addr 7  Addr 0

- 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.

SVTH : Phan Tieán Hieáu Trang :


43
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

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 ghi A) 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 Address
- 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.

SVTH : Phan Tieán Hieáu Trang :


44
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

PHAÀN B:

SVTH : Phan Tieán Hieáu Trang :


45
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

CHÖÔNG I:
GIAO TIEÁP GIÖÕA KIT 8951 VÔÙI MAÙY TÍNH

I. PHAÀN CÖÙNG
1. Thieát keá card giao tieáp giöõa 8951 vaø maùy vi tính

Sô Ñoà Card Giao Tieáp Vaø Sô Ñoà Maïch In

SVTH : Phan Tieán Hieáu Trang :


46
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

II. PHAÀN MEÀM


1. Giôùi thieäu phaàn meàm:
Phaàn cöùng ñoù laø nhöõng gì ñaõ coá ñònh, noù laø moät coã maùy, coã maùy
muoán hoaït ñoäng thì phaûi coù coâng nhaân laønh ngheà ñieàu khieån noù, vôùi
cuøng moät coã maùy nhöng ngöôøi coâng nhaân coù tay ngheà cao thì saûn phaåm
caøng coù chaát löôïng. Töø ñoù chuùng ta nhaän thaáy raèng, phaàn cöùng muoán
hoaït ñoäng ñöôïc ñoøi hoûi phaûi coù söï can thieäp cuûa con ngöôøi maø chuû yeáu
laø thoâng qua phaàn meàm ñieàu khieån vaø söï hoaït ñoäng meàm deûo cuûa phaàn
cöùng laïi phuï thuoäc vaøo trình ñoä ngöôøi laäp trình. Nhö vaäy, phaàn meàm vaø
phaàn cöùng tuy laø hai boä phaän hoaït ñoäng ñoäc laäp nhöng hoaït ñoäng cuûa
chuùng khoâng theå taùch rôøi nhau trong cuøng moät heä thoáng, chuùng hoã trôï
laãn nhau ñeå hình thaønh neân hoaït ñoäng cuûa heä thoáng.
Bieát ñöôïc taàm quan troïng cuûa phaàn meàm, chuùng ta seõ vaän duïng phaàn
cöùng ñeå caùc chöông trình phaàn meàm phuïc vuï muïch ñích cuûa chuùng ta.
2. Giôùi thieäu ngoân ngöõ Assembly:
Khi maùy tính thöïc hieän chöông trình, noù ñoïc moät daõy caùc soá nhò phaân
chæ goàm toaøn caùc soá 0 vaø 1 vaøo boä nhôù, giaûi maõ roài hieån thò. Ñeå cho
deã ñoïc vaø deã vieát hôn thöôøng ta vieát caùc soá nhò phaân döôùi daïng caùc soá
thaäp luïc phaân ñöôïc goïi laø chöông trình vieát baèng ngoân ngöõ maùy. Ta coù
theå vieát vaø thöïc hieän moät chöông trình ngoân ngöõ maùy baèng phaàn meàm
DEBUG, duøng leänh “E” hay leänh “A” ñeå nhaäp caùc maõ leänh vaøo boä nhôù,
sau ñoù coù theå duøng leänh “G” hoaëc leänh “P“ ñeå thöïc hieän chöông trình.
Tuy chöông trình coù theå vieát tröïc tieáp baèng ngoân ngöõ maùy, nhöng neáu
trong chöông trình coù moät loãi naøo ñoù, hoaëc muoán theâm hoaëc xoaù moät maõ
leänh naøo ñoù coù ñiaï chæ ñi keøm nhö jump, call, loop … cuõng phaûi ñöôïc tính
toaùn laïi cho ñuùng ñòa chæ, neân raát khoù cho vieäc laäp, söûa vaø baûo trì chöông
trình. Vì vaäy thay vì vieát tröïc tieáp baèng ngoân ngöõ maùy, ngöôøi laäp trình coù
theå vieát baèng moät ngoân ngöõ döôùi daïng caùc kyù hieäu hình thöùc hoaëc caùc
töø gôïi nhôù töông ñöông vôùi moät leänh cuûa CPU. Ñaây chính laø Hôïp Ngöõ
(Assembly Language).
Hôïp ngöõ (Assembly Language) laø ngoân ngöõ laäp trình caáp thaáp gaàn vôùi
ngoân ngöõ maùy.
Assembly laø chöông trình dòch caùc chöông trình vieát baèng hôïp ngöõ sang
maõ maùy.
Caùc chöông trình dòch thoâng duïng hieän nay laø Macro Assembler (MASM)
cuûa haõng phaàn meàm noåi tieáng Microsoft vaø Turbo Assembler (TASM) cuûa
haõng Borland. Giöõa hai Chöông trình naøy coù söï khaùc nhau ñoâi chuùt, nhöng
veà coâng duïng thì nhö nhau vaø töông thích vôùi nhau.
Hieän nay chöông trình dòch ñöôïc nhieàu ngöôøi söû duïng nhaát laø Macro
Assembler 5.0 vaø chöông trình giao tieáp trong luaän aùn naøy cuõng söû duïng
chöông
trình dòch naøy.

SVTH : Phan Tieán Hieáu Trang :


47
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

3. Löu ñoà vaø chöông trình giao tieáp


Phaàn meàm giao tieáp trong maùy tính söû duïng ngoân ngöõ Assembly treân cô
sôû söû duïng File.Hex vaø xöû lyù töøng kyù töï. Coøn phaàn meàm giao tieáp trong
KIT ñöôïc vieát baèng ngoân ngöõ cuûa 8951.
 Xöû lyù File
File xuaát ra ngoaøi ñöôïc löu tröõ trong maùy döôùi daïng File.Hex.
Caáu truùc moãi doøng cuûa File.Hex:
: NNAAAARRHHHHHHHHHH . . . HHHCCTT
Trong ñoù :
: Baét ñaàu doøng
NN Soá löôïng byte chöông trình trong doøng
AAAA Ñòa chæ cuûa byte ñaàu tieân
RR Kieåu Recort :00 , ôû doøng ñaàu tieân 01
HH Caùc byte chöông trình trong khuoân maãu Hex
CC Toång kieåm tra trong khuoân maãu Hex
TT Keát thuùc doøng CR vaø LF
Toång kieåm tra ñöôïc hình thaønh töø toång cuûa taát caû caùc byte töø NN ñeán byte
cuoái cuøng cuûa chöông trình HH.
CC = [0 – ( Toång taát caû caùc byte NN ñeán HH )] vaø FFH
Nhöng khi truyeàn ra ngoaøi thì döõ lieäu xuaát ra döôùi daïng maõ cuûa phím
aán, maø chöông trình nhaän döõ lieäu cuûa KIT thì nhaän döõ lieäu vaøo döôùi daïng Hex.
Do ñoù, chöông trình truyeàn phaûi coù ñoaïn xöû lyù File ñeå beân truyeàn vaø beân nhaän
thoáng nhaát vôùi nhau.
VD: ta coù File HIEU.HEX
:10000000230039140C23FF39140C04BF13FEB26E6 :1000110022FEEFAC1
435F6E7ABAFBEAA34616E6
:0000001FF
Sau khi xöû lyù vaø truyeàn ra ngoaøi File.Hex coù daïng :
:100000230039140C23FF39140C04BF13FEB26 :10001122FEEFAC1435F6E7
ABAFBEAA34616
:0000001FF
Trong File.Hex coù maõ baét ñaàu doøng luoân laø 3A (:) , soá kyù töï caàn truyeàn
trong moät doøng vaø ñòa chæ caàn löu tröõ döõ lieäu. Do ñoù, trong chöông triønh nhaän
phaûi phaân bieät taát caû caùc caáu truùc cuûa File.Hex ñeå nhaän döõ lieäu vaø löu tröõ
vaøo ñuùng oâ nhôù.

SVTH : Phan Tieán Hieáu Trang :


48
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

3.1. Giao tieáp giöõa KIT vôùi KIT:


Löu ñoà chöông trình nhaän döõ lieäu töø
KIT
BEGIN

Khôûi ñoäng port noái


Löu ñoà tieáp
chöông trình truyeàn döõ lieäu töø
KIT
Naïp ñòa chæ quaûn lyù vuøng
BEGIN
data
ñeå truyeàn
Khôûi ñoäng port
Truyeàn noái
data
tieáp

Naïp ñòa chæ quaûn lyù vuøng


data
Kieåm tra bit TI sau khi truyeàn
ñeå nhaän

TI = 0
TI = 1
Kieåm tra bitXoùa bitkhi nhaän
RI sau
TI
RI = 0
Taêng ñòa chæ quaûn lyù data
truyeàn RI=1
Xoùa bit
Naïp bieán
RI ñeám data
truyeàn
Giaûm
Nhaänbieán
data
ñeám

S Taêng ñòa chæ quaûn lyù vuøng data


nhaän So saùnh bieán ñeám vôùi
FF
Naïp bieán ñeámÑ data
nhaän
E
Giaûm bieán
ñeám

S
So saùnh bieán ñeám vôùi
SVTH : Phan Tieán Hieáu FF Trang :
49
Ñ
END
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

SVTH : Phan Tieán Hieáu Trang :


50
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

 Chöông trình truyeàn döõ lieäu töø KIT


org 5100h
mov ie,#00h ; caám ngaét
mov tmod,#20h ; timer mode 2, 2400baud
mov th1,#-13
setb tr1
mov scon,#0fch
mov dptr,#6000h ; naïp ñòa chæ quaûn lyù vuøng maõ
x2: mov a,@dptr ; laáy döõ lieäu ñeå truyeàn ñi
mov sbuf,a ; göûi döõ lieäu leân thanh ghi ñeäm
x1: jnb ti,x1 ; kieåm tra bit ti sau khi göûi
clr ti
inc dptr
mov a,dpl
cjne a,#0ffh,x2
mov a,#76h; naïp maõ chöõ H ñeå baùo keát thuùc
mov dptr,#0c000h
movx @dptr,a
sjmp $

 Chöông trình nhaän döõ lieäu töø KIT


org 5100h
mov ie,#00h ; caám ngaét
mov tmod,#20h ; timer mode 2, 2400baud
mov th1,#-13
setb tr1
mov scon,#0fch
mov dptr,#6000h ; naïp ñòa chæ quaûn lyù vuøng maõ
xr1: jnb ri,xr1
clr ri
mov a,sbuf ; göûi döõ lieäu leân thanh ghi ñeäm
movx @dptr,a
inc dptr
mov a,dpl
cjne a,#0ffh,xr1
mov a,#76h; naïp maõ chöõ H ñeå baùo keát thuùc
mov dptr,#0c000h
movx dptr,a
sjmp $

SVTH : Phan Tieán Hieáu Trang :


51
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

Löu ñoà chöông trình truyeàn döõ lieäu coù giôùi haïn soá byte vaø ñòa chæ
quaûn lyù data:

BEGIN

Khôûi taïo giao tieáp noái


tieáp

Naïp ñòa chæ quaûn lyù vuøng data ñeå


truyeàn

Laáy döõ lieäu töø oâ nhôù naïp vaøo


thanh ghi
laøm bieán ñeám
Laáy ñòa chæ byte H naïp vaøo thanh ghi
R1
Laáy ñòa chæ byte L naïp vaøo thanh ghi
R0
Göûi bieán ñeám ra sbuf ñeå
truyeàn

Kieåm tra bit TI

TI=0
TI=1
Xoùa bit

Göûi byte ñòa chæ H ra sbuf ñeå


truyeàn

Kieåm tra bit TI

TI=0
TI=1

Xoùa bit

SVTH : Phan Tieán Hieáu Trang :


52
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

Göûi ñòa chæ byte L ra sbuf ñeå


truyeàn

Kieåm tra bit TI

TI=0
TI=1
Xoùa bit

Naïp ñòa chæ byte H vaø L vaøo


dptr
Laáy döõ lieäu chöùa trong dptr ñeå
truyeàn

Kieåm tra bit TI

TI=0
TI=1
Xoùa bit

Taêng ñòa chæ quaûn lyù


dptr
Giaûm bieán
ñeám

So saùnh bieán ñeám vôùi

S
Ñ
Hieån thò chöõ E ñeå baùo keát
thuùc

END

SVTH : Phan Tieán Hieáu Trang :


53
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

Löu ñoà chöông trình nhaän döõ lieäu coù giôùi haïn soá byte vaø ñòa chæ
quaûn lyù data:

BEGIN

Khôûi taïo giao tieáp noái


tieáp

Kieåm tra bit RI

RI=0
RI=1

Xoùa bit

Nhaän döõ lieäu vaø göûi ra thanh ghi


R6
laøm bieán ñeám

Kieåm tra bit RI


RI=0
RI=1

Xoùa bit

Nhaän döõ lieäu vaø löu tröõ


vaøo dph

Kieåm tra bit RI

RI=0
RI=1

Xoùa bit

SVTH : Phan Tieán Hieáu Trang :


54
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

Nhaän döõ lieäu vaø löu tröõ


vaøo dpl

Kieåm tra bit RI

RI=0
RI=1

Xoùa bit

Nhaän döõ lieäu vaø löu tröõ vaøo oâ


nhôù coù
chöùa trong dptr

Taêng dptr

Giaûm bieán
ñeám

So saùnh bieán ñeám vôùi

S
Ñ

Hieån thò chöõ E ñeå baùo keát


thuùc

END

SVTH : Phan Tieán Hieáu Trang :


55
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

Chöông trình truyeàn döõ lieäu coù giôùi haïn soá byte vaø ñòa chæ quaûn lyù
data

;vung nho 6000h chua bien dem se goi,6001H chua byte addr H ,6002H chua byte L
pcon equ 87h
org 4100h
mov IE,#00h
mov scon,#11011100b ;mode3, 2400baud
mov tmod,#20h
mov th1,#-13
setb tr1 ;start timer 1
mov dptr,#6000h ;nap dia chi quan li vung ma
movx a,@dptr ;lay so luong byte se goi
mov r6,a ;cat sang r6
inc dptr
movx a,@dptr ;lay dia chi byte H quan li du lieu
mov r1,a
inc dptr
movx a,@dptr ;lay dia chi byte L quan li du lieu
mov r0,a
x4: jb P1.1,x4
mov a,r6
mov sbuf,a ;goi so luong byte di truoc
x5: jnb TI,x5 ;kiem tra Ti = 1
clr TI ;xoa TI de goi byte ke
x6: jb P1.1,x6
mov a,r1
mov sbuf,a ;goi dia chi byte cao
x7: jnb TI,x7
clr TI
x8: jb P1.1,x8
mov a,r6
mov sbuf,a ;goi dia chi byte thap
x9: jnb TI,x9
clr TI
mov dpl,r0 ;nap dia chi cho dptr
mov dph,r1
x3: jb P1.1,x3
x2: movx a,@dptr ;lay du lieu de truyen di
mov sbuf,a ;goi len thanh ghi dem
x1: jnb TI,x1 ;kiem tra ti vi sau khi goi 1 byte thi ti=1
clr ti ;neu dung bang 1 thi xoa de goi tiep byte thu 2
inc dptr
djnz r6,x3 ;giam bien dem di 1
mov dptr,#0c000h
mov a,#79h

SVTH : Phan Tieán Hieáu Trang :


56
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

movx @dptr,a
sjmp $

Chöông trình nhaän döõ lieäu coù giôùi haïn soá byte vaø ñòa chæ quaûn lyù
data
org 4100h
mov IE,#00h
setb p1.1 ;chua cho phep nhan
mov scon,#11011100b ;khoi tao giao tiep noi tiep
mov tmod,#20h ;khoi tao giao tiep noi tiep
mov th1,#-13 ;khoi tao giao tiep noi tiep
setb tr1 ;start timer 1
xr6: clr p1.1 ;cho phep truyen
xr1: jnb ri,xr1 ;kiem tra xem co du lieu hay khong
setb p1.1
clr ri ;xoa vi da co du lieu
mov a,sbuf ;lay du lieu tu may phat goi toi
cjne a,#0FFh,xr2
sjmp xr1
xr2: mov r6,a ;luu tru so byte nhan
clr p1.1 ;cho phep truyen
xr3: jnb ri,xr3 ;kiem tra xem co du lieu hay khong
setb p1.1
clr ri ;xoa vi da co du lieu
mov a,sbuf ;lay du lieu tu may phat goi toi
mov dph,a
clr p1.1 ;cho phep truyen
xr5: jnb ri,xr5 ;kiem tra xem co du lieu hay khong
setb p1.1
clr ri ;xoa vi da co du lieu
mov a,sbuf ;lay du lieu tu may phat goi toi
mov dpl,a
xr4: clr p1.1
jnb ri,xr2 ;kiem tra xem co du lieu hay khong
setb p1.1
clr ri ;xoa vi da co du lieu
mov a,sbuf ;lay du lieu tu may phat goi toi
movx @dptr,a ;cat du lieu
inc dptr
djnz r6,xr4 ;giam bien dem
mov dptr,#0c000h
mov a,#79h
movx @dptr,a
sjmp xr6 ;quay tro lai de nhan byte du lieu ke
end

SVTH : Phan Tieán Hieáu Trang :


57
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

3.2. Giao tieáp giöõa KIT vaø maùy tính:


Löu ñoà chöông trình nhaän döõ lieäu töø maùy tính:

BEGIN

Khôûi taïo giao tieáp noái


tieáp

Kieåm tra bit RI

RI=0
RI=1
Xoùa bit

Nhaän data töø sbuf vaøo


R0

Kieåm tra bit RI

RI=0
RI=1
Xoùa bit

Nhaän data töø sbuf vaøo R1 laøm bieán


ñeám

Kieåm tra bit RI

RI=0
RI=1
Xoùa bit

SVTH : Phan Tieán Hieáu Trang :


58
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

Nhaän data töø sbuf vaøo


dph

Kieåm tra bit RI

RI=0
RI=1

Xoùa bit

Nhaän data töø sbuf vaøo


dpl

Kieåm tra bit RI

RI=0
RI=1

Xoùa bit

Nhaän data töø sbuf vaøo thanh ghi


A
Laáy noäi dung cuûa thanh ghi A göûi
vaøo
oâ nhôù coù ñòa chæ chöùa trong
Taêng dptr

Giaûm bieán ñeám vaø


so saùnh vôùi 00H
S
Ñ
Nhaûy veà
begin
END

SVTH : Phan Tieán Hieáu Trang :


59
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

 Chöông trình nhaän döõ lieäu töø maùy tính:


org 5000h
mov ie,#00h
mov tmod,#20h
mov th1,#-13
setb tr1
mov scon,#0fch
xr1: jnb ri,xr1 ;nhan ma dau ':'
clr ri
mov r0,sbuf
cjne r0,#3ah,xr1
xr2: jnb ri,xr2 ;nhan so byte can goi
clr ri
mov r1,sbuf
xr3: jnb ri,xr3
clr ri
mov dph,sbuf
xr4: jnb ri,xr4
clr ri
mov dpl,sbuf
xr5: jnb ri,xr5
clr ri
mov a,sbuf
movx @dptr,a
inc dptr
djnz r1,xr5
sjmp xr1
end

SVTH : Phan Tieán Hieáu Trang :


60
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

löu ñoà chöông trình truyeàn döõ lieäu töø maùy tính:

BEGIN

Khai baùo caùc


bieán

Hieån thò Menu

F6
Ñaët caùch
thöùc truyeàn
F5 Kieåm tra phím
aán F7
Môû File.Hex ñeå Hieån thò caùch
truyeàn thieát laäp
truyeàn
F8
Hieån thò File.Hex
leân maøn hình

Xöû lyù File.Hex


vaø truyeàn

END

SVTH : Phan Tieán Hieáu Trang :


61
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

III. Ñaùnh giaù keát quaû thi coâng:


Vôùi söï phaùt trieån ñeán möùc tieân tieán cuûa KHKT nhö hieän nay, ñaëc
bieät laø lónh vöïc ñieän töû vaø vi tính ñaõ laøm tieàn ñeà cho moïi ngaønh khoa hoïc
khaùc deã daøng phaùt trieån – söï phaùt trieån vuõ baõo ñoù luoân ñeo ñuoåi hoaøi
baûo duy nhaát – phuïc vuï con ngöôøi. Keát quaû, moãi öùng duïng trong cuoäc
soáng con ngöôøi luoân saün saøng thöøa höôûng nhöõng tinh hoa ñoù, nhaèm naâng
cao naêng suaát lao ñoäng, naâng cao cuoäc soáng con ngöôøi, khoâng ngöøng thuùc
ñaåy xaõ hoäi veà moïi maët.
Ñeå tieáp caän vôùi lónh vöïc töï ñoäng hoaù, ñaëc bieät laø lónh vöïc truyeàn
döõ lieäu neân em baét ñaàu nghieân cöùu lónh vöïc naøy vaø thöïc hieän ñeà
taøi :”Giao Tieáp Giöõa KIT Vi Ñieàu Khieån 8951 vaø Maùy Vi Tính” vôùi nhöõng
thaønh quaû nhaát ñònh trong thi coâng:
_ Vieát chöông trình giao tieáp giöõa KIT Vi Ñieàu Khieån 8951 vaø Maùy Vi
Tính.
_ Thieát keá card giao tieáp giöõa KIT Vi Ñieàu Khieån 8951 vaø Maùy Vi Tính
thoâng qua port giao tieáp noái tieáp.
Ngoaøi ra coøn coù chöông trình truyeàn vaø nhaän döõ lieäu giöõa 2 KIT. Maëc
duø ñaõ coá gaéng nhieàu vaãn khoâng traùnh ñöôïc nhöõng thieáu soùt: chöa hoaøn
thaønh ñöôïc chöông trình truyeàn döõ lieäu töø KIT sang vaø chöông trình giao dieän
ñieàu khieån coøn raát ñôn giaûn.
Ñaây laø laàn ñaàu tieân tieán haønh thi coâng vôùi chöông trình giao tieáp khaù
phöùc taïp, neân yù muoán hoaøn chænh ñeán möùc toái öu nhöng vaãn chöa ñaït
ñöôïc. Tuy nhieân, keát quaû thi coâng vaãn ñaït ñöôïc nhöõng yeâu caàu nhaát ñònh.

SVTH : Phan Tieán Hieáu Trang :


62
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

KEÁT LUAÄN
Qua 8 tuaàn tieán haønh laøm vieäc vôùi söï noã löïc cuûa baûn thaân vaø kieán
thöùc ñöôïc trang bò ôû nhaø tröôøng, caùc kieán thöùc thöïc teá maø em hoïc hoûi
ñöôïc nhôø söï giuùp ñôõ cuûa caùc thaày coâ trong khoa ñieän cuøng vôùi söï giuùp
ñôõ taän tình cuûa thaày: Nguyeãn Ñình Phuù neân em ñaõ hoaøn thaønh taäp luaän
vaên naøy ñuùng thôøi gian quy ñònh vaø thu ñöôïc nhöõng keát quaû nhaát ñònh:
_ Thieát keá card giao tieáp giöõa maùy tính vaø Vi Ñieàu Khieån.
_ Vieát chöông trình cho Vi Ñieàu Khieån vaø maùy tính ñeå giao tieáp giöõa hai
heä thoáng.
Ñaây laø laàn ñaàu tieân thöïc hieän ñeà taøi vôùi quy moâ roäng, nhöng do thôøi
gian, kieán thöùc vaø kinh nghieäm coøn nhieàu haïn cheá neân em nhaän thaáy raèng
taäp luaän vaên naøy chöa ñaùp öùng ñaày ñuû nhu caàu ñeà taøi ra … Do ñoù, em
mong raèng vôùi söï thieáu soùt treân, em seõ nhaän ñöôïc söï thoâng caûm vaø chæ
daãn theâm cuûa quyù thaày coâ trong khoa Ñieän cuøng giaùo vieân höôùng daãn.
Em xin chaân thaønh caûm ôn söï giuùp ñôõ taän tình vaø quyù baùo cuûa caùc
thaày coâ ñaõ taïo ñieàu kieän cho em hoaøn thaønh toát nhieäm vuï ñöôïc giao ñuùng
thôøi gian quy ñònh.
Em raát mong söï ñoùng goùp yù kieán cuûa quyù thaày coâ cuøng caùc baïn sinh
vieân ñeå taäp luaän vaên ñöôïc hoaøn haûo hôn.
HÖÔÙNG PHAÙT TRIEÅN ÑEÀ TAØI
Ngaøy nay vôùi söï phaùt trieån nhanh choùng cuûa khoa hoïc kyõ thaät vaø ñaát
nöôùc ta ñang chuyeån mình sang neàn saûn xuaát coâng nghieäp. Do ñoù, ñeå ñaùp
öùng vôùi nhu caàu thöïc teá thì chuùng ta caàn phaûi nghieân cöùu theâm caùc loaïi
giao dieän noái tieáp khaùc ñeå taêng theâm ñöôïc khoaûng caùch vaø toác ñoä
truyeàn. Ngoaøi ra, coøn coù theå döïa treân taäp luaän aùn naøy ñeå vieát theâm
nhieàu chöông trình khaùc coù theå öùng duïng trong thöïc teá vaø caûi tieán laïi
chöông trình naøy ñeå tieän lôïi cho ngöôøi söû duïng …

SVTH : Phan Tieán Hieáu Trang :


63
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

TAØI LIEÄU THAM KHAÛO


1. ÑO LÖÔØNG VAØ ÑIEÀU KHIEÅN BAÈNG MAÙY VI TÍNH
Ngoâ Dieän Taäp _ NXB KHKT Haø Noäi _ 1996
2. ÑIEÀU KHIEÅN VAØ GHEÙP NOÁI CAÙC THIEÁT BÒ NGOAÏI VI
Traàn Baù Thaùi _ NXB KHKT Haø Noäi _ 1984
3. KYÕ THUAÄT GHEÙP NOÁI MAÙY VI TÍNH
Nguyeãn Maïnh Giang _ NXB GD Haø Noäi _1997
4. GIAÙO TRÌNH HÔÏP NGÖÕ
Ñaïi Hoïc Môû Baùn Coâng TPHCM _ 1995
5. TRUYEÀN DÖÕ LIEÄU
Toáng Vaên On _ ÑH KYÕ THUAÄT TPHCM _ 1999
6. VI XÖÛ LYÙ TRONG ÑO LÖÔØNG VAØ ÑIEÀU KHIEÅN
Ngoâ Dieän Taäp _ NXB KHKT Haø Noäi _ 1996
7. KYÕ THUAÄT VI XÖÛ LYÙ
Vaên Theá Minh _ NXB GD _ 1997
8. ASSEMBLY LANGUAGE TOOLS and TECHNIQUES FOR
THE IPM MICROCOMPUTERS
Julio Sanches _ Prentice Hall _ 1990
9. MICROCOMPUTER INTERFACING
Bruce A.Artwick _ Prentice Hall _ 1980
10. THE 8051 MICROCONTROLLER
I.Scott Mackenzic

SVTH : Phan Tieán Hieáu Trang :


64
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

PHAÀN C:

SVTH : Phan Tieán Hieáu Trang :


65
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

I. TOÙM TAÉT TAÄP LEÄNH CUÛA VXL 8051 – 8951 – 8952:

Data Transfer Instructions.


Instruction code Hexa Explanation
Mnemonic D7 D6 D5 D4 D3 D2 D1 D0 decimal
MOV A, Rn 1 1 1 0 1 n2 n1 n0 E8  EF (A)  (Rn)
MOV A, direct 1 1 1 0 0 1 0 1 E5 (A)  (direct)
a7 a6 a5 a4 a3 a2 a1 a0 Byte 2
MOV A, @Ri 1 1 1 0 0 1 1 I E6  E7 (A)  ((Ri))
MOV A, #data 0 1 1 1 0 1 0 0 74 (A)  #data
d7 d6 d5 d4 d3 d2 d1 d0 Byte 2
MOV Rn, A 1 1 1 1 1 n2 n1 n0 F8  FF (Rn)  (A)
MOV Rn, direct 1 0 1 0 1 n2 n1 n0 A8  AF (Rn)  (direct)
a7 a6 a5 a4 a3 a2 a1 a0 Byte 2
MOV Rn, #data 0 1 1 1 1 n2 n1 n0 78  7F (Rn)  #data
d7 d6 d5 d4 d3 d2 d1 d0 Byte 2
MOV direct, A 1 1 1 1 0 1 0 1 F5 (direct)  (A)
a7 a6 a5 a4 a3 a2 a1 a0 Byte 2
MOV direct, Rn 1 0 0 0 1 n2 n1 n0 88  8F (direct)  (Rn)
a7 a6 a5 a4 a3 a2 a1 a0 Byte 2
MOV direct, direct 1 0 0 0 0 1 0 1 88  8F (direct)  (direct)
a7 a6 a5 a4 a3 a2 a1 a0 Byte 2 (source)
a7 a6 a5 a4 a3 a2 a1 a0 Byte 3 (destination)
MOV direct, @Ri 1 0 0 0 0 1 1 I 86  87 (direct)  ((Ri))
a7 a6 a5 a4 a3 a2 a1 a0 Byte 2
MOV direct, #data 0 1 1 1 0 1 0 1 75 (direct)  #data
a7 a6 a5 a4 a3 a2 a1 a0 Byte 2
d7 d6 d5 d4 d3 d2 d1 d0 Byte 3
MOV @Ri, A 1 1 1 1 0 1 1 I F6  F7 ((Ri))  (A)
MOV @Ri, direct 1 0 1 0 0 1 1 I A6  A7 ((Ri))  (direct)
a7 a6 a5 a4 a3 a2 a1 a0 Byte 2
MOV @Ri, #data 0 1 1 1 0 1 1 i 76  77 ((Ri))  (data)
d7 d6 d5 d4 d3 d2 d1 d0 Byte 2
MOV dptr, #data 1 0 0 1 0 0 0 0 75 (dptr)  #data 15-0
16 d15 d14 d13 d12 d11 d10 d9 d8 Byte 2 (dpH)  #data 15-8
d7 d6 d5 d4 d3 d2 d1 d0 Byte 3 (dpL)  #data 7-0
MOVC A, @A + 1 0 0 1 0 0 1 1 93 (A)  ((A) + (dptr)) External Ram
dptr
MOVC A, @A + 1 0 0 0 0 0 1 1 83 (A)  ((A) + (PC)) External Ram
PC
MOVX A, @Ri 1 1 1 0 0 0 1 i E2  E3 (A)((Ri)) External Ram
MOVX A, @ dptr 1 1 1 0 0 0 0 0 93 (A)((dptr)) External Ram
MOVX @Ri, A 1 1 1 1 0 0 1 i F2  F3 ((Ri))  (A)
MOVX @ dptr, A 1 1 1 1 0 0 0 0 F0 ((dptr))  (A)
PUSH direct 1 1 0 0 0 0 0 0 C0 (SP)  (SP) + 1
a7 a6 a5 a4 a3 a2 a1 a0 Byte 2 ((SP))  (direct)
POP direct 1 1 0 1 0 0 0 0 D0 (direct)  ((SP))
a7 a6 a5 a4 a3 a2 a1 a0 Byte 2 (SP)  (SP) – 1
SVTH : Phan Tieán Hieáu Trang :
66
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

XCH A, Rn 1 1 0 0 1 n2 n1 n0 C8  CF (direct)  (Rn)


XCH A, direct 1 1 0 0 0 1 0 1 C5 (A)  (direct)
a7 a6 a5 a4 a3 a2 a1 a0 Byte 2
XCH A, @Ri 1 1 0 0 0 1 1 i C6  C7 (A)  ((Ri))
XCHD A, @Ri 1 1 0 1 0 1 1 i D6  D7 (A3-0)  ((Ri3-0))

SVTH : Phan Tieán Hieáu Trang :


67
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

Mathematical (Arithmetic) Instructions.


Instruction code Hexa Explanation
Mnemonic D7 D6 D5 D4 D3 D2 D1 D0 decimal
ADD A, Rn 0 0 1 0 1 n2 n1 n0 28  2F (A)  (A) + (Rn)
ADD A, direct 0 0 1 0 0 1 0 1 25 (A)  (A) + (direct)
a7 a6 a5 a4 a3 a2 a1 a0 Byte 2
ADD A, @Ri 0 0 1 0 0 1 1 I 26  27 (A)  (A) + ((Ri))
ADD A, #data 0 0 1 0 0 1 0 0 24 (A)  (A) + #data
d7 d6 d5 d4 d3 d2 d1 d0 Byte 2
ADDC A, Rn 0 0 1 1 1 n2 n1 n0 38  3F (A)  (A) + (Rn) + (C)
ADDC A, direct 0 0 1 1 0 1 0 1 35 (A)  (A) + (direct) + (C)
a7 a6 a5 a4 a3 a2 a1 a0 Byte 2
ADDC A, @Ri 0 0 1 1 0 1 1 I 36  37 (A)  (A) + ((Ri)) + (C)
ADDC A, #data 0 0 1 1 0 1 0 0 34 (A)  (A) + #data +(C)
d7 d6 d5 d4 d3 d2 d1 d0 Byte 2
SUBB A, Rn 1 0 0 1 1 n2 n1 n0 98  9F (A)  (A) - (Rn) - (C)
SUBB A, direct 1 0 0 1 0 1 0 1 95 (A)  (A) - (direct) - (C)
a7 a6 a5 a4 a3 a2 a1 a0 Byte 2
SUBB A, @Ri 1 0 0 1 0 1 1 I 96  97 (A)  (A) - ((Ri)) - (C)
SUBB A, #data 1 0 0 1 0 1 0 0 94 (A)  (A) - #data -(C)
d7 d6 d5 d4 d3 d2 d1 d0 Byte 2
INC A 0 0 0 0 0 1 0 0 04 (A)  (A) + 1
INC Rn 0 0 0 0 1 n2 n1 n0 08  0F (Rn)  (Rn) + 1
INC direct 0 0 0 0 0 1 0 1 05 (direct)  (direct) + 1
a7 a6 a5 a4 a3 a2 a1 a0 Byte 2
INC @Ri 0 0 0 0 0 1 1 I 06  07 ((Ri))  ((Ri)) + 1
INC dptr 1 0 1 0 0 0 1 1 A3 (dptr)  (dptr) + 1
DEC A 0 0 0 1 0 1 0 0 14 (A)  (A) - 1
DEC Rn 0 0 0 1 1 n2 n1 n0 18  1F (Rn)  (Rn) - 1
DEC direct 0 0 0 1 0 1 0 1 15 (direct)  (direct) - 1
a7 a6 a5 a4 a3 a2 a1 a0 Byte 2
DEC @Ri 0 0 0 1 0 1 1 I 16  17 ((Ri))  ((Ri)) - 1
MUL AB 1 0 1 0 0 1 0 0 A4 (B15-8),(A7-0)  (A)(B)
DIV AB 1 0 0 0 0 1 0 0 84 (A15-8),(B7-0)  (A)/(B)
DA A 1 1 0 1 0 1 0 0 D4 Content of A laø BCD

SVTH : Phan Tieán Hieáu Trang :


68
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

Logic Instructions.
Instruction code Hexa Explanation
Mnemonic D7 D6 D5 D4 D3 D2 D1 D0 decimal
ANL A, Rn 0 1 0 1 1 n2 n1 n0 58  5F (A)  (A) AND (Rn)
ANL A, direct 0 1 0 1 0 1 0 1 55 (A)  (A) AND (direct)
a7 a6 a5 a4 a3 a2 a1 a0 Byte 2
ANL A, @Ri 0 1 0 1 0 1 1 I 56  57 (A)  (A) AND ((Ri))
ANL A, #data 0 1 0 1 0 1 0 0 54 (A)  (A) AND #data
d7 d6 d5 d4 d3 d2 d1 d0 Byte 2
ANL direct, A 0 1 0 1 0 0 1 0 52 (direct)(direct) and (A)
a7 a6 a5 a4 a3 a2 a1 a0 Byte 2
ANL direct, #data 0 1 0 1 0 0 1 1 53 (direct)(direct) and #data
a7 a6 a5 a4 a3 a2 a1 a0 Byte 2
d7 d6 d5 d4 d3 d2 d1 d0 Byte 3
ORL A, Rn 0 1 0 0 1 n2 n1 n0 48  4F (A)  (A) OR (Rn)
ORL A, direct 0 1 0 0 0 1 0 1 45 (A)  (A) OR (direct)
a7 a6 a5 a4 a3 a2 a1 a0 Byte 2
ORL A, @Ri 0 1 0 0 0 1 1 I 46  47 (A)  (A) OR ((Ri))
ORL A, #data 0 1 0 0 0 1 0 0 44 (A)  (A) OR #data
d7 d6 d5 d4 d3 d2 d1 d0 Byte 2
ORL direct, A 0 1 0 0 0 0 1 0 42 (direct)(direct) OR (A)
a7 a6 a5 a4 a3 a2 a1 a0 Byte 2
ORL direct, #data 0 1 0 0 0 0 1 1 43 (direct)(direct) OR #data
a7 a6 a5 a4 a3 a2 a1 a0 Byte 2
d7 d6 d5 d4 d3 d2 d1 d0 Byte 3
XRL A, Rn 0 1 1 0 1 n2 n1 n0 68  6F (A)  (A) XOR (Rn)
XRL A, direct 0 1 1 0 0 1 0 1 65 (A)  (A) XOR (direct)
a7 a6 a5 a4 a3 a2 a1 a0 Byte 2
XRL A, @Ri 0 1 1 0 0 1 1 I 66  67 (A)  (A) XOR ((Ri))
XRL A, #data 0 1 1 0 0 1 0 0 64 (A)  (A) XOR #data
d7 d6 d5 d4 d3 d2 d1 d0 Byte 2
XRL direct, A 0 1 1 0 0 0 1 0 62 (direct)(direct) XOR (A)
a7 a6 a5 a4 a3 a2 a1 a0 Byte 2
XRL direct, #data 0 1 1 0 0 0 1 1 63 (direct)(direct) XOR #data
a7 a6 a5 a4 a3 a2 a1 a0 Byte 2
d7 d6 d5 d4 d3 d2 d1 d0 Byte 3
CLR A 1 1 1 0 0 1 0 0 E4 (A)  0
CPL A 1 1 1 1 0 1 0 0 F4 (A)  (A)
RL A 0 0 1 0 0 0 1 1 23 The contents of the accumulator are
rotated left by one bit.
RLC A 0 0 1 1 0 0 1 1 33 The contents of the accumulator
and carry are rotated left by one bit.
RR A 0 0 0 0 0 0 1 1 03 The contents of the accumulator are
rotated right by one bit.
RRC A 0 0 0 1 0 0 1 1 13 The contents of the accumulator and
carry are rotated right by one bit.
SWAP A 1 1 0 0 0 1 0 0 C4 (A3-0)  (A7-4)

SVTH : Phan Tieán Hieáu Trang :


69
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

Control Transfer Instructions.


Instruction code Hexa Explanation
Mnemonic D7 D6 D5 D4 D3 D2 D1 D0 decimal
ACALL addr 11 A10 a9 a8 1 0 0 0 1 Byte 1 (PC)  (PC) + 2
a7 a6 a5 a4 a3 a2 a1 a0 Byte 2 (SP)  (SP) + 1
((SP))  (PC7-0)
(SP)  (SP) + 1
((SP))  (PC15-8)
(PC)  page address
LCALL addr 16 0 0 0 1 0 0 1 0 12 (PC)  (PC) + 3
a15 a14 a13 a12 a11 a10 a9 a8 Byte 2 (SP)  (SP) + 1
a7 a6 a5 a4 a3 a2 a1 a0 Byte 3 ((SP))  (PC7-0)
(SP)  (SP) + 1
((SP))  (PC15-8)
(PC)  addr15-0
RET 0 0 1 0 0 0 1 0 22 (PC15-8)  ((SP))
(SP)  (SP) - 1
(PC7-0) ((SP))
(SP)  (SP) - 1
RETI 0 0 1 1 0 0 1 0 32 (PC15-8)  ((SP))
(SP)  (SP) - 1
(PC7-0) ((SP))
(SP)  (SP) - 1
AJMP addr 11 a10 a9 a8 0 0 0 0 1 Byte 1 (PC)  (PC) + 2
a7 a6 a5 a4 a3 a2 a1 a0 Byte 2 (PC)  page address
LJMP addr 16 0 0 0 0 0 0 1 0 02 (PC)  addr15-0
a15 a14 a13 a12 a11 a10 a9 a8 Byte 2
a7 a6 a5 a4 a3 a2 a1 a0 Byte 3
SJMP rel 1 0 0 0 0 0 0 0 80 (PC)  (PC) + 2
r7 r6 r5 r4 r3 r2 r1 r0 Byte 2 (PC)  (PC) + rel
JMP @A + dptr 0 1 1 1 0 0 1 1 73 (PC)  (A) + (dptr)
JZ rel 0 1 1 0 0 0 0 0 60 (PC)  (PC) + 2
r7 r6 r5 r4 r3 r2 r1 r0 Byte 2 IF (A) = 0 then (PC)(PC) + rel
JNZ rel 0 1 1 1 0 0 0 0 70 (PC)  (PC) + 2
r7 r6 r5 r4 r3 r2 r1 r0 Byte 2 IF (A)  0 then (PC)(PC) + rel
JC rel 0 1 0 0 0 0 0 0 40 (PC)  (PC) + 2
r7 r6 r5 r4 r3 r2 r1 r0 Byte 2 IF (C) = 0 then (PC)(PC) + rel
JNC rel 0 1 0 1 0 0 0 0 50 (PC)  (PC) + 2
r7 r6 r5 r4 r3 r2 r1 r0 Byte 2 IF (C)  0 then (PC)(PC) + rel
JB bit, rel 0 0 1 0 0 0 0 0 20 (PC)  (PC) + 3
b7 b6 b5 b4 b3 b2 b1 b0 Byte 2 IF (bit)=0 then (PC)(PC) + rel
r7 r6 r5 r4 r3 r2 r1 r0 Byte 3
JNB bit, rel 0 0 1 1 0 0 0 0 30 (PC)  (PC) + 3
b7 b6 b5 b4 b3 b2 b1 b0 Byte 2 IF (bit) 0 then (PC)(PC) + rel
r7 r6 r5 r4 r3 r2 r1 r0 Byte 3
JBC bit, rel 0 0 0 1 0 0 0 0 10 (PC)  (PC) + 3
b7 b6 b5 b4 b3 b2 b1 b0 Byte 2 IF (bit)= 0 then (bit)  0

SVTH : Phan Tieán Hieáu Trang :


70
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

r7 r6 r5 r4 r3 r2 r1 r0 Byte 3 (PC)(PC) + rel


CJNE A, direct, rel 1 0 1 1 0 1 0 1 B5 (PC)  (PC) + 3
a7 a6 a5 a4 a3 a2 a1 a0 Byte 2 IF (direct)  (A) then (C)0 and
r7 r6 r5 r4 r3 r2 r1 r0 Byte 3 (PC)(PC) + rel
IF (direct)  (A) then (C)1 and
(PC)(PC) + rel
CJNE A, #data, rel 1 0 1 1 0 1 0 0 B4 (PC)  (PC) + 3
d7 d6 d5 d4 d3 d2 d1 d0 Byte 2 IF #data  (A) then (C)0 and
r7 r6 r5 r4 r3 r2 r1 r0 Byte 3 (PC)(PC) + rel
IF #data  (A) then (C)1 and
(PC)(PC) + rel
CJNE Rn,#data, rel 1 0 1 1 0 n2 n1 n0 B8  BF (PC)  (PC) + 3
d7 d6 d5 d4 d3 d2 d1 d0 Byte 2 IF #data  (Rn) then (C)0 and
r7 r6 r5 r4 r3 r2 r1 r0 Byte 3 (PC)(PC) + rel
IF #data  (Rn) then (C)1 and
(PC)(PC) + rel
CJNE @Ri,#data, rel 1 0 1 1 0 1 1 0 B6  B7 (PC)  (PC) + 3
d7 d6 d5 d4 d3 d2 d1 d0 Byte 2 IF #data ((Ri)) then (C)0 and
r7 r6 r5 r4 r3 r2 r1 r0 Byte 3 (PC)(PC) + rel
IF #data ((Ri)) then (C)1 and
(PC)(PC) + rel
DJNZ Rn, rel 1 1 0 1 1 n2 n1 n0 D8  DF (PC)  (PC) + 2
r7 r6 r5 r4 r3 r2 r1 r0 Byte 2 (Rn)  (Rn) – 1
IF ((Ri))  0 then
(PC)(PC) + rel
DJNZ direct, rel 1 1 0 1 0 1 0 1 D5 (PC)  (PC) + 3
a7 a6 a5 a4 a3 a2 a1 a0 Byte 2 (direct)  (direct) – 1
r7 r6 r5 r4 r3 r2 r1 r0 Byte 3 IF (direct)  0 then
(PC)(PC) + rel
NOP 0 0 0 0 0 0 0 0 00 (PC)  (PC) + 1

SVTH : Phan Tieán Hieáu Trang :


71
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

Bit Oriented Instructions.


Instruction code Hexa Explanation
Mnemonic D7 D6 D5 D4 D3 D2 D1 D0 decimal
CLR C 1 1 0 0 0 0 1 1 C3 (C)  0
CLR bit 1 1 0 0 0 0 1 0 C2 (bit)  0
b7 b6 b5 b4 b3 b2 b1 b0 Byte 2
SETB C 1 1 0 1 0 0 1 1 D3 (C)  1
SETB bit 1 1 0 1 0 0 1 0 D2 (bit)  1
b7 b6 b5 b4 b3 b2 b1 b0 Byte 2
CPL C 1 0 1 1 0 0 1 1 B3 (C)  (C)
CPL bit 1 0 1 1 0 0 1 0 B2
b7 b6 b5 b4 b3 b2 b1 b0 Byte 2 (bit)  (bit)
ANL C,bit 1 0 0 0 0 0 1 0 82 (C)  (C) AND (bit)
b7 b6 b5 b4 b3 b2 b1 b0 Byte 2
ANL C,/bit 1 0 1 1 0 0 0 0 B0
b7 b6 b5 b4 b3 b2 b1 b0 Byte 2 (bit) (C) AND (bit)
ORL C,bit 0 1 1 1 0 0 1 0 72 (C)  (C) OR (bit)
b7 b6 b5 b4 b3 b2 b1 b0 Byte 2
ORL C,/bit 1 0 1 0 0 0 0 0 A0
b7 b6 b5 b4 b3 b2 b1 b0 Byte 2 (bit) (C) OR (bit)
MOV C,bit 1 0 1 0 0 0 1 0 A2 (C)  (bit)
b7 b6 b5 b4 b3 b2 b1 b0 Byte 2
MOV bit,C 1 0 0 1 0 0 1 0 92 (bit)  (C)
b7 b6 b5 b4 b3 b2 b1 b0 Byte 2

SVTH : Phan Tieán Hieáu Trang :


72
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

II. CHÖÔNG TRÌNH TRUYEÀN DÖÕ LIEÄU TÖØ MAÙY TÍNH


; TERMINAL.ASM
; STACK
stack segment stack
db 300 dup('?')
stack ends
; DATA
data segment
prompt db 'File name:$'
filename db 30 dup(0)
buffer db 512 dup(0)
buffrr db 512 dup(0)
handle dw ?
openerr db 0dh,0ah,'OPEN ERROR - COPDE'
errcode db 30h,'$'

;messages
MENU_MS db ' **TERMINAL PROGRAM**',0dh,0ah
db '<F5> to redisplay this MENU',0dh,0ah
db '<F6> to set communications protocol',0dh,0ah
db '<F7> to display protocol installed',0dh,0ah
db '<F8> to open file.hex and trasnmit',0dh,0ah
db '<F10> to exit the TERMINAL program',0dh,0ah
db 'All character typed are transmitter',0dh,0ah
db 'All character receiver are display',0dh,0ah
db 0dh,0ah,'$'

PROT_MS db '* Installed communications protocol',0dh,0ah


db 'Baud rate:'

Baud% db '2400',0dh,0ah
db 'Parity:'

Par% db 'Even',0dh,0ah
db 'Stop bit:'

Stop% db '1',0dh,0ah
db 'Word length:'

Word% db '8',0dh,0ah,0ah,'$'

Baud$$ db '110 150 300 600 1200 2400 4800 9600'

Par$$ db 'odd noneven'

baud_menu db 0dh,0ah,'**New communication parameter'

SVTH : Phan Tieán Hieáu Trang :


73
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

db 'rs input **',0dh,0ah


db 'baud rate:',0dh,0ah
db '1 = 110',0dh,0ah
db '2 = 150',0dh,0ah
db '3 = 300',0dh,0ah
db '4 = 600',0dh,0ah
db '5 = 1200',0dh,0ah
db '6 = 2400',0dh,0ah
db '7 = 4800',0dh,0ah
db '8 = 9600',0dh,0ah
db 'Select: $'

par_menu db 0dh,0ah,'Pariry:',0dh,0ah
db '1 = odd',0dh,0ah
db '2 = none',0dh,0ah
db '3 = even',0dh,0ah
db 'Select: $'

Stop_menu db 0dh,0ah,'Stop bit:',0dh,0ah


db '1 = 1 stop bit',0dh,0ah
db '2 = 2 stop bit',0dh,0ah
db 'Select: $'

Word_menu db 0dh,0ah,'Word length:',0dh,0ah


db '1 = 7 bit',0dh,0ah
db '2 = 8 bit',0dh,0ah
db 'Select: $'

err1_ms db 0dh,0ah,'*** cannot transmit ***',0dh,0ah


card_base dw 02f8h ;address of RS 232 card
inT_num db 0ch
setup_byte db 0bbh

;Origin
O_int_seg dw 0000h ;segment
O_int_off dw 0000h ;offset

;circular buffer and pointer:


circ_buf db 20 dup(00h)
dw 0
data_in dw 0 ;imput pointer
data_out dw 0 ;output pointer
data ends
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx CODE xxxxxxxxxxxxxxxxxx
code segment
assume CS:code

SVTH : Phan Tieán Hieáu Trang :


74
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

start:
mov ax,data
mov ds,ax
assume ds:data
mov es,ax
assume es:data
;display MENU at cursor
mov dx,offset menu_ms ;messages
call show_message
;hardware type
push ds
mov dx,0f000h
mov ds,dx
mov al,ds:[0fffeh] ;code to AL
;get addr of the RS232 card from BIOS data area
mov dx,0
mov ds,dx
mov cx,ds:0400h
pop ds
mov card_base,cx
;determine interrupt number:
; 0bh IRQ4 all other
cmp al,0fdh
jne set_address
mov int_num,0bh
;save/install interrupt
set_address:
mov ah,53
mov al,int_num
int 21h
mov o_int_seg,es
mov o_int_off,bx
mov ah,37
mov al,int_num
mov dx,offset cs:rs232_int
push ds
push cs
pop ds
int 21h
pop ds
;set protocol
mov al,10111011b
mov ah,0
mov dx,0
int 14h
call comm_on

SVTH : Phan Tieán Hieáu Trang :


75
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

call flush
monitor:
mov ah,1
int 16h
jz ser_imp
jmp char_typed
ser_imp:
sti ;interrupt on
mov cx,50
delay: nop
nop
loop delay
;test for new data received
cli
mov bx,data_out
cmp bx,data_in
jne new_data
sti
jmp monitor
;process char
char_typed:
mov ah,0
int 16h
;test for <F1>,<F2>,<F3>,<F4> and <F9> keys
cmp ax,3b00h
jne test_f2
jmp show_menu ;F1 key pressed
test_f2:
cmp ax,3c00h
jne test_f3
jmp set_protocol ;F2 key pressed
test_f3:
cmp ax,3d00h
jne test_f4
jmp show_protocol ;F3 key pressed
test_f4:
cmp ax,3e00h
jne test_f9
jmp tran_file ;F4 key pressed
test_f9:
cmp ax,4300h
je dos_exit
jmp show_and_send ;F2 key pressed
dos_exit:
call comm_off
mov ah,37

SVTH : Phan Tieán Hieáu Trang :


76
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

mov al,int_num
mov dx,o_int_off
mov ax,o_int_seg
mov ds,ax
int 21h
;exit
mov ah,76
mov al,0
int 21h
;redisplay menu
show_menu:
mov dx,offset menu_ms
call show_message
jmp monitor
;new data receiver
new_data:
lea si,circ_buf
mov bx,data_out
add si,bx
mov al,byte ptr[si]
;update output pointer
inc bx
cmp bx,20
jne ok_out_ptr
mov bx,0
ok_out_ptr:
mov data_out,bx
sti
call tty
jmp monitor
set_protocol:
call comm_off
baud_rates:
mov dx,offset baud_menu
call show_message
call get_key
call tty
cmp al,'1'
jc baud_rates
cmp al,'9'
jnc baud_rates
sub al,30h ;ascii to binary
sub al,1 ;to range 0 to 7
push ax
mov cl,4
mul cl

SVTH : Phan Tieán Hieáu Trang :


77
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

mov si,offset baud$$


mov ah,0
add si,ax
mov di,offset baud%
mov cx,4
cld
push ds
pop es
rep movsb
pop ax
mov cl,5
shl al,cl
mov setup_byte,al
parity:
mov dx,offset par_menu
call show_message
call get_key
call tty
;valid input range is "1" to "3"
cmp al,'1'
jc parity
cmp al,'4'
jnc parity
;input is valid range
sub al,30h
push ax
;select 4 byte parity message and place in display area
sub al,1
mov al,4
mul cl
mov si,offset par$$
mov ah,0
add si,ax
mov di,offset par%
mov cx,4
cld
push ds
pop es
rep movsb
pop ax
mov cl,3
shl al,cl
or setup_byte,al
stopbits:
mov dx,offset stop_menu
call show_message

SVTH : Phan Tieán Hieáu Trang :


78
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

call get_key
call tty
;valid input range is "1" or "2"
cmp al,'1'
jc stopbits
cmp al,'3'
jnc stopbits
mov si,offset stop%
mov byte ptr[si],al
sub al,31h
mov cl,2
shl al,cl
or setup_byte,al
word_length:
mov dx,offset word_menu
call show_message
call get_key
call tty
;valid input range is '1' or '2'
cmp al,'1'
jc word_length
cmp al,'3'
jnc word_length
push ax
;Input in valid range. Add 6 and move input to display area
add al,6
mov si,offset word%
mov byte ptr[si],al
pop ax
sub al,30h
inc al
or setup_byte,al
;install new parameter
mov al,setup_byte
mov dx,0
mov ah,0
int 14h
;line feed and cariage reture before exit
mov al,0dh
call tty
mov al,0ah
call tty
;communication
call comm_on
jmp monitor
;display protocol

SVTH : Phan Tieán Hieáu Trang :


79
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

show_protocol:
mov dx,offset prot_ms
call show_message
jmp monitor
;*********************************************************
;output and display
show_and_send:
mov cx,2000
push ax
thre_wait:
mov dx,card_base
add dx,5
in al,dx
jmp short $+2
test al,20h
jnz ok_2_send
loop thre_wait
;wait period timed out,display error message and exit
pop ax
mov dx,offset err1_ms
call show_message
jmp monitor
ok_2_send:
pop ax
;place in transmitter hoding register to send
mov dx,card_base
out dx,al
jmp short $+2
;display character
call tty
jmp monitor
;*********************************************************
;CAC CHUONG TRINH CON
comm_on proc near
cli ;interrupt off
;reset buffer pointer to start of buffer
mov data_in,0
mov data_out,0
;set dx to base address of RS 232 card from BIOS
mov dx,card_base
mov dl,0fch
mov al,00001011b
out dx,al
jmp short $+2
;set bit 7
mov dl,0fbh

SVTH : Phan Tieán Hieáu Trang :


80
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

in al,dx
jmp short $+2
and al,7fh
out dx,al
jmp short $+2
in al,21h
jmp short $+2
and al,0e7h
out 21h,al
jmp short $+2 ;I/o delay
;reenable interrupt
sti
ret
comm_on endp

comm_off proc near


in al,21h
or al,18h
out 21h,al
jmp short $+2
ret
comm_off endp

show_message proc near


mov ah,9
int 21h
ret
show_message endp

tty proc near


tty_one:
push ax
mov ah,14
mov bx,0
int 10h
pop ax
cmp al,0dh
jne not_cr
mov al,0ah
jmp tty_one
not_cr: ret
tty endp

flush proc near


flush_1:
mov ah,1

SVTH : Phan Tieán Hieáu Trang :


81
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

int 16h
jz no_old_chars
mov ah,0
int 16h
jmp flush_1
no_old_chars:
ret
flush endp

get_key proc near


mov ah,0
int 16h
ret
get_key endp

rs232_int:
sti ;interrupt on
push ax
push bx
push dx
push di
push ds
mov dx,data
mov ds,dx
assume ds:data
data_check:
mov dx,card_base
mov dl,0fdh
in al,dx
jmp short $+2
test al,1eh
jnz data_error
jmp data_check
data_error:
mov al,'1'
jmp store_byte
data_ready:
mov dl,0f8h
in al,dx
jmp short $+2
and al,7fh
store_byte:
lea di,circ_buf
mov bx,data_in
add di,bx
mov byte ptr[di],al

SVTH : Phan Tieán Hieáu Trang :


82
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

inc bx
cmp bx,20
jne ok_in_ptr
mov bx,0
ok_in_ptr:
mov data_in,bx
mov al,20h
out 20h,al
jmp short $+2
pop ds
pop di
pop dx
pop bx
pop ax
iret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxtran_file:
call get_name ;doc ten file
lea dx,filename ;dx chua offset cua ten file
mov al,0
call open
jc open_error
mov handle,ax
read_loop:
lea dx,buffer ;tro toi vung dem
mov bx,handle ;lay the file
call read ;doc file,AX = so byte doc duoc
or ax,ax ;ket thuc file
je pexit ;dung, ket thuc file
mov cx,ax ;CX chua so byte doc duoc
call display ;hien thi file
jmp read_loop ;lap lai
open_error:
lea dx,openerr ;lay thong bao loi
add errcode,al
mov ah,9
int 21h ;hien thi thong bao loi

;*********************************************************
;output and display
;show_and_send:

pexit:
mov cx,2000
pthre_wait:
mov dx,card_base
add dx,5

SVTH : Phan Tieán Hieáu Trang :


83
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

in al,dx
jmp short $+2
test al,20h
jnz pok_2_send
loop pthre_wait
;wait period timed out,display error message and exit
mov dx,offset err1_ms
call show_message
jmp ppexit
pok_2_send:
call con_hex ;goi chtr con chuyen sang so hex
lea dx,buffrr
mov cx,256
call display
mov cx,256
;place in transmitter hoding register to send
mov dx,card_base
lea di,buffrr ;tro toi vung dem
ppl: mov al,[di] ;lay byte data
out dx,al
jmp short $+2
call edelay
inc di
loop ppl
;display character
; call tty
ppexit:mov bx,handle ;lay the file
call close ;dong the file
jmp monitor
;*********************************************************
get_name proc near
push ax
push dx
push di
mov ah,9 ;ham hien thi chuoi
lea dx,prompt
int 21h
cld
lea di,filename ;DI tro toi ten file
mov ah,1 ;ham doc ki tu tu ban phim
read_name:
int 21h
cmp al,0dh ;co phai CR
je done ;dung ket thuc
stosb ;luu no vao trong chuoi
jmp read_name ;tiep tuc doc vao

SVTH : Phan Tieán Hieáu Trang :


84
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

done: mov al,0


stosb ;luu byte 0
pop di
pop dx
pop ax
ret
get_name endp
open proc near
mov ah,3dh;ham mo file
mov al,0 ;chi doc
int 21h
ret
open endp

read proc near


push cx
mov ah,3fh ;ham mo file
mov cx,512 ;chi doc
int 21h
pop cx
ret
read endp
display proc near
push bx
mov ah,40h;ham ghi file
mov bx,1 ;the file cho man hinh
int 21h ;dong file
pop bx
ret
display endp

close proc near


mov ah,3eh ;ham dong file
int 21h ;dong file
ret
close endp

edelay proc near


push ax
push bx
mov ax,0fh
edel2: mov bx,0ffffh
edel1: dec bx
jnz edel1
dec ax
jnz edel2

SVTH : Phan Tieán Hieáu Trang :


85
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

pop bx
pop ax
ret
edelay endp

;++++++++++++++++++++++++++++++++++++++++++++
con_hex proc near
push ax
push bx
push cx
push dx
push di
push si
mov ax,0b800h
mov bx,0
cld
lea si,buffrr
mov cx,260
mov al,0
xxx8: mov [si],al
inc si
loop xxx8
lea si,buffrr
lea di,buffer
xxx3: mov al,[di] ;lay byte data
cmp al,3ah ;so sanh voi ma dau ':'
jz xxx2 ;nhay neu la dau ':'
inc di
jmp xxx3 ;quay lai de tim dau ':'
xxx2: call ktra_end ;goi chuong trinh kiem tra ket thuc
cmp ax,0 ;dung la het data thi lam cho AX=0000
jnz xxx4
xxx6: pop si
pop di
pop dx
pop cx
pop bx
pop ax
ret
xxx4: mov al,[di] ;lay byte data
mov [si],al ;dung la byte 3Ah can luu vao
call goi_ht
inc di
inc si

;xu li so byte can goi

SVTH : Phan Tieán Hieáu Trang :


86
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

mov al,[di] ;lay so can goi MSD


sub al,30h ;tru di 30 de thanh so hex
call so_lon ;kiem tra so ABCDEF
mov cl,4
rol al,cl
mov ah,al
inc di
mov al,[di] ;lay so can go LSD
sub al,30h ;tru di 30 de thanh so hex
call so_lon ;kiem tra so ABCDEF
or al,ah ;or 2 data lai thanh 1 byte
mov [si],al ;cat so HEX ADDR_H
add al,1
mov dl,al ;luu so byte can xu li con lai
call goi_ht

;xu li phan dia chi can goi


inc di
inc si
mov al,[di] ;lay byte ADDR_L-MSD
sub al,30h ;tru di 30 de thanh so hex
call so_lon ;kiem tra so ABCDEF
mov cl,4
rol al,cl
mov ah,al
inc di
mov al,[di] ;lay byte ADDR_L-LSD
sub al,30h ;tru di 30 de thanh so hex
call so_lon ;kiem tra so ABCDEF
or al,ah ;or 2 data lai thanh 1 byte
mov [si],al ;cat so HEX ADDR_H
call goi_ht
inc di
inc si
mov al,[di] ;lay byte ADDR_H-MSD
sub al,30h ;tru di 30 de thanh so hex
call so_lon ;kiem tra so ABCDEF
mov cl,4
rol al,cl
mov ah,al
inc di
mov al,[di] ;lay byte ADDR_H-LSD
sub al,30h ;tru di 30 de thanh so hex
call so_lon ;kiem tra so ABCDEF
or al,ah ;or 2 data lai thanh 1 byte
mov [si],al ;cat so byte can goi dang HEX

SVTH : Phan Tieán Hieáu Trang :


87
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

call goi_ht

;xu li cac byte con lai


inc di ;bo byte 00
inc di
xxx1: inc di
inc si
mov al,[di] ;lay so byte thu nhat
sub al,30h ;tru di 30 de thanh so hex
call so_lon ;kiem tra so ABCDEF
mov cl,4
rol al,cl
mov ah,al
inc di
mov al,[di] ;lay so byte thu 2
sub al,30h ;tru di 30 de thanh so hex
call so_lon ;kiem tra so ABCDEF
or al,ah ;or 2 data lai thanh 1 byte
mov [si],al ;cat so byte can goi dang HEX
call goi_ht
dec dl
cmp dl,0
jnz xxx1 ;quay lai vi chua
inc di ;bo byte cuoi thu nhat
inc di ;bo byte thu 2
inc di ;bo ma xuong hang
jmp xxx3 ;het 1 hang data
con_hex endp

;chuong trinh kiem tra ket thuc


ktra_end proc near
push di
inc di
mov al,[di] ;lay byte data
cmp al,30h ;kiem tra byte 0 thu nhat
jnz kt_exit ;nhay den de thoat vi khong phai
inc di ;neu dung thi kiem tra byte 0 thu 2
mov al,[di] ;lay byte data
cmp al,30h
jnz kt_exit ;nhay den de thoat vi khong phai
inc di ;neu dung thi kiem tra byte 0 thu 3
mov al,[di] ;lay byte data
cmp al,30h
jnz kt_exit ;nhay den de thoat vi khong phai
inc di ;neu dung thi kiem tra byte 0 thu 4
mov al,[di] ;lay byte data

SVTH : Phan Tieán Hieáu Trang :


88
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

cmp al,30h
jnz kt_exit ;nhay den de thoat vi khong phai
inc di ;neu dung thi kiem tra byte 0 thu 5
mov al,[di] ;lay byte data
cmp al,30h
jnz kt_exit ;nhay den de thoat vi khong phai
inc di ;neu dung thi kiem tra byte 0 thu 6
mov al,[di] ;lay byte data
cmp al,30h
jnz kt_exit ;nhay den de thoat vi khong phai
inc di ;neu dung thi kiem tra byte 0 thu 7
mov al,[di] ;lay byte data
cmp al,30h
jnz kt_exit ;nhay den de thoat vi khong phai
inc di ;neu dung thi kiem tra byte 1 thu 8
mov al,[di] ;lay byte data
cmp al,31h
jnz kt_exit ;nhay den de thoat vi khong phai
inc di ;neu dung thi kiem tra byte F thu 9
mov al,[di] ;lay byte data
cmp al,46h
jnz kt_exit ;nhay den de thoat vi khong phai
inc di ;neu dung thi kiem tra byte F thu 10
mov al,[di] ;lay byte data
cmp al,46h
jnz kt_exit ;nhay den de thoat vi khong phai
mov ax,0
pop di
ret
kt_exit:
mov ax,1111h ;nap data sao cho khac khong la 1
pop di
ret
ktra_end endp

goi_ht proc near


push di
mov di,bx
mov ah,1
stosw
mov bx,di
pop di
ret
goi_ht endp

so_lon proc near

SVTH : Phan Tieán Hieáu Trang :


89
Luaän vaên toát nghieäp GVHD : Nguyeãn Ñình Phuù

cmp al,9
jg yyy
ret
yyy: sub al,7
ret
so_lon endp

code ends

end start

SVTH : Phan Tieán Hieáu Trang :


90

You might also like