GIAO TIẾP MÁY TÍNH
NHÀ XUẤT BẢN KHOA HỌC VÀ KỸ THUẬT
HÀ NỘI - 2010
CHÖÔNG I
GIÔÙI THIEÄU VI ÑIEÀU KHIEÅN 8051
I. CAÁU TAÏO VI ÑIEÀU KHIEÅN 8051
1. TOÙM TAÉT PHAÀN CÖÙNG HOÏ MSC-51 (8051)
MCS-51 laø hoï IC vi ñieàu khieån do haõng Intel saûn xuaát. Caùc IC tieâu bieåu
cho hoï laø 8031, 8051, 8951... Nhöõng ñaëc ñieåm chính vaø nguyeân taét hoaït ñoäng
cuûa caùc boä vi ñieàu khieån naøy khaùc nhau khoâng nhieàu. Khi ñaõ söû duïng thaønh
thaïo moät loaïi vi ñieàu khieån thì ta coù theå nhanh choùng vaän duïng kinh nghieäm
ñeå laøm quen vaø laøm chuû caùc öùng duïng cuûa moät boä vi ñieàu khieån khaùc. Vì vaäy
ñeå coù nhöõng hieåu bieát cuï theå veà caùc boä vi ñieàu khieån cuõng nhö ñeå phuïc vuï cho
ñeà taøi toát nghieäp naøy ta baét ñaàu tìm hieåu moät boä vi ñieàu khieån thoâng duïn g
nhaát, ñoù laø hoï MCS-51 vaø neáu nhö hoï MCS-51 laø hoï ñieån hình thì 8051 laïi
chính laø ñaïi dieän tieâu bieåu
Caùc ñaëc ñieåm cuûa 8051 ñöôïc toùm taét nhö sau :
√ 4 KB ROM beân trong.
√ 128 Byte RAM noäi.
√ 4 Port xuaát /nhaäp I/O 8 bit.
√ Giao tieáp noái tieáp.
√ 64 KB vuøng nhôù maõ ngoaøi
√ 64 KB vuøng nhôù döõ lieäu ngoaïi.
√ Xöû lyù Boolean (hoaït ñoäng treân bit ñôn).
√ 210 vò trí nhôù coù theå ñònh vò bit.
√ 4 μs cho hoaït ñoäng nhaân hoaëc chia.
Baûng moâ taû söï khaùc nhau cuûa caùc IC trong hoï MSC-51 :
Loaïi Boä Nhôù Maõ Treân CHIP Boä Nhôù Döõ Lieäu Treân CHIP Soá Timer
8051 4K ROM 128 Byte 2
8031 0K ROM 128 Byte 2
8751 4K ROM 128 Byte 2
8052 8 K ROM 256Byte 2
8032 0 K ROM 256Byte 2
8752 8K EPROM 256Byte 2
2. CAÁU TRUÙC VÑK 8051, CHÖÙC NAÊNG TÖØNG CHAÂN
30pF
30pF
Chöùc naêng hoaït ñoäng cuûa töøng chaân (pin) ñöôïc toùm taét nhö sau :
√ Töø chaân 1÷ 8 Port 1 (P1.0, . . ., P1.7) duøng laøm Port xuaát nhaäp I/O ñeå
giao tieáp beân ngoaøi.
Vcc
XTAL.1
XTAL.2
PSEN
ALE
EA
RST
Vss
P0.7
P0.6
P0.5
P0.4
P0.3
P0.2
P0.1
P0.0
P1.7
P1.6
P1.5
P1.4
P1.3
P1.2
P1.1
P1.0
P2.7
P2.6
P2.5
P2.4
P2.3
P2.2
P2.1
P2.0
18
19
12 MHz
40
32 AD7
33 AD6
34 AD5
35 AD4
36 AD3
37 AD2
38 AD1
39 AD0
8
7
6
5
4
3
2
1
28 A15
27 A14
26 A13
25 A12
24 A11
23 A10
22 A9
21 A8
P3.7
P3.6
P3.5
P3.4
P3.3
P3.2
P3.1
P3.0
17
16
15
14
13
12
11
10
RD
WR
T1
T0
INT1
INT0
TXD
RXD
8051
29
30
31
9
20
√ Chaân 9 (RST) laø chaân ñeå RESET cho 8051. Bình thöôøng caùc chaân
naøy ôû möùc thaáp. Khi ta ñöa tín hieäu naøy leân cao (toái thieåu 2 chu kyø maùy). Thì
nhöõng thanh ghi noäi cuûa 8051 ñöôïc LOAD nhöõng giaù trò thích hôïp ñeå khôûi
ñoäng laïi heä thoáng.
Töø chaân 10÷17 laø Port3 (P3.0, P3.1, . . ., P3.7) duøng vaøo hai muïc ñích :
duøng laø Port xuaát / nhaäp I/O hoaëc moãi chaân giöõ moät chöùc naêng caù bieät ñöôïc
toùm taét sô boä nhö sau :
• P3.0 (RXD) : Nhaän döõ lieäu töø Port noái tieáp.
• P3.1 (TXD) : Phaùt döõ lieäu töø Port noái tieáp.
• P3.2 (INT0) : Ngaét 0 beân ngoaøi.
• P3.3 (INT1) : Ngaét 1 töø beân ngoaøi.
• P3.4 (T0) : Timer/Counter 0 nhaäp töø beân ngoaøi.
• P3.5 (T1) : Timer/Counter 1 nhaäp töø beân ngoaøi.
• P3.6 (WR) : Tín hieäu Strobe ghi döõ lieäu leân boä nhôù beân ngoaøi.
• P3.7 (RD) : Tín hieäu Strobe ñoïc döõ lieäu leân boä nhôù beân ngoaøi.
√ Caùc chaân 18,19 (XTAL2 vaø XTAL1) ñöôïc noái vôùi boä dao ñoäng thaïch
anh 12 MHz ñeå taïo dao ñoäng treân CHIP. Hai tuï 30 pF ñöôïc theâm vaøo ñeå oån
ñònh dao ñoäng.
√ Chaân 20 (Vss) noái ñaát (Vss = 0).
√ Töø chaân 21÷28 laø Port 2 (P2.0, P2.1, . . ., P2.7) duøng vaøo hai muïc
ñích: laøm Port xuaát/nhaäp I/O hoaëc duøng laøm byte cao cuûa bus ñòa chæ thì noù
khoâng coøn taùc duïng I/O nöõa. Bôûi vì ta muoán duøng EPROM vaø RAM ngoaøi neân
phaûi söû duïng Port 2 laøm byte cao bus ñòa chæ.
√ Chaân 29 (PSEN) laø tín hieäu ñieàu khieån xuaát ra cuûa 8051, noù cho
pheùp choïn boä nhôù ngoaøi vaø ñöôïc noái chung vôùi chaân cuûa OE (Outout Enable)
cuûa EPROM ngoaøi ñeå cho pheùp ñoïc caùc byte cuûa chöông trình. Caùc xung tín
hieäu PSEN haï thaáp trong suoát thôøi gian thi haønh leänh. Nhöõng maõ nhò phaân cuûa
chöông trình ñöôïc ñoïc töø EPROM ñi qua bus döõ lieäu vaø ñöôïc choát vaøo thanh
ghi leänh cuûa 8051 bôûi maõ leänh.
Chaân 30 (ALE : Adress Latch Enable) laø tín hieäu ñieàu khieån xuaát ra cuûa 8051,
noù cho pheùp phaân keânh bus ñòa chæ vaø bus döõ lieäu cuûa Port 0.
√ Chaân 31 (EA : Eternal Acess) ñöôïc ñöa xuoáng thaáp cho pheùp choïn boä
nhôù maõ ngoaøiñoái vôùi 8031.
Ñoái vôùi 8051 thì :
• EA = 5V : Choïn ROM noäi.
• EA = 0V : Choïn ROM ngoaïi.
• EA = 21V : Laäp trình EPROM noäi.
√ Caùc chaân töø 32÷39 laø Port 0 (P0.0, P0.1, . . . , P0.7) duøng caû hai muïc
ñích : Vöøa laøm byte thaáp cho bus ñòa chæ, vöøa laøm bus döõ lieäu, neáu vaäy Port 0
khoâng coøn chöùc naêng xuaát nhaäp I/O nöõa.
√ Chaân 40 (Vcc) ñöôïc noái leân nguoàn 5V.
3. TOÅ CHÖÙC BOÄ NHÔÙ
Baûn ñoà boä nhôù data treân Chip nhö sau :
7F FF
F0 F7 F6 F5 F4 F3 F2 F1 F0 B
RAM ña duïng
E0 E7 E6 E5 E4 E3 E2 E1 E0 ACC
D0 D7 D6 D5 D4 D3 D2 D1 D0 PSW
30 B8 - - - BC BB BA B9 B8 IP
2F 7F 7E 7D 7C 7B 7A 79 78
2E 77 76 75 74 73 72 71 70 B0 B7 B6 B5 B4 B3 B2 B1 B0 P.3
2D 6F 6E 6D 6C 6B 6A 69 68
2C 67 66 65 64 63 62 61 60 A8 AF AC AB AA A9 A8 IE
2B 5F 5E 5D 5C 5B 5A 59 58
2A 57 56 55 54 53 52 51 50 A0 A7 A6 A5 A4 A3 A2 A1 A0 P2
29 4F 4E 4D 4C 4B 4A 49 48
28 47 46 45 44 43 42 41 40 99 khoâng ñöôïc ñòa chæ hoaù bit SBUF
27 3F 3E 3D 3C 3B 3A 39 38 98 9F 9E 9D 9C 9B 9A 99 98 SCON
26 37 36 35 34 33 32 31 30
25 2F 2E 2D 2C 2B 2A 29 28 90 97 96 95 94 93 92 91 90 P1
24 27 26 25 24 23 22 21 20
23 1F 1E 1D 1C 1B 1A 19 18 8D khoâng ñöôïc ñòa chæ hoaù bit TH1
22 17 16 15 14 13 12 11 10 8C khoâng ñöôïc ñòa chæ hoaù bit TH0
21 0F 0E 0D 0C 0B 0A 09 08 8B khoâng ñöôïc ñòa chæ hoaù bit TL1
20 07 06 05 04 03 02 01 00 8A khoâng ñöôïc ñòa chæ hoaù bit TL0
1F Bank 3 89 khoâng ñöôïc ñòa chæ hoaù bit TMOD
18 88 8F 8E 8D 8C 8B 8A 89 88 TCON
17 Bank 2 87 khoâng ñöôïc ñòa chæ hoaù bit PCON
10
0F Bank 1 83 khoâng ñöôïc ñòa chæ hoaù bit DPH
08 82 khoâng ñöôïc ñòa chæ hoaù bit DPL
07 Bank thanh ghi 0 81 khoâng ñöôïc ñòa chæ hoaù bit SP
00 (maëc ñònh cho R0 -R7) 88 87 86 85 84 83 82 81 80 P0
RAM CAÙC THANH GHI CHÖÙC NAÊNG ÑAËC BIEÄT
Toùm taét boä nhôù döõ lieäu treân chip.
Ñòa chæ
byte Ñòa chæ bit Ñòa chæ bit
Ñòa chæ
byte
3.1 RAM muïc ñích chung
Trong baûn ñoà boä nhôù treân, 80 byte töø ñòa chæ 30H÷7FH laø RAM muïc
ñích chung. Keå caû 32byte phaàn döôùi töø 00H÷2FH cuõng coù theå söû duïng gioáng
nhö 80 byte ôû treân, tuy nhieân 32 byte coøn coù muïc ñích khaùc seõ ñeà caäp sau.
Baát kyø vò trí naøo trong RAM muïc ñích chung cuõng coù theå ñöôïc truy xuaát
tuøy yù gioáng nhö vieäc söû duïng caùc mode ñeå ñònh ñòa chæ tröïc tieáp hay giaùn tieáp.
Ví duï ñeå ñoïc noäi dung cuûa RAM noäi coù ñòa chæ 5FH vaøo thanh ghi tích luõy thì
ta duøng leänh : MOV A, 5FH.
RAM noäi cuõng ñöôïc truy xuaát bôûi vieäc duøng ñòa chæ giaùn tieáp qua R0
vaø R1. Hai leänh sau ñaây seõ töông ñöông leänh treân :
MOV R0, #5FH
MOV A, @R0
Leänh thöù nhaát duøng söï ñònh vò töùc thôøi ñeå ñöa giaù trò 5FH vaøo thanh ghi
R0, leänh thöù hai duøng söï ñònh vò giaùn tieáp ñeå ñöa döõ lieäu “ñaõ ñöôïc troû ñeán bôûi
R0” vaøo thanh ghi tích luõy A.
3.2 RAM ñònh vò
8051 chöùa 210 vò trí coù theå ñònh vò bit, trong ñoù coù 128 bit naèm ôû caùc
ñòa chæ töø 20H÷2FH vaø phaàn coøn laïi laø caùc thanh ghi chöùc naêng ñaëc bieät.
3.3 Caùc baêng thanh ghi (Register Banks)
32 vò trí nhôù cuoái cuøng cuûa boä nhôù töø ñòa chæ byte 00H÷1FH chöùc caùc
daõy thanh ghi. Taäp hôïp caùc leänh cuûa 8051 cung caáp 8 thanh ghi töø R0÷R7 ôû
ñòa chæ 00H÷07H neáu maùy tính maëc nhieân choïn ñeå thöïc thi. Nhöõng leänh töông
ñöông duøng söï ñònh vò tröïc tieáp. Nhöõng giaù trò döõ lieäu ñöôïc duøng thöôøng
xuyeân chaéc chaén seõ söû duïng moät trong caùc thanh ghi naøy.
3.4 Caùc thanh ghi chöùc naêng ñaëc bieät (Special Function Register)
Coù 21 thanh ghichöùc naêng ñaëc bieät SFR ôû ñænh cuûa RAM noäi töø ñòa chæ
caùc thanh ghi chöùc naêng ñaëc bieät ñöôïc ñònh roõ, coøn phaàn coøn laïi khoâng ñònh
roõ.
Maëc duø thanh ghi A coù theå truy xuaát tröïc tieáp, nhöng haàu heát caùc thanh
ghi chöùc naêng ñaëc bieät ñöôïc truy xuaát baèng caùch söû duïng söï ñònh vò ñòa chæ
tröïc tieáp. Chuù yù raèng vaøi thanh ghi SFR coù caû bit ñònh vò vaø byte ñònh vò.
Ngöôøi thieát keá seõ caãn thaän khi truy xuaát bit maø khoâng truy xuaát byte.
3.4.1 Töø 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
a) Côø Carry CY (Carry Flag) :
Côø Carry ñöôïc set leân 1 neáu coù söï traøn ôû bit 7 trong pheùp coäng hoaëc coù
söï möôïn vaøo bit 7 trong pheùp tröø.
Côø Carry cuõng laø 1 “thanh ghi tích luõy luaän lyù”, noù ñöôïc duøng nhö moät
thanh ghi 1 bit thöïc thi treân caùc bit bôûi nhöõng leänh luaän lyù. Ví duï leänh : ANL
C, 25H seõ AND bit 25H vôùi côø Carryvaø caát keát quaû vaøo côø Carry.
b) Côø Carry phuï AC (Auxiliary Carry Flag) :
Khi coäng nhöõng giaù trò BCD (Binary Code Decimal), côø nhôù phuï AC
ñöôïcset neáu coù söï traøn töø bit 3 sang 4 hoaëc 4 bit thaáp naèm trong phaïm
vi0AH÷0FH.
c) Côø 0 (Flag 0) :
Côø 0 (F0) laø bit côø coù muïc ñích toång hôïp cho pheùp ngöôøi öùng duïng duøng
noù.
d). Nhöõng bit choïn daõy thanh ghi RS1 vaø RS0 :
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.
e. 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. Bit OV ñöôïc boû qua ñoái vôùi söï coäng tröø khoâng daáu. Khi coäng tröø coù daáu,
keát quaû lôùn hôn + 127 hay nhoû hôn -128 seõ set bit OV.
f. 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.
3.4.2 Thanh ghi B :
Thanh ghi B ôû ñòa chæ F0H ñöôïc duøng ñi ñoâi vôùi thanh ghi A cho caùc
hoaït ñoäng nhaân chia.
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.
3.4.3 Con troû Stack SP (Stack Pointer) :
Stack Pointer laø moät thanh ghi 8 bit ôû ñòa chæ 81H. Noù chöùa ñòa chæ cuûa
döõ lieäu ñang hieän haønh treân ñænh Stack. Caùc hoaït ñoäng cuûa Stack bao goàm
vieäc ñaåy döõ lieäu vaøo Stack (PUSH) vaø laáy döõ lieäu ra khoûi Stack (POP).
√ Vieäc PUSH vaøo Stack seõ taêng SP leân 1 tröôùc khi döõ lieäu vaøo.
√ Vieäc POP töø Stack ra seõ laáy döõ lieäu ra tröôùc roài giaûm SP ñi 1.
3.4.4 Con troû döõ lieäu DPTR (Data Pointer) :
Data Pointer ñöôïc ñeå truy xuaát boä nhôù maø ngoaøi hoaëc boä nhôù döõ lieäu
ngoaøi, noù laø moät thanh ghi 16 bit maø byte thaáp laø DPL ôû ñòa chæ 82H coøn byte
cao laø DPH ôû ñòa chæ 83H. Ñeå ñöa noäi dung 55H vaøo RAM ngoaïi coù ñòa chæ
1000H ta duøng 3 leänh sau :
MOV A, #55H
MOV DPTR, #1000H
MOVX @ DPTR, A
Leänh thöù nhaát duøng söï ñònh vò tröïc tieáp ñöa haèng soá döõ lieäu 55H vaøo A.
Leänh thöù hai cuõng töông töï leänh thöù nhaát ñöa haèng soá döõ lieäu 1000H vaøo
trong DPTR . leänh cuoái cuøng duøng söï ñònh vò giaùn tieáp ñeå dòch chuyeån giaù trò
55H trong A vaøo vuøng nhôù RAM ngoaïi 1000H naèm trong DPTR.
3.4.5 Caùc thanh ghi Port (Port Register) :
Caùc Port 0, Port 1, Port 2, Port 3 coù ñòa chæ töông öùng 80H, 90H, A0H,
B0H. Caùc Port 0, Port 1, Port 2, Port 3 khoâng coøn taùc duïng xuaát nhaäp nöõa neáu
boä nhôù ngoaøi ñöôïc duøng hoaëc moät vaøi caù tính ñaëc bieät cuûa 8051 ñöôïc duøng
(nhö Interrupt, Port noái tieáp . . .). Do vaäy chæ coøn coù Port1 coù taùc duïng xuaát
nhaäp I/O.
Taát caû caùc Port ñeàu coù bit ñòa chæ, do ñoù noù coù khaû naêng giao tieáp vôùi
beân ngoaøi maïnh meõ.
3.4.6 Caùc thanh ghi Timer (Timer Register) :
8051 coù 2 boä : Moät boä Timer 16 bit vaø moät boä Counter 16 bit, hai boä
naøy duøng ñeå ñònh giôø luùc nghæ cuûa chöông trình hoaëc ñeám caùc söï kieän quan
troïng. Timer 0 coù bit thaáp TL0 ôû ñòa chæ 8AH vaø coù bit cao TH0 ôû ñòa chæ 8CH.
Timer 1 coù bit thaáp ôû ñòa chæ 8BH vaø bit cao TH1 ôû ñòa chæ 8DH.
Hoaït ñoäng ñònh thôøi ñöôïc cho pheùp bôûi thanh ghi mode ñònh thôøi
TMOD (Timer Mode Register). ÔÛ ñòa chæ 89H vaø thanh ghi ñieàu khieån ñònh
thôøi TCON (Timer Control Register) ôû ñòa chæ 88H. Chæ coù TCON coù bit ñònh
vò.
3.4.7 Caùc thanh ghi Port noái tieáp (Serial Port Register) :
8051 chöùa moät Port noái tieáp treân Chip cho vieäc truyeàn thoâng tin vôùi
nhöõng thieát bò noái tieáp nhö laø nhöõng thieát bò ñaàu cuoái, modem, hoaëc ñeå giao
tieáp IC khaùc vôùi nhöõng boä bieán ñoåi A/D, nhöõng thanh ghi di chuyeån, RAM . .
.). Thanh ghi ñeäm döõ lieäu noái tieáp SBUF ôû ñòa chæ 99H giöõ caû döõ lieäu phaùt laãn
döõ lieäu thu. Vieäc ghi leân SBUF ñeå LOAD döõ lieäu cho vieäc truyeàn vaø ñoïc
SBUF ñeå truy xuaát döõ lieäu cho vieäc nhaän nhöõng mode hoaït ñoäng khaùc nhau
ñöôïc laäp trình thoâng qua thanh ghi ñieàu khieån Port noái tieáp SCON.
3.4.8 Caùc thanh ghi ngaét (Interrupt Register) :
8051 coù hai caáu truùc ngaét öu tieân, 5 boä nguoàn. Nhöõng Interrupt bò maát
taùc duïng sau khi heä thoáng reset (bò caám) vaø sau ñoù ñöôïc cho pheùp bôûi vieäc cho
pheùp ghi leân thanh ghi cho pheùp ngaét IE (Interrup Enable Register) ôû ñòa chæ
A8H. Möùc öu tieân ñöôïc ñaët vaøo thanh ghi öu tieân ngaét IP (Interrupt Priority
Level) taïi ñòa chæ B8H. Caû 2 thanh ghi treân ñeàu coù bit ñòa chæ.
3.4.9 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 bao goàm caùc
bit ñòa chæ toång hôïp. Caùc bit 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 1 cuûa côø ña naêng.
√ Bit 2 (GF0) : Bit 2 cuûa côø ña naêng.
√ 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.
II. TOÙM TAÉT TAÄP LEÄNH CUÛA 8051
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 thì khaû quan.
Taäp leänh hoï MSC-51 ñöôïc söï kieåm tra cuûa caùc mode ñònh vò vaø caùc
leänh cuûa chuùng coù caùc Opcode 8 bit. Ñieàu naøy cung caáp khaû naêng 28
=256 leänh
ñöôïc thi haønh vaø moät leänh khoâng ñöôïc ñònh nghóa. Vaøi leänh coù 1 hoaëc 2 byte
bôûi döõ lieäu hoaëc ñòa chæ theâm vaøo Opcode. Trong toaøn boä caùc leänh coù 139
leänh 1 byte, 92 leänh 2 byte vaø 24 leänh 3 byte.
1. CAÙC CHEÁ ÑOÄ ÑÒNH VÒ (ADDRESSING MODE)
Caùc mode ñònh vò laø moät boä phaän thoáng nhaát cuûa taäp leänh moãi maùy
tính. Chuùng cho pheùp ñònh roõ nguoàn hoaëc nôi gôûi tôùi cuûa döõ lieäu ôû caùc ñöôøng
khaùc nhau tuøy thuoäc vaøo traïng thaùi cuûa laäp trình. 8051 coù 8 mode ñònh vò ñöôïc
duøng nhö sau :
√ Thanh ghi.
√ Tröïc tieáp.
√ Giaùn tieáp.
√ Töùc thôøi.
√ Töông ñoái.
√ Tuyeät ñoái.
√ Daøi.
√ Ñònh vò.
1.1 Söï ñònh vò thanh ghi (Register Addressing)
Coù 4 daõy thanh ghi 32 byte ñaàu tieân cuûa RAM döõ lieäu treân Chip ñòa chæ
00H ÷ 1FH, nhöng taïi moät thôøi ñieåm chæ coù moät daõy hoaït ñoäng caùc bit PSW3,
PSW4 cuûa töø traïng thaùi chöông trình seõ quyeát ñònh daõy naøo hoaït ñoäng.
Caùc leänh ñeå ñònh vò thanh ghi ñöôïc ghi maät maõ baèng caùch duøng bit
troïng soá thaáp nhaát cuûa Opcode leänh ñeå chæ moät thanh ghi trong vuøng ñòa chæ
theo logic naøy. Nhö vaäy 1 maõ chöùc naêng vaø ñòa chæ hoaït ñoäng coù theå ñöôïc keát
hôïp ñeå taïo thaønh moät leänh ngaén 1 byte nhö sau :
Register Addressing.
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 :
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.
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.
n n
Opcode
i
n
Opcode
Opcode
Direct Addressing
Ví duï ñeå ñöa noäi dung 60 H vaøo RAM noäi taïi ñòa chæ 50H ta laøm nhö sau:
MOV R1,#50H
MOV @R1,60H
1.4. Söï ñònh vò ñò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 :
Ví duï :
MOV A, # 12 ⇐ Ñöa tröïc tieáp soá thaäp phaân 12 vaøo A.
MOV A, # 10 ⇐ Ñöa tröïc tieáp soá Hex 10H (16D) vaøo A.
MOV A, # 00010001B ⇐ Ñöa tröïc tieápsoá nhò phaân naøy vaøo A.
1.5 Söï ñònh vò ñò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 :
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)
Opcode
Relative Offset
Opcode
Immediate Data
Söï ñònh ñòa chæ tuyeät ñoái ñöôïc duøng vôùi caùc leänh ACALL vaø AJMP.
Caùc leänh 2 byte cho pheùp phaân chia trong trang 2K ñang löu haønh cuûa boä nhôù
maõ cuûa vieäc cung caáp 11 bit thaáp ñeå xaùc ñònh ñòa chæ trong trang 2K (A0÷A10
goàm A10÷A8 trong Opcode vaø A7÷A0 trong ø byte)vaø 5 bit cao ñeå choïn trang
2K (5 bit cao ñang löu haønh trong boä ñeám chöông trình laø 5 bit Opcode).
Söï ñònh vò tuyeät ñoái ñem laïi thuaän lôïi cho caùc leänh ngaén (2 byte),
nhöng baát lôïi trong vieäc giôùi haïn phaïm vi nôi gôûi ñeán vaø cung caáp maõ coù vò trí
ñoäc laäp.
1.7 Söï ñònh vò ñòa chæ daøi (Long Addressing)
Söï ñònh vò daøi ñöôïc duøng vôùi leänh LCALL vaø LJMP. Caùc leänh 3 byte
naøy bao goàm moät ñòa chæ nôi gôûi tôùi 16 bit ñaày ñuû laø 2 byte vaø 3 byte cuûa leänh.
Öu ñieåm cuûa söï ñònh daøi laø vuøng nhôù maõ 64K coù theå ñöôïc duøng heát,
nhöôïc ñieåm laø caùc leänh ñoù daøi 3 byte vaø vò trí leä thuoäc. Söï phuï thuoäc vaøo vò trí
seõ baát lôïi bôûi chöông trình khoâng theå thöïc thi taïi ñòa chæ khaùc.
1.8 Söï ñònh ñòa chæ phuï luïc (Index Addressing)
Söï ñònh ñòa chæ phuï luïc duøng moät thanh ghi cô baûn (cuõng nhö boä ñeám
chöông trình hoaëc boä ñeám döõ lieäu) vaø Offset (thanh ghiA) trong söï hình thaønh
1 ñòa chæ lieân quan bôûi leänh JMP hoaëc MOVC.
Base Register Offset Effective Address
Opcode
Opcode
Addr 7 ÷ Addr 0
Addr 15 ÷ Addr 8
Addr 10 ÷ Addr 8
Addr 7 ÷ Addr 0
PC (or PDTR) ACC
Index Addressing.
2. CAÙC KIEÅU LEÄNH (INSTRUCTION TYPES)
8051 chia ra 5nhoùm leänh chính :
√ Caùc leänh soá hoïc.
√ Leänh logic.
√ Dòch chuyeån döõ lieäu.
√ Lyù luaän.
√ Reõ nhaùnh chöông trình.
Töøng kieåu leänh ñöôïc moâ taû nhö sau :
2.1 Caùc leänh soá hoïc (Arithmetic Instrustion) :
ADD A, <src, byte>
ADD A, Rn : (A) ← (A) + (Rn)
ADD A, direct : (A) ← (A) + (direct)
ADD A, @ Ri : (A) ← (A) + ((Ri))
ADD A, # data : (A) ← (A) + # data
ADDC A, Rn : (A) ← (A) + (C) + (Rn)
ADDC A, direct : (A) ← (A) + (C) + (direct)
ADDC A, @ Ri : (A) ← (A) + (C) + ((Ri))
ADDC A, # data : (A) ← (A) + (C) + # data
SUBB A, <src, byte>
SUBB A, Rn : (A) ← (A) - (C) - (Rn)
SUBB A, direct : (A) ← (A) - (C) - (direct)
SUBB A, @ Ri : (A) ← (A) - (C) - ((Ri))
SUBB A, # data : (A) ← (A) - (C) - # data
INC <byte>
INC A : (A) ← (A) + 1
INC direct : (direct) ← (direct) + 1
INC Ri : ((Ri)) ← ((Ri)) + 1
INC Rn : (Rn) ← (Rn) + 1
INC DPTR : (DPTR) ← (DPTR) + 1
DEC <byte>
DEC A : (A) ← (A) - 1
DEC direct : (direct) ← (direct) - 1
DEC @Ri : ((Ri)) ← ((Ri)) - 1
DEC Rn : (Rn) ← (Rn) - 1
MULL AB : (A) ← LOW [(A) x (B)] ; coù aûnh höôûng
côø OV
: (B) ← HIGH [(A) x (B)] ; côø Cary
ñöôïc xoùa.
DIV AB : (A) ← Integer Result of [(A)/(B)]; côø
OV
: (B) ← Remainder of [(A)/(B)]; côø
Carry xoùa
DA A : Ñieàu chænh thanh ghi A thaønh soá BCD
ñuùng trong pheùp coäng BCD (thöôøng DA
A ñi keøm vôùi ADD, ADDC)
√ Neáu [(A3-A0)>9] vaø [(AC)=1] ⇐ (A3÷A0) ← (A3÷A0) + 6.
√ Neáu [(A7-A4)>9] vaø [(C)=1] ⇐ (A7÷A4) ← (A7÷A4) + 6.
2.2 Caùc hoaït ñoäng logic (Logic Operation) :
Taát caû caùc leänh logic söû duïng thanh ghi A nhö laø moät trong nhöõng toaùn
haïng thöïc thi moät chu kyø maùy, ngoaøi A ra maát 2 chu kyø maùy. Nhöõng hoaït
ñoäng logic coù theå ñöôïc thöïc hieän treân baát kyø byte naøo trong vò trí nhôù döõ lieäu
noäi maø khoâng qua thanh ghi A.
Caùc hoaït ñoäng logic ñöôïc toùm taét nhö sau :
ANL <dest - byte> <src - byte>
ANL A, Rn : (A) ← (A) AND (Rn).
ANL A, direct : (A) ← (A) AND (direct).
ANL A,@ Ri : (A) ← (A) AND ((Ri)).
ANL A, # data : (A) ← (A) AND (# data).
ANL direct, A : (direct) ← (direct) AND (A).
ANL direct, # data : (direct) ← (direct) AND # data.
ORL <dest - byte> <src - byte>
ORL A, Rn : (A) ← (A) OR (Rn).
ORL A, direct : (A) ← (A) OR (direct).
ORL A,@ Ri : (A) ← (A) OR ((Ri)).
ORL A, # data : (A) ← (A) OR # data.
ORL direct, A : (direct) ← (direct) OR (A).
ORL direct, # data : (direct) ← (direct) OR # data.
XRL <dest - byte> <src - byte>
XRL A, Rn : (A) ← (A) ) (Rn).
XRL A, direct : (A) ← (A) ) (direct).
XRL A,@ Ri : (A) ← (A) ) ((Ri)).
XRL A, # data : (A) ← (A) ) # data.
XRL direct, A : (direct) ← (direct) ) (A).
XRL direct, # data : (direct) ← (direct) ) # data.
y = a) b = ab + ab
CLR A : (A) ← 0
CLR C : (C) ← 0
CLR Bit : (Bit) ← 0
RL A : Quay voøng thanh ghi A qua traùi 1 bit
(An + 1) ← (An); n = 0÷6
(A0) ← (A7)
RLC A : Quay voøng thanh ghi A qua traùi 1 bit
coù côø Carry
(An + 1) ← (An); n = 0÷6
(C) ← (A7)
(A0) ← (C)
RR A : Quay voøng thanh ghi A qua phaûi 1 bit
(An + 1) → (An); n = 0÷6
(A0) → (A7)
RRC A : Quay voøng thanh ghi A qua phaûi 1 bit coù
côø Carry
(An + 1) → (An); n = 0÷6
(C) → (A7)
(A0) → (C)
SWAP A : Ñoåi choå 4 bit thaáp vaø 4 bit cao cuûa A
cho nhau (A3÷A0)√(A7÷A4).
2.3 Caùc leänh reõ nhaùnh :
Coù nhieàu leänh ñeå ñieàu khieån leân chöông trình bao goàm vieäc goïi hoaëc
traû laïi töø chöông trình con hoaëc chia nhaùnh coù ñieàu kieän hay khoâng coù ñieàu
kieän.
Taát caû caùc leänh reõ nhaùnh ñeàu khoâng aûnh höôûng ñeán côø. Ta coù theå ñònh
nhaûn caàn nhaûy tôùi maø khoâng caàn roû ñòa chæ, trình bieân dòch seõ ñaët ñòa chæ nôi
caàn nhaûy tôùi vaøo ñuùng khaåu leänh ñaõ ñöa ra.
Sau ñaây laø söï toùm taét töøng hoaït ñoäng cuûa leänh nhaûy.
JC rel : Nhaûy ñeán “rel” neáu côø Carry C = 1.
JNC rel : Nhaûy ñeán “rel” neáu côø Carry C = 0.
JB bit, rel : Nhaûy ñeán “rel” neáu (bit) = 1.
JNB bit, rel : Nhaûy ñeán “rel” neáu (bit) = 0.
JBC bit, rel : Nhaûy ñeán “rel” neáu bit = 1 vaø xoùa bit.
ACALL addr11 : Leänh goïi tuyeät ñoái trong page 2K.
(PC) ← (PC) + 2
(SP) ← (SP) + 1
((SP)) ← (PC7÷PC0)
(SP) ← (SP) + 1
((SP)) ← (PC15÷PC8)
(PC10÷PC0) ← page Address.
LCALL addr16 : Leänh goïi daøi chöông trình con trong 64K.
(PC) ← (PC) + 3
(SP) ← (SP) + 1
((SP)) ← (PC7÷PC0)
(SP) ← (SP) + 1
((SP)) ← (PC15÷PC8)
(PC) ← Addr15÷Addr0.
RET : Keát thuùc chöông trình con trôû veà chöông trình chính.
(PC15÷PC8) ← (SP)
(SP) ← (SP) - 1
(PC7÷PC0) ← ((SP))
(SP) ← (SP) -1.
RETI : Keát thuùc thuû tuïc phuïc vuï ngaét quay veà chöông trình
chính hoaït ñoäng töông töï nhö RET.
AJMP Addr11 : Nhaûy tuyeät ñoái khoâng ñieàu kieän trong 2K.
(PC) ← (PC) + 2
(PC10÷PC0) ← page Address.
LJMP Addr16 : Nhaûy daøi khoâng ñieàu kieän trong 64K
Hoaït ñoäng töông töï leänh LCALL.
SJMP rel : Nhaûy ngaén khoâng ñieàu kieän trong (-128÷127) byte
(PC) ← (PC) + 2
(PC) ← (PC) + byte 2
JMP @ A + DPTR:Nhaûy khoâng ñieàu kieän ñeán ñòa chæ (A) + (DPTR)
(PC) ← (A) + (DPTR)
JZ rel : Nhaûy ñeán A = 0. Thöïc haønh leänh keá neáu A ≠ 0.
(PC) ← (PC) + 2
(A) = 0 ⇐ (PC) ← (PC) + byte 2
JNZ rel : Nhaûy ñeán A ≠ 0. Thöïc haønh leänh keá neáu A = 0.
(PC) ← (PC) + 2
(A) < > 0 ⇐ (PC) ← (PC) + byte 2
CJNE A, direct, rel : So saùnh vaø nhaûy ñeán A ≠ direct
(PC) ← (PC) + 3
(A) < > (direct) ⇐ (PC) ← (PC) + Relative Address.
(A) < (direct) ⇐ C = 1
(A) > (direct) ⇐ C = 0
(A) = (direct). Thöïc haønh leänh keá tieáp
CJNE A, # data, rel : Töông töï leänh CJNE A, direct, rel.
CJNE Rn, # data, rel : Töông töï leänh CJNE A, direct, rel.
CJNE @ Ri, # data, rel : Töông töï leänh CJNE A, direct, rel.
DJNE Rn, rel : Giaûm Rn vaø nhaûy neáu Rn ≠ 0.
(PC) ← (PC) + 2
(Rn) ← (Rn) -1
(Rn) < > 0 ⇐ (PC) ← (PC) + byte 2.
DJNZ direct, rel : Töông töï leänh DJNZ Rn, rel.
2.4 Caùc leänh dòch chuyeån döõ lieäu :
Caùc leänh dòch chuyeån döõ lieäu trong nhöõng vuøng nhôù noäi thöïc thi 1 hoaëc
2 chu kyø maùy. Maãu leänh MOV <destination>, <source> cho pheùp di chuyeån
döõ lieäu baát kyø 2 vuøng nhôù naøo cuûa RAM noäi hoaëc caùc vuøng nhôù cuûa caùc thanh
ghi chöùc naêng ñaëc bieät maø khoâng thoâng qua thanh ghi A.
Vuøng Stack cuûa 8051 chæ chöùa 128 byte RAM noäi, neáu con troû Stack SP
ñöôïc taêng quaù ñòa chæ 7FH thì caùc byte ñöôïc PUSH vaøo seõ maát ñi vaø caùc byte
POP ra thì khoâng bieát roõ.
Caùc leänh dòch chuyeãn boä nhôù noäi vaø boä nhôù ngoaïi duøng söï ñònh vò giaùn
tieáp. Ñòa chæ giaùn tieáp coù theå duøng ñòa chæ 1 byte (@ Ri) hoaëc ñòa chæ 2 byte
(@ DPTR). Taát caû caùc leänh dòch chuyeån hoaït ñoäng treân toaøn boä nhôù ngoaøi
thöïc thi trong 2 chu kyø maùyvaø duøng thanh ghi A laøm toaùn haïng
DESTINATION.
Vieäc ñoïc vaø ghi RAM ngoaøi (RD vaø WR) chæ tích cöïc trong suoát quaù
trình thöïc thi cuûa leänh MOVX, coøn bình thöôøng RD vaø WR khoâng tích cöïc
(möùc 1).
Taát caû caùc leänh dòch chuyeån ñeåu khoâng aûnh höôûng ñeán côø. Hoaït ñoäng
cuûa töøng leänh ñöôïc toùm taéy nhö sau :
MOV A,Rn : (A) ← (Rn)
MOV A, direct : (A) ← (direct)
MOV A, @ Ri : (A) ← ((Ri))
MOV A, # data : (A) ← # data
MOV Rn, A : (Rn) ← (A)
MOV Rn, direct : (Rn) ← (direct)
MOV Rn, # data : (Rn) ← # data
MOV direct, A : (direct) ← (A)
MOV direct, Rn : (direct) ← (Rn)
MOV direct, direct : (direct) ← (direct)
MOV direct, @ Ri : (direct) ← ((Ri))
MOV direct, # data : (direct) ← data
MOV @ Ri, A : ((Ri)) ← (A)
MOV @ Ri, direct : ((Ri)) ← (direct)
MOV @ Ri, # data : ((Ri)) ← # data
MOV DPTR, # data16 : (DPTR) ← # data16
MOV A, @ A + DPTR : (A) ← (A) + (DPTR)
MOV @ A + PC : (PC) ← (PC) + 1
(A) ← (A) + (PC)
MOVX A, @ Ri : (A) ← ((Ri))
MOVX A, @ DPTR : (A) ← ((DPTR))
MOVX @ Ri, A : ((Ri)) ← (A)
MOVX @ DPTR, A : ((DPTR)) ← (A)
PUSH direct : Caát döõ lieäu vaøo Stack
(SP) ← (SP) + 1
(SP) ← (Drirect)
POP direct : Laáy töø Stack ra direct
(direct) ← ((SP))
(SP) ← (SP) - 1
XCH A, Rn : Ñoåi choå noäi dung cuûa A vôùi Rn
(A) √ (Rn)
XCH A, direct : (A) √ (direct)
XCH A, @ Ri : (A) √ ((Ri))
XCHD A, @ Ri : Ñoåi choå 4 bit thaáp cuûa (A) vôùi ((Ri))
(A3÷A0) √ ((Ri3÷Ri0))
2.5 Caùc leänh luaän lyù (Boolean Instruction) :
8051 chöùa moät boä xöû lyù luaän lyù ñaày ñuû cho caùc hoaït ñoäng bit ñôn, ñaây
laø moät ñieåm maïnh cuûa hoï vi ñieàu khieån MSC-51 maø caùc hoï vi xöû lyù khaùc
khoâng coù.
RAM noäi chöùa 128 bit ñôn vò vaø caùc vuøng nhôù caùc thanh ghi chöùc naêng
ñaëc bieät caáp leân ñeán 128 ñôn vò khaùc. Taát caû caùc ñöôøng Port laø bit ñònh vò,
moãi ñöôøng coù theå ñöôïc xöû lyù nhö Port ñôn vò rieâng bieät. Caùch truy xuaát caùc bit
naøy khoâng chæ caùc leänh reõ nhaùnh khoâng, maø laø moät danh muïc ñaày ñuû caùc
leänh MOVE, SET, CLEAR, COMPLEMENT, OR, AND.
Toaøn boä sö truy xuaát cuûa bit duøng sö ï ñònh vò tröïc tieáp vôùi nhöõng ñòa chæ
töø 00H÷7FH trong 128 vuøng nhôù thaáp vaø 80H÷FFH ôû caùc vuøng thanh ghi chöùc
naêng ñaëc bieät.
Bit Carry C trong thanh ghi PSW cuûa töø traïng thaùi chöông trình vaø ñöôïc
duøng nhö moät söï tích luõy ñôn cuûa boä xöû lyù luaän lyù. Bit Carry cuõng laø bit ñònh
vò vaø coù ñòa chæ tröïc tieáp vì noù naèm trong PSW. Hai leänhCLR C vaø CLR CY
ñeàu coù cuøng taùc duïng laø xoùa bit côø Carry nhöng leänh naøy maát 1 byte coøn leänh
sau maát 2 byte.
Hoaït ñoäng cuûa caùc leänh luaän lyù ñöôïc toùm taét nhö sau :
CLR C : Xoùa côø Carry xuoáng 0. Coù aûnh höôûng côø Carry.
CLR BIT : Xoùa bit xuoáng 0. Khoâng aûnh höôûng côø Carry
SET C : Set côø Carry leân 1. Coù aûnh höôûng côø Carry.
SET BIT : Set bit leân 1. Khoâng aûnh höôûng côø Carry.
CPL C : Ñaûo bit côø Carry. Coù aûnh höôûng côø Carry.
CPL BIT : Ñaûo bit. Khoâng aûnh höôûng côø Carry.
ANL C, BIT : (C) ← (C) AND (BIT) : Coù aûnh höôûng côø Carry.
ANL C, /BIT : (C) ← (C) AND NOT (BIT):Khoâng aûnh höôûng côø Carry.
ORL C, BIT : (C) ← (C) OR (BIT) : Taùc ñoäng côø Carry.
ORL C, /BIT : (C) ← (C) OR NOT (BIT) : Taùc ñoäng côø Carry.
MOV C, BIT : (C) ← (BIT) : Côø Carry bò taùc ñoäng.
MOV BIT, C : (BIT) ← (C) : Khoâng aûnh höôûng côø Carry.
III. HOAÏT ÑOÄNG CUÛA PORT NOÁI TIEÁP 8051.
1. GIÔÙI THIEÄU
Port noái tieáp cuûa 8051 coù theå hoaït ñoäng trong caùc mode rieâng bieät treân
phaïm vi cho pheùp cuûa taàn soá. Chöùc naêng chuû yeáu cuûa Port noái tieáp laø thöïc
hieän söï chuyeãn ñoåi song song thaønh noái tieáp cho döõ lieäu ra vaø söï chuyeãn ñoåi
noái tieáp thaønh song song cho döõ lieäu vaøo.
Phaàn cöùng truy xuaát tôùi Port noái tieáp qua caùc chaân TXD (P3.1) vaø RXD
(P3.0).
Port noái tieáp tham döï hoaït ñoäng ñaày ñuû (söï phaùt vaø thu cuøng luùc), vaø
thu vaøo boä ñeäm maø noù cho pheùp1 kyù töï nhaän vaøo vaø ñöôïc caát ôû boä ñeäm trong
khi kí töï thöù hai ñöôïc nhaän vaøo. Neáu CPU ñoïc kyù töï thöù nhaát tröôùc khi kí töï
thöù hai ñöôïc nhaän vaøo hoaøn toaøn thì döõ lieäu khoâng bò maát.
Hai thanh ghi chöùc naêng ñaëc bieät cung caáp cho phaàn meàm truy xuaát ñeán
Port noái tieáp laø SBUF vaø SCON. Söï ñeäm Port noái tieáp (SBUF) ôû ñòa chæ 99H laø
2 söï ñeäm thaät söï : Ghi leân SBUF LOAD döõ lieäu phaùt vaø ñoïc SBUF truy xuaát
döõ lieäu ñaõ nhaän. Ñaây laø hai thanh ghi rieâng bieät vaø roõ reät, maø thanh ghi phaùt
chæ ghi coøn thanh ghi thu chæ ñoïc. Sô ñoà khoái cuûa Port noái tieáp nhö sau :
TXD (P3.1) RXD (P3.0)
CLK CLK
Baute Rate
Baute Rate Clock
Clock (Transmit) (receive)
Serial Port Block Dragram
Thanh ghi ñieàu khieån Port noái tieáp SCON (98H) laø thanh ghi ñöôïc ñònh
vò bit bao goàm caùc traïng thaùi vaø caùc bit ñieàu khieån. Caùc bit ñieåu khieån set
mode cuûa Port noái tieáp, coøn caùc bit traïng thaùi cho bieát söï keát thuùc vieäc thu
phaùt 1 kí töï. Caùc bit traïng thaùi coù theå ñöôïc kieåm tra trong phaàn meàm hoaëc coù
theå laäp trình ñeå sinh ra söï ngaét.
Taàn soá hoaït ñoäng cuûa Port noái tieáp hoaëc toác ñoä BAUD coù theå ñöôïc laáy
töø dao ñoäng treân Chip 8051 hoaëc thay ñoåi. Neáu moät toác ñoä Baud thay ñoåi ñöôïc
SBUF
(Write - Only) Shift Register
SBUF
(Read - Only)
8051 Internal Bus
duøng, thì Timer cung caáp 1 toác ñoä Baud ghi giôø vaø phaûi ñöôïc laäp trình moät
caùch phuø hôïp.
2. THANH GHI ÑIEÀU KHIEÅN PORT NOÁI TIEÁP SCON (SERIAL
PORT CONTROL REGISTER)
Mode hoaït ñoäng cuûa Port noái tieáp 8051 ñöôïc set bôûivieäc ghi leân thanh
ghi mode cuûa Port noái tieáp SCON ôû ñòa chæ 99H. Baûng toùm taét thanh ghi ñieàu
khieån Port noái tieáp SCON nhö sau :
Bit Kyù hieäu Ñòa chæ Moâ taû hoaït ñoäng
SCON.7 SM0 9FH Bit 0 cuûa mode Port noái tieáp.
SCON.6 SM1 9EH Bit 1 cuûa mode Port noái tieáp.
SCON.5 SM2 9DH Bit 2 cuûa mode Port noái tieáp. Cho pheùp söï
truyeàn cuûa boä xöû lyù ña keânh ôû mode 2 vaø 3;
RI seõ khoâng tích cöïc neáu bit thöù 9 ñaõ thu
vaøo laø 0.
SCON.4 REN 9CH REN = 1 seõ cho thu kí töï.
SCON.3 TB8 9BH Phaùt bit 8. Bit 9 phaùt trong mode 2 vaø 3, noù
ñöôïc set hoaëc xoùa bôûi phaàn meàm.
SCONø.2 RB8 9AH Thu bit 8, bit 9 thu.
SCONø.1 TI 99H Côø ngaét phaùt. Ñöôïc set khi keát thuùc söï
truyeàn kí töï vaø ñöôïc xoùa bôûi phaàn meàm.
SCON.0 RI 98H Côø ngaét thu. Ñöôïc set khi keát thuùc söï thu vaø
ñöôïc xoùa bôûi phaàn meàm.
SCON Register sumary.
3. CAÙC MODE HOAÏT ÑOÄNG (MODE OF OPERATION)
SM0 SM1 MODE MOÂ TAÛ TOÁC ÑOÄ BAUD
0 0 0 Thanh ghi dòch Coá ñònh (taàn soá dao ñoäng 1÷12).
0 1 1 URAT8 bit Thay ñoåi (ñöôïc ñaët bôûiTimer).
1 0 2 URAT 8 bit Coá ñònh (taàn soá dao ñoäng ÷12 o
÷16)
1 1 3 URAT 8 bit Thay ñoåi (ñöôïc ñaët bôûi Timer).
Serial Port Modes.
Tröôùc khi duøng Port noái tieáp, SCON phaûi ñöôïc gaùn ñuùng mode. Ví duï
ñeå khôûi gaùn Port noái tieáp MODE 1 (SM0/SM1 = 0/1), cho pheùp thu (REN =1),
vaø set côø ngaét cuûa vieäc phaùt saün saøng hoaït ñoäng (TI = 1), ta duøng leänh sau :
MOV SCON, # 01010010H.
Port noái tieáp cuûa 8051 coù 4 mode hoaït ñoäng tuøy thuoäc theo 4 traïng thaùi
cuûa SM0/SM1.
Ba trong 4 mode cho pheùp truyeàn söï ñoàng boä vôùi moãi kí töï thu hoaêc
phaùt seõ ñöôïc boá trí bôûi bit Start hoaëc bit Stop.
4. SÖÏ KHÔÛI ÑOÄNG, TRUY XUAÁT CAÙC THANH GHI PORT NOÁI
TIEÁP
4.1. Söï cho pheùp boä thu (Recive Enable) :
Bit cho pheùp thu REN trong thanh ghi SCON phaûi ñöôïc set bôûi phaàn
meàm ñeå cho pheùp söï thu caùc kyù töï. Ñieàu naøy thöôøng ñöôïc laøm ôû ñaàu chöông
trình khi caùc Port noái tieáp vaø caùc Timer . . . ñöôïc khôûi ñoäng.
Ta coù theå ñoäng baèng leänh :
SETB REN hoaëc MOV CON, # XXX1XXXXB
4.2. Bit data thöù 9 (the9th
data bit) :
Bit data thöù 9 ñöôïc phaùt trong mode 2 vaø mode 3 phaûi ñöôïc LOAD
vaøo TB8 bôûi phaàn meàm, coøn bit data thöù 9 ñöôïc thu thì ñaët trong RB8.
Phaàn meàm coù theå (hoaëc khoâng) ñoøi hoûi moät bit data thöù 9 tham gia vaøo
nhöõng chi tieát kyõ thuaät cuûa thieát bò noái tieáp vôùi ñieàu kieän maøsöï truyeàn data
ñöôïc thaønh laäp.
4.3. Söï theâm vaøo bit kieåm tra chaún leû Parity :
Caùch toång quaùt duøng chung bit data thöù 9 laø coäng bit Parity vaøo moät kyù töï
.
Bit P (Parity) trong töø traïng thaùi chöông trình PSW seõ ñöôïc set hoaëc xoùa
vôùi moïi chu kyø maùy ñeå thaønh laäp bit Parity chaún vôùi 8 bit trong thanh ghi tích
luõyA
Ví duï neáu söï truyeàn yeâu caàu 8 bit data coäng theâm 1 bit Parity chaün, thì
caùc leänh sau ñaây coù theå ñöôïc duøng ñeå phaùt 8 bit vaøo thanh ghi A vôùi Parity
chaún ñöôïc coäng vaøo bit thöù 9.
MOV C, P
MOV TB8, C
MOV SBUF, A
Neáu Parity leû ñöôïc yeâu caàu thì caùc leänh treân ñöôïc söûa laïi laø:
MOV C, P
CPL C
MOV TB8, C
MOV SBUF, A
Vieäc duøng bit Parity khoâng bò giôùi haïn trong mode 2 hoaëc mode 3. 8 bit
data ñöôïc phaùt trong mode 1 coù theå bao goàm 7 bit data, vaø 1 bit Parity. Ñeå
phaùt 1 maõ ASCII 7 bit vôùi 1 bit Parity chaún vaøo 8 bit, caùc leänh sau ñaây ñöôïc
duøng :
CLR ACC,7 : Xoùa bit MSB trong A ñaûm baûo Parity chaún.
MOV C, P : Ñöa Parity chaún vaøo C
MOV ACC.7, C : Ñöa Parity chaún vaøo bit SB cuûa A
MOV SBUF, A : Gôûi bit data cuøng bit Parity chaún
4.4. Côø ngaét :
Côø ngaét thu RI vaø phaùt TI trong thanh ghi SCON vaän haønh 1 rôle quan
troïng trong söï truyeàn noái tieáp 8051. Caû hai bit ñeàu ñöôïc set bôûi phaàn cöùng
nhöng phaûi xoùa bôûi phaàn meàm.
Ñieån hình laø RI ñöôïc set ôû cuoái söï thu kyù töï vaø cho bieát : thanh ghi ñeäm
thu ñaõ ñaày”. Ñieàu kieän naøy coù theå kieåm tra trong phaàn meàm hoaëc coù theå ñöôïc
laäp trình ñeå sinh ra söï ngaét. Neáu phaàn meàm muoán nhaäp moät kyù töï töø moät thieát
bò ñaõ ñöôïc keát noái ñeán Port noái tieáp, thì noù phaûi chôø ñeán khi RI ñöôïc set, sau
khi xoùa RI vaø ñoïc kyù töï töø SBUF. Ñieàu naøy ñöôïc laäp trình nhö sau :
WAIT :
JNB RI, WAIT : Kieåm tra RI coù set chöa.
CLR RI : Xoùa côø ngaét thu RI
MOV A, SBUF : CPU ñoïc kyù töï
TI ñöôïc set ôû cuoái söï phaùt kyù töï vaø cho bieát “thanh ghi ñeäm cuûa söï phaùt
ñaõ roãng”. Neáu phaàn meàm muoán gôûi 1 kyù töï ñeán moät thieát bò ñaõ ñöôïc keát noái
ñeán Port noái tieáp, tröôùc tieân noù phaûi kieåm tra xem Port noái tieáp ñaõ saün saøng
chöa. Neáu kyù töï tröôùc ñaõ ñöôïc gôûi ñi, thì noù phaûi chôø cho ñeán khi söï phaùt ñi
hoaøn thaønh. Caùc leänh sau ñaây duøng ñeå phaùt moät kyù töï trong thanh ghi A ra:
WAIT :
JNB TI, WAIT : Kieåm tra TI coù set chöa.
CLR TI : Xoùa côø ngaét thu TI
MOV A, SBUF : CPU ñoïc kyù töï
5. SÖÏ TRUYEÀN CUÛA BOÄ XÖÛ LYÙ ÑA KEÂNH
Mode 2 vaø mode 3 coù moät söï cung caáp ñaëc bieät cho vieäc truyeàn ña
keânh xöû lyù. ÔÛ caùc mode naøy, 9 bit data ñöôïc thu vaø bit thöù 9 ñi vaøo RB8. Port
coù theå laäp trình nhö ñieàu maø bit Stop ñöôïc thu, söï ngaét cuûa Port chæ ñöôïc tích
cöïc neáu RB8 =1. Ñaëc ñieåm naøy cho pheùp bôûi vieäc set bit MS2 trong thanh ghi
SCON. ÖÙng duïng naøy laø moät söï caøi ñaët maïng ñöôïc duøng bôûi nhieàu 8051 ôû söï
saép ñaët maùy chuû vaø maùy con nhö sau :
Multiprocessor Communication
Khi boä xöû lyù chuû muoán phaùt moät khoái döõ lieäu ñeán boä xöû lyù con rieâng leû,
tröôùc tieân noù gôûi ra 1 byte ñòa chæ ñeå nhaän dieän boä xöû lyù con mong muoán. Byte
ñòa chæ ñöôïc phaân bieät vôùi byte döõ lieäu bôûi bit thöù 9 : bit thöù 9 baèng 1 trong
byte ñòa chæ vaø baèng 0 trong byte döõ lieäu. Tuy nhieân byte ñòa chæ seõ ngaét toaøn
boä caùc boä xöû lyù con, do ñoù coù theå khaùm phaù byte ñaõ thu ñeå kieåm tra neáu noù
ñang ñònh ñòa chæ. Boä xöõ lyù con ñaõ ñöôïc ñònh ñòa chæ seõ xoùa bit SM2 cuûa noù vaø
chuaån bò thu caùc byte döõ lieäu theo sau ñoù. Nhöõng boä xöû lyù con khoâng ñöôïc
ñònh ñòa chæ vaãn ñöôïc giöõ caùc bit SM2 cuûa noù vaø set trôû veà caùc baän cuûa chuùng
ñoàng thôøi lôø ñi caùc byte döõ lieäu ñaõ thu thaäp. Chuùng seõ ñöôïc ngaét laïi khi byte
ñòa chæ keá tieáp ñöôïc phaùt bôûi boä xöõ lyù cuõ.
MASTER
8051
TXD
P0 P1 P2 P3
8051 Slave # 1
RXD
P0 P1 P2 P3
8051 Slave # 2
RXD
32 I/O lines 32 I/O lines
Bit SM2 khoâng coù taùc duïng trong mode 0 vaø trong mode 1 noù coù theå
ñöôïc duøng ñeå kieåm tra söï thích hôïp cuûa bit Stop. Trong söï thu mode 1, neáu
SM2 = 0 thì söï ngaét thu seõ khoâng tích cöïc tröø khi bit Stop thích hôïp ñöôïc thu.
6. TOÁC ÑOÄ BAUD CUÛA PORT NOÁI TIEÁP :
Toác ñoä Baud cuûa Port noái tieáp coá ñònh ôû mode 0 vaø mode 2. Trong
mode 0 noù luoân luoân laø taàn soá dao ñoäng treân Chip chia cho 12. Thoâng thöôøng
thaïch anh 12 MHz laùi dao ñoäng treân Chip 8051 neân toác ñoä Baud cuûa mode 0
laø 1MHz.
On Chip Oscillator
Baud Rate Clock
MODE 0
Baèng söï maëc nhieân sau khi reset heä thoáng, toác ñoä Baud mode 2 laø taàn
soá dao ñoäng chia cho 64, toác ñoä Baud cuõng bò aûnh höôûng bôûi bit SMOD cuûa
thanh ghi PCON.
Vieäc set bit SMOD seõ taêng gaáp ñoâi toác ñoä Baud trong caùc mode1,2 vaø
3. Trong mode 2, toác ñoä Baud coù theå ñöôïc gaáp ñoâi töø giaù trò maëc ñònh 1/64 taàn
soá/Chip (öùng SMOD = 0) leân ñeán 1/32 taàn soá dao ñoäng treân Chip (öùng vôùi
SMOD =1).
SMOD = 0
On Chip Oscillator Baud Rate Clock
SMOD = 1
MODE 2
Bôûi thanh ghi PCON khoâng coù bit ñònh vò, neân ñeå set bit SMOD maø
khoâng thay ñoåi caùc bit khaùc cuûa thanh ghi PCON thì ñoøi hoûi phaûi coù 1 hoaït
ñoäng “ñoïc boå sung ghi”.
Caùc leänh sau ñaây set bit SMOD :
MOV A, PCON : Nhaäp vaøo A giaù trò hieän haønh cuûa PCON
SETB ACC, 7 : Set bit 7 cuûa ACC (bit SMOD)
MOV PCON, A : Ghi giaù trò trôû veà PCON maø SMOD ñaõ ñöôïc set.
÷ 12
÷ 64
÷ 32
Caùc toác ñoä Baud trong mode 1 vaø mode 3 cuûa 8051 ñöôïc xaùc ñònh bôûi
toác ñoä traøn cuûa Timer 1. Bôûi vì Timer hoaït ñoäng ôû taàn soá cao lieân tuïc neân traøn
xa hôn nöõa ñöôïc chia cho 32 (chia cho 16 neáu SMOD = 1) tröôc khi cung caáp
xung clock toác ñoä Baud ñeán Port noái tieáp. Toác ñoä Baud ôû mode 1 vaø 3 cuûa
8051 ñöôïc xaùc ñònh bôûi toác ñoä traøn cuûa Timer 1 hoaëc Timer 2, hoaëc caû 2.
SMOD = 0
On Chip Oscillator Baud Rate Clock
SMOD = 1
MODE 1 and MODE 3
6.1 Duøng Timer 1 gioáng nhö söï ñeám toác ñoä Baud :
Muoán sinh ra toác ñoä Baud, ta khôûi gaùn TMOD ôû mode töï ñoäng naïp 8 bit
(mode 2 cuûa Timer) vaø ñaët giaù trò Reload ñuùng vaøo byte cao cuûa thanh ghi
Timer 1 (TH1) ñeå sinh ra toác ñoä traøn chính xaùc cho toác ñoä Baud. Coù nhöõng toác
ñoä Baud raát chaäm ta duøng mode 16 bit laø mode 1 cuûa Timer, nhöng ta phaûi
khôûi gaùn sau moãi söï traøn cho TL1/TH1 trong thuû tuïc phuïc vuï ngaét ISR.
Hoaït ñoäng khaùc ñöôïc ñeám giôø bôûi vieäc duøng Timer 1 ngoaøi laø T1
(P3.5). coâng thöùc chung ñeå xaùc ñònh toác ñoä Baud trong mode 1 vaø mode 3 laø :
BAUD RATE = TIMER 1 OVERFLOW RATE÷32
Ví duï moät hoaït ñoäng 1200 Baud ñoøi hoûi moät toác ñoä traøn laø 1200/32 =
38,4KHz. Neáu thaïch anh 12 MHz laùi dao ñoäng treân Chip, thì Timer 1 ñöôïc
ñeám giôø ôû toác ñoä cuûa taàn soá 1 MHz. Bôøi vì Timer phaûi traøn ôû toác ñoä taàn soá
38,4 KHz vaø Timer ñeám giôø ôû toác ñoä cuûa taàn soá 1 MHz, neân moät söï traøn ñöôïc
yeâu caàu vôùi 1000 : 38,4 = 26,04 clock (laøm troøn 26). Bôûi vì caùc Timer ñeám leân
vaø traøn treân söï chuyeån ñoåi töø FFH → 00H cuûa boä ñeám, neân 26 söï ñeám thaáp
döôùi 0 laø giaù trò Reload caàn naïp cho TH1 (giaù trò ñuùng laø - 26). Ta duøng leänh
MOV TH1, # 26.
Ví duï sau khôûi ñoäng Port noái tieáp hoaït ñoäng gioáng nhö UART 8 bit ôû
toác ñoä Baud 2400, duøng Timer 1 ñeå cung caáp söï ñeám giôø toác ñoä Baud :
MOV SCON, # 01010010B : Port noái tieáp mode 1.
MOV TMOD, # 20 : Timer 1 mode 2
÷ 32
÷ 16
MOV TH1, # -13 : Naïp vaøo boä ñeám toác ñoä 2400 Baud.
SETB TR1 : Start Timer 1.
Trong SCON coù SM0/SM1 ñeå vaøo mode UART 8 bit, REN = 1 cho
pheùp Port noái tieáp thu caùc kyù töï vaø TI = 1 cho pheùp phaùt kyù töï ñaàu tieân bôûi
vieäc cho bieát thanh ghi ñeám roãng. TMOD coù M1/M0 = 1/0 ñeå ñaët Timer 1 vaøo
mode töï ñoäng naïp 8 bit. Vieäc set bit TR1 ñeå môû maùy chaïy Timer. Toác ñoä
Baud 2400 seõ cho ta toác ñoä traøn Timer 1 laø 2400/32 = 76,8 KHz ñoàng thôøi
Timer 1 ñöôïc ñeám giôø ôû toác ñoä cuûa taàn soá 1000 KHz (öùng vôùi thaïch anh 12
MHz) seõ cho soá xung Clock sau moãi söï traøn laø 1000 : 76,8 = 13,02 ( laáy troøn
13). Vaäy - 13 laø giaù trò caàn naïp vaøo TH1 ñeå coù toác ñoä Baud laø 2400 Baud.
Sau ñaây laø baûng toùm taét toác ñoä Baud phoå bieán öùng vôùi 2 loaïi thaïch anh
12 MHz vaø 11, 059 MHz :
Baud Rate Crytal
Frequency
SMOD TH1 Reload
Value
Actua Baud
Rate
Error
9600 12MHz 1 - 7 (F9H) 8923 7%
2400 12MHz 0 -13 (F9H) 2404 0,16%
1200 12MHz 0 -26 (F9H) 1202 0%
19200 11,059MHz 1 -3 (F9H) 19200 0%
9600 11,059MHz 0 -3 (F9H) 9600 0%
2400 11,059MHz 0 -12 (F9H) 2400 0%
1200 11,059MHz 0 -24 (F9H) 1200 0%
Baud rate sumary.
IV. HOAÏT ÑOÄNG TIMER CUÛA 8051 :
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 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.
Caùc Timer ñöôïc öùng duïng thöïc teá cho caùc hoaït ñoäng ñònh höôùng. 8051
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 8051 ñöôïc truy xuaát bôûi vieäc duøng 6 thanh ghi chöùc
naêng ñaëc bieät nhö sau :
Timer SFR Purpose Address Bit-Addressable
TCON Control 88H YES
TMOD Mode 89H NO
TL0 Timer 0 low-byte 8AH NO
TL1 Timer 1 low-byte 8BH NO
TH0 Timer 0 high-byte 8CH NO
TH1 Timer 1 high-byte 8DH NO
2. THANH GHI MODE TIMER TMOD (TIMER MODE REGITER):
Thanh ghi mode goàm hai nhoùm 4 bit laø : 4 bit thaáp ñaët mode hoaït ñoäng
cho Timer 0 vaø 4 bit cao ñaët mode hoaït ñoäng cho Timer 1. 8 bit cuûa thanh ghi
TMOD ñöôïc toùm taét nhö sau :
Bit Name Timer Description
7 GATE 1 Khi GATE = 1, Timer chæ laøm vieäc khi INT1=1
6 C/T 1 Bit cho ñeám söï kieän hay ghi giôø
C/T = 1 : Ñeám söï kieän
C/T = 0 : Ghi giôø ñeàu ñaën
5 M1 1 Bit choïn mode cuûa Timer 1
4 M0 1 Bit choïn mode cuûa Timer 1
3 GATE 0 Bit coång cuûa Timer 0
2 C/T 0 Bit choïn Counter/Timer cuûa Timer 0
1 M1 0 Bit choïn mode cuûa Timer 0
0 M0 0 Bit choïn mode cuûa Timer 0
Hai bit M0 vaø M1 cuûa TMOD ñeå choïn mode cho Timer 0 hoaëc Timer 1.
M1 M0 MODE DESCRIPTION
0 0 0 Mode Timer 13 bit (mode 8048)
0 1 1 Mode Timer 16 bit
1 0 2 Mode töï ñoäng naïp 8 bit
1 1 3 Mode Timer taùch ra :
Timer 0 : TL0 laø Timer 8 bit ñöôïc ñieàu khieån bôûi
caùc bit cuûa Timer 0. TH0 töông töï nhöng ñöôïc
ñieàu khieån bôûi caùc bit cuûa mode Timer 1.
Timer 1 : Ñöôïc ngöøng laïi.
TMOD khoâng coù bit ñònh vò, noù thöôøng ñöôïc LOAD moät laàn bôûi phaàn
meàm ôû ñaàu chöông trình ñeå khôûi ñoäng mode Timer. Sau ñoù söï ñònh giôø coù theå
döøng laïi, ñöôïc khôûi ñoäng laïi nhö theá bôûi söï truy xuaát caùc thanh ghi chöùc naêng
ñaëc bieät cuûa Timer khaùc.
3. THANH GHI ÑIEÀU KHIEÅN TIMER TCON (TIMER CONTROL
REGISTER) :
Thanh ghi ñieàu khieån bao goàm caùc bit traïng thaùi vaø caùc bit ñieàu khieån
bôûi Timer 0 vaø Timer 1. Thanh ghi TCON coù bit ñònh vò. Hoaït ñoäng cuûa töøng
bit ñöôïc toùm taét nhö sau :
Bit Symbol Bit Address Description
TCON.7 TF1 8FH Côø traøn Timer 1 ñöôïc set bôûi phaàn cöùng
ôû söï traøn, ñöôïc xoùabôûi phaàn meàm hoaëc
bôûi phaàn cöùng khi caùc vectô xöû lyù ñeán
thuû tuïc phuïc vuï ngaét ISR
TCON.6 TR1 8EH Bit ñieàu khieån chaïy Timer 1 ñöôïc set
hoaëc xoùa bôûi phaàn meàm ñeå chaïy hoaëc
ngöng chaïy Timer.
TCON.5 TF0 8DH Côø traøn Timer 0(hoaït ñoäng töông töï TF1)
TCON.4 TR0 8CH Bit ñieàu khieån chaïy Timer 0 (gioáng TR1)
TCON.3 IE1 8BH Côø kieåu ngaét 1 ngoaøi. Khi caïnh xuoáng
xuaát hieän treân INT1 thì IE1 ñöôïc xoùa bôûi
phaàn meàm hoaëc phaàn cöùng khi CPU ñònh
höôùng ñeán thuû tuïc phuïc vuï ngaét ngoaøi.
TCON.2 IT1 8AH Côø kieåu ngaét 1 ngoaøi ñöôïc set hoaëc xoùa
baèng phaán meàm bôûi caïnh kích hoaït bôûi
söï ngaét ngoaøi.
TCON.1 IE0 89H Côø caïnh ngaét 0 ngoaøi
TCON IT0 88H Côø kieåu ngaét 0 ngoaøi.
4. CAÙC MODE VAØ CÔØ TRAØN (TIMER MODES AND
OVERFLOW) :
8051 côø Timer laø Timer 0 vaø timer 1. Ta duøng kyù hieäu TLx vaø Thx ñeå
chæ 2 thanh ghi byte thaáp vaø byte cao cuûa Timer 0 hoaëc Tmer 1.
4.1. Mode Timer 13 bit (MODE 0) :
Overflow
TLx (5 bit) THx (8 bit) TFx
Timer Clock
MODE 0
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.
4.2. Mode Timer 16 bit (MODE 1) :
Overflow
MODE 1
Mode 1 laø mode Timer 16 bit, töông tö nhö mode 0 ngoaïi tröø Timer naøy
hoaït ñoäng nhö moät Timer ñaày ñuû 16 bit, xung clock ñöôïc duøng vôùi söï keát hôïp
caùc thanh ghi cao vaø thaáp (TLx,THx). Khi xung clock ñöôïc nhaän vaøo, boä ñeám
Timer taêng leân 0000H, 0001H,0002H, . . ., vaø moät söï traøn seõ xuaát hieän khi coù
söï chuyeån treân boä ñeám Timer töø FFFH sang 0000H vaø seõ set côø traøn Time,
sau ñoù Timer ñeám tieáp.
Côø traøn laø bit TFx trong thanh ghi TCON maø noù seõ ñöôïc ñoïc hoaëc ghi
bôûi phaàn meàm.
Bit coù troïng soá lôùn nhaát (MSB) cuûa giaù trò trong thanh ghi Timer laø bit 7
cuûa THx vaø bit coù troïng soá thaáp nhaát (LSB) laø bit 0 cuûa TLx. Bit LSB ñoåi
traïng thaùi ôû taàn soá clock vaøo ñöôïc chia 216
= 65.536.
Caùc thanh ghi Timer TLx vaø Thx coù theå ñöôïc ñoïc hoaëc ghi taïi baát kyø
thôøi ñieåm naøo bôûi phaàn meàm.
4..3. Mode töï ñoäng naïp 8 bit (MODE 2)
Overflow
Reload
MODE 2
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öï
TLx (8 bit)
TL x (8 bit)
THx (8 bit) TFx
TFx
Timer Clock
Timer Clock
TH x (8 bit)
chuyeån traïng thaùi töø FFH sang 00H keá tieáp vaø cöù theá tieáp tuïc. Mode naøy thì
phuø hôïp bôûi vì caùc söï traøn xuaát hieän cuï theå maø moãi luùc nghæ thanh ghi TMOD
vaø THx ñöôïc khôûi ñoäng.
4.4 Mode Timer taùch ra (MODE 3) :
Overflow
Overflow
Overflow
MODE 3
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 taát yeáu cung caáp 1 Timer ngoaïi 8 bit laø Timer thöù ba cuûa 8051.
Khi vaøo Timer 0 ôû mode 3, Timer coù theå hoaït ñoäng hoaëc taét bôûi söï ngaét noù ra
ngoaøi vaø vaøo trong mode cuûa chính noù hoaëc coù theå ñöôïc duøng bôûi Port noái tieáp
nhö laø moät maùy phaùt toác ñoä Baud, hoaëc noù coù theå duøng trong höôùng naøo ñoùmaø
khoâng söû duïng Interrupt.
5. CAÙC NGUOÀN XUNG CLOCK (CLOCK SOURCES) :
Coù hai nguoàn xung clock coù theå ñeám giôø laø söï ñònh giôø beân trong vaø söï
ñeám söï kieän beân ngoaøi. Bit C/T trong TMOD cho pheùp choïn 1 trong 2 khi
Timer ñöôïc khôûi ñoäng.
TL1 (8 bit)
On Chip
Osillator
TH1 (8 bit)
TL1 (8 bit)
TH0 (8 bit)
TF0
TF1
Timer Clock
Timer Clock
Timer Clock
÷12
Timer
Clock
Crystal
5.1 Söï baám giôø beân trong (Interval Timing) :
Neáu bit C/T = 0 thì hoaït ñoäng cuûa Timer lieân tuïc ñöôïc choïn vaøo boä
Timer ñöôïc ghi giôø töø dao ñoäng treân Chip. Moät boä chia 12 ñöôïc theâm vaøo ñeå
giaûm taàn soá clock ñeán 1 giaù trò phuø hôïp haàu heát caùc öùng duïng. Caùc thanh ghi
TLx vaø THx taêng toác ñoä 1/12 laàn taàn soá dao ñoäng treân Chip. Neáu duøng thaïch
anh 12MHz thì seõ ñöa ñeán toác ñoä clock 1MHz.
Caùc söï traøn Timer sinh ra sau moät con soá coá ñònh cuûa nhöõng xung
clock, noù phuï thuoäc vaøo giaù trò khôûi taïo ñöôïc LOAD vaøo caùc thanh ghi THx vaø
TLx.
5.2 Söï ñeám caùc söï kieän (Event Counting) :
Neáu bit C/T = 1 thì boä Timer ñöôïc ghi giôø töø boä nguoàn beân ngoaøi trong
nhieàu öùng duïng, boä 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 chaân P3.4 laø ngoõ nhaäp cuûa xung clock
bôûi Timer 0 (T0) vaø P3.5 laø ngoõ nhaäp cuûa xung clock bôûi Timer 1 (T1).
Trong caùc öùng duïng ñeám caùc thanh ghi Timer ñöôïc taêng trong ñaùp öùng
cuûa söï chuyeån traïng thaùi töø 1 sang 0 ôû ngoõ nhaäp Tx. Ngoõ nhaäp beân ngoaøi ñöôïc
thöû trong suoát S5P2 cuûa moïi chu kyø maùy : Do ñoù khi ngoõ nhaäp ñöa tôùi möùc cao
trong moät chu kyø vaø möùc thaáp trong moät chu kyø keá tieáp thì boä ñeám taêng leân
moät. Giaù trò môùi xuaát hieän trong caùc thanh ghi Timer trong suoát S5P1 cuûa chu
kyø theo sau moät söï chuyeãn ñoåi ñöôïc khaùm thaáy. 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.
6. SÖÏ BAÉT ÑAÀU, KEÁT THUÙC VAØ SÖÏ ÑIEÀU KHIEÅN CAÙC TIMER
(STARTING, STOPPING AND CONTROLLING THE TIMER)
Bit TRx trong thanh ghi coù bit ñònh vò TCON ñöôïc ñieàu khieånbôû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
C/T
T0 or T1
pin
0 = Up (internal Timing)
1 = Down (Event Counting)
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.
7. SÖÏ KHÔÛI ÑOÄNG VAØ TRUY XUAÁT CAÙC THANH GHI TIMER :
Caùc Timer ñöôïc khôûi ñoäng 1 laàn ôû ñaàu chöông trình ñeå ñaët mode hoaït
ñoäng cho chuùng. Sau ñoù trong thaân chöông trình caùc Timer ñöôïcbaé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 ñeà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.
8. SÖÏ ÑOÏC THANH GHI TIMER TREÂN TUYEÁN :
Trong moät soá öùng duïng caàn thieát ñoïc giaù trò trong caùc thanh ghi Timer
treân tuyeán, coù moät vaán ñeà tieàm naêng ñôn giaûn ñeå baûo veä laïi phaàn meàm. Bôûi
vì 2 thanh ghi Timer phaûi ñöôïc ñoïc, neân “loãi giai ñoaïn” coù theå xuaát hieän neáu
byte traøn vaø byte cao giöõa 2 hoaït ñoäng ñoïc. Moät giaûi phaùp ñeå khaéc phuïc laø
ñoïc byte cao tröôùc, sau ñoù ñoïc byte thaáp, vaø ñoïc laïi byte cao : Neáu byte cao
thay ñoåi thì laëp laïi caùc hoaït ñoäng ñoïc.
V. HOAÏT ÑOÄNG INTERRUPT CUÛA 8051 :
Trong nhieàu öùng duïng ñoøi hoûi ta phaûi duøng Interrupt maø khoâng duøng
Timer bôûi vì neáu duøng Timer ta phaûi maát thôøi gian ñeå chôø côø traøn TimerTFx
set môùi xöû lyù tieáp chöông trình. Do ñoù ta khoâng coù thôøi gian ñeå laøm caùc vieäc
quan troïng khaùc maø öùng duïng ñoøi hoûi. Ñaây laø chöông trình raát quan troïng cuûa
8051 hay hoï MSC-51.
1. GIÔÙI THIEÄU :
Interrupt laø moät söï coá coù ñieàu kieän maø noù gaây ra söï ngöng laïi taïm thôøi
cuûa chöông trình ñeå phuïc vuï moät chöông trình khaùc. Caùc Interrupt vaän haønh
moät Relay raát quan troïng trong thieát bò vaø söï cung caáp ñaày ñuû caùc öùng duïng vi
ñieàu khieån. Chuùng cho pheùp 1 heä thoáng ñaùp öùng ñoààng boä ñeán söï kieän quan
troïng vaø giaûi quyeát söï kieän ñoù trong khi chöông trình khaùc ñang thöïc thi. Moät
heä thoáng ñöôïc laùi bôûi Interrupt cho 1 kyõ xaûo laøm nhieàu coâng vieäc cuøng môät
luùc. Taát nhieân CPU khoâng theå thöïc thi nhieàu leänh taïi moät thôøi ñieåm, nhöng noù
coù theå taïm thôøi treo vieäc thöïc thi cuûa chöông trình chính ñeå thöïc thi chöông
trình khaùc vaø sau ñoù quay laïi chöông trình chính.
Khi chöông trình chính ñang thöïc thi maø coù moät söï ngaét xaûy ñeán thì
chöông trình chính ngöng thöïc thi vaøreû nhaùnh ñeán thuû tuïc phuïc vuï ngaét ISR
(INTERRUPT SERVICE ROUTINE). ISR thöïc thi ñeå thöïc hieän hoaït ñoäng vaø
keát thuùc vôùi leänh “trôû laïi töø söï ngaét” : Chöông trình tieáp tuïc nôi maø noù döøng
laïi.
Ta coù theå toùm taét söï thöïc thi cuûa 1 chöông trình trong tröôøng hôïp coù
Interrupt vaø khoâng coù Interrupt nhö sau :
Timer
Program excution without interrut
* ** * ** * **
Timer
Program excution with interrupt.
Main Program
Main
ISR
Main
ISR
Main
ISR
Main
Trong ñoù : Kyù hieäu * cho bieát ngaét chöông trình chính ñeå thöïc thi
chöông trình con trong thuû tuïc phuïc vuï ngaét ISR. Coøn kyù hieäu ** cho bieát quay
trôû laïi chöông trình chính thöïc thi tieáp khi keát thuùc chöông triønh con trong ISR.
2. TOÅ CHÖÙC INTERRUPT CUÛA 8051 (INTERRUPT
ORGANIZATION)
8051 cung caáp 5 nguoàn ngaét, 2 söï ngaét ngoaøi, 2 söï ngaét Timer vaø moät
söï ngaét Port noái tieáp. Taát caû caùc Interrrupt bò maát taùc duïng bôûi söï maëc ñònh
sau khi reset heä thoáng vaø ñöôïc cho pheùp caù bieät bôûi phaàn meàm.
Trong tröôøng hôïp coù hai hoaëc nhieàu hôn söï ngaét xaûy ra ñoàng thôøi hoaëc
moät söï ngaét ñang ñöôïc phuïc vuï maø xuaát hieän moät söï ngaét khaùc, thì seõ coù hai
caùch thöïc hieän söï ngaét laø söï kieåm tra lieân tieáp vaø söï öu tieân caáp 2.
2.1 Söï cho pheùp ngaét vaø söï caám ngaét
Moãi nguoàn Interrupt ñöôïc cho pheùp rieâng bieät hoaëc söï caám rieâng bieät
qua thanh ghi chöùc naêng ñaëc bieät coù bit ñònh vò IE (Interrupt Enable) taïi ñòa
chæ 0A8H. Cuõng nhö söï caù bieät cho pheùp caùc bit cuûa moãi nguoàn ngaét coù 1 bit
cho pheùp (hoaëc caám) chung maø noù ñöôïc xoùa ñeå caám taát caû caùc Interrupt hoaëc
ñöôïc set ñeå cho pheùp chung caùc Interrupt.
Hoaït ñoäng cuûa töøng bit trong thanh ghi cho pheùp ngaét IE ñöôïc toùm taét
trong baûng sau :
Bit Symbol Bit Address Söï moâ taû (Enable = 1; Dissble)
IE.7 EA AFH Cho pheùp toaøn boä hoaëc caám toaøn boä.
IE.6 - AEH Khoâng ñònh nghóa.
IE.5 ET2 ADH Cho pheùp ngaét Timer 2 (8052).
IE.4 ES ACH Cho pheùp ngaét Port noái tieáp.
IE.3 ET1 ABH Cho pheùp ngaét Timer 1.
IE.2 EX1 AAH Cho pheùp ngaét ngoaøi External 1.
IE.1 ET0 A9H Cho pheùp ngaét Timer 0.
IE.0 EX0 A8H Cho pheùp ngaét ngoaøi External 0.
IE (Interrupt Enable) Register Sumary.
Hai bit phaûi set ñeå cho pheùp 1 söï ngaét naøo ñoù : Laø bit cho pheùp rieâng vaø
bit cho pheùp chung. Ví duï ñeå cho pheùp ngaét Timer 1 ta coù theå thöïc hieän treân
bit: SETB ET1 vaø SETB EA hoaëc söï thöïc hieän treân byte : MOV IE,
#10001000B. Caû 2 phöông phaùp naøy coù keát quaû chính xaùc sau khi reset heä
thoáng, nhöng keát quaû khaùc nhau neáu thanh ghi IE ñöôïc ghi treân tuyeán ôû giöõa
chöông trình.
Giaûi phaùp thöù nhaát khoâng coù taùc duïng treân caùc bit coøn laïi trong thanh
ghi IE, coøn giaûi phaùp thöù hai xoùa caùc bit coøn laïi trong thanh ghi IE. ÔÛ ñaàu
chöông trình ta neân khôûi gaùn IE vôùi leänh MOV BYTE, nhöng söï cho pheùp
ngaét vaø caám ngaét treân tuyeán trong moät chöông trình seõ duøng caùc leänh SET
BIT vaø CLR BIT ñeå traùnh keát quaû phuï vôùi caùc bit khaùc trong thanh ghi IE.
2.2 Söï öu tieân ngaét (Interrupt Priority) :
Moãi nguoàn ngaét ñöôïc laäp trình caù bieät ñeán moät trong hai möùc öu tieân
qua thanh ghi chöùc naêng ñaëc bieät coù ñònh vò IP (Interrupr Priority) taïi ñòa chæ
0B8H. Hoaït ñoäng cuûa töøng bit trong thanh ghi IP ñöôïc toùm taét trong baûng sau :
Bit Symbol Bit Address Söï moâ taû (Enable = 1; Disable)
IP.7 - - Khoâng ñònh nghóa.
IP.6 - - Khoâng ñònh nghóa.
IP.5 PT2 BDH Öu tieân cho söï ngaét Timer 2 (8052).
IP.4 PS BCH Öu tieân cho söï ngaét Port noái tieáp.
IP.3 PT1 BBH Öu tieân cho söï ngaét Timer 1.
IP.2 PX1 BAH Öu tieân cho söï ngaét ngoaøi External 1.
IP.1 PT0 B9H Öu tieân cho söï ngaét Timer 0.
IP.0 PX0 B8H Öu tieân cho söï ngaét ngoaøi External 0.
IP (Interrupt Priority) Register Sumary.
Thanh ghi öu tieân ngaét IP ñöôïc xoùa sau khi reset heä thoáng ñeå ñaët taát caû
caùc söï ngaét ôû möùc öu tieân thaáp hôn söï maëc ñònh. Yù töôûng “caùc söï öu tieân” cho
pheùp moät thuû tuïc phuïc vuï ngaét ISR môùi ñöôïc ngaét neáu söï ngaét môùi naøy öu tieân
cao hôn cho söï ngaét hieän haønh ñang phuïc vuï.
Treân 8051 coù 2 möùc öu tieân thaáp vaø 2 möùc öu tieân cao. Neáu moät thuû tuïc
phuïc vuï ngaét coù möùc öu tieân thaáp ñang thöïc thi maø coù moät söï ngaét öu tieân cao
hôn xuaát hieän, thì thuû tuïc phuïc vuï ñoù bò ngaét ñi ñeå thöïc thi thuû tuïc ngaét môùi.
Ngöôïc laïi thuû tuïc phuïc vuï ngaét coù möùc öu tieân cao hôn ñang thöïc thi maø coù söï
ngaét öu tieân thaáp hôn xuaát hieän, thì noù khoâng theå bò ngaét maø phaûi chôø thöïc thi
xong thuû tuïc phuïc vuï cao hôn môùi nhaûy tôùi thuû tuïc phuïc vuï ngaét thaáp.
Chöông trình thöïc thi ôû möùc cô baûn vaø khoâng keát hôïp vôùi söï ngaét naøo,
noù coù theå luoân luoân bò ngaét baát chaáp söï öu tieân ngaét ôû möùc cao hay thaáp. Neáu
2 söï ngaét cuûa caùc öu tieân khaùc nhau xuaát hieän ñoàng thôøi, söï ngaét öu tieân cao
hôn seõ ñöôïc phuïc vuï ñaàu tieân.
2.3 Söï kieåûm tra voøng queùt lieân tieáp.
Neáu 2 söï ngaét coù cuøng möùc öu tieân xuaát hieän ñoàng thôøi, thì söï kieåm tra
voøng queùt lieân tieáp seõ aán ñònh söï ngaét naøo seõ ñöôïc phuïc vuï tröôùc tieân. Söï
kieåm tra voøng queùt lieân tieáp öu tieân töø treân xuoáng theo thöù töï laø : External 0,
Timer 0, External 1, Timer 1, serial Port, Timer 2
Hình treân minh hoïa 5 nguoàn ngaét cuûa 8051, caùc kyõ xaûo cho pheùp ngaét
rieâng vaø chung, söï kieåm tra voøng queùt lieân tieáp vaø möùc öu tieân. Traïng thaùi
cuûa taát caû caùc nguoàn ngaét coù hieäu löïc thoâng qua caùc bit côø töông öùng trong caùc
thanh ghi chöùc naêng ñaëc bieät. Neáu coù söï ngaét naøo bò caám thì söï ngaét ñoù khoâng
xuaát hieän nhöng phaàn meàm vaãn coøn kieåm tra côø ngaét.
Söï ngaét cuûa Port noái tieáp ñöa ñeán coång OR logic cuûa söï ngaét thu RI
(Receive Interrupt) hoaëc söï ngaét phaùt TI (Transmit Interrupt). Töông töï söï
ngaét cuûa Port noái tieáp, caùc söï ngaét cuûa Timer 2 coù theå ñöôïc sinh ra bôûi côø traøn
TF2 hoaëc côø nhaäp ngoaøi EXF2 (External Input Flag).
Caùc bit côø sinh ra caùc söï ngaét ñöôïc toùm taét nhö sau :
Interrupt Flag SFR Register and Bit Position
External 0 IE 0 TCON 1
External 1 IE 1 TCON 3
Timer 1 TF 1 TCON 7
Timer 0 TF 0 TCON 5
Serial Port TI SCON 1
Serial Port RI SCON 0
Timer 2 TF 2 T2CON 7 (8052)
Timer 2 EXF 2 T2CON 6 (8052)
3. VIEÄC XÖÛ LYÙ CAÙC SÖÏ NGAÉT (PROCESSING INTERRUPT) :
Khi moät söï ngaét xuaát hieän vaø ñöôïc chaáp nhaän bôûi CPU thì chöông trình
chính bò ngaét. Caùc hoaït ñoäng sau ñaây xuaát hieän :
√ Leänh hieän haønh vaø keát thuùc thöïc thi.
√ Boä ñeám chöông trình PC ñöôïc caát giöõ vaøo Stack.
√ Traïng thaùi ngaét hieän haønh ñöôïc caát giöõ vaøo beân trong.
√ Nhöõng söï ngaét bò ngaên laïi taïi möùc ngaét.
√ Boä ñeám chöông trình PC ñöôïc LOAD vôùi ñòa chæ vectô cuûa thuû tuïc
phuïc vuï ngaét ISR.
√ Thuû tuïc phuïc vuï ngaét ISR ñöôïc thöïc thi.
Thuû tuïc phuïc vuï ngaét ISR thöïc thi vaø ñöa hoaït ñoäng vaøo ñaùp öùng ngaét,
thuû tuïc phuïc vuï ngaét ISR keát thuùc vôùi leänh RETI (quay trôû veà chöông trình
chính töø Stack). Ñieàu naøy khoâi phuïc laïi giaù htrò cuõ cuûa boä ñeám chöông trình töø
Stack vaø hoaøn toaøn döøng laïi traïng thaùi cuõ. Söï thöïc thi cuûa chöông trình chính
tieáp tuïc ôû nôi maø noù ngöøng laïi.
3.1 Caùc vectô ngaét (Interrupt Vectors) :
Khi coù moät söï ngaét ñöôïc nhaän giaù trò ñöôïc LOAD vaøo PC ñöôïc goïi bôûi
vectô ngaét. Noù laø ñòa chæ cuûa söï khôûi ñoäng thuû tuïc phuïc vuï ngaét ISR cuûa
nguoàn ngaét. Caùc vectô ñöôïc cho trong baûng sau :
Interrupt Flag Vectors Address
System Reset RST 0000H
External 0 IE 0 0003H
Timer 0 TF 0 000BH
External 1 IE 1 0013H
Timer 1 TF1 001BH
Serial Port RI or TI 0023H
Timer 2 TF 2 or EXF2 002BH
Vectô reset heä thoáng RST taïi ñòa chæ 0000H ñöôïc tính trong baûng naøy,
bôûi vì trong yù nghóa naøy noù gioáng nhö 1 Interrupt : noù ngaét chöông trình vaø
LOAD vaøo PC vôùi giaù trò môùi.
Khi ñöa 1 vectô ngaét ñeán söï ngaét thì côø cuûa noù gaây ra söï ngaét, töï ñoäng
bò xoùa bôûi phaàn cöùng, ngoaøi tröø RI vaø TI cuûa Port noái tieáp vaø TF2, EXF2 cuûa
Timer 2 ñöôïc xoùa bôûi phaàn meàm. Nguyeân nhaân treân laø do coù 2 nguoàn ngaét coù
theå chòu ñöïng ñöôïc cho moãi söï ngaét maø noù khoâng öùng duïng cho CPU ñeå xoùa
côø ngaét.
Vì caùc vectô ngaét naèm ôû döôùi cuøng trong vuøng maõ nhôù, neân leänh ñaàu
tieân cuûa chöông trình chính laø leänh nhaûy ñeán vò trí cao hôn vò trí naøy nhö
LJMP 0030H.
CHÖÔNG2
GIAO TIEÁP MAÙY TÍNH
GIÔÙI THIEÄU CAÙC PHÖÔNG PHAÙP GIAO TIEÁP MAÙY TÍNH
Vieäc giao tieáp giöõa maùy tính vaø thieát bò ngoaïi vi coù theå giao tieáp baèng 3
caùch
ρ Giao tieáp baèng Slot-Card.
ρ Giao tieáp qua coång song song (maùy in)
ρ Giao tieáp qua coång noái tieáp (COM)
1. GIAO TIEÁP BAÈNG SLOT CARD
Beân trong maùy tính, ngoaøi nhöõng khe caém duøng cho card vaøo -
ra, card maøn hình, vaãn coøn nhöõng raõnh caém ñeå troáng. Ñeå giao tieáp vôùi maùy
tính, ta coù theå thieát keá card môû roäng ñeå gaén vaøo khe caém môû roäng naøy. ÔÛ maùy
tính PC/XT raõnh caém chæ coù 1 loaïi vôùi ñoä roäng 8 bit vaø tuaân theo tieâu chuaån
ISA (Industry Standard Architecture). Raõnh caém theo tieâu chuaån ISA coù 62
ñöôøng tín hieäu, qua caùc ñöôøng tín hieäu naøy maùy tính coù theå giao tieáp deã daøng
vôùi thieát bò beân ngoaøi thoâng qua card môû roäng.
Treân raõnh caém môû roäng, ngoaøi 20 ñöôøng ñòa chæ, 8 ñöôøng döõ lieäu, coøn
coù moät soá ñöôøng ñieàu khieån nhö: RESET, IOR, IOW, AEN, CLK, ... Do ñoù
card giao tieáp vôùi maùy tính qua slot card ñôn giaûn, soá bit coù theå taêng deã daøng,
giaûm ñöôïc nhieàu linh kieän, toác ñoä truyeàn döõ lieäu nhanh (truyeàn sonh song).
Tuy nhieân, do khe caém naèm beân trong maùy tính neân khi muoán gaén card giao
tieáp vaøo thì phaûi môû naép ra, ñieàu naøy gaây baát tieän cho ngöôøi söû duïng.
2. GIAO TIEÁP BAÈNG COÅNG SONG SONG
Vieäc giao tieáp giöõa KIT Vi ñieàu khieån 8051 vôùi maùy tính ñöôïc thöïc
hieän qua oå caém 25 chaân ôû phía sau maùy tính. Qua coång naøy döõ lieäu ñöôïc
truyeàn ñi song song, neân ñoâi khi coøn ñöôïc goïi laø coång gheùp noái song song.
* Caùc chaân vaø ñöôøng daãn ñöôïc moâ taû nhö sau:
CHAÂ
N
KYÙ HIEÄU VAØO/RA MOÂ TAÛ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
STROBE
D0
D1
D2
D3
D4
D5
D6
D7
ACK
BUSY
PE
SLCT
AF
ERROR
INIT
SLCTIN
GND
GND
GND
GND
GND
GND
GND
GND
Loái ra (Output)
Loái ra
Loái ra
Loái ra
Loái ra
Loái ra
Loái ra
Loái ra
Loái ra
Loái vaøo (Input)
Loái vaøo
Loái vaøo
Loái vaøo
Loái ra
Loái vaøo
Loái ra
Loái ra
: Byte ñöôïc in
Ñöôøng döõ lieäu D0
Ñöôøng döõ lieäu D1
Ñöôøng döõ lieäu D2
Ñöôøng döõ lieäu D3
Ñöôøng döõ lieäu D4
Ñöôøng döõ lieäu D5
Ñöôøng döõ lieäu D6
Ñöôøng döõ lieäu D7
Acknowledge (Xaùc nhaän)
1 : Maùy in baän
Heát giaáy
Select (Löïa choïn)
Auto Feed (Töï naïp)
Error (Loãi)
0 : Ñaët laïi maùy in
Select in
Noái ñaát
“
“
“
“
“
“
“
Khi maùy tính gôûi döõ lieäu ra coång maùy in muoán döõ lieäu naøy qua KIT Vi
ñieàu khieån 8051 ta phaûi giao tieáp qua moät vi maïch 8255. IC 8255 laøm vieäc ôû
Mode 1 : Port A laø nhaäp döõ lieäu ; Port B xuaát döõ lieäu .
* Sô ñoà keát noái giöõa IC 8255 vôùi coång maùy in :
1
14
25
13
Vì 8255 ñöôïc khôûi taïo laøm vieäc ôû Mode 1 : Port A nhaäp döõ lieäu Port B
xuaát döõ lieäu neân khi maùy tính gôûi tín hieäu STROBE ñeán 8255, yeâu caàu 8255
nhaän döõ lieäu do maùy tính gôûi ñeán vaø khi 8255 nhaän döõ lieäu thì noù taïo ra moät
tín hieäu ôû PC5 ñöa qua ACK baùo cho maùy tính bieát laø 8255 ñaõ nhaän döõ lieäu do
maùy tính gôûi ñeán, ñoàng thôøi luùc ñoù ôû PC3 cuûa 8255 taïo tín hieäu INTRA taùc
ñoäng ñeán chaân ngaét INT1 (pin 13) cuûa 8051 laøm cho 8051 chaïy chöông trình
phuïc vuï ngaét vaø döõ lieäu töø maùy tính qua 8255 seõ ñöôïc gôûi ñeán CPU ñeå xöû lyù.
3. GIAO TIEÁP BAÈNG COÅNG NOÁI TIEÁP
Coång noái tieáp RS232 laø moät giao dieän phoå bieán roäng raõi nhaát. Ngöôøi ta
coøn goïi coång naøy laø coång COM1, coøn coång COM2 ñeå töï do cho caùc öùng duïng
khaùc. Gioáng nhö coång maùy in coång COM cuõng ñöôïc söû duïng moät caùch thuaän
tieän cho vieäc giao tieáp vôùi thieát bò ngoaïi vi.
Vieäc truyeàn döõ lieäu qua coång COM ñöôïc tieán haønh theo caùch noái tieáp.
Nghóa laø caùc bit döõ lieäu ñöôïc truyeàn ñi noái tieáp nhau treân moät ñöôøng daãn. Loaïi
truyeàn naøy coù khaû naêng duøng cho nhöõng öùng duïng coù yeâu caàu truyeàn khoaûng
caùch lôùn hôn, bôûi vì caùc khaû naêng gaây nhieãu laø nhoû ñaùng keå hôn khi duøng moät
coång song song (coång maùy in).
D0
D1
D2
D3
D4
D5
D6
D7
PC4
PC5
INTE
PC3 TO INT 1 (8051)
WR
1
13
14
25
Coång COM khoâng phaûi laø moät heä thoáng bus noù cho pheùp deã daøng taïo ra
lieân keát döôùi hình thöùc ñieåm vôùi ñieåm giöõa hai maùy caàn trao ñoåi thoâng tin vôùi
nhau, moät thaønh vieân thöù ba khoâng theå tham gia vaøo cuoäc trao ñoåi thoâng tin
naøy.
* Caùc chaân vaø ñöôøng daãn ñöôïc moâ taû nhö sau:
CHAÂN
(Loaïi 9
chaân)
CHAÂN
(Loaïi 25
chaân)
KYÙ HIEÄU VAØO/RA MOÂ TAÛ
1
2
3
4
5
6
7
8
9
8
3
2
20
7
6
4
5
22
DCD
RXD
TXD
DTR
GND
DSR
RTS
CTS
RI
Loái vaøo
Loái vaøo
Loái ra
Loái ra
Loái vaøo
Loái ra
Loái vaøo
Loái vaøo
Data Carrier Detect
Receive Data
Transmit Data
Data Terminal Ready
Noái ñaát
Data Set Ready
Request to Send
Clear to Send
Ring Indicator
Phích caém COM coù toång coäng 8 ñöôøng daãn, chöa keå ñeán ñöôøng noái ñaát.
Treân thöïc teá coù hai loaïi phích caém, moät loaïi 9 chaân vaø moät loaïi 25 chaân. Caû
hai loaïi naøy ñeàu coù chung moät ñaëc ñieåm.
Vieäc truyeàn döõ lieäu xaûy ra ôû treân hai ñöôøng daãn. Qua chaân caém ra TXD
maùy tính gôûi döõ lieäu cuûa noù ñeán KIT Vi ñieàu khieån. Trong khi ñoù caùc döõ lieäu
maø maùy tính nhaän ñöôïc, laïi ñöôïc daãn ñeán chaân RXD caùc tín hieäu khaùc ñoùng
vai troø nhö laø tín hieäu hoå trôï khi trao ñoåi thoâng tin, vaø vì theá khoâng phaûi trong
moïi tröôøng hôïp öùng duïng ñeàu duøng heát.
Vì tín hieäu coång COM thöôøng ôû möùc +12V, -12V neân khoâng töông thích
vôùi ñieän aùp TTL neân ñeå giao tieáp KIT Vi ñieàu khieån 8051 vôùi maùy tính qua
coång COM ta phaûi qua moät vi maïch bieán ñoåi ñieän aùp cho phuø hôïp vôùi möùc
TTL, ta choïn vi maïch MAX232 ñeå thöïc hieän vieäc töông thích ñieän aùp.
13
25
14
1 1 5
6 9
Loaïi 25 chaân Loaïi 25 chaân
* Sô ñoà keát noái giöõa coång COM vôùi KIT Vi ñieàu khieån 8051 :
Vi maïch MAX232 duøng ñeå töông thích tín hieäu ôû möùc (+12V, -12V)
treân giao dieän RS232.
Vi maïch naøy nhaän möùc RS232 ñaõ ñöôïc gôûi tôùi töø maùy tính vaø bieán ñoåi
tín hieäu naùy thaønh tín hieäu TTL ñeå cho töông thích vôùi IC 8051 vaø noù cuõng
thöïc hieän ngöôïc laïi laø bieán ñoåi tín hieäu TTL töø Vi ñieàu khieån thaønh möùc
+12V, -12V ñeå cho phuø hôïp hoaït ñoäng cuûa maùy tính. Giao tieáp theo caùch naøy,
khoaûng caùch töø maùy tính ñeán thieát bò ngoaïi vi coù theå ñaït tôùi treân 20 meùt.
Ñoái vôùi ñeà taøi chæ yeâu caàu truyeàn döõ lieäu töø maùy tính qua KIT chöù
khoâng truyeàn döõ lieäu töø KIT qua maùy tính vì vaäy chuùng em choïn vi maïch
MAX232 ñeå thöïc hieän bieán ñoåi töông thích möùc tín hieäu.
Öu ñieåm cuûa giao dieän naøy laø coù khaû naêng thieát laäp toác ñoä Baud.
Khi döõ lieäu töø maùy tính ñöôïc gôûi ñeán KIT Vi ñieàu khieån 8051 qua coång
COM thì döõ lieäu naøy seõ ñöôïc ñöa vaøo töøng bit (noái tieáp) vaøo thanh ghi SBUF
(thanh ghi ñeäm), ñeán khi thanh ghi ñeäm ñaày thì côø RI trong thanh ghi ñieàu
khieån seõ töï ñoäng Set leân 1 vaø luùc naøy CPU seõ goïi chöông trình con phuïc vuï
ngaét vaø döõ lieäu seõ ñöôïc ñöa vaøo ñeå xöû lyù.
4. TRUYEÀN DÖÕ LIEÄU
8
9
5
1
RXD
TXD
10
11 MAX
2
3
2
RXD
TXD
1. Thoâng tin soá lieäu
Heä thoáng thoâng tin soá lieäu duøng ñeå xöû lyù vaø truyeàn caùc chuoãi maõ nhò phaân.
Caùc maõ naøy ñöôïc taïo ra, löu tröõ vaø xöû lyù bôûi maùy tính vaø caùc thieát bò ngoaïi vi,
bao goàm caùc loaïi nhö: caùc tin töùc ñaõ maõ hoùa, taäp tin vaên baûn, hình aûnh, döõ lieäu
soá vaø caùc thoâng tin khaùc.
Ñöôøng truyeàn laø ñöôøng truyeàn aãn tín hieäu soá vaø caùc kyù töï truyeàn phoå bieán laø
maõ ASCII.
2. Phöông thöùc truyeàn
a. Truyeàn noái tieáp/ Song song (Serial/ Parallel)
Truyeàn song song: truyeàn taát caû caùc bit cuûa moät kyù töï cuøng moät luùc.
Truyeàn noái tieáp: truyeàn tuaàn töï töøng bit cuûa 1 kyù töï.
Truyeàn song song nhanh hôn truyeàn noái tieáp ( thöôøng duøng ôû cöï ly thoâng tin
gaàn).
Truyeàn noái tieáp ít toán ñöôøng truyeàn hôn song song (thöôøng duøng ôû cöï ly xa).
b7
b6
b5
b4
b3
b2
b1
b0
Hình 4.1 Truyeàn song song
Hình 4.2 Truyeàn noái tieáp
Tx Shift Reg Rx Shift Reg
b7 b6 b5 b4 b3 b2 b1 b0
b. Truyeàn ñoàng boä/ Baát ñoàng boä (Synchoronous / Asynchonous)
♦ Truyeàn ñoàng boä - noái tieáp:
Duøng 1 xung clock ñeå ñoàng boä quaù trình nhaän theo töøng bit kyù töï. Maùy seõ
cung caáp tín hieäu clock cho caû 2 ñaàu phaùt vaø thu.
Öu ñieåm: chæ truyeàn data, hoâng caàn theâm tín hieäu ñoàng boä vaøo chuoãi data →
nhanh hôn.
Nhöôïc ñieåm: phaûi theâm 1 keânh thöù 2 ñeå truyeàn tín hieäu clock song song vôùi
keânh truyeàn data.
♦ Truyeàn baát ñoàng boä noái tieáp:
Theâm vaøo phía tröôùc moãi kyù töï 1 bit START vaø phía sau 1 hoaëc 2 bit STOP.
Maùy thu seõ taùch bit START 9eå khôûi ñoäng tín hieäu ñoàng boä duøng cho vieäc thu
caùc bit kyù töï. Caùc bit STOP ñöôïc duøng ñeå ngaên caùch giöõa caùc kyù töõ. Phöông
phaùp naøy cho pheùp truyeàn ngaãu nhieân, khoâng caàn truyeàn lieân tuïc.
Vì phaûi theâm caùc bit START, STOP neân toác ñoä truyeàn toång quaùt laø chaäm so
vôùi truyeàn ñoàng boä nhöng laïi ñôn giaûn reû tieàn hôn.
Toác Ñoä truyeàn baát ñoàng boä: 75, 110, 300, 1200 bit/s
Toác Ñoä truyeàn ñoàng boä: 2400, 4800, 9600 bit/s
3. THOÂNG TIN NOÁI TIEÁP BAÁT ÑOÀNG BOÄ.
a/ Daãn nhaäp
* Truyeàn soá lieäu noái tieáp cho pheùp trao ñoåi thoâng tin giöõa maùy tính vaø thieát bò
ngoaïi vi töøng bit moät. Soá lieäu trao ñoåi thöôøng ñöôïc gôûi theo caùc nhoùm bit (taïo
thaønh moät kí töï hay moät töø). Thí duï: moät kyù töï ñöôïc theå hieän baèng maõ ASCII.
Trao ñoåi noái tieáp chæ caàn moät ñöôøng daây tín hieäu hay moät keânh lieân laïc.
* Truyeàn soá lieäu noái tieáp ñöôïc söû duïng khi:
b7 b6 b5 b4 b3 b2 b1 b0
CLOCK
Tx Rx
Load/Shift Input Read/Shift Output
Hình 4.3 Truyeàn ñoàng boä - noái tieáp
1. Thieát bò ngoaïi vi caàn trao ñoåi soá lieäu voán ñaõ laø vaøo/ra/noái tieáp.
Ví duï: Teletype, baêng töø, catssete...
2. Khoaûng caùch giöõa maùy tính vaø thieát bò ngoaïi vi töông ñoái lôùn. Neáu
khoaûng caùch ñoù taêng thì giaù thaønh taêng leân theo toång soá ñöôøng daây
daãn soá lieäu. Giaù cuûa heä coøn phuï thuoäc vaøo caùc boä khuyeách ñaïi
ñöôøng daây vaø boä thu. Do ñoù söû duïng phöông phaùp trao ñoåi noái tieáp
seõ kinh teá hôn.
* Toác ñoä truyeàn (coøn goïi laø toác ñoä Baud-Rate) ñöôïc xaùc ñònh nhö toån gsoá laàn
thay ñoåi tín hieäu trong 1giaây. Neáu tín hieäu truyeàn ñi laø nhò phaân toác ñoä truyeàn
töông ñoái vôùi soá Bit truyeàn trong 1 giaây. Caùc keânh thoâng tin ñöôïc ñaùnh giaù
baèng toác ñoä truyeàn. Neáu soá lieäu ñöôïc truyeàn vôùi toác ñoä ngoaøi khaû naêng cuûa
keânh seõ saûy ra loãi, beân thu seõ khoâng nhaän ñuùntg ñöôïc thoâng tin.
* Heä thoáng truyeàn soá lieäu noái tieáp goàm caùc daïng:
- Ñôn coâng: Soá lieäu chæ ñöôïc göûi ñi theo moät höôùng.
- Baùn song coâng: Soá lieäu ñöôïc göûi theo hai höôùng nhöng moãi thôøi ñieåm chæ
ñöôïc truyeàn theo moät höôùng.
- Song coâng: Soá lieäu ñöôïc truyeàn ñoàng thôøi theo hai höôùng.
* Truyeàn soá lieäu noái tieáp coù theå laø:
- Ñoàng boä (DB)
- Baát ñoàng boä (BDB)
Ñieåm chung cuûa hai phöông phaùp naøy ñeàu ñoøi hoûi thoâng tin khung (Frame)
theâm vaøo thoâng tin soá lieäu ñeå taïo ñieàui kieän cho beân thu/nhaän bieát daïng cuûa
soá lieäu.
Ñieåm khaùc nhau cô baûn laø:
Trong truyeàn BDB, thoâng tin khoâng caàn cho töøng kyù töï, trong khí ñoù, ôû truyeàn
DB thoâng tin khung chæ caàn ôû moät chuoãi kyù töï hay moät khoái (Block).
Truyeàn soá lieäu noái tieáp DB coù hieäu suaát lôùn hôn truyeàn BDB nhöng ñoøi hoûi
vieäc giaûi maõ phöùc taïp hôn.
Phöông phaùp truyeàn DB söû duïng ôû moâi tröôøng truyeàn daãn coù toác ñoä cao,
truyeån BDB duøng ôû moâi tröôøng coù khaû naêng truyeàn daãn chaäm hôn.
Trong truyeàn BDB, daïng soá lieäu ñöôïc caáu taïo töø caùc Bit soá lieäu cô baûn (caùc
Bit thoâng tin vaø kieåm tra chaün leû) vaø theâm vaøo phía tröôùc moät Bit khôûi ñoäng
(Start) vaø phía sau moät hay nhieàu Bit döøng (Stop). Bit START coù möùc logic
“0” ñöôïc ñònh nghóa nhö möùc ñieän aùp döông trong chuaån RS-232C. Bit STOP
coù möùc logic “1”. Bit START baùo cho phía thu baét ñaàu nhaän kyù töï vaø ñoàng boä
vôùi beân phaùt. Quaù trình ñoàng boä naøy chæ keùo daøi trong thôøi gian “1” kyù töï.
Moät hay nhieàu Bit STOP ñöôïc ñöa vaøo sau kyù töï ñeå ñaûm baûo raèng Bit START
cuûa kyù töï tieáp theo seõ taïo ra quaù trình truyeån tieáp treân ñöôøng daây lieân laïc. Beân
thu coù theå ñuoåi kòp beân phaùt neáu xung ñoàng boä coù chaäm hôn. Maët khaùc, neáu
ñoàng boä beân thu nhanh hôn beân phaùt, beân thu seõ thaáy coù khoaûng caùch giöõa caùc
kyù töï nhöng giaûi maõ soá lieäu vaãn ñuùng. Nhö vaäy, cho pheùp moät sai soá nhaát ñònh
giöõa beân thu vaø beân phaùt trong truyeån noái tieáp baát ñoàng boä.
Trong truyeàn noái tieáp ñoàng boä, moät hay vaøi kyù töï khung seõ ñöôïc theâm vaøo
moät nhoùm kyù töï. Nhöõng kyù töï naøy goïi laø kyù töï ñoàng boä. Nhôø nhöõng kyù töï naøy,
thieát bò thu taùi taïo ñöôïc caùc kyù töï thoânh tin töø chuoãi Bit. Söï ñoàng boä phaûi ñöôïc
giöõ suoát trong moät chuoãi soá lieäu daøi. Kyù töï ñoàng boä thöôøng ñöôïc ñöa vaøo töø
keânh lieân laïc ôû MODEM ngay töø beân ngoaøi.
b/ Thuû tuïc truyeàn noái tieáp baát ñoàng boä
* Ñaëc ñieåm cuûa tín hieäu truyeàn noái tieáp baát ñoàng boä laø:
Taàn soá CLOCK thu, phaùt phaân bieät vôùi cuøng moät taàn soá danh ñònh tuøyheo toác
ñoä truyeàn bit.
Caùc kyù töï truyeàn vôùi nhöõng thôøi ñieåm khoâng caàn lieân tuïc, truyeàn rieâng bieät vaø
ngaãu nhieân.
Ñöôøng truyeàn giöõ ôû traïng thaùi 1 trong khoaûng caùch giöõa caùc kyù töï, goïi laø traïng
thaùi roãi (idle).
Ñoái vôùi moät kyù töï thì LSB (Least Significant Bit) ñöôïc truyeàn ñaàu tieân vaø laàn
löôït laø caùc Bit keá tieáp.
ÔÛ ñaàu phaùt:
Khi tín hieäu LOAD = 1 thì döõ lieäu ôû daïng song song seõ ñöôïc naïp vaøo TSR (töø
ngoõ nhaäp döõ lieäu)
Khi tín hieäu LOAD = 0 thì caùc bit naøy seõ ñöôïc dòch noái tieáp ra ñöôøng truyeàn.
Thanh ghi dòch phaùt TSR cuõng seõ bao goàm maïch logic töï ñoäng theâm caùc bit
START vaø bit STOP.
ÔÛ ñaàu thu:
Seõ nhaän bieát ñieåm baa moät kyù töï baèng caùch taùch bit START nhôø maïch taùch bit
START (START BIT DETECT) khi traïng thaùi ñöôøng truyeàn daãn chuyeån töø 1
xuoáng 0 vaø luùc naøy boä phaän ñieàu khieån seõ ñieàu khieån thanh ghi dòch baét ñaàu
dòch caùc bit treân ñöôøng daây vaøo. Sau 11 laàn dòch (1 BIT START + 8 BIT
DATA + 2 BIT STOP) thì coù theå ñoïc ñöôïc kyù töï thu daïng song song ôû ngoõ ra
thanh ghi dòch khi coù tín hieäu READ.
* Ñeå kieåm tra sai khi truyeàn, trong 8 bit DATA seõ coù moät bit kieåm tra theo
moät trong hai thuû tuïc sau:
Kieåm tra chaün (Even parity): ToÅng soá bit moät trong 8 bit phaûi luoân luoân chaün.
Kieåm tra leû (Odd parity): Toång soá bit 1 luoân luoân leû.
Nhö vaäy, ôû ñaàu phaùt seõ coù boä phaän ñeå ñeám soá bit 1 cuûa 8 bit döõ lieäu vaø tuyø
theo hình thöc kieåm, tra chaün hay leû seõ theâm vaøo bit cuoái cuøng giaù trò 0 hoaëc 1
cho thích hôïp.
ÔÛ ñaàu thu seõ ñeám soá bit 1 cuûa moãi kyù töï ñeå xaùc ñònh xem tính hình döõ lieäu
ñeán coù ñuùng hay khoâng?
* Taát caû caùc thuû tuïc treân khoâng phaûi laø baét buoäc maø coù theå thay ñoåi khaùc nhau
tuøy theo vieäc caøi ñaët thoâng soá ban ñaàu bôûi ngöôøi thöïc hieän vieäc truyeàn. Chæ
baét buoäc laø caùc thuû tuïc ôû hai ñaàu thu vaø phaùt töông öùng nhau. Taát caû nhöõng
coâng vieäc ñaõ moâ taû ôû treân seõ ñöôïc thöïc hieän bôûi moät boä phaän giao tieáp thoâng
tin baát ñoàng boä maø thaønh phaàn chính laø chip LSI- goïi laø UART.
4. THOÂNG TIN NOÁI TIEÁP ÑOÀNG BOÄ.
Caùc thuû tuïc truyeàn noái tieáp baát ñoàng boä ñôn giaûn vaø reû tieàn, nhöng chæ thích
hôïp khi truyeàn caùc thoâng tin ngaén hoaëc moät vaøi kyù töï caùch quaõng. Ñoái vôùi caùc
taäp tin daøi, söû duïng phöông thöùc truyeàn thoâng tin ñoàng boä seõ hieäu quaû hôn.
Trong phöông phaùp naøy, thoâng tin ñöôïc truyeàn theo töøng khoái (Blocks). Moãi
khoái bao goàm moät soá tuaàn töï caùc kyù töï vaø khoâng caàn caùc bit Start, bit Stop, maø
seõ ñoàng boä theo töøng khoái cuõng nhö vieäc kieåm tra sai.
Trong caùc heä thoáng ñoàng boä, tín hieäu Clock cuûa maùy phaùt seõ ñöôïc truyeàn qua
maùy thu song song vôùi döõ lieäu ñeå duøng laøm xung Clock cho vieäc dòch chuyeån
caùc bit thu. Neáu trong thöïc teá khoâng theå thöïc hieän vieäc truyeàn tín hieäu Clock,
thì maùy thu phaûi töï taïo ra tín hieäu naøy. Do ñoù seõ phöùc taïp hôn vaø coù giaù thaønh
cao hôn so vôùi thoâng tin baát ñoàng boä. Ñeå traùnh tröôøng hôïp caùc chuoãi bit 0 hoaëc
1 keùo daøi ñoâi khi coù theå duøng loaïi maõ nhò phaân ñaëc bieät ñeå maùy thu giöõ ñöôïc
khaû naêng ñoàng boä. Maùy thu göûi moät hoaëc nhieàu kyù töï ñoàng boä nhaän daïng khi
baét ñaàu vieäc truyeàn vaø ngay khi nhaän ñöôïc bit ñoàng boä, maùy thu baét ñaàu nhaän
bit. Phaàn lôùn caùc maïng ñoàng boä söû duïng caùc nghi thöùc do IBM taïo ra vaø nghi
thöùc ñoàng boä nhò phaân BISYNC (Binary Synchronous) hoaëc ñoàng boä ñöôøng
ñieàu khieån döõ lieäu SDLC (Synchronous Data Link Control).
Caùc giao tieáp chuaån RS-232C vaø RS-449 cung caáp caùc chaân sau ñeå truyeàn tín
hieäu Clock:
+ Ñoái vôùi RS-232:
Chaân 15: TCLK- Transmit Clock (töø DCE).
Chaân 17: RCLK- Receive Clock (töø DCE).
Chaân 24: ETCLK- Externel Transmit Clock.
+ Ñoái vôùi RS-449:
Chaân 6 vaø chaân 23: Send Timing
Chaân 8 vaø chaân 26: Receive Timing.
Chaân 17 vaø chaân 35:Terminal Timing (töø DCE).
Khi duøng Modem ñoàng boä thì tín hieäu ñònh thôøi seõ ñöôïc cung caáp töø Modem
ñeán maùy tính. Taàn soá Clock phaùt coù theå taïo töø Modem hoaëc thieát bò ñaàu cuoái.
LÖU ÑOÀ VAØ CHÖÔNG TRÌNH DAØNH CHO PHAÀN CÖÙNG
Ñeå vieát chöông trình treânmaùy cho PC, ngöôøi ta coù theå duøng caùc ngoân ngöõ laäp
trình khaùc nhau. Döïa vaøo yeâu caàu thieáát keá maïch, döïa vaøo möùc ñoä nhoùm thöïc
hieän thaáy vieäc söû duïng ngoân ngöõ Assembly keát hôïp vôùi caùc phuïc vuï ngaét cuûa
Bios ñeå vieát chöông trình.
Caùc nhaø thieát keá PC daønh rieâng Int 14H cuûa Bios ñeå phuïc vuï cho coång noái
tieáp. Ngaét naøy phuïc vuï khaù ñaày ñuû caùc yeâu caàu veà xuaát, nhaäp vaø kieåm tra
traïng thaùi ñöôøng truyeàn vaø Modem. Vieäc söû duïng ngaét naøy laøm cho chöông
trình trôû neân deã daøng, ngaén goïn.
I- Giôùi thieäu ngaét INT 14h cuûa Bios:
Bios truy caäp tôùi khoái gheùp noái noái tieáp nhôø ngaét INT 14h vôùi caùc haøm nhö
sau:
Haøm: Vai troø.
00h Khôûi phaù khoái gheùp noái tieáp
01h Göûi moät kyù töï
02h Nhaän moät kyù töï
03h Ñoïc traïng thaùi cuûa khoái gheùp noái tieáp
04h Khôûi phaùt caûng noái tieáp môû roäng
05h Ñieàu khieån truyeàn thoâng cuûa caûng noái tieáp môû roäng
Bios coù theå ñieàu haønh toái ña 4 khoái gheùp noái tieáp, coù teân töø COM1 ñeán COM4
vôùi caù ñòa chæ nhö sau:
Khoái gheùp noái Ñòa chæ cô sôû Ngaét cöùng IRQ
COM1
COM2
COM3
COM4
3F8h
2F8h
3E8h
2E8h
IRQ4
IRQ3
IRQ4 (hoaëc hoûi voøng)
IRQ3 (hoaëc hoûi voøng)
ÔÛ möùc ñoä chöông trình, ta coù theå choïn moät khoái gheùp noái tieáp baèng caùch gaén
caùc maõ töông öùng vaøo thanh ghi DX vôùi caùc giaù trò:
00h Cho
01h Cho
02h Cho
03h Cho
COM1
COM2
COM3
COM4
* Phuïc vuï 00h: Khôûi phaùt khoái gheùp noái tieáp. Phuïc vuï 00h aán ñònh nhöõng
thoâng soá khaùc nhau cuûa caùc khoái gheùp noái tieáp cuõng nhö RS – 232C. Ñoù laø
caùc thoâng soá:
- Soá baud: Toác ñoä trao ñoåi thoâng tin
- Tín chaün leû
- Soá bit döøng
Kích thöôùc kyù töï haây soá bit noái tieáp. Nhöõng thoâng soá naøy ñöôïc toå hôïp trong
maõ 8 bit, ñöôïc ñaët vaøo thanh ghi AL, theo thöù töï caùc bit nhö sau:
+ D7, D6, D5: maãu caû vaän toác (tính baèng baud)
+ D4, D3: maõ cuûa tính chaün leû
+ D2: maõ cuûa bit döøng
D1, D0: maõ cuûa kích thöôùc kyù töï
Caùc maõ treân theo baûng sau:
D7 D6 D5 Vaän toác (bit persec ) D4 D3 Tính chaün leû
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
110
150
300
600
1200
2400
4800
9600
0
0
1
1
0
1
0
1
Khoâng coù
Tính leû
Khoâng coù
Tính chaün
D1 Kích thöôùc kyù
töï
D1 D0 Tính chaün leû
0
1
Moät bit Stop
Hai bit Stop
0
0
1
1
0
1
0
1
Khoâng duøng
Khoâng duøng
7 bit
8 bit
• Phuïc vuï 01h: Göûi moät kyù töï
Haøm naøy göûimoät kyù töï ra thieát bò ngoaøi vôùi khoái gheùp noái tieáp. Muoán vaäy,
thöïc hieän chuoãi haønh ñoäng sau:
- Ñaët soá lieäu töø khoái gheùp noái tieáp vaøo thanh ghi DX (ví duï COM1 vôùi 00h)
- Göûi maõ kyù töï vaøo thanh ghi AL.
- Göûi 01h vaøo thanh ghi AH.
- Goïi INT 14h
Sau khi thöc hieän chöông trình con, thanh ghi AH chöùa keát quaû chöông trình.
Neáu:
- Bit D7 = 1, kyù töï khoâng ñöôïc truyeàn ñi
- Bit D7 = 0, kyù töï ñaõ ñöôïc truyeàn ñi
• Phuïc vuï 02h: Nhaän moät kyù töï. Trình töï nhaän moät kyù töï cuõng nhö treân, töùc
laø:
Ñaët soá lieäu töø khoái gheùp noái tieáp vaøo DX.
Ñaët giaù trò AH baèng 02h
Goïi INT 14h
Keát quaû cuûa chöông trình con laø kyù töï ñöôïc göûi vaøo khoái gheùp noái tieáp trong
thanhghi AL. Thanh ghi AH cuõng chöùa keát quaû cuûa vieäc thöïc hieän chöông
trình nhö tröôøng hôïp AH = 01h, töùc laø:
Bit D7=1, kyù töï khoâng töï nhaän
Khi D7=0, kyù töï ñaõ ñöôïc nhaän.
• Phuïc vuï 02h: Ñoïc traïng thaùi cuûa khoái gheùp noái.
Muoán vaäy cuõng phaûi theo caùc trình töï:
Ñaët soá hieäu khoái gheùp noái vaøo DX
Ñaët 03h vaøo AH
Keát quaû caùc chöông trình con laø:
Traïng thaùi cuûa ñöôøng daây (cuûa khoái gheùp noái) ñöôïc ñaët trong thanh ghi AH,
coù caùc bit nhö hình döôùi.
Traïng thaùi cuûa Modem ñöôïc ñaët trong thanh ghi AL nhö hình döôùi:
Bit YÙ nghóa Bit YÙ nghóa
D7 Vöôït qua ñoä treã
=0: Khoâng coù sai soá
=1 Coù sai soá
D7 Tín hieäu cuûa soùng mang
= 0 Khoâng ñöôïc phaùt hieän
= 1 Ñaõ ñöôïc phaùt hieän
D6 Thanh ghi dòch
chuyeån
=0 Thanh ghi baän
=1 Thanh ghi roãi
D6 Chæ baùo chuoâng
= 0 Khoâng reo chuoâng
= 1 Reo chuoâng
D5 Thanh ghi ñôïi
=0 Thanh ghi baän
=1 Thanh ghi roãi
D5 Thieát bò ñaàu cuoái cuûa thanh ghi ñaõ saün
saøng
= 0 Modem khoâng saün saøng
= 1 Modem saün saøng
D4 Ngaét bôûi tín hieäu
Break
=0 Khoâng bieát
=1 Coù tín hieäu Break
D4 Saün saøng phaùt (truyeàn)
= 0 Chöa saün saøng
= 1 Saün saøng
D3 Giao thöùc
= 0 Khoâng coù loãi
= 1 Coù loãi
D3 Tín hieäu soùng mang ñaõ thay ñoåi
=0 Khoâng thay ñoåi
= 1 Thay ñoåi
D2 Tính chaün leû
= 0 Khoâng coø loãi
= 1 Coù loãi
D2 Ñöôøng chæ baùo chuoâng thay ñoåi
= 0 Khoâng thay ñoåi
= 1 Coù thay ñoåi
D1 Soá lieäu
= 0 Khoâng coù traøn
= 1 Bò traøn
D1 Ñöôøng daây “traïm soá lieäu saün saøng” ñaõ
thay ñoåi
=0 Khoâng coù thai
= 1 Coù thay ñoåi
D0 Soá lieäu ñaõ saün saøng
= 0 Khoâng coù soá lieäu
saün saøng
= 1 Coù Soá lieäu saün
saøng
D0 Ñöôøng daây “saün saøng truyeàn” ñaõ thay ñoåi
= 0 Khoâng thay ñoåi
= 1 Thay ñoåi
CHÖÔNG III
THIEÁT KEÁ VAØ THI COÂNG MODUL
GIAO TIEÁP MAÙY TÍNH VÔÍ KIT 8051
3. GIÔÙI THIEÄU VI MAÏCH GIAO TIEÁP MAX 232
Vi maïch MAX 232 cuûa haõng MAXIM laø moät vi maïch chuyeân duøng trong giao
dieän noái tieáp vôùi maùy tính. Chuùng coù nhieäm vuï chuyeån ñoåi möùc TTL ôû loái vaøo thaønh
möùc +10V hoaëc –10V ôû phía truyeàn vaø caùc möùc +3…+15V hoaëc -3…-15V thaønh möùc
TTL ôû phía nhaän.
Vi maïch MAX 232 coù hai boä ñeäm vaø hai boä nhaän. Ñöôøng daãn ñieàu khieån loái
vaøo CTS, ñieàu khieån vieäc xuaát ra döõ lieäu ôû coång noái tieáp khi caàn thieát, ñöôïc noái vôùi
chaân 9 cuûa vi maïch MAX 232. Coøn chaân RST (chaân 10 cuûa vi maïch MAX ) noái vôùi
ñöôøng daãn baét tay ñeå ñieàu khieån quaù trình nhaän. Thöôøng thì caùc ñöôøng daãn baét tay
ñöôïc noái vôùi coång noái tieáp qua caùc caàu noái, ñeå khi khoâng duøng ñeán nöõa coù theå hôû
maïch caùc caàu naøy. Caùch truyeàn döõ lieäu ñôn giaûn nhaát laø chæ duøng ba ñöôøng daãn TxD,
RxD vaø GND (mass)
THIEÁT KEÁ VAØ THI COÂNG MODUL GIAO TIEÁP
1. Sô ñoà keát noái
VCC
GND
T1 OUT
R1 IN
R1 OUT
T1 IN
T2 IN
R2 OUT
C1 +
V+
C1 -
C2 +
C2 -
V -
T2 OUT
R2 IN
M
A
X
2
3
2
* Sô ñoà keát noái giöõa coång COM vôùi KIT Vi ñieàu khieån 8051 :
2. Sô ñoà thöïc thöïc teá
8
0
5
1
RXD
TXD
10
11 MAX
2
3
2
RXD
TXD
P3.0
P3.1
+V
5V
MCS-8051
MAX-232
+
10uF
+
10uF
+
10uF
+
10uF
+
10uF
+V
5V
MCS-8051
MAX-232
+
10uF
+
10uF
+
10uF
+
10uF
+
10uF
Giao tiếp máy tính.pdf
CHÖÔNG 1
GIÔÙI THIEÄU NGOÂN NGÖÕ HÔÏP NGÖÕ
1. NGOÂN NGÖÕ MAÙY VAØ HÔÏP NGÖÕ
Chöông trình laø moät teäp leänh ñöôïc ñöa vaøo boä nhôù cho maùy thöïc hieän.
Caùc leänh coù theå ñöôïc theå hieän theo nhieàu daïng (ngoân ngöõ) khaùc nhau, daïng cô
baûn nhaát maø maùy (CPU) coù theå hieåu ngay goïi laø ngoân ngöõ maùy (Machine
Language). Tuøy theo CPU maø ngoân ngöõ maùy coù moät daïng nhaát ñònh, ñieàu ñoù
coù nghóa vôùi moät loaïi CPU coù moät ngoân ngöõ maùy rieâng. Sau ñaây laø moät ñoaïn
chöông trình ngoân ngöõ maùy thuoäc hoï Intel 8086/80x86 :
Leänh Daïng thaäp luïc phaân Daïng nhò phaân
1 B4 02 1011 0100 0000 0010
2 80 C2 30 1000 0000 1100 0010 0011 0000
3 50 0101 0000
Ñoïan chöông trình treân goàm 3 caâu leänh coù chieàu daøi laàn löôïc laø 2, 3 vaø1
byte. Byte ñaàu tieân goïi laø maõ leänh hay taùc töû (Operation Code) xaùc ñònh taùc
vuï maø CPU phaûi thöïc hieän, phaàn coøn laïi laø taùc toá (Operand) xaùc ñònh döõ lieäu
hoaëc nôi chöùa döõ lieäu maø leänh taùc ñoäng vaøo. Chieàu daøi caùc caâu leänh theo qui
ñònh cuûa CPU.
Ñeå coù theå laäp trình vôùi loaïi ngoân ngöõ naøy, laäp trình vieân phaûi bieát veà toå
chöùc cuûa maùy ñang söû duïng.
Vì laø ngoân ngöõ rieâng cuûa maùy neân chöông trình vieát baèng ngoân ngöõ naøy
thöïc hieän raát nhanh vaø chieám ít choã trong boä nhôù tuy nhieân vì chöông trình
vieát döôùi daïng nhò phaân neân raát khoù vieát vaø khoù nhôù deã nhaàm laãn.
Hôïp ngöõ (Assembly Language) laø moät loaïi ngoân ngöõ giuùp laäp trình vieân
vieát chöông trình deã daøng hôn thay cho ngoân ngöõ maùy. Hôïp ngöõ coù daïng nhö
ngoân ngöõ maùy töùc laø moät leänh hôïp ngöõ töông ñöông vôùi moät leänh cuûa ngoân
ngöõ maùy vaø cuõng coù theå moät leänh hôïp ngöõ töông ñöông vôùi nhieàu leänh ngoân
ngöõ maùy nhöng khaùc vôùi ngoân ngöõ maùy ôû choã thay vì vieát chöông trình döôùi
daïng nhò phaân ngöôøi ta duøng moät soá kyù hieäu töôïng tröng deã nhôù nhö MOV laø
leänh chuyeån, ADD laø leänh coäng, SUB laø leänh tröø. Ví duï 3 leänh ngoân ngöõ maùy
ôû treân coù theå vieát döôùi daïng hôïp ngöõ nhö sau:
Leänh Daïng ngoân ngöõ maùy Daïng hôïp ngöõ
1 B4 02 MOV AH, 02h
2 80 C2 30 ADD DL, 30h
3 50 PUSH AX
Dó nhieân laø maùy khoâng theå hieåu ñöôïc chöông trình vieát baèng hôïp ngöõ
neân phaûi qua giai ñoaïn dòch, ñeå dòch chöông trình töø hôïp ngöõ sang ngoâng ngöõ
maùy. Chöông trình laøm nhieäm vuï dòch moät chöông trình sang ngoân ngöõ maùy
goïi laø trình hôïp dòch (Assembler ). Chöông trình vieát baèng hôïp ngöõ goïi laø
chöông trình nguoàn( hay goác –sourse program ) vaø chöông trình döôùi daïng
ngoân ngöõ maùy dòch töø chöông trình nguoàn goïi laø chöông trình ñích (hay ñoái
töôïng -object program) nhö sô ñoà sau:
TAÏO VAØ CHAÏY CHÖÔNG TRÌNH HÔÏP NGÖÕ
Ñeå taïo vaø chaïy moät chöông trình hôïp ngöõ baïn caàn coù moät trong caùc boä
trình hôïp dòch nhö Turbo Assembler cuûa haõng Borland International (goàm
trình hôïp dòch TASM.EXE vaø trình lieân keát TLINK.EXE ) hoaëc Microsoft
Assembler cuûa haõng Microsoft (goàm trình hôïp dòch MASM.EXE vaø trình lieân
keát LINK.EXE) ngoaøi ra coøn moät soá taäp tin khaùc trong caùc boä chöông trình
naøy. Duø ñang söû duïng cuûa haõng naøo cuõng phaûi theo qui trình sau:
Böôùc 1: Tröôùc heát baïn caàn coù moát trình soaïn thaûo vaên baûn ñeå taïo chöông
trình nguoàn hôïp ngöõ nhö NC (Norton Commander), Turbo trong Turbo
Pascal…, sau khi soaïn ñöôïc ghi leân ñóa thaønh moät taäp tin coù hoï laø ASM (ví duï
HELLO.ASM)
Böôùc 2: Dòch chöông trình ñaõ soaïn (HELLO.ASM) vôùi trình hôïp dòch
TASM.EXE (ñoái vôùi söû duïng boä dòch cuûa haõng turbo). Sau khi dòch treân ñóa seõ
coù moät taäp tin môùi goïi laø taäp ñoái töôïng (HELLO.OBJ) doøng leänh dòch chöông
trình nhö sau:
C: TASM HELLO.ASM
Turbo Assembler Version 2.01 Copyright (c) 1990 Borland International
Assembling file: hello.asm to hello.obj
Error message: None
Warning message: None
Passes: 1
Remaining memory: 370k
Thoâng baùo treân cho bieát chöông trình cuûa baïn khoâng coù loãi sai. Neáu coù,
phaûi söûa laïi chöông trình (vôùi trình soaïn thaûo ) vaø cho dòch laïi. Baây giôø treân
ñóa cuûa baïn coù hai taäp tin HELLO.ASM (chöông trình nguoàn do baïn taïo ra) vaø
HELLO.OBJ (taäp tin ñoái töôïng). Neáu chöông trình khoâng loãi thì qua böôùc 3
Trình nguoàn
(Source program)
Trình hôïp dòch
(Assembler)
Trình ñoái töôïng
(Object program)
Böôùc 3: Lieân keát chöông trình vôùi trình lieân keát TLINK.EXE. doøng leänh
thöïc hieän lieân keát nhö sau:
C:TLINK HELLO.OBJ
Turbo Link Version 3.01 Copyright (c) 1990 Borland International
Neáu chöông trình cuûa baïn khoâng coù loãi sai, TLINK seõ taïo taäp thöïc hieän
HELLO.EXE.
Böôùc 4: Cuoái cuøng laø thöïc hieän chöông trình cuûa baïn. Qui trình taïo vaø
thöïc hieän chöông trình coù theå toùm taét nhö ôû hình sau:
CUÙ PHAÙP LEÄNH HÔÏP NGÖÕ
Chöông trình hôïp ngöõ goàm nhieàu leänh, moãi leänh vieát treân moät doøng.
Leänh hôïp ngöõ phaân laøm hai loaïi laø chæ thò vaø chæ daãn. Chæ thò laø leänh seõ ñöôïc
dòch sng maõ maùy, töùc laø leänh seõ ñöôïc thi haønh, coøn chæ daãn ( coøn goïi laø leänh
giaû) chæ laø leänh höôùng daãn trình hôïp dòch trong quaù trình dòch chöông trình.
Daïng toång cuûa moät leänh goàm 4 chöông trình nhö sau:
<teân> <taùc töû> <taùc toá> < ;ghi chuù>
vd: DoAddition: ADD AX, DX ;Taêng AX löôïng DX
Trình nguoàn
(treân giaáy) Trình soaïn thaûo
Trình nguoàn
(treân ñóa –ASM)
TASM.EXE
(dòch chöông trình )
TLINK.EXE
(lieân keát chöông trình
Taäp ñoái töôïng
(.OBJ)
Trình ñích
(.EXE)
Caùc tröôøng hôïp caùch nhau ít nhaát laø moät khoaûng traéng hoaëc kí töï nhaûy
(Tab)
a/ Tröôøng teân
Tröôøng teân coù theå laø nhaõn (Label ) hoaëc kí hieäu (Symbol). Nhaõn laø moät
teân ñaïi dieän cho moät vò trí trong chöông trình (tröôøng hôïp naøy coù daáu :
theo sau), hoaëc teân thuû tuïc (chöông trình con) hoaëc teân bieán vuøng nhôù
chöùa döõ lieäu ).
b/ Tröôøng taùc töû
Tröôøng taùc töû laø teân gôïi nhôù cuûa leänh. Neáu laø chæ thò nhö MOV, ADD, …
thì leänh seõ ñöôïc dòch sang maõ maùy coøn neáu laø chæ daãn nhö ENDS, PROC,
… thì ñoù laø leänh höôùng daãn trình hôïp dòch trong quaù trình dòch chöông
trình sang maõ maùy.
c/ Tröôøng taùc toá
Tröôøng taùc toá xaùc ñònh döõ lieäu seõ ñöôïc xöû lyù bôûi leänh. Leänh coù theå coù
hoaëc khoâng coù taùc toá. Neáu coù hai taùc toá thì chuùng caùch nhau baèng daáp
phaåy, taùc toá thöù nhaát (töø traùi qua ) goïi laø taùc toá ñích, taùc toá thöù hai goïi laø
taùc toá nguoàn.
d/ Tröôøng ghi chuù
Sau moãi caâu leänh coù theå vieát doøng ghi chuù sau daáu chaám phaåy vôùi muïch
ñích laø ñeå giaûi thích yù nghóa cuûa leänh
KHAI BAÙO DÖÕ LIEÄU
Döõ lieäu trong chöông trình ñeàu ñöôïc chuyeån sang döôùi daïng nhò phaân,
tuy nhieân baïn coù theå vieát döôùi daïng thaäo phaân, thaäp luïc phaân hoaëc chuoãi kyù töï
a/ Caùch vieát soá
Trong caùc chöông trình bình thöôøng ñöôïc hieåu laø thaäp phaân, khi caàn coù
theâm chöõ D hoaëc d ñaèng sau soá (ví duï 10,10D, 10d ) ñeàu coù giaù trò nhö
nhau
Soá vieát theo heä thaäp luïc phaân keát thuùc baèng chöõ H hoaëc h phaûi baét ñaàu laø
moät soá (ví duï 10h, 10H, 2F8h, 2F8H)
Soà nhò phaân keát thuùc baèng B hoaëc b (ví duï 1001b, 1001B )
b/ Chuoãi kyù töï
Kyù töï hoaëc chuoãi kyù töï phaûi raøo giöõa hai daáu nhaùy ñôn (‘) hoaëc daáu
nhaùy keùp(“) (ví duï ‘Hello’,”hello”,’A’, “A” ) caùc kyù töï ñöôïc chuyeån
thaønh maõ ASCII töông öùng, do ñoù ‘A’,”A” ,41h hoaëc 65 ñeàu coù nghóa
nhö nhau.
c/ Ñònh nghóa döõ lieäu
Caùc chæ daãn thoâng duïng duøng ñònh nghóa döõ lieäu kieåu byte, töø (2 byte –
Word ) hoaëc töø keùp (4 byte – Double word ) nhö sau:
Nhaõn DB trò, trò, ;byte
Nhaõn DW trò, trò, ;word
Nhaõn DD trò, trò, ;double word
Vôùi nhaõn laø teân vuøng nhôù (coøn goïi laø bieán, thöïc chaát laø ñòa chæ töôïng
tröng cuûa vuøng nhôù vaø ñöôïc chuyeån thaønh ñòa chæ thaät sau khi dòch
chöông trình ) ñöôïc ñònh nghóa vôùi kích thöôùc 1 byte (DB ), 2 byte (DW )
hoaëc 4 byte (DD ). Moãi trò ghi trong phaàn taùc toá seõ laø trò ñöôïc gaùn cho
vuøng nhôù ñöôïc caáp phaùt. Neáu thay trò baèng daáu ? thì seõ khoâng gaùn trò cho
vuøng nhôù
Vd : B DB 5 coù nghóa laø vuøng nhôù ñöôïc caáp phaùtcoù ñòa chæ laø
B, chieám 1 byte vaø coù trò laø 5
Vd : W DW 10 coù nghóa laø vuøng nhôù ñöôïc caáp phaùt coù ñòa chæ laø
W chieám 2 byte vaø coù giaù trò laø 0Ah (W laø 0A coøn W+1 laø 00 )
d/ Ñònh nghóa haèng
Thay vì vieát tröïc tieáp caùc haèng soá hoaëc chuoãi trong chöông trình, ta coù
theå ñaët teân (goïi laø kí hieäu ) cho raèng ôû ñaàu chöông trình, sau ñoù chæ caàn
duøng caùc teân ñoù thay cho caùc haèng. Caùch ñaët teân cho haèng naøy laøm
chöông trình deã ñoïc vaø deã hieåu hôn vôùi cuù phaùp sau:
Teân EQU Haèng
Vd:
CR EQU 0D h
LF EQU 0A h
STR EQU ‘Du lieu nhap sai!!!!’
Sau ñoù coù hai doøng sau laø töông ñöông
MESS DB STR, CR, LF , ’S’
MESS DB ‘Du lieu nhap sai!!!!’, 0Dh, 0Ah, ’$’
CAÁU TRUÙC CHÖÔNG TRÌNH
Nhö ñaõ trình baøy, chöông trình maõ maùy goàm 3 phaàn chöùa trong 3 ñoaïn laø
ñoaïn maõ döõ lieäu vaø ngaên xeáp do ñoù trình hôïp ngöõ cuõng ñöôïc toå chöùc töông töï
vôùi caùc leänh thích hôïp.
a/ Kieåu boä nhôù
Kích thöôùc boä nhôù duøng cho ñoaïn maõ vaø döõ lieäu ñöôïc xaùc ñònh baèng
chæ daãn MODEL nhö sau:
MODEL kieåu
Vôùi kieåu laø:
•TINY
Maõ vaø döõ lieäu naèm cho phaïm vi moät ñoaïn
•SMALL
Maõ naèm trong moät ñoaïn 64K nhöng döõ lieäu ôû trong phaïm vi moät ñoaïn
64K
•COMPACT
Maõ trong phaïm vi moät ñoaïn 64K vaø döõ lieäu coù theå lôùn hôn 64K
Thöôøng coù ít chöông trình naøo coù maõ hoaëc döõ lieäu lôùn hôn 64K neân kieåu
SMALL laø ñuû. Kieåu TINYduøng ñeå dòch chöông trình sang daïng .COM.
b/ Ñoaïn ngaên xeáp
Ñoaïn ngaên xeáp khai baùo kích thöôùc vuøng ngaên xeáp vôùi chæ daãn :
. STACK Kích Thöôùc
Kích thöôùc laø ñoä lôùn ngaên xeáp tính baèng byte, neáu khoâng ghi seõ maëc
nhieân laø 1024. Ví duï sau khai baùo vuøng ngaên xeáp 256 byte
. STACK 100h
c/ Ñoaïn döõ lieäu
Ñoaïn döõ lieäu duøng khai baùo bieán hoaëc haèng baét ñaàu baèng chæ daãn
.DATA. Ví duï:
. DATA
CR EQU 13
LF EQU 10
VungNho1 DW 2
VungNho2 DW 3
ThongBao DB ‘CHUONG TRINH ABC ’
d/ Ñoaïn maõ
Ñoaïn maõ chöùa caùc leänh cuûa chöông trình baét ñaàu baèng chæ daãn :
. CODE
Leänh cuoái cuøng cuûa chöông trình laø chæ daãn END. Toùm laïi moät
chöông trình hôïp ngöõ thoâng thöôøng coù daïng sau:
. MODEL SMALL
. STACK 100h
. DATA
; phaàn khai baùo döõ lieäu
. CODE
; phaàn leänh
END
CHÖÔNG 2
GIÔÙI THIEÄU NGOÂN NGÖÕ LAÄP TRÌNH
VISUAL C++
I. Toång quan ngoân ngöõ visual c
Taïi thôøi ñieåm hieän nay ñaõ coù raát nhieàu ngoân ngöõ laäp trình khaùc nhau phuïc vuï
cho nhieàu muïc ñích khaùc nhau, tuøy vaøo öùng duïng cuï theå maø ngöôøi laäp trình seõ söû
duïng moät ngoân ngöõ naøo maø mình bieát ñeå vieát chöông trình.
Trong cuoán Luaän vaên toát nghieäp naøy ñeå taïo phaàn giao dieän cho chöông trình
toâi söû duïng ngoân ngöõ laäp trình Visual C++ moät ngoân ngöõ khaù phoå bieán hieän nay.
Visual C++ laø moät ngoân ngöõ laäp trình tröïc quan noù döïa treân neàn taûng cuûa
Ngoân ngöõ C/C++ vì theá nhöõng ai ñaõ bieát ñeán ngoân ngöõ C/C++ ñeàu coù theå töï
hoïc vaø töï vieát cho mình moät chöông trình. Ñaây laø ngoân ngöõ chaïy treân moâi
tröôøng Windows vaø coù theå lieân keát vôùi caùc chöông trình trong moâi tröôøng Dos
2. Caùch vieát moät chöông trình baèng visual c++
Toâi khoâng theå giôùi thieäu moät caùch ñaày ñuû veà Visual C++ nhöng coù theå toùm taét
quaù trình vieát chöông trình baèng Visual C++ nhö sau:
Böôùc 1: Thieát keá giao dieän
Böôùc 2: Vieát maõ leänh
Ñoái vôùi böôùc thieát keá giao dieän, baïn seõ thieát keá “boä maët“ cuûa chöông
trình. Baïn duøng caùc coâng cuï Visual C++ ñeå ñöa caùc ñoái töôïng khaùc nhau
(nhö laø caùc nuùt baám, thanh cuoän, nuùt radio…) vaøo trong cöûa soå chöông trình
cuûa baïn. Ñaëc bieät trong phaàn thieát keá giao dieän baïn khoâng phaûi vieát moät
maõ leänh naøo.
Ñoái vôùi böôùc vieát maõ leänh baïn duøng trình soaïn thaûo cuûa Visual C++ vaø
ngoân ngöõ laäp trình C++ ñeå vieát maõ leänh cho chöông trình
CHÖÔNG 3
CHÖÔNG TRÌNH
CHÖÔNG TRÌNH GIAO DIEÄN
CAÙC MAÕ LEÄNH VIEÁT CHO CHÖÔNG
TRÌNH GIAO DIEÄN
♦ HIEÅN THÒ FILE
void CLUANVANTOTNGHIEPDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: add storing code here
}
else
{
// TODO: add loading code here
}
// Calling the base class CRichEditDoc enables serialization
// of the container document's COleClientItem objects.
m_bRTF=FALSE;
CRichEditDoc::Serialize(ar);
}
♦ CHUYEÅN ÑOÅI FILE ASM THAØNH LILE LIST
void CChildFrame::OnCovertlst()
{
// TODO: Add your command handler code here
system("C:LVTNASM51 TEST1.ASM ");
}
♦ CHUYEÅN ÑOÅI FILE OBJ THAØNH FILE HEX
void CChildFrame::OnConverthex()
{
// TODO: Add your command handler code here
system("C:LVTNRL51 TEST1.OBJ");
system("C:LVTNOH TEST1.OBJ");
}
♦ GOÏI CHÖÔNG TRÌNH MAÙY TÍNH TRÔÏ GIUÙP CHO VIEÄC ÑOÅI CAÙC
CÔ SOÁ KHAÙC NHAU
void CLUANVANTOTNGHIEPView::OnCalCulator()
{
// TODO: Add your command handler code here
system("Calc.exe");
}
♦ GOÏI CHÖÔNG TRÌNH TRUYEÀN TÖØNG BYTE KÍ TÖÏ
void CLUANVANTOTNGHIEPView::OnTransmitted()
{
// TODO: Add your command handler code here
system("C:LVTNTERMINAL.EXE");
}
♦ GOÏI CHÖÔNG TRÌNH TRUYEÀN FILE DÖÕ LIEÄU (*.HEX)
void CChildFrame::OnLoadfile()
{
// TODO: Add your command handler code here
system("C:LVTNTERMINA3.EXE");
}
CHÖÔNG TRÌNH TRUYEÀN DÖÕ LIEÄU
TRUYEÀN GIÖÕA 2 KIT VI ÑIEÀU KHIEÅN
1. LÖU ÑOÀ
♦ BEÂN KIT VÑK TRUYEÀN: BEGIN
KHÔØI TAÏO 8051 ÔÛ CHEÁ ÑOÄ
GIAO TIEÁP NOÁI TIEÁP
NAÏP ÑÒA CHÆ QUAÛN LYÙ VUØNG DÖÕ LIEÄU CAÀN
TRUYEÀN
KIEÅM TRA BEÂN NHAÄN SAÜN
SAØNG ?
KIEÅM TRA DÖÕ LIEÄU CAÀN
TRUYEÀN HEÁT CHÖA ?
TRUYEÀN TÖØNG BYTE
END
YES
NO
NO
YES
♦ BEÂN KIT VÑK 8051 NHAÄN:
BEGIN
KHÔØI TAÏO 8051 ÔÛ CHEÁ ÑOÄ
GIAO TIEÁP NOÁI TIEÁP
NAÏP ÑÒA CHÆ QUAÛN LYÙ VUØNG DÖÕ LIEÄU TRUYEÀN
ÑEÁN
KIEÅM TRA BEÂN PHAÙT SAÜN
SAØNG CHÖA ?
KIEÅM TRA Ñ/C QUAÛN LYÙ VUØNG
DL TRUYEÀN ÑEÁN
HEÁT CHÖA ?
NHAÄN TÖØNG BYTE
END
YES
NO
NO
YES
2. CHÖÔNG TRÌNH
♦ BEÂN KIT VÑK TRUYEÀN:
org 5000h
mov IE,#00h ;khoi tao khong cho phep ngat
mov tmod,#20h
mov th1,#-13 ;timer mode 2, 2400baud
setb tr1 ;cho phep chay
mov scon,#0fch ;khoi tao truyen data mode 3
mov dptr,#6000h ;nap dia chi quan li vung ma
x2: jb p1.1,x2 ;neu bang 1 thi cho
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
;neu dung bang 1 thi xoa de goi tiep byte thu 2
clr ti
inc dptr
mov a,dpl
cjne a,#0ffh,x2
mov a,#76h
mov dptr,#0c000h
movx @dptr,a
sjmp $
end
♦ BEÂN KIT VÑK 8051 NHAÄN:
org 5000h
setb p1.1
mov IE,#00h ;cam ngat
mov tmod,#20h
mov th1,#-13
setb tr1
mov scon,#0fch ;khoi tao giao tiep noi tiep
mov dptr,#6000h
xr2: clr p1.1
xr1: jnb ri,xr1
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
mov a,dpl
cjne a,#0ffh,xr2
mov a,#79h
mov dptr,#0c000h
movx @dptr,a
sjmp $ ;nhay tai cho
end
;RxD cua may phat va RxD cua may thu duoc noi voi nhau lam duong truyen
data
;TxD cua may phat va TxD cua may thu duoc noi voi nhau lam xung clk
TRUYEÀN DÖÕ LIEÄU TÖØ MAÙY TÍNH ÑEÁN KIT VÑK 8051
B1. TRUYEÀN TÖØNG BYTE KÍ TÖÏ TÖØ MAÙY TÍNH ÑEÁN KIT VÑK
1. LÖU ÑOÀ
♦ BEÂN TRUYEÀN (MAÙY TÍNH)
BEGIN
THIEÁT ÑAËT ÑÒA CHÆ VUØNG DÖÕ LIEÄU CUÛA
CHÖÔNG TRÌNH, LÖU VAØ CAØI ÑAËT CAÙC NGAÉT
CUÛA MAÙY TÍNH , ÑAËT PHUÔNG THÖÙC GIAO
TIEÁP CHUAÅN (2400 b/s, 8 bit, None Parity, 1 Stopbit)
HIEÅN THÒ MENU CUÛA CHÖÔNG TRÌNH
KIEÅM TRA COÙ PHÍM
NAØO ÑÖÔÏC AÁN ?
END
GOÏI CHÖÔNG TRÌNH HIEÅN
THÒ VAØ TRUYEÀN KÍ TÖÏ
ÑÖÔÏC NHAÁN
PHÍM F1 # PHÍM
F1, F9
PHÍM F9
KIEÅM TRA COÙ PHÍM
NAØO ÑÖÔÏC NHAÁN ?
♦ BEÂN NHAÄN (KIT VI ÑIEÀU KHIEÅN 8051):
2. CHÖÔNG TRÌNH
♦ BEÂN TRUYEÀN (MAÙY TÍNH):
BEGIN
KHÔÛI TAÏO 8051 ÔÛ CHEÁ ÑOÄ GIAO TIEÁP
NOÁI TIEÁP NOÁI TIEÁP
NAÏP ÑÒA CHÆ QUAÛN LYÙ VUØNG DÖÕ LIEÄU
SEÕ ÑÖÔÏC GÖÛI TÔÙI
NHAÄN TÖØNG BYTE ÑÖÔÏC GÔÛI TÔÙI
END
KIEÅM TRA XEM ÑAÕ
HEÁT ÑÒA CHÆ QUAÛN
LYÙ VUØNG DL
YES
NO
CHÖÔNG TRÌNH TRUYEÀN TÖØNG BYTE KÍ TÖÏ TÖØ MAÙY TÍNH
; STACK
stack segment stack
db 300 dup('?')
stack ends
;------------------------------------------ DATA ----------------------
Data Segment
;Messages
MENU_MS db '',0dh,0ah
db '',0dh,0ah
db '* THE TRANSMITTED CHARACTERS * ‘,0dh,0ah
db '** --> Press <F1> To Redisplay This MENU ** ',0dh,0ah
db '** --> Press <F9> To Exit This Program ** ’, 0dh,0ah
db 'Input characters from keyboard:'
db '$'
;
PROT_MS db '',0dh,0ah
ERR1_MS db 0dh,0ah,'*** Cannot Transmit ***',0dh,0ah
;
;PROGRAM PARAMETER STORAGE
CARD_BASE dw 03f8h ;Address of RS 232 card for all
harware
;type except
INT_NUM db 0ch ;Offset in Bios table as follows
SETUP_BYTE db 0bbh ;Default value
;
;Origin interrupt vector address to restore on exit
O_INT_SEG dw 0000h ;segment
O_INT_OFF dw 0000h ;offset
;
;circular buffer and pointers:
CIRC_BUF db 20 dup(00h) ;Circular buffer
dw 0
DATA_IN dw 0 ;imput pointer
DATA_OUT dw 0 ;output pointer
;
DATA Ends
;-------------------------------------- CODE --------------------------------------
CODE SEGMENT
ASSUME CS:CODE
START:
;
;Establish addressability of program's data Segment
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 |
;----------------------|
;
;Examine Ram location F000:FFFE to determine IBM hardware
push ds ;Save program 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 ;Bios data area segment
mov ds,dx ;Data segment to Bios area
mov cx,ds:0400h ;Offset card 1
pop ds ;Restore program ds
mov Card_Base,cx ;Save in program's data
;
;determine interrupt number:
; 0bh IRQ4 all other hardware
cmp al,0fdh ;Code for PCjr
jne Set_Address
mov int_num,0bh
;
;----------------------------------|
;Save/Install Interrupt |
;----------------------------------|
;Obtain and save the segment/offset of the original communications
;interrup installed on entry using Dos service number 53
;of Int 21h
Set_Address:
mov ah,53 ;Dos service request number
mov al,Int_Num ;Interrup number (0bh or 0ch)
int 21h
;
;ES:BX = segment/offset of original handler
mov O_Int_Seg,es ;Save segment
mov O_Int_Off,bx ;and offset
;
;Insert address of the interrup service routine in the Bios
;Label for interrup service routine is: RS232_INT
;use DOS service number 37 of INT 21h
mov ah,37 ;Dos service request number
mov al,int_num ;Machine interrup number
mov dx,offset cs:RS232_Int
push ds ;Save program data segment
push cs
pop ds ;Set DS to segment base of
int 21h ;interrup service routine
pop ds ;Restore program's ds
;
;------------------|
;Set protocol |
;------------------|
;Set default communication parameters
mov al,10100011b ;Control code
mov ah,0 ;Bios request number
mov dx,0 ;Comm1 in all hardware types
int 14h ;Bios service request
call comm_on
call flush ;Flush keyboard buffer
;
;------------------------------------------------------------------------------------|
; Send and receive characters |
; monitor funtion key |
;------------------------------------------------------------------------------------|
Monitor:
mov ah,1 ;Code for read keyboard status
int 16h ;Bios service
jz ser_imp ;Nothing in keyboard buffer
jmp char_typed ;Character in keyboard buffer
;
;Delay loop to allow interrupt to occur
Ser_imp:
sti ;interrupt on
mov cx,50
Delay: nop
nop
loop delay
;
;--------------------------------------|
;Test for new data received |
;--------------------------------------|
cli ;Interrup off while reading pointer
mov bx,data_out ;Compare pointers
cmp bx,data_in
jne new_data ;New data item or items
sti ;Interrup on
jmp Monitor ;Reapeat cycle
;
;------------------|
;Process char |
;------------------|
;Receive character type from keyboard buffer
char_typed:
mov ah,0 ;Code for read keyboard char
int 16h ;Bios service
;Test for <F1> and <F9> keys
cmp ax,3b00h ;<F1>
jne test_f9
jmp show_menu ;<F1> key pressed
Test_F9:
cmp ax,4300h ;<F9>
je dos_exit
jmp show_and_send ;<F9> key pressed
;
;----------------|
; Exit |
;----------------|
Dos_Exit:
;Communications interrupts OFF
call Comm_Off
;
;Restore orginal interrupt vector for communications interrup number
mov ah,37 ;Dos service request number
mov al,int_num ;Machine interrup number
mov dx,o_int_off ;Offset to DX
mov ax,o_int_seg ; Segment
mov ds,ax ;to DS
int 21h
;Exit
mov ah,76 ;Dos service request number
mov al,0 ;No return code
int 21h ;Exit to dos
;
;----------------------|
;Redisplay Menu |
;----------------------|
Show_Menu:
mov dx,offset menu_ms
call show_message ;Display message routine
jmp monitor
;
;--------------------------|
;New Data Receiver |
;--------------------------|
New_Data:
lea si,circ_buf ;Circular buffer address
mov bx,data_out ;Output pointer
add si,bx ;Buffer start +displacement
mov al,byte ptr[si] ;Get character
;
;Update output pointer
inc bx ;Bump
cmp bx,20 ;Pointer overflows buffer?
jne ok_out_ptr
mov bx,0 ;Request to start of buffer
;
Ok_Out_Ptr:
mov data_out,bx ;Update
;
;Display byte taken from buffer
sti
call tty
jmp monitor
;
;------------------------|
;Display Protocol |
;------------------------|
Show_Protocol:
mov dx,offset prot_ms
call show_message ;Display message routine
jmp monitor
;
;--------------------------|
; Output and Display |
;--------------------------|
Show_and_Send:
;Send through RS-232c line
;Wait loop for tranmitter holding register empty
mov cx,2000 ;Prime wait counter
push ax ;Save character to transmit
;
Thre_Wait:
mov dx,card_base
add dx,5 ;Line status register
in al,dx ;Get byte at port
jmp short $+2 ;Thre bit set?
test al,20h
jnz ok_2_send
loop thre_wait
;
;Wait period timed out,display error message and exit
pop ax ;Restore stack
mov dx,offset err1_ms
call show_message ;Error to screen
jmp monitor
;
Ok_2_Send:
pop ax ;Retrieve byte
;Place in transmitter hoding register to send
mov dx,Card_Base ;THR register
out dx,al ;Send
jmp short $+2 ;I/O delay
;Display character
call tty
jmp monitor
;------------------------------------------------------------------------------|
; PROCEDURES |
;------------------------------------------------------------------------------|
Comm_On proc near
;Set communication line for interrupt operation received data
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
;
;Init mode control register for data terminal ready
;(bit 0) request to send (bit1) and output 2 (bit3)
;DX is still holding port address
mov dl,0fch ;MCR address
mov al,00001011b ;Bit 0,1 and 3 set
out dx,al
jmp short $+2
;
;Set bit 7 of the line control register (DLAB) to access
;the interrupts enable register at xF9h
mov dl,0fbh ;xFBH =line control register
in al,dx ;Read byte at port
jmp short $+2 ;I/O delay
and al,7fh ;Reset DLAB
out dx,al ;Write to LCR
jmp short $+2 ;I/O delay
;
;Enable interrupts for DATA READY only
mov dl,0f9h ;Interrupt enable register
mov al,1 ;Data ready interrupt
out dx,al
jmp short $+2 ;I/O delay
;
;Enable communications interrupts by resetting the bits
;corresponding to the irq3 and iqr4 line on the interrupt mask
;register(port address =21h)
in al,21h ;Read byte at port
jmp short $+2 ;I/O delay
and al,0e7h ;Reset bit 3 and bit 4
out 21h,al
jmp short $+2 ;I/o delay
;
;Reenable interrupt
sti
ret
Comm_on Endp
;
;---------------------------------------|
; Communication line off |
;---------------------------------------|
Comm_off proc near
;Disable communications interrup by setting for irq3 and iqr4 line
;on the interrupt mask register (port address=21)
in al,21h
or al,18h ;Set bit 3 and 4
out 21h,al
jmp short $+2
ret
Comm_off Endp
;
Show_Message proc near
;Display string ->by the DX register using Dos function 09h
mov ah,9 ;Service request number
int 21h ;Dos interrupt
ret
Show_Message Endp
;
;-----------------------------|
; Teletype write |
;-----------------------------|
tty proc near
;Display character or control code at cursor position
tty_one:
push ax ;Save character
mov ah,14 ;Bios service request number
;for ASCII teletype write
mov bx,0 ;Display page
int 10h ;Bios service request
pop ax
;
;Test for carriage return and add line feed
cmp al,0dh
jne not_cr
mov al,0ah
jmp tty_one
not_cr:
ret
tty endp
;
;-------------------------|
; Flush Buffer |
;-------------------------|
flush proc near
flush_1:
mov ah,1 ;Bios service request code
int 16h
jz no_old_chars
;Flush old character
mov ah,0
int 16h
jmp flush_1
no_old_chars:
ret
flush endp
;
get_key proc near
mov ah,0 ;Bios service request number
int 16h
ret
get_key endp
;
;----------------------------------------------------------------------------|
; Interrupt Service Routine |
;----------------------------------------------------------------------------|
rs232_int:
sti ;interrupt on
;communications
;Save register to be used by the service routine
push ax
push bx
push dx
push di
push ds
;Set Ds establish addressability of main program data
mov dx,data
mov ds,dx
assume ds:data
;
;Check line status register for reception error and data ready
Data_check:
mov dx,card_base
mov dl,0fdh ;line status register
in al,dx ;Read port byte
jmp short $+2 ;I/O delay
;Check for error codes
test al,1eh
jnz data_error
jmp data_check
;
data_error:
mov al,'?' ;Error symbol
jmp store_byte
;
;Pull data from the receiver data register and store in
;the circular buffer
Data_Ready:
mov dl,0f8h ;RDR
in al,dx ;Get byte
jmp short $+2 ;I/O delay
and al,7fh ;Mask off high bit
;
;Place byte in circular buffer
Store_Byte:
lea di,circ_buf ;Buffer pointer
mov bx,data_in ;Input pointer
add di,bx ;Point Di to active byte
mov byte ptr[di],al ;Store in Circ_Buf
;
;Index input pointer. Reset if pointer overflows buffer
inc bx ;Bump pointer
cmp bx,20 ;Past end of buffer ?
jne ok_in_ptr
;
;Reset pointer to start of buffer
mov bx,0
ok_in_ptr:
mov data_in,bx ;Store new pointer displacement
;
;Signal end of -interrupt to the interrupt command register
mov al,20h ;Code
out 20h,al ;EOl port address
jmp short $+2 ;I/O delay
;
;Requset register from stack
pop ds
pop di
pop dx
pop bx
pop ax
;
;Return from interrupt
iret
code ends
End start
♦ BEÂN NHAÄN (KIT VÑK 8051):
org 5000h
setb p1.1
mov IE,#00h ;cam ngat
mov tmod,#20h
mov th1,#-13
setb tr1
mov scon,#0fch ;khoi tao giao tiep noi tiep
mov dptr,#6000h
xr1: jnb ri,xr1
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
mov a,dpl
cjne a,#0ffh,xr1
sjmp $ ;nhay tai cho
end
B2. TRUYEÀN FILE DÖÕ LIEÄU TÖØ MAÙY TÍNH ÑEÁN KIT VÑK
1. LÖU ÑOÀ
♦ BEÂN TRUYEÀN (MAÙY TÍNH):
BEGIN
THIEÁT ÑAËT ÑÒA CHÆ VUØNG DÖÕ LIEÄU CUÛA
CHÖÔNG TRÌNH, LÖU VAØ CAØI ÑAËT CAÙC
NGAÉT CUÛA MAÙY TÍNH , SET PHUÔNG THÖÙC
GIAO TIEÁP CHUAÅN
HIEÅN THÒ MENU CUÛA CHÖÔNG TRÌNH
END
GOÏI CHÖÔNG TRÌNH HIEÅN
THÒ VAØ TRUYEÀN FILE AÁN
ÑÒNH
PHÍM F1 PHÍM F4
PHÍM F9
KIEÅM TRA COÙ PHÍM
NAØO ÑÖÔÏC AÁN ?
♦ BEÂN NHAÄN KIT VÑK 8051:
BEGIN
KHÔÛI TAÏO 8051 ÔÛ CHEÁ ÑOÄ GIAO TIEÁP
NOÁI TIEÁP
NHAÄN BYTE ÑAÀU TIEÂN TREÂN MOÄT
DOØNG CUÛA FILE
SAO SAÙNH = 3AH
NHAÄN BYTE TIEÁP THEO
KTRA HEÁT DÖÕ LIEÄU
TREÂN DOØNG
YES
NO
NO
YES
2. CHÖÔNG TRÌNH
♦ BEÂN TRUYEÀN (MAÙY TÍNH)
CHÖÔNG TRÌNH TRUYEÀN FILE DÖÕ LIEÄU (*.HEX)
Döïa vaøo chöông trình truyeàn töøng byte kí töï coù söï theâm vaøo moät soá haøm
; 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 '<F1> to redisplay this MENU',0dh,0ah
KIEÅM TRA HEÁT DÖÕ
LIEÄU TREÂN FILE
END
YES
NO
db '<F4> to open file.hex and trasnmit',0dh,0ah
db '<F9> to exit the TERMINAL program',0dh,0ah
db 0dh,0ah,'$'
PROT_MS db ' ',0dh,0ah
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
phaàn code gioáng coù thay ñoåi nhö sau:
;----------------------------------------- CODE ------------------------------
;------------------|
;Process char |
;------------------|
;Receive character type from keyboard buffer
char_typed:
mov ah,0 ;Code for read keyboard char
int 16h ;Bios service
;Test for <F1> ,<F4> and <F9> keys
cmp ax,3b00h ;<F1>
jne test_f4
jmp show_menu ;<F1> key pressed
Test_F4:
cmp ax,3e00h
jne test_F9
jmp tran_file ;<F4> key pressed
Test_F9:
cmp ax,4300h ;<F9>
je dos_exit
jmp show_and_send ;<F9> key pressed
;
Phaàn procedure theâm vao moät soá chöông trình con
;------------------------------------------------------------------------------|
; PROCEDURES |
;------------------------------------------------------------------------------|
tran_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
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
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,06h
edel2: mov bx,0ffffh
edel1: dec bx
jnz edel1
dec ax
jnz edel2
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
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
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
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
RET
push di
mov di,bx
mov ah,1
stosw
mov bx,di
pop di
ret
goi_ht endp
so_lonproc near
cmp al,9
jg yyy
ret
yyy: sub al,7
ret
so_lonendp
♦ BEÂN NHAÄN (KIT VÑK 8051):
;chuong trinh cua may nhan du lieu (receiver)
dk equ 0c001h
ht equ 0c000h
org 5200h
mov ie,#00h
mov tmod,#20h
mov th1,#-13
setb tr1
mov scon,#0fch
mov 24h,#00
mov 25h,#00
xr1: jnb ri,xr1 ;nhan ma dau ':'
clr ri
mov a,sbuf
cjne a,#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 11h,dph ;chuyen dia chi de giai ma hthi
mov 10h,dpl
mov a,sbuf
movx @dptr,a
mov 14h,a ;cat de giai ma hien thi
lcall decode
inc dptr
djnz r1,xr5
sjmp xr1
;chuong trinh con giai ma hien thi
decode: push dpl
push dph
mov dptr,#0200h
mov a,11h ;lay byte B_A_H de giai ma hien thi
push 0e0h ;cat A
swap a ;xu li so thu nhat
anl a,#0fh
mov dpl,a
movx a,@dptr
mov 20h,a
pop 0e0h ;lay lai A
anl a,#0fh ;xu li so thu 2
mov dpl,a
movx a,@dptr
mov 21h,a
mov a,10h ;lay byte B_A_L de giai ma hien thi
push 0e0h ;cat A
swap a ;xu li so thu nhat
anl a,#0fh
mov dpl,a
movx a,@dptr
mov 22h,a
pop 0e0h ;lay lai A
anl a,#0fh ;xu li so thu 2
mov dpl,a
movx a,@dptr
mov 23h,a
mov a,14h ;lay byte DATA de giai ma hien thi
push 0e0h ;cat A
swap a ;xu li so thu nhat
anl a,#0fh
mov dpl,a
movx a,@dptr
mov 26h,a
pop 0e0h ;lay lai A
anl a,#0fh ;xu li so thu 2
mov dpl,a
movx a,@dptr
mov 27h,a
lcall display
pop dph
pop dpl
ret
display:
mov r2,#80h ;tu dieu khien 8279 chong nhap nhay
mov r0,#20h ;quan li dia chi ma hien thi
dis1: mov dptr,#dk
mov a,r2
movx @dptr,a
mov dptr,#ht
mov a,@r0
movx @dptr,a
inc r2
inc r0
mov a,r0
cjne a,#28h,dis1
ret
end
CHÖÔNG 1
HÖÔÙNG DAÃN SÖÛ DUÏNG
KIT VI ÑIEÀU KHIEÅN 8051
I. GIÔÙI THIEÄU CAÁU TRUÙC PHAÀN CÖÙNG KIT VI XÖÛ LYÙ:
1. Taàn soá laøm vieäc:
ƒKít vi ñieàu khieånsöû duïng vi ñieàu khieån 8051 hoaëc 8951 cuûa Intel vôùi
taàn soá hoaït ñoäng 12MHZ.
ƒCaùc chöông trình veà thôøi gian ñöôïc vieát töông öùng vôùi ñòa chæ naøy.
2. Toå chöùc boä nhôù:
a. Boä nhôù EPROM:
Coù dung löôïng 16kbyte söû duïng 2 EPROM 2764, chöông trình heä thoáng
chöùa ôû EPROM thöù nhaát, EPROM thöù 2 chöa söû duïng ñöôïc thieát keá ôû daïng
socket.
ƒ EPROM 1 coù ñòa chæ töø 0000H - 1FFFH.
ƒ EPROM 2 coù ñòa chæ töø 2000H - 3FFFH.
b. Boä nhôù RAM:
Boä nhôù RAM coù dung löôïng 16kbyte söû duïng 2 IC 6264.
ƒRAM 1 coù ñòa chæ töø 4000H - 5FFFH.
ƒRAM 2 coù ñòa chæ töø 6000H - 7FFFH.
ƒChöông trình coù theå söû duïng toaøn boä caùc vuøng nhôù RAM.
Q
G T P I
K
R
C
8
D
9
E
A
F
B
6
2
7
3
4
0
5
1
S
Caùc phím nhaäp döõ lieäu
Caùc phím chöùc naêng
3. Caùc IC ngoaïi vi: trong heä thoáng coù söû duïng 2 IC 8255A duøng ñeå giao tieáp
vôùi thieát bò ngoaïi vi.
Baûng ñoà nhôù cuûa 2 IC 8255:
Ñòa chæ cuûa caùc port 8255_1 8255-2
Port A 8000H A000H
Port B 8001H A001H
Port C 8002H A002H
Thanh ghi ñieàu khieån 8003H A003H
ƒCaùc ngoõ ra cuûa IC 8255A -1, 8255 -2, ñöôïc ñöa ra beân ngoaøi baèng
connect 64 chaân coù sô ñoà chaân tra ôû baûng tra. Moãi IC 8255A coù 3
port, moãi port coù 8 chaân ñieàu khieån neân soá chaân ñöa ra beân ngoaøi ñeå
ñieàu khieån laø 48.
4. Khoái giaûi maõ hieån thò – queùt phím söû duïng IC 8279:
Vuøng ñòa chæ söû duïng cuûa IC 8279 laø C000H - C001H, trong ñoù:
ƒ Ñòa chæ C000H laø ñòa chæ duøng ñeå gôûi döõ lieäu caàn hieån thò vaø
ñoïc maõ phím.
ƒ Ñòa chæ C001H laø ñòa chæ duøng ñeå gôûi töø ñieàu khieån ra 8279 –
ñoïc thanh ghi traïng thaùi.
a. Phaàn giaûi maõ hieån thò:
Goàm coù 8 led vôùi thöù töï Led 1 ñeán led 8 theo höôùng töø phaûi sang traùi nhö
hình 2:
Hình 2.
♦ Caáu truùc byte döõ lieäu cuûa led:
p g f e d c b a
Heä thoáng söû duïng Led loaïi Anode chung neân muoán ñoaïn naøo saùng thì bit
döõ lieäu töông öùng vôùi ñoaïn ñoù baèng 1. Ñoaïn naøo taét thì bit töông öùng vôùi ñoaïn
ñoù baèng 0.
Ví duï muoán saùng soá “9” thì byte döõ lieäu seõ gôûi ra led laø:
Led8 Led7 Led6 Led5 Led4 Led3 Led2 Led1
0 1 1 0 1 1 1 1
Töông öùng vôùi soá hex laø 6FH. Sau ñaây laø maõ 7 ñoaïn cuûa 1 soá chöõ soá vaø
chöõ caùi:
p g f e d c b a hex
Soá 0 0 0 1 1 1 1 1 1 3F
Soá 1 0 0 0 0 0 1 1 0 06
Soá 2 0 1 0 1 1 0 1 1 5B
Soá 3 0 1 0 0 1 1 1 1 4F
Soá 4 0 1 1 0 0 1 1 0 66
Soá 5 0 1 1 0 1 1 0 1 6D
Soá 6 0 1 1 1 1 1 0 1 7D
Soá 7 0 0 0 0 0 1 1 1 07
Soá 8 0 1 1 1 1 1 1 1 7F
Soá 9 0 1 1 0 1 1 1 1 6F
Chöõ A 0 1 1 1 0 1 1 1 77
Chöõ b 0 1 1 1 1 1 0 0 7C
Chöõ C 0 0 1 1 1 0 0 1 39
Chöõ d 0 1 0 1 1 1 1 0 5E
Chöõ E 0 1 1 1 1 0 0 1 79
Chöõ F 0 1 1 1 0 0 0 1 71
Chöõ P 0 1 1 1 0 0 1 1 73
Chöõ H 0 1 1 1 0 1 1 0 76
Chöõ U 0 0 1 1 1 1 1 0 3E
Coù theå tìm caùc maõ töông öùng coøn laïi.
‰ Coù 2 caùch hieån thò döõ lieäu treân caùc Led:
‰ Caùch 1: khi gôûi döõ lieäu môùi ra ñòa chæ C000H thì döõ lieäu naøy seõ hieån thi ôû
led 1, döõ lieäu tröôùc ñoù cuûa caùc led seõ dòch sang traùi theo chieàu muõi teân
trong hình 3. Rieâng byte döõ lieäu tröôùc ñoù cuûa Led8 seõ dòch vaø maát ñi.
Muõi teân naèm ngang chæ chieàu nhaän döõ lieäu töø vi ñieàu khieån ñöa ñeán led
1. Caùc muõi teân voøng cung chæ chieàu dòch chuyeån döõ lieäu.
LED8 LED7 LED6 LED5 LED4 LED3 LED2 LED1
⊥ Chuù yù: neáu muoán xoùa heát maøn hình 8 led thì gôûi 8 byte 00h lieân tieáp ra
A000h.
‰ Caùch 2: kieåu gôûi döõ lieäu ôû caùch 1 coøn ñöôïc goïi laø kieåu dòch chuyeån döõ lieäu
tuaàn töï. Beân caïnh ñoù 8279 coøn cho pheùp gôûi döõ lieäu tröïc tieáp ñeán baát kyø
led naøo trong 8 led – toå chöùc cuûa led khoâng coù gì thay ñoåi ñòa chæ gôûi döõ
lieäu vaãn laø C000H nhöng moãi led coøn coù theâm 1 ñòa chæ ñieàu khieån nhö
trong hình 4. Ñòa chæ ñieàu khieån cuûa led phaûi gôûi ra ñòa chæ C001H tröôùc
khi gôûi döõ lieäu ra ñòa chæ C000H.
b. Phaàn giaûi maõ baøn phím:
Chöông trình con giaûi maõ baøn phím ñöôïc vieát taïi ñòa chæ 0223H söû duïng
caùc thanh ghi R2, A, DPTR, R6, R7, oâ nhôù 41h. Khi goïi chöông trình con
0223H:
•Neáu khoâng aán phím thì sau khi thöïc hieän xong chöông trình seõ trôû veà
chöông trình chính vôùi noäi dung thanh ghi A =FFH.
•Neáu coù aán phím thì maõ cuûa phím aán chöùa trong A.
Chöông trình naøy neáu coù aán phím hoaëc khoâng aán phím ñeàu trôû veà chöông
trình sau khi thöïc hieän xong vaø phaûi chuù yù caát döõ lieäu trong caùc thanh ghi khi
goïi chöông trình con naøy.
Baûng maõ caùc phím soá:
Phím Maõ Phím M
aõ
Phím Maõ Phím Maõ
0 00 4 04 8 08 C 0C
1 01 5 05 9 09 D 0D
2 02 6 06 A 0A E 0E
3 03 7 07 B 0B F 0F
Baûng maõ caùc phím chöùc naêng:
Phím Maõ Phím M
aõ
T 10 S 14
G 11 15
R 12 P 16
13 K 17
LED8 LED7 LED6 LED5 LED4 LED3 LED2 LED1
80H 81H 82H 83H 84H 85H 86H 87H
II. HÖÔÙNG DAÃN SÖÛ DUÏNG KIT VI ÑIEÀU KHIEÅN 8051
1. Baøn phím:
♦ Kít vi ñieàu khieån coù taát caû laø 26 phím nhaán nhö hình 1 ñöôïc chia thaønh
caùc nhoùm nhö sau:
ƒ 16 phím nhaäp döõ lieäu cuûa chöông trình daïng soá thaäp luïc phaân töø 0 ñeán F
ƒ Caùc phím chöùc naêng.
2. Chöùc naêng cuûa phím:
♦ Khi môùi caáp ñieän cho maùy 4 Led beân traùi seõ hieän thò 4 soá 0000, boán led
beân phaûi taét.
♦ Neáu khoâng hieån thò ñuùng haõy nhaán phím “Q”. Phím “Q” coù chöùc naêng
Reset maïch khi khôûi ñoäng hoaëc khi muoán thoaùt khoûi chöông trình vi
ñieàu khieån ñang thöïc hieän (chöùc naêng nhö phím RESET cuûa maùy vi
tính).
3. Chöùc naêng cuûa phím:
♦ Muoán nhaäp döõ lieäu môùi vaøo oâ nhôù coù ñòa chæ ví duï 4000, haõy duøng caùc
phím nhaäp döõ lieäu ñaùnh soá 4000, ñòa chæ naøy seõ xuaát hieän ôû 4 led beân
phaûi.
♦ Nhaán phím “S” thì ñòa chæ 4000 seõ thay theá cho ñòa chæ tröôùc ñoù ôû 4 led
beân traùi.
♦ 4 led coøn laïi chæ coù 2 led saùng ñoù chính laø noäi dung cuûa oâ nhôù töông öùng
vôùi ñòa chæ 4 led beân traùi.
4. Chöùc naêng cuûa phím:
♦ Duøng ñeå löu tröõ döõ lieäu vaøo oâ nhôù coù ñòa chæ ôû 4 Led beân traùi, ví duï
muoán löu tröõ döõ lieäu laø “3F” vaøo oâ nhôù coù ñòa chæ laø 4000, haõy ñaùnh
“3F” töø caùc phím döõ lieäu, döõ lieäu môùi “3F” seõ thay theá döõ lieäu cuõ tröôùc
ñoù.
♦ Sau ñoù nhaán phím “ ↑ “ ñeå löu tröõ döõ lieäu naøy vaøo oâ nhôù 4000. Ñòa chæ
seõ taêng leân 1 laø 4001 ñeå saün saøng nhaän döõ lieäu tieáp theo vaø 2 led beân
traùi hieån thò noäi dung cuûa oâ nhôù 4001.
♦ Chöùc naêng cuûa phím naøy laø löu tröõ döõ lieäu ñoàng thôøi taêng ñòa chæ cuûa oâ
nhôù.
5. Chöùc naêng cuûa phím:
♦ Coù chöùc naêng giaûm ñòa chæ cuûa oâ nhôù xuoáng 1 ñôn vò töông öùng vôùi moãi
laàn nhaán. Ví duï muoán kieåm tra laïi oâ nhôù môùi vöøa nhaäp laø 4000 xem coù
ñuùng laø döõ lieäu “3F” khoâng, haõy nhaán phím “ ↓ “. Neáu sai thì nhaäp laïi,
neáu ñuùng thì nhaán phím taêng ñòa chæ ñeå naïp caùc döõ lieäu tieáp theo.
Q
S
↓
↑
P
6. Chöùc naêng cuûa phím:
♦ Sau khi nhaäp döõ lieäu cuûa moät chöông trình taïi ñòa chæ 4000, ñeå vi ñieàu
khieån thöïc hieän chöông trình naøy haõy nhaán phím “P”. Khi ñoù treân maøn
hình 8 Led seõ xuaát hieän “PC 4000”. Neáu muoán thöïc hieän chöông trình
taïi ñòa chæ 4000 haõy nhaán phím taêng ñòa chæ, khi ñoù treân maøn hình seõ
xuaát hieän theâm daáu “=“ nhö sau: “PC =4000’. Sau ñoù nhaán phím “G”.
Chöông trình seõ ñöôïc thi haønh.
♦ Neáu chöông trình löu taïi ñòa chæ khaùc vôùi ñòa chæ 4000 thì tröôùc khi nhaán
phím taêng ñòa chæ haõy ñaùnh ñòa chæ cuûa chöông trình ñoù vaøo baèng caùc
phím nhaäp döõ lieäu. Sau ñoù nhaán phím taêng ñòa chæ, ví duï muoán thöïc
hieän chöông trình taïi ñòa chæ 5000 thì treân maøn hình 8 led seõ hieån thò
“PC =5000”. Nhaán tieáp phím “G” chöông trình seõ ñöôïc thi haønh taïi ñòa
chæ 5000.
7. Chöùc naêng cuûa phím:
♦ Duøng ñeå xem noäi dung caùc thanh ghi, tröôùc tieân nhaán phím “R” vaø sau
ñoù nhaán caùc phím thaäp phaân töông öùng töø “6” cho ñeán “F”.
ƒ Nhaán phím thaäp phaân “A”: xem noäi dung thanh ghi A.
ƒ Nhaán phím thaäp phaân “B”: xem noäi dung thanh ghi B.
ƒ Nhaán phím thaäp phaân “C”: xem noäi dung thanh ghi C.
ƒ Nhaán phím thaäp phaân “D”: xem noäi dung thanh ghi D.
ƒ Nhaán phím thaäp phaân “E”: xem noäi dung thanh ghi E.
ƒ Nhaán phím thaäp phaân “F”: xem noäi dung thanh ghi F.
ƒ Nhaán phím thaäp phaân “8”: xem noäi dung thanh ghi H.
ƒ Nhaán phím thaäp phaân “9”: xem noäi dung thanh ghi L.
ƒ Nhaán phím thaäp phaân “7”: xem noäi dung caëp thanh ghi SP.
ƒ Nhaán phím thaäp phaân “6”: xem noäi dung caëp thanh ghi PC.
8. Chöùc naêng cuûa phím:
♦ Phím naøy taùc ñoäng ñeán ngaét cöùng cuûa heä thoáng vi xöû lyù. Chöông trình seõ
bò ngöøng sau khi nhaán phím “I”, neáu nhaán “I” theâm laàn nöõa heä thoáng seõ
ñöôïc ñaët laïi traïng thaùi maëc ñònh ban ñaàu töông ñöông vôùi reset maùy
baèng phím Q.
9. Chöùc naêng cuûa phím:
♦ Chöùc naêng cuûa phím naøy laø thöïc hieän chöông trình töøng böôùc. Trình töï
nhaán phím gioáng nhö phím “G”. Neáu nhaán phím “G” ñeå thöïc hieän caû
chöông trình taïi ñòa chæ chöùa trong caëp thanh ghi PC, ta nhaán phím “T”
chöông trình seõ ñöôïc thöïc hieän töøng leänh taïi ñòa chæ chöùa trong PC.
R
I
T

More Related Content

PDF
08 Lệnh một Bit
PDF
05 Chế độ danh địa chỉ
PDF
Bai giang cau truc pc
PPT
Chuong02
 
PDF
02 Lập trình hợp ngữ 8051
PDF
04 Lập trình cổng vào ra
PPT
Chuong04
 
PDF
03 Các lệnh nháy
08 Lệnh một Bit
05 Chế độ danh địa chỉ
Bai giang cau truc pc
Chuong02
 
02 Lập trình hợp ngữ 8051
04 Lập trình cổng vào ra
Chuong04
 
03 Các lệnh nháy

Similar to Giao tiếp máy tính.pdf (20)

PDF
Giáo trình vi điều khiển PIC
PDF
1.gioi thieu 8051
DOC
Giao Trinh Vi Xu Ly (20 12 2008)
PDF
Tổng quan Vi điều khiển - Chức năng các chân 8951
PDF
GhepNoiBoNho thiet ke vi mach slide .pdf
PDF
slide 8051
PDF
tailieuxanh-300-cau-trac-nghiem-kien-truc-may-tinh-5693.pdf
PDF
4 ccs tieng_viet
PDF
Chuong 2 gioi thieu ve cau truc ho vdk 8051
PDF
07 Lệnh Logic
DOC
Giáo trình kiến trúc máy tính ICTU
PDF
Đề tài giáo trình: Lập trình hệ thống và điều khiển thiết bị từ xa
PDF
Lap trinh-c-cho-vdk
PDF
Viết Ngôn Ngữ Lập Trình 8051 PIC AVR
DOC
PDF
Cau truc phan cung pic16 f8xx
PDF
Đo và điều khiển tốc độ động cơ dùng vi xử lí 8051
PDF
Chuong 2-4. Timer va UART tren 8051 .pdf
PPT
ngan xep va hang doi
DOC
Chuong2 cấu trúc phần cứng 8051
Giáo trình vi điều khiển PIC
1.gioi thieu 8051
Giao Trinh Vi Xu Ly (20 12 2008)
Tổng quan Vi điều khiển - Chức năng các chân 8951
GhepNoiBoNho thiet ke vi mach slide .pdf
slide 8051
tailieuxanh-300-cau-trac-nghiem-kien-truc-may-tinh-5693.pdf
4 ccs tieng_viet
Chuong 2 gioi thieu ve cau truc ho vdk 8051
07 Lệnh Logic
Giáo trình kiến trúc máy tính ICTU
Đề tài giáo trình: Lập trình hệ thống và điều khiển thiết bị từ xa
Lap trinh-c-cho-vdk
Viết Ngôn Ngữ Lập Trình 8051 PIC AVR
Cau truc phan cung pic16 f8xx
Đo và điều khiển tốc độ động cơ dùng vi xử lí 8051
Chuong 2-4. Timer va UART tren 8051 .pdf
ngan xep va hang doi
Chuong2 cấu trúc phần cứng 8051
Ad

More from Man_Ebook (20)

DOCX
SKKN Ứng dụng phần mềm Javalab trong dạy học phần liên kết hóa học môn Khoa h...
PDF
Giáo trình quy hoạch và phân tích thực nghiệm.pdf
PDF
Tuyển tập trinh tiết và đặc trưng truyện ngắn Akutagawa Ryunosuke.pdf
PDF
Giáo trình Thiết kế các hệ thống trên ô tô - Tập 2. Thiết kế các bộ phận trên...
PDF
Giáo trình thực hành trang bị điện - theo phương pháp Mô đun.pdf
PDF
Giáo trình Kỹ thuật cảm biến - Trường ĐH Công nghiệp Hà Nội.pdf
PDF
Giáo trình Động lực học máy, Nguyễn Văn Khang.pdf
PDF
Giáo trình Đo lường điện và thiết bị đo.pdf
PDF
Giáo trình Kỹ thuật đo Điện - Điện tử.pdf
PDF
Giáo trình Quy hoạch thực nghiệm, Nguyễn Doãn Ý.pdf
PDF
Chitosan and alginate/Aspergillus flavus-mediated nanocomposite films for pre...
PDF
Development of a multifunctional and sustainable pterostilbene nanoemulsion i...
PDF
Tiếng Anh chuyên ngành Dược English in Pharmacy.pdf
PDF
Phát hiện và phòng chống xâm nhập trái phép mạng máy tính, Nguyễn Đình Tình.pdf
PDF
First-principles and experimental insight of high-entropy materials as electr...
PDF
Boron nitride nanoslits for water desalination via forward osmosis_ A molecul...
PDF
Advancements in Knowledge Distillation Towards New Horizons of Intelligent Sy...
PDF
Applying response surface methodology to optimize partial nitrification in se...
PDF
Accuracy of Subthalamic Nucleus Electrode Implantation in Deep Brain Stimulat...
PDF
SPIN Selling Hardcover – by Neil Rackham (Author)
SKKN Ứng dụng phần mềm Javalab trong dạy học phần liên kết hóa học môn Khoa h...
Giáo trình quy hoạch và phân tích thực nghiệm.pdf
Tuyển tập trinh tiết và đặc trưng truyện ngắn Akutagawa Ryunosuke.pdf
Giáo trình Thiết kế các hệ thống trên ô tô - Tập 2. Thiết kế các bộ phận trên...
Giáo trình thực hành trang bị điện - theo phương pháp Mô đun.pdf
Giáo trình Kỹ thuật cảm biến - Trường ĐH Công nghiệp Hà Nội.pdf
Giáo trình Động lực học máy, Nguyễn Văn Khang.pdf
Giáo trình Đo lường điện và thiết bị đo.pdf
Giáo trình Kỹ thuật đo Điện - Điện tử.pdf
Giáo trình Quy hoạch thực nghiệm, Nguyễn Doãn Ý.pdf
Chitosan and alginate/Aspergillus flavus-mediated nanocomposite films for pre...
Development of a multifunctional and sustainable pterostilbene nanoemulsion i...
Tiếng Anh chuyên ngành Dược English in Pharmacy.pdf
Phát hiện và phòng chống xâm nhập trái phép mạng máy tính, Nguyễn Đình Tình.pdf
First-principles and experimental insight of high-entropy materials as electr...
Boron nitride nanoslits for water desalination via forward osmosis_ A molecul...
Advancements in Knowledge Distillation Towards New Horizons of Intelligent Sy...
Applying response surface methodology to optimize partial nitrification in se...
Accuracy of Subthalamic Nucleus Electrode Implantation in Deep Brain Stimulat...
SPIN Selling Hardcover – by Neil Rackham (Author)
Ad

Recently uploaded (20)

PDF
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 11 CẢ NĂM THEO FORM THI MỚI BGD - CÓ ÔN TẬP + ...
PDF
GIÁO TRÌNH ỨNG DỤNG CÔNG NGHỆ THÔNG TIN TRONG DẠY HỌC HÓA HỌC Ở TRƯỜNG PHỔ TH...
PPTX
Ứng dụng AI trong hệ thống cơ điện của nhóm 3.pptx
PDF
TÀI LIỆU DẠY THÊM HÓA HỌC 12 THEO FORM THI MỚI BGD - TẬP 2 - NĂM HỌC 2025-202...
PDF
DANH SACH TRUNG TUYEN_TUNG NGANH 2025.pdf
PPTX
Slide chương 3 môn thẩm định tài chính dự án
PDF
BÀI GIẢNG TÓM TẮT XÁC SUẤT THỐNG KÊ (KHÔNG CHUYÊN TOÁN, 2 TÍN CHỈ) - KHOA SƯ...
PDF
SÁNG KIẾN THIẾT KẾ HOẠT ĐỘNG DẠY HỌC CHỦ ĐỀ VẬT SỐNG MÔN KHOA HỌC TỰ NHIÊN 7 ...
PPTX
VNR202 LỊCH SỬ ĐẢNG, MÔN HỌC CẦN THIẾT C
PPTX
KINH TẾ CHÍNH TRỊ - HÀNG HÓA THỊ TRƯỜNG VÀ VAI TRÒ...
PDF
bo-trac-nghiem-toan-11 dành cho cả năm học
PPTX
Bai 28 Cau tao chat Thuyet dong hoc phan tu chat khi.pptx
PDF
TUYỂN TẬP ĐỀ KIỂM TRA HÓA HỌC HỮU CƠ THI THỬ OLYMPIC HÓA HỌC QUỐC TẾ (VÒNG 2)...
PDF
Cơ bản về matlab simulink cho người mới bắt đầu
DOCX
ĐỀ BÀI ĐÁNH GIÁ GIÁO DỤC GIÁ TRỊ SỐNG VÀ KỸ NĂNG SỐNG
PPTX
Bai 11.1 Tuan hoan mau.cấu tạo và vai trò pptx
PPTX
CASE LÂM SÀNG MỤN TRỨNG CÁd (final, BS Vân Thanh)-SV tai lop.pptx
PPTX
Triet hoc con nguoi va triet hoc thac si
PPTX
[123doc] - bai-giang-hoc-phan-hanh-vi-nguoi-tieu-dung-trong-du-lich-consumer-...
PDF
bai giang an toan thong tin ke toan nam 2020
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 11 CẢ NĂM THEO FORM THI MỚI BGD - CÓ ÔN TẬP + ...
GIÁO TRÌNH ỨNG DỤNG CÔNG NGHỆ THÔNG TIN TRONG DẠY HỌC HÓA HỌC Ở TRƯỜNG PHỔ TH...
Ứng dụng AI trong hệ thống cơ điện của nhóm 3.pptx
TÀI LIỆU DẠY THÊM HÓA HỌC 12 THEO FORM THI MỚI BGD - TẬP 2 - NĂM HỌC 2025-202...
DANH SACH TRUNG TUYEN_TUNG NGANH 2025.pdf
Slide chương 3 môn thẩm định tài chính dự án
BÀI GIẢNG TÓM TẮT XÁC SUẤT THỐNG KÊ (KHÔNG CHUYÊN TOÁN, 2 TÍN CHỈ) - KHOA SƯ...
SÁNG KIẾN THIẾT KẾ HOẠT ĐỘNG DẠY HỌC CHỦ ĐỀ VẬT SỐNG MÔN KHOA HỌC TỰ NHIÊN 7 ...
VNR202 LỊCH SỬ ĐẢNG, MÔN HỌC CẦN THIẾT C
KINH TẾ CHÍNH TRỊ - HÀNG HÓA THỊ TRƯỜNG VÀ VAI TRÒ...
bo-trac-nghiem-toan-11 dành cho cả năm học
Bai 28 Cau tao chat Thuyet dong hoc phan tu chat khi.pptx
TUYỂN TẬP ĐỀ KIỂM TRA HÓA HỌC HỮU CƠ THI THỬ OLYMPIC HÓA HỌC QUỐC TẾ (VÒNG 2)...
Cơ bản về matlab simulink cho người mới bắt đầu
ĐỀ BÀI ĐÁNH GIÁ GIÁO DỤC GIÁ TRỊ SỐNG VÀ KỸ NĂNG SỐNG
Bai 11.1 Tuan hoan mau.cấu tạo và vai trò pptx
CASE LÂM SÀNG MỤN TRỨNG CÁd (final, BS Vân Thanh)-SV tai lop.pptx
Triet hoc con nguoi va triet hoc thac si
[123doc] - bai-giang-hoc-phan-hanh-vi-nguoi-tieu-dung-trong-du-lich-consumer-...
bai giang an toan thong tin ke toan nam 2020

Giao tiếp máy tính.pdf

  • 1. GIAO TIẾP MÁY TÍNH NHÀ XUẤT BẢN KHOA HỌC VÀ KỸ THUẬT HÀ NỘI - 2010
  • 2. CHÖÔNG I GIÔÙI THIEÄU VI ÑIEÀU KHIEÅN 8051 I. CAÁU TAÏO VI ÑIEÀU KHIEÅN 8051 1. TOÙM TAÉT PHAÀN CÖÙNG HOÏ MSC-51 (8051) MCS-51 laø hoï IC vi ñieàu khieån do haõng Intel saûn xuaát. Caùc IC tieâu bieåu cho hoï laø 8031, 8051, 8951... Nhöõng ñaëc ñieåm chính vaø nguyeân taét hoaït ñoäng cuûa caùc boä vi ñieàu khieån naøy khaùc nhau khoâng nhieàu. Khi ñaõ söû duïng thaønh thaïo moät loaïi vi ñieàu khieån thì ta coù theå nhanh choùng vaän duïng kinh nghieäm ñeå laøm quen vaø laøm chuû caùc öùng duïng cuûa moät boä vi ñieàu khieån khaùc. Vì vaäy ñeå coù nhöõng hieåu bieát cuï theå veà caùc boä vi ñieàu khieån cuõng nhö ñeå phuïc vuï cho ñeà taøi toát nghieäp naøy ta baét ñaàu tìm hieåu moät boä vi ñieàu khieån thoâng duïn g nhaát, ñoù laø hoï MCS-51 vaø neáu nhö hoï MCS-51 laø hoï ñieån hình thì 8051 laïi chính laø ñaïi dieän tieâu bieåu Caùc ñaëc ñieåm cuûa 8051 ñöôïc toùm taét nhö sau : √ 4 KB ROM beân trong. √ 128 Byte RAM noäi. √ 4 Port xuaát /nhaäp I/O 8 bit. √ Giao tieáp noái tieáp. √ 64 KB vuøng nhôù maõ ngoaøi √ 64 KB vuøng nhôù döõ lieäu ngoaïi. √ Xöû lyù Boolean (hoaït ñoäng treân bit ñôn). √ 210 vò trí nhôù coù theå ñònh vò bit. √ 4 μs cho hoaït ñoäng nhaân hoaëc chia. Baûng moâ taû söï khaùc nhau cuûa caùc IC trong hoï MSC-51 :
  • 3. Loaïi Boä Nhôù Maõ Treân CHIP Boä Nhôù Döõ Lieäu Treân CHIP Soá Timer 8051 4K ROM 128 Byte 2 8031 0K ROM 128 Byte 2 8751 4K ROM 128 Byte 2 8052 8 K ROM 256Byte 2 8032 0 K ROM 256Byte 2 8752 8K EPROM 256Byte 2 2. CAÁU TRUÙC VÑK 8051, CHÖÙC NAÊNG TÖØNG CHAÂN 30pF 30pF Chöùc naêng hoaït ñoäng cuûa töøng chaân (pin) ñöôïc toùm taét nhö sau : √ Töø chaân 1÷ 8 Port 1 (P1.0, . . ., P1.7) duøng laøm Port xuaát nhaäp I/O ñeå giao tieáp beân ngoaøi. Vcc XTAL.1 XTAL.2 PSEN ALE EA RST Vss P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0 P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 18 19 12 MHz 40 32 AD7 33 AD6 34 AD5 35 AD4 36 AD3 37 AD2 38 AD1 39 AD0 8 7 6 5 4 3 2 1 28 A15 27 A14 26 A13 25 A12 24 A11 23 A10 22 A9 21 A8 P3.7 P3.6 P3.5 P3.4 P3.3 P3.2 P3.1 P3.0 17 16 15 14 13 12 11 10 RD WR T1 T0 INT1 INT0 TXD RXD 8051 29 30 31 9 20
  • 4. √ Chaân 9 (RST) laø chaân ñeå RESET cho 8051. Bình thöôøng caùc chaân naøy ôû möùc thaáp. Khi ta ñöa tín hieäu naøy leân cao (toái thieåu 2 chu kyø maùy). Thì nhöõng thanh ghi noäi cuûa 8051 ñöôïc LOAD nhöõng giaù trò thích hôïp ñeå khôûi ñoäng laïi heä thoáng. Töø chaân 10÷17 laø Port3 (P3.0, P3.1, . . ., P3.7) duøng vaøo hai muïc ñích : duøng laø Port xuaát / nhaäp I/O hoaëc moãi chaân giöõ moät chöùc naêng caù bieät ñöôïc toùm taét sô boä nhö sau : • P3.0 (RXD) : Nhaän döõ lieäu töø Port noái tieáp. • P3.1 (TXD) : Phaùt döõ lieäu töø Port noái tieáp. • P3.2 (INT0) : Ngaét 0 beân ngoaøi. • P3.3 (INT1) : Ngaét 1 töø beân ngoaøi. • P3.4 (T0) : Timer/Counter 0 nhaäp töø beân ngoaøi. • P3.5 (T1) : Timer/Counter 1 nhaäp töø beân ngoaøi. • P3.6 (WR) : Tín hieäu Strobe ghi döõ lieäu leân boä nhôù beân ngoaøi. • P3.7 (RD) : Tín hieäu Strobe ñoïc döõ lieäu leân boä nhôù beân ngoaøi. √ Caùc chaân 18,19 (XTAL2 vaø XTAL1) ñöôïc noái vôùi boä dao ñoäng thaïch anh 12 MHz ñeå taïo dao ñoäng treân CHIP. Hai tuï 30 pF ñöôïc theâm vaøo ñeå oån ñònh dao ñoäng. √ Chaân 20 (Vss) noái ñaát (Vss = 0). √ Töø chaân 21÷28 laø Port 2 (P2.0, P2.1, . . ., P2.7) duøng vaøo hai muïc ñích: laøm Port xuaát/nhaäp I/O hoaëc duøng laøm byte cao cuûa bus ñòa chæ thì noù khoâng coøn taùc duïng I/O nöõa. Bôûi vì ta muoán duøng EPROM vaø RAM ngoaøi neân phaûi söû duïng Port 2 laøm byte cao bus ñòa chæ. √ Chaân 29 (PSEN) laø tín hieäu ñieàu khieån xuaát ra cuûa 8051, noù cho pheùp choïn boä nhôù ngoaøi vaø ñöôïc noái chung vôùi chaân cuûa OE (Outout Enable) cuûa EPROM ngoaøi ñeå cho pheùp ñoïc caùc byte cuûa chöông trình. Caùc xung tín hieäu PSEN haï thaáp trong suoát thôøi gian thi haønh leänh. Nhöõng maõ nhò phaân cuûa chöông trình ñöôïc ñoïc töø EPROM ñi qua bus döõ lieäu vaø ñöôïc choát vaøo thanh ghi leänh cuûa 8051 bôûi maõ leänh. Chaân 30 (ALE : Adress Latch Enable) laø tín hieäu ñieàu khieån xuaát ra cuûa 8051, noù cho pheùp phaân keânh bus ñòa chæ vaø bus döõ lieäu cuûa Port 0. √ Chaân 31 (EA : Eternal Acess) ñöôïc ñöa xuoáng thaáp cho pheùp choïn boä nhôù maõ ngoaøiñoái vôùi 8031. Ñoái vôùi 8051 thì :
  • 5. • EA = 5V : Choïn ROM noäi. • EA = 0V : Choïn ROM ngoaïi. • EA = 21V : Laäp trình EPROM noäi. √ Caùc chaân töø 32÷39 laø Port 0 (P0.0, P0.1, . . . , P0.7) duøng caû hai muïc ñích : Vöøa laøm byte thaáp cho bus ñòa chæ, vöøa laøm bus döõ lieäu, neáu vaäy Port 0 khoâng coøn chöùc naêng xuaát nhaäp I/O nöõa. √ Chaân 40 (Vcc) ñöôïc noái leân nguoàn 5V. 3. TOÅ CHÖÙC BOÄ NHÔÙ Baûn ñoà boä nhôù data treân Chip nhö sau : 7F FF F0 F7 F6 F5 F4 F3 F2 F1 F0 B RAM ña duïng E0 E7 E6 E5 E4 E3 E2 E1 E0 ACC D0 D7 D6 D5 D4 D3 D2 D1 D0 PSW 30 B8 - - - BC BB BA B9 B8 IP 2F 7F 7E 7D 7C 7B 7A 79 78 2E 77 76 75 74 73 72 71 70 B0 B7 B6 B5 B4 B3 B2 B1 B0 P.3 2D 6F 6E 6D 6C 6B 6A 69 68 2C 67 66 65 64 63 62 61 60 A8 AF AC AB AA A9 A8 IE 2B 5F 5E 5D 5C 5B 5A 59 58 2A 57 56 55 54 53 52 51 50 A0 A7 A6 A5 A4 A3 A2 A1 A0 P2 29 4F 4E 4D 4C 4B 4A 49 48 28 47 46 45 44 43 42 41 40 99 khoâng ñöôïc ñòa chæ hoaù bit SBUF 27 3F 3E 3D 3C 3B 3A 39 38 98 9F 9E 9D 9C 9B 9A 99 98 SCON 26 37 36 35 34 33 32 31 30 25 2F 2E 2D 2C 2B 2A 29 28 90 97 96 95 94 93 92 91 90 P1 24 27 26 25 24 23 22 21 20 23 1F 1E 1D 1C 1B 1A 19 18 8D khoâng ñöôïc ñòa chæ hoaù bit TH1 22 17 16 15 14 13 12 11 10 8C khoâng ñöôïc ñòa chæ hoaù bit TH0 21 0F 0E 0D 0C 0B 0A 09 08 8B khoâng ñöôïc ñòa chæ hoaù bit TL1 20 07 06 05 04 03 02 01 00 8A khoâng ñöôïc ñòa chæ hoaù bit TL0 1F Bank 3 89 khoâng ñöôïc ñòa chæ hoaù bit TMOD 18 88 8F 8E 8D 8C 8B 8A 89 88 TCON 17 Bank 2 87 khoâng ñöôïc ñòa chæ hoaù bit PCON 10 0F Bank 1 83 khoâng ñöôïc ñòa chæ hoaù bit DPH 08 82 khoâng ñöôïc ñòa chæ hoaù bit DPL 07 Bank thanh ghi 0 81 khoâng ñöôïc ñòa chæ hoaù bit SP 00 (maëc ñònh cho R0 -R7) 88 87 86 85 84 83 82 81 80 P0 RAM CAÙC THANH GHI CHÖÙC NAÊNG ÑAËC BIEÄT Toùm taét boä nhôù döõ lieäu treân chip. Ñòa chæ byte Ñòa chæ bit Ñòa chæ bit Ñòa chæ byte
  • 6. 3.1 RAM muïc ñích chung Trong baûn ñoà boä nhôù treân, 80 byte töø ñòa chæ 30H÷7FH laø RAM muïc ñích chung. Keå caû 32byte phaàn döôùi töø 00H÷2FH cuõng coù theå söû duïng gioáng nhö 80 byte ôû treân, tuy nhieân 32 byte coøn coù muïc ñích khaùc seõ ñeà caäp sau. Baát kyø vò trí naøo trong RAM muïc ñích chung cuõng coù theå ñöôïc truy xuaát tuøy yù gioáng nhö vieäc söû duïng caùc mode ñeå ñònh ñòa chæ tröïc tieáp hay giaùn tieáp. Ví duï ñeå ñoïc noäi dung cuûa RAM noäi coù ñòa chæ 5FH vaøo thanh ghi tích luõy thì ta duøng leänh : MOV A, 5FH. RAM noäi cuõng ñöôïc truy xuaát bôûi vieäc duøng ñòa chæ giaùn tieáp qua R0 vaø R1. Hai leänh sau ñaây seõ töông ñöông leänh treân : MOV R0, #5FH MOV A, @R0 Leänh thöù nhaát duøng söï ñònh vò töùc thôøi ñeå ñöa giaù trò 5FH vaøo thanh ghi R0, leänh thöù hai duøng söï ñònh vò giaùn tieáp ñeå ñöa döõ lieäu “ñaõ ñöôïc troû ñeán bôûi R0” vaøo thanh ghi tích luõy A. 3.2 RAM ñònh vò 8051 chöùa 210 vò trí coù theå ñònh vò bit, trong ñoù coù 128 bit naèm ôû caùc ñòa chæ töø 20H÷2FH vaø phaàn coøn laïi laø caùc thanh ghi chöùc naêng ñaëc bieät. 3.3 Caùc baêng thanh ghi (Register Banks) 32 vò trí nhôù cuoái cuøng cuûa boä nhôù töø ñòa chæ byte 00H÷1FH chöùc caùc daõy thanh ghi. Taäp hôïp caùc leänh cuûa 8051 cung caáp 8 thanh ghi töø R0÷R7 ôû ñòa chæ 00H÷07H neáu maùy tính maëc nhieân choïn ñeå thöïc thi. Nhöõng leänh töông ñöông duøng söï ñònh vò tröïc tieáp. Nhöõng giaù trò döõ lieäu ñöôïc duøng thöôøng xuyeân chaéc chaén seõ söû duïng moät trong caùc thanh ghi naøy. 3.4 Caùc thanh ghi chöùc naêng ñaëc bieät (Special Function Register) Coù 21 thanh ghichöùc naêng ñaëc bieät SFR ôû ñænh cuûa RAM noäi töø ñòa chæ caùc thanh ghi chöùc naêng ñaëc bieät ñöôïc ñònh roõ, coøn phaàn coøn laïi khoâng ñònh roõ. Maëc duø thanh ghi A coù theå truy xuaát tröïc tieáp, nhöng haàu heát caùc thanh ghi chöùc naêng ñaëc bieät ñöôïc truy xuaát baèng caùch söû duïng söï ñònh vò ñòa chæ tröïc tieáp. Chuù yù raèng vaøi thanh ghi SFR coù caû bit ñònh vò vaø byte ñònh vò. Ngöôøi thieát keá seõ caãn thaän khi truy xuaát bit maø khoâng truy xuaát byte. 3.4.1 Töø 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 :
  • 7. 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 a) Côø Carry CY (Carry Flag) : Côø Carry ñöôïc set leân 1 neáu coù söï traøn ôû bit 7 trong pheùp coäng hoaëc coù söï möôïn vaøo bit 7 trong pheùp tröø. Côø Carry cuõng laø 1 “thanh ghi tích luõy luaän lyù”, noù ñöôïc duøng nhö moät thanh ghi 1 bit thöïc thi treân caùc bit bôûi nhöõng leänh luaän lyù. Ví duï leänh : ANL C, 25H seõ AND bit 25H vôùi côø Carryvaø caát keát quaû vaøo côø Carry. b) Côø Carry phuï AC (Auxiliary Carry Flag) : Khi coäng nhöõng giaù trò BCD (Binary Code Decimal), côø nhôù phuï AC ñöôïcset neáu coù söï traøn töø bit 3 sang 4 hoaëc 4 bit thaáp naèm trong phaïm vi0AH÷0FH. c) Côø 0 (Flag 0) : Côø 0 (F0) laø bit côø coù muïc ñích toång hôïp cho pheùp ngöôøi öùng duïng duøng noù. d). Nhöõng bit choïn daõy thanh ghi RS1 vaø RS0 : 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. e. Côø traøn OV (Over Flag) :
  • 8. 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. Bit OV ñöôïc boû qua ñoái vôùi söï coäng tröø khoâng daáu. Khi coäng tröø coù daáu, keát quaû lôùn hôn + 127 hay nhoû hôn -128 seõ set bit OV. f. 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. 3.4.2 Thanh ghi B : Thanh ghi B ôû ñòa chæ F0H ñöôïc duøng ñi ñoâi vôùi thanh ghi A cho caùc hoaït ñoäng nhaân chia. 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. 3.4.3 Con troû Stack SP (Stack Pointer) : Stack Pointer laø moät thanh ghi 8 bit ôû ñòa chæ 81H. Noù chöùa ñòa chæ cuûa döõ lieäu ñang hieän haønh treân ñænh Stack. Caùc hoaït ñoäng cuûa Stack bao goàm vieäc ñaåy döõ lieäu vaøo Stack (PUSH) vaø laáy döõ lieäu ra khoûi Stack (POP). √ Vieäc PUSH vaøo Stack seõ taêng SP leân 1 tröôùc khi döõ lieäu vaøo. √ Vieäc POP töø Stack ra seõ laáy döõ lieäu ra tröôùc roài giaûm SP ñi 1. 3.4.4 Con troû döõ lieäu DPTR (Data Pointer) : Data Pointer ñöôïc ñeå truy xuaát boä nhôù maø ngoaøi hoaëc boä nhôù döõ lieäu ngoaøi, noù laø moät thanh ghi 16 bit maø byte thaáp laø DPL ôû ñòa chæ 82H coøn byte cao laø DPH ôû ñòa chæ 83H. Ñeå ñöa noäi dung 55H vaøo RAM ngoaïi coù ñòa chæ 1000H ta duøng 3 leänh sau : MOV A, #55H MOV DPTR, #1000H MOVX @ DPTR, A Leänh thöù nhaát duøng söï ñònh vò tröïc tieáp ñöa haèng soá döõ lieäu 55H vaøo A. Leänh thöù hai cuõng töông töï leänh thöù nhaát ñöa haèng soá döõ lieäu 1000H vaøo
  • 9. trong DPTR . leänh cuoái cuøng duøng söï ñònh vò giaùn tieáp ñeå dòch chuyeån giaù trò 55H trong A vaøo vuøng nhôù RAM ngoaïi 1000H naèm trong DPTR. 3.4.5 Caùc thanh ghi Port (Port Register) : Caùc Port 0, Port 1, Port 2, Port 3 coù ñòa chæ töông öùng 80H, 90H, A0H, B0H. Caùc Port 0, Port 1, Port 2, Port 3 khoâng coøn taùc duïng xuaát nhaäp nöõa neáu boä nhôù ngoaøi ñöôïc duøng hoaëc moät vaøi caù tính ñaëc bieät cuûa 8051 ñöôïc duøng (nhö Interrupt, Port noái tieáp . . .). Do vaäy chæ coøn coù Port1 coù taùc duïng xuaát nhaäp I/O. Taát caû caùc Port ñeàu coù bit ñòa chæ, do ñoù noù coù khaû naêng giao tieáp vôùi beân ngoaøi maïnh meõ. 3.4.6 Caùc thanh ghi Timer (Timer Register) : 8051 coù 2 boä : Moät boä Timer 16 bit vaø moät boä Counter 16 bit, hai boä naøy duøng ñeå ñònh giôø luùc nghæ cuûa chöông trình hoaëc ñeám caùc söï kieän quan troïng. Timer 0 coù bit thaáp TL0 ôû ñòa chæ 8AH vaø coù bit cao TH0 ôû ñòa chæ 8CH. Timer 1 coù bit thaáp ôû ñòa chæ 8BH vaø bit cao TH1 ôû ñòa chæ 8DH. Hoaït ñoäng ñònh thôøi ñöôïc cho pheùp bôûi thanh ghi mode ñònh thôøi TMOD (Timer Mode Register). ÔÛ ñòa chæ 89H vaø thanh ghi ñieàu khieån ñònh thôøi TCON (Timer Control Register) ôû ñòa chæ 88H. Chæ coù TCON coù bit ñònh vò. 3.4.7 Caùc thanh ghi Port noái tieáp (Serial Port Register) : 8051 chöùa moät Port noái tieáp treân Chip cho vieäc truyeàn thoâng tin vôùi nhöõng thieát bò noái tieáp nhö laø nhöõng thieát bò ñaàu cuoái, modem, hoaëc ñeå giao tieáp IC khaùc vôùi nhöõng boä bieán ñoåi A/D, nhöõng thanh ghi di chuyeån, RAM . . .). Thanh ghi ñeäm döõ lieäu noái tieáp SBUF ôû ñòa chæ 99H giöõ caû döõ lieäu phaùt laãn döõ lieäu thu. Vieäc ghi leân SBUF ñeå LOAD döõ lieäu cho vieäc truyeàn vaø ñoïc SBUF ñeå truy xuaát döõ lieäu cho vieäc nhaän nhöõng mode hoaït ñoäng khaùc nhau ñöôïc laäp trình thoâng qua thanh ghi ñieàu khieån Port noái tieáp SCON. 3.4.8 Caùc thanh ghi ngaét (Interrupt Register) : 8051 coù hai caáu truùc ngaét öu tieân, 5 boä nguoàn. Nhöõng Interrupt bò maát taùc duïng sau khi heä thoáng reset (bò caám) vaø sau ñoù ñöôïc cho pheùp bôûi vieäc cho pheùp ghi leân thanh ghi cho pheùp ngaét IE (Interrup Enable Register) ôû ñòa chæ A8H. Möùc öu tieân ñöôïc ñaët vaøo thanh ghi öu tieân ngaét IP (Interrupt Priority Level) taïi ñòa chæ B8H. Caû 2 thanh ghi treân ñeàu coù bit ñòa chæ. 3.4.9 Thanh ghi ñieàu khieån nguoàn PCON (Power Control Register) :
  • 10. Thanh ghi PCON khoâng coù bit ñònh vò. Noù ôû ñòa chæ 87H bao goàm caùc bit ñòa chæ toång hôïp. Caùc bit 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 1 cuûa côø ña naêng. √ Bit 2 (GF0) : Bit 2 cuûa côø ña naêng. √ 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. II. TOÙM TAÉT TAÄP LEÄNH CUÛA 8051 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 thì khaû quan. Taäp leänh hoï MSC-51 ñöôïc söï kieåm tra cuûa caùc mode ñònh vò vaø caùc leänh cuûa chuùng coù caùc Opcode 8 bit. Ñieàu naøy cung caáp khaû naêng 28 =256 leänh ñöôïc thi haønh vaø moät leänh khoâng ñöôïc ñònh nghóa. Vaøi leänh coù 1 hoaëc 2 byte bôûi döõ lieäu hoaëc ñòa chæ theâm vaøo Opcode. Trong toaøn boä caùc leänh coù 139 leänh 1 byte, 92 leänh 2 byte vaø 24 leänh 3 byte. 1. CAÙC CHEÁ ÑOÄ ÑÒNH VÒ (ADDRESSING MODE) Caùc mode ñònh vò laø moät boä phaän thoáng nhaát cuûa taäp leänh moãi maùy tính. Chuùng cho pheùp ñònh roõ nguoàn hoaëc nôi gôûi tôùi cuûa döõ lieäu ôû caùc ñöôøng khaùc nhau tuøy thuoäc vaøo traïng thaùi cuûa laäp trình. 8051 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.
  • 11. √ Ñònh vò. 1.1 Söï ñònh vò thanh ghi (Register Addressing) Coù 4 daõy thanh ghi 32 byte ñaàu tieân cuûa RAM döõ lieäu treân Chip ñòa chæ 00H ÷ 1FH, nhöng taïi moät thôøi ñieåm chæ coù moät daõy hoaït ñoäng caùc bit PSW3, PSW4 cuûa töø traïng thaùi chöông trình seõ quyeát ñònh daõy naøo hoaït ñoäng. Caùc leänh ñeå ñònh vò thanh ghi ñöôïc ghi maät maõ baèng caùch duøng bit troïng soá thaáp nhaát cuûa Opcode leänh ñeå chæ moät thanh ghi trong vuøng ñòa chæ theo logic naøy. Nhö vaäy 1 maõ chöùc naêng vaø ñòa chæ hoaït ñoäng coù theå ñöôïc keát hôïp ñeå taïo thaønh moät leänh ngaén 1 byte nhö sau : Register Addressing. 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 : 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. 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. n n Opcode i n Opcode Opcode Direct Addressing
  • 12. Ví duï ñeå ñöa noäi dung 60 H vaøo RAM noäi taïi ñòa chæ 50H ta laøm nhö sau: MOV R1,#50H MOV @R1,60H 1.4. Söï ñònh vò ñò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 : Ví duï : MOV A, # 12 ⇐ Ñöa tröïc tieáp soá thaäp phaân 12 vaøo A. MOV A, # 10 ⇐ Ñöa tröïc tieáp soá Hex 10H (16D) vaøo A. MOV A, # 00010001B ⇐ Ñöa tröïc tieápsoá nhò phaân naøy vaøo A. 1.5 Söï ñònh vò ñò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 : 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) Opcode Relative Offset Opcode Immediate Data
  • 13. Söï ñònh ñòa chæ tuyeät ñoái ñöôïc duøng vôùi caùc leänh ACALL vaø AJMP. Caùc leänh 2 byte cho pheùp phaân chia trong trang 2K ñang löu haønh cuûa boä nhôù maõ cuûa vieäc cung caáp 11 bit thaáp ñeå xaùc ñònh ñòa chæ trong trang 2K (A0÷A10 goàm A10÷A8 trong Opcode vaø A7÷A0 trong ø byte)vaø 5 bit cao ñeå choïn trang 2K (5 bit cao ñang löu haønh trong boä ñeám chöông trình laø 5 bit Opcode). Söï ñònh vò tuyeät ñoái ñem laïi thuaän lôïi cho caùc leänh ngaén (2 byte), nhöng baát lôïi trong vieäc giôùi haïn phaïm vi nôi gôûi ñeán vaø cung caáp maõ coù vò trí ñoäc laäp. 1.7 Söï ñònh vò ñòa chæ daøi (Long Addressing) Söï ñònh vò daøi ñöôïc duøng vôùi leänh LCALL vaø LJMP. Caùc leänh 3 byte naøy bao goàm moät ñòa chæ nôi gôûi tôùi 16 bit ñaày ñuû laø 2 byte vaø 3 byte cuûa leänh. Öu ñieåm cuûa söï ñònh daøi laø vuøng nhôù maõ 64K coù theå ñöôïc duøng heát, nhöôïc ñieåm laø caùc leänh ñoù daøi 3 byte vaø vò trí leä thuoäc. Söï phuï thuoäc vaøo vò trí seõ baát lôïi bôûi chöông trình khoâng theå thöïc thi taïi ñòa chæ khaùc. 1.8 Söï ñònh ñòa chæ phuï luïc (Index Addressing) Söï ñònh ñòa chæ phuï luïc duøng moät thanh ghi cô baûn (cuõng nhö boä ñeám chöông trình hoaëc boä ñeám döõ lieäu) vaø Offset (thanh ghiA) trong söï hình thaønh 1 ñòa chæ lieân quan bôûi leänh JMP hoaëc MOVC. Base Register Offset Effective Address Opcode Opcode Addr 7 ÷ Addr 0 Addr 15 ÷ Addr 8 Addr 10 ÷ Addr 8 Addr 7 ÷ Addr 0 PC (or PDTR) ACC
  • 14. Index Addressing. 2. CAÙC KIEÅU LEÄNH (INSTRUCTION TYPES) 8051 chia ra 5nhoùm leänh chính : √ Caùc leänh soá hoïc. √ Leänh logic. √ Dòch chuyeån döõ lieäu. √ Lyù luaän. √ Reõ nhaùnh chöông trình. Töøng kieåu leänh ñöôïc moâ taû nhö sau : 2.1 Caùc leänh soá hoïc (Arithmetic Instrustion) : ADD A, <src, byte> ADD A, Rn : (A) ← (A) + (Rn) ADD A, direct : (A) ← (A) + (direct) ADD A, @ Ri : (A) ← (A) + ((Ri)) ADD A, # data : (A) ← (A) + # data ADDC A, Rn : (A) ← (A) + (C) + (Rn) ADDC A, direct : (A) ← (A) + (C) + (direct) ADDC A, @ Ri : (A) ← (A) + (C) + ((Ri)) ADDC A, # data : (A) ← (A) + (C) + # data SUBB A, <src, byte> SUBB A, Rn : (A) ← (A) - (C) - (Rn) SUBB A, direct : (A) ← (A) - (C) - (direct) SUBB A, @ Ri : (A) ← (A) - (C) - ((Ri)) SUBB A, # data : (A) ← (A) - (C) - # data INC <byte> INC A : (A) ← (A) + 1 INC direct : (direct) ← (direct) + 1 INC Ri : ((Ri)) ← ((Ri)) + 1 INC Rn : (Rn) ← (Rn) + 1
  • 15. INC DPTR : (DPTR) ← (DPTR) + 1 DEC <byte> DEC A : (A) ← (A) - 1 DEC direct : (direct) ← (direct) - 1 DEC @Ri : ((Ri)) ← ((Ri)) - 1 DEC Rn : (Rn) ← (Rn) - 1 MULL AB : (A) ← LOW [(A) x (B)] ; coù aûnh höôûng côø OV : (B) ← HIGH [(A) x (B)] ; côø Cary ñöôïc xoùa. DIV AB : (A) ← Integer Result of [(A)/(B)]; côø OV : (B) ← Remainder of [(A)/(B)]; côø Carry xoùa DA A : Ñieàu chænh thanh ghi A thaønh soá BCD ñuùng trong pheùp coäng BCD (thöôøng DA A ñi keøm vôùi ADD, ADDC) √ Neáu [(A3-A0)>9] vaø [(AC)=1] ⇐ (A3÷A0) ← (A3÷A0) + 6. √ Neáu [(A7-A4)>9] vaø [(C)=1] ⇐ (A7÷A4) ← (A7÷A4) + 6. 2.2 Caùc hoaït ñoäng logic (Logic Operation) : Taát caû caùc leänh logic söû duïng thanh ghi A nhö laø moät trong nhöõng toaùn haïng thöïc thi moät chu kyø maùy, ngoaøi A ra maát 2 chu kyø maùy. Nhöõng hoaït ñoäng logic coù theå ñöôïc thöïc hieän treân baát kyø byte naøo trong vò trí nhôù döõ lieäu noäi maø khoâng qua thanh ghi A. Caùc hoaït ñoäng logic ñöôïc toùm taét nhö sau : ANL <dest - byte> <src - byte> ANL A, Rn : (A) ← (A) AND (Rn). ANL A, direct : (A) ← (A) AND (direct). ANL A,@ Ri : (A) ← (A) AND ((Ri)). ANL A, # data : (A) ← (A) AND (# data). ANL direct, A : (direct) ← (direct) AND (A). ANL direct, # data : (direct) ← (direct) AND # data.
  • 16. ORL <dest - byte> <src - byte> ORL A, Rn : (A) ← (A) OR (Rn). ORL A, direct : (A) ← (A) OR (direct). ORL A,@ Ri : (A) ← (A) OR ((Ri)). ORL A, # data : (A) ← (A) OR # data. ORL direct, A : (direct) ← (direct) OR (A). ORL direct, # data : (direct) ← (direct) OR # data. XRL <dest - byte> <src - byte> XRL A, Rn : (A) ← (A) ) (Rn). XRL A, direct : (A) ← (A) ) (direct). XRL A,@ Ri : (A) ← (A) ) ((Ri)). XRL A, # data : (A) ← (A) ) # data. XRL direct, A : (direct) ← (direct) ) (A). XRL direct, # data : (direct) ← (direct) ) # data. y = a) b = ab + ab CLR A : (A) ← 0 CLR C : (C) ← 0 CLR Bit : (Bit) ← 0 RL A : Quay voøng thanh ghi A qua traùi 1 bit (An + 1) ← (An); n = 0÷6 (A0) ← (A7) RLC A : Quay voøng thanh ghi A qua traùi 1 bit coù côø Carry (An + 1) ← (An); n = 0÷6 (C) ← (A7) (A0) ← (C) RR A : Quay voøng thanh ghi A qua phaûi 1 bit (An + 1) → (An); n = 0÷6 (A0) → (A7)
  • 17. RRC A : Quay voøng thanh ghi A qua phaûi 1 bit coù côø Carry (An + 1) → (An); n = 0÷6 (C) → (A7) (A0) → (C) SWAP A : Ñoåi choå 4 bit thaáp vaø 4 bit cao cuûa A cho nhau (A3÷A0)√(A7÷A4). 2.3 Caùc leänh reõ nhaùnh : Coù nhieàu leänh ñeå ñieàu khieån leân chöông trình bao goàm vieäc goïi hoaëc traû laïi töø chöông trình con hoaëc chia nhaùnh coù ñieàu kieän hay khoâng coù ñieàu kieän. Taát caû caùc leänh reõ nhaùnh ñeàu khoâng aûnh höôûng ñeán côø. Ta coù theå ñònh nhaûn caàn nhaûy tôùi maø khoâng caàn roû ñòa chæ, trình bieân dòch seõ ñaët ñòa chæ nôi caàn nhaûy tôùi vaøo ñuùng khaåu leänh ñaõ ñöa ra. Sau ñaây laø söï toùm taét töøng hoaït ñoäng cuûa leänh nhaûy. JC rel : Nhaûy ñeán “rel” neáu côø Carry C = 1. JNC rel : Nhaûy ñeán “rel” neáu côø Carry C = 0. JB bit, rel : Nhaûy ñeán “rel” neáu (bit) = 1. JNB bit, rel : Nhaûy ñeán “rel” neáu (bit) = 0. JBC bit, rel : Nhaûy ñeán “rel” neáu bit = 1 vaø xoùa bit. ACALL addr11 : Leänh goïi tuyeät ñoái trong page 2K. (PC) ← (PC) + 2 (SP) ← (SP) + 1 ((SP)) ← (PC7÷PC0) (SP) ← (SP) + 1 ((SP)) ← (PC15÷PC8) (PC10÷PC0) ← page Address. LCALL addr16 : Leänh goïi daøi chöông trình con trong 64K. (PC) ← (PC) + 3 (SP) ← (SP) + 1 ((SP)) ← (PC7÷PC0) (SP) ← (SP) + 1
  • 18. ((SP)) ← (PC15÷PC8) (PC) ← Addr15÷Addr0. RET : Keát thuùc chöông trình con trôû veà chöông trình chính. (PC15÷PC8) ← (SP) (SP) ← (SP) - 1 (PC7÷PC0) ← ((SP)) (SP) ← (SP) -1. RETI : Keát thuùc thuû tuïc phuïc vuï ngaét quay veà chöông trình chính hoaït ñoäng töông töï nhö RET. AJMP Addr11 : Nhaûy tuyeät ñoái khoâng ñieàu kieän trong 2K. (PC) ← (PC) + 2 (PC10÷PC0) ← page Address. LJMP Addr16 : Nhaûy daøi khoâng ñieàu kieän trong 64K Hoaït ñoäng töông töï leänh LCALL. SJMP rel : Nhaûy ngaén khoâng ñieàu kieän trong (-128÷127) byte (PC) ← (PC) + 2 (PC) ← (PC) + byte 2 JMP @ A + DPTR:Nhaûy khoâng ñieàu kieän ñeán ñòa chæ (A) + (DPTR) (PC) ← (A) + (DPTR) JZ rel : Nhaûy ñeán A = 0. Thöïc haønh leänh keá neáu A ≠ 0. (PC) ← (PC) + 2 (A) = 0 ⇐ (PC) ← (PC) + byte 2 JNZ rel : Nhaûy ñeán A ≠ 0. Thöïc haønh leänh keá neáu A = 0. (PC) ← (PC) + 2 (A) < > 0 ⇐ (PC) ← (PC) + byte 2 CJNE A, direct, rel : So saùnh vaø nhaûy ñeán A ≠ direct (PC) ← (PC) + 3 (A) < > (direct) ⇐ (PC) ← (PC) + Relative Address. (A) < (direct) ⇐ C = 1 (A) > (direct) ⇐ C = 0 (A) = (direct). Thöïc haønh leänh keá tieáp
  • 19. CJNE A, # data, rel : Töông töï leänh CJNE A, direct, rel. CJNE Rn, # data, rel : Töông töï leänh CJNE A, direct, rel. CJNE @ Ri, # data, rel : Töông töï leänh CJNE A, direct, rel. DJNE Rn, rel : Giaûm Rn vaø nhaûy neáu Rn ≠ 0. (PC) ← (PC) + 2 (Rn) ← (Rn) -1 (Rn) < > 0 ⇐ (PC) ← (PC) + byte 2. DJNZ direct, rel : Töông töï leänh DJNZ Rn, rel. 2.4 Caùc leänh dòch chuyeån döõ lieäu : Caùc leänh dòch chuyeån döõ lieäu trong nhöõng vuøng nhôù noäi thöïc thi 1 hoaëc 2 chu kyø maùy. Maãu leänh MOV <destination>, <source> cho pheùp di chuyeån döõ lieäu baát kyø 2 vuøng nhôù naøo cuûa RAM noäi hoaëc caùc vuøng nhôù cuûa caùc thanh ghi chöùc naêng ñaëc bieät maø khoâng thoâng qua thanh ghi A. Vuøng Stack cuûa 8051 chæ chöùa 128 byte RAM noäi, neáu con troû Stack SP ñöôïc taêng quaù ñòa chæ 7FH thì caùc byte ñöôïc PUSH vaøo seõ maát ñi vaø caùc byte POP ra thì khoâng bieát roõ. Caùc leänh dòch chuyeãn boä nhôù noäi vaø boä nhôù ngoaïi duøng söï ñònh vò giaùn tieáp. Ñòa chæ giaùn tieáp coù theå duøng ñòa chæ 1 byte (@ Ri) hoaëc ñòa chæ 2 byte (@ DPTR). Taát caû caùc leänh dòch chuyeån hoaït ñoäng treân toaøn boä nhôù ngoaøi thöïc thi trong 2 chu kyø maùyvaø duøng thanh ghi A laøm toaùn haïng DESTINATION. Vieäc ñoïc vaø ghi RAM ngoaøi (RD vaø WR) chæ tích cöïc trong suoát quaù trình thöïc thi cuûa leänh MOVX, coøn bình thöôøng RD vaø WR khoâng tích cöïc (möùc 1). Taát caû caùc leänh dòch chuyeån ñeåu khoâng aûnh höôûng ñeán côø. Hoaït ñoäng cuûa töøng leänh ñöôïc toùm taéy nhö sau : MOV A,Rn : (A) ← (Rn) MOV A, direct : (A) ← (direct) MOV A, @ Ri : (A) ← ((Ri)) MOV A, # data : (A) ← # data MOV Rn, A : (Rn) ← (A) MOV Rn, direct : (Rn) ← (direct) MOV Rn, # data : (Rn) ← # data
  • 20. MOV direct, A : (direct) ← (A) MOV direct, Rn : (direct) ← (Rn) MOV direct, direct : (direct) ← (direct) MOV direct, @ Ri : (direct) ← ((Ri)) MOV direct, # data : (direct) ← data MOV @ Ri, A : ((Ri)) ← (A) MOV @ Ri, direct : ((Ri)) ← (direct) MOV @ Ri, # data : ((Ri)) ← # data MOV DPTR, # data16 : (DPTR) ← # data16 MOV A, @ A + DPTR : (A) ← (A) + (DPTR) MOV @ A + PC : (PC) ← (PC) + 1 (A) ← (A) + (PC) MOVX A, @ Ri : (A) ← ((Ri)) MOVX A, @ DPTR : (A) ← ((DPTR)) MOVX @ Ri, A : ((Ri)) ← (A) MOVX @ DPTR, A : ((DPTR)) ← (A) PUSH direct : Caát döõ lieäu vaøo Stack (SP) ← (SP) + 1 (SP) ← (Drirect) POP direct : Laáy töø Stack ra direct (direct) ← ((SP)) (SP) ← (SP) - 1 XCH A, Rn : Ñoåi choå noäi dung cuûa A vôùi Rn (A) √ (Rn) XCH A, direct : (A) √ (direct) XCH A, @ Ri : (A) √ ((Ri)) XCHD A, @ Ri : Ñoåi choå 4 bit thaáp cuûa (A) vôùi ((Ri)) (A3÷A0) √ ((Ri3÷Ri0)) 2.5 Caùc leänh luaän lyù (Boolean Instruction) :
  • 21. 8051 chöùa moät boä xöû lyù luaän lyù ñaày ñuû cho caùc hoaït ñoäng bit ñôn, ñaây laø moät ñieåm maïnh cuûa hoï vi ñieàu khieån MSC-51 maø caùc hoï vi xöû lyù khaùc khoâng coù. RAM noäi chöùa 128 bit ñôn vò vaø caùc vuøng nhôù caùc thanh ghi chöùc naêng ñaëc bieät caáp leân ñeán 128 ñôn vò khaùc. Taát caû caùc ñöôøng Port laø bit ñònh vò, moãi ñöôøng coù theå ñöôïc xöû lyù nhö Port ñôn vò rieâng bieät. Caùch truy xuaát caùc bit naøy khoâng chæ caùc leänh reõ nhaùnh khoâng, maø laø moät danh muïc ñaày ñuû caùc leänh MOVE, SET, CLEAR, COMPLEMENT, OR, AND. Toaøn boä sö truy xuaát cuûa bit duøng sö ï ñònh vò tröïc tieáp vôùi nhöõng ñòa chæ töø 00H÷7FH trong 128 vuøng nhôù thaáp vaø 80H÷FFH ôû caùc vuøng thanh ghi chöùc naêng ñaëc bieät. Bit Carry C trong thanh ghi PSW cuûa töø traïng thaùi chöông trình vaø ñöôïc duøng nhö moät söï tích luõy ñôn cuûa boä xöû lyù luaän lyù. Bit Carry cuõng laø bit ñònh vò vaø coù ñòa chæ tröïc tieáp vì noù naèm trong PSW. Hai leänhCLR C vaø CLR CY ñeàu coù cuøng taùc duïng laø xoùa bit côø Carry nhöng leänh naøy maát 1 byte coøn leänh sau maát 2 byte. Hoaït ñoäng cuûa caùc leänh luaän lyù ñöôïc toùm taét nhö sau : CLR C : Xoùa côø Carry xuoáng 0. Coù aûnh höôûng côø Carry. CLR BIT : Xoùa bit xuoáng 0. Khoâng aûnh höôûng côø Carry SET C : Set côø Carry leân 1. Coù aûnh höôûng côø Carry. SET BIT : Set bit leân 1. Khoâng aûnh höôûng côø Carry. CPL C : Ñaûo bit côø Carry. Coù aûnh höôûng côø Carry. CPL BIT : Ñaûo bit. Khoâng aûnh höôûng côø Carry. ANL C, BIT : (C) ← (C) AND (BIT) : Coù aûnh höôûng côø Carry. ANL C, /BIT : (C) ← (C) AND NOT (BIT):Khoâng aûnh höôûng côø Carry. ORL C, BIT : (C) ← (C) OR (BIT) : Taùc ñoäng côø Carry. ORL C, /BIT : (C) ← (C) OR NOT (BIT) : Taùc ñoäng côø Carry. MOV C, BIT : (C) ← (BIT) : Côø Carry bò taùc ñoäng. MOV BIT, C : (BIT) ← (C) : Khoâng aûnh höôûng côø Carry. III. HOAÏT ÑOÄNG CUÛA PORT NOÁI TIEÁP 8051. 1. GIÔÙI THIEÄU
  • 22. Port noái tieáp cuûa 8051 coù theå hoaït ñoäng trong caùc mode rieâng bieät treân phaïm vi cho pheùp cuûa taàn soá. Chöùc naêng chuû yeáu cuûa Port noái tieáp laø thöïc hieän söï chuyeãn ñoåi song song thaønh noái tieáp cho döõ lieäu ra vaø söï chuyeãn ñoåi noái tieáp thaønh song song cho döõ lieäu vaøo. Phaàn cöùng truy xuaát tôùi Port noái tieáp qua caùc chaân TXD (P3.1) vaø RXD (P3.0). Port noái tieáp tham döï hoaït ñoäng ñaày ñuû (söï phaùt vaø thu cuøng luùc), vaø thu vaøo boä ñeäm maø noù cho pheùp1 kyù töï nhaän vaøo vaø ñöôïc caát ôû boä ñeäm trong khi kí töï thöù hai ñöôïc nhaän vaøo. Neáu CPU ñoïc kyù töï thöù nhaát tröôùc khi kí töï thöù hai ñöôïc nhaän vaøo hoaøn toaøn thì döõ lieäu khoâng bò maát. Hai thanh ghi chöùc naêng ñaëc bieät cung caáp cho phaàn meàm truy xuaát ñeán Port noái tieáp laø SBUF vaø SCON. Söï ñeäm Port noái tieáp (SBUF) ôû ñòa chæ 99H laø 2 söï ñeäm thaät söï : Ghi leân SBUF LOAD döõ lieäu phaùt vaø ñoïc SBUF truy xuaát döõ lieäu ñaõ nhaän. Ñaây laø hai thanh ghi rieâng bieät vaø roõ reät, maø thanh ghi phaùt chæ ghi coøn thanh ghi thu chæ ñoïc. Sô ñoà khoái cuûa Port noái tieáp nhö sau : TXD (P3.1) RXD (P3.0) CLK CLK Baute Rate Baute Rate Clock Clock (Transmit) (receive) Serial Port Block Dragram Thanh ghi ñieàu khieån Port noái tieáp SCON (98H) laø thanh ghi ñöôïc ñònh vò bit bao goàm caùc traïng thaùi vaø caùc bit ñieàu khieån. Caùc bit ñieåu khieån set mode cuûa Port noái tieáp, coøn caùc bit traïng thaùi cho bieát söï keát thuùc vieäc thu phaùt 1 kí töï. Caùc bit traïng thaùi coù theå ñöôïc kieåm tra trong phaàn meàm hoaëc coù theå laäp trình ñeå sinh ra söï ngaét. Taàn soá hoaït ñoäng cuûa Port noái tieáp hoaëc toác ñoä BAUD coù theå ñöôïc laáy töø dao ñoäng treân Chip 8051 hoaëc thay ñoåi. Neáu moät toác ñoä Baud thay ñoåi ñöôïc SBUF (Write - Only) Shift Register SBUF (Read - Only) 8051 Internal Bus
  • 23. duøng, thì Timer cung caáp 1 toác ñoä Baud ghi giôø vaø phaûi ñöôïc laäp trình moät caùch phuø hôïp. 2. THANH GHI ÑIEÀU KHIEÅN PORT NOÁI TIEÁP SCON (SERIAL PORT CONTROL REGISTER) Mode hoaït ñoäng cuûa Port noái tieáp 8051 ñöôïc set bôûivieäc ghi leân thanh ghi mode cuûa Port noái tieáp SCON ôû ñòa chæ 99H. Baûng toùm taét thanh ghi ñieàu khieån Port noái tieáp SCON nhö sau : Bit Kyù hieäu Ñòa chæ Moâ taû hoaït ñoäng SCON.7 SM0 9FH Bit 0 cuûa mode Port noái tieáp. SCON.6 SM1 9EH Bit 1 cuûa mode Port noái tieáp. SCON.5 SM2 9DH Bit 2 cuûa mode Port noái tieáp. Cho pheùp söï truyeàn cuûa boä xöû lyù ña keânh ôû mode 2 vaø 3; RI seõ khoâng tích cöïc neáu bit thöù 9 ñaõ thu vaøo laø 0. SCON.4 REN 9CH REN = 1 seõ cho thu kí töï. SCON.3 TB8 9BH Phaùt bit 8. Bit 9 phaùt trong mode 2 vaø 3, noù ñöôïc set hoaëc xoùa bôûi phaàn meàm. SCONø.2 RB8 9AH Thu bit 8, bit 9 thu. SCONø.1 TI 99H Côø ngaét phaùt. Ñöôïc set khi keát thuùc söï truyeàn kí töï vaø ñöôïc xoùa bôûi phaàn meàm. SCON.0 RI 98H Côø ngaét thu. Ñöôïc set khi keát thuùc söï thu vaø ñöôïc xoùa bôûi phaàn meàm. SCON Register sumary. 3. CAÙC MODE HOAÏT ÑOÄNG (MODE OF OPERATION) SM0 SM1 MODE MOÂ TAÛ TOÁC ÑOÄ BAUD 0 0 0 Thanh ghi dòch Coá ñònh (taàn soá dao ñoäng 1÷12). 0 1 1 URAT8 bit Thay ñoåi (ñöôïc ñaët bôûiTimer). 1 0 2 URAT 8 bit Coá ñònh (taàn soá dao ñoäng ÷12 o ÷16)
  • 24. 1 1 3 URAT 8 bit Thay ñoåi (ñöôïc ñaët bôûi Timer). Serial Port Modes. Tröôùc khi duøng Port noái tieáp, SCON phaûi ñöôïc gaùn ñuùng mode. Ví duï ñeå khôûi gaùn Port noái tieáp MODE 1 (SM0/SM1 = 0/1), cho pheùp thu (REN =1), vaø set côø ngaét cuûa vieäc phaùt saün saøng hoaït ñoäng (TI = 1), ta duøng leänh sau : MOV SCON, # 01010010H. Port noái tieáp cuûa 8051 coù 4 mode hoaït ñoäng tuøy thuoäc theo 4 traïng thaùi cuûa SM0/SM1. Ba trong 4 mode cho pheùp truyeàn söï ñoàng boä vôùi moãi kí töï thu hoaêc phaùt seõ ñöôïc boá trí bôûi bit Start hoaëc bit Stop. 4. SÖÏ KHÔÛI ÑOÄNG, TRUY XUAÁT CAÙC THANH GHI PORT NOÁI TIEÁP 4.1. Söï cho pheùp boä thu (Recive Enable) : Bit cho pheùp thu REN trong thanh ghi SCON phaûi ñöôïc set bôûi phaàn meàm ñeå cho pheùp söï thu caùc kyù töï. Ñieàu naøy thöôøng ñöôïc laøm ôû ñaàu chöông trình khi caùc Port noái tieáp vaø caùc Timer . . . ñöôïc khôûi ñoäng. Ta coù theå ñoäng baèng leänh : SETB REN hoaëc MOV CON, # XXX1XXXXB 4.2. Bit data thöù 9 (the9th data bit) : Bit data thöù 9 ñöôïc phaùt trong mode 2 vaø mode 3 phaûi ñöôïc LOAD vaøo TB8 bôûi phaàn meàm, coøn bit data thöù 9 ñöôïc thu thì ñaët trong RB8. Phaàn meàm coù theå (hoaëc khoâng) ñoøi hoûi moät bit data thöù 9 tham gia vaøo nhöõng chi tieát kyõ thuaät cuûa thieát bò noái tieáp vôùi ñieàu kieän maøsöï truyeàn data ñöôïc thaønh laäp. 4.3. Söï theâm vaøo bit kieåm tra chaún leû Parity : Caùch toång quaùt duøng chung bit data thöù 9 laø coäng bit Parity vaøo moät kyù töï . Bit P (Parity) trong töø traïng thaùi chöông trình PSW seõ ñöôïc set hoaëc xoùa vôùi moïi chu kyø maùy ñeå thaønh laäp bit Parity chaún vôùi 8 bit trong thanh ghi tích luõyA
  • 25. Ví duï neáu söï truyeàn yeâu caàu 8 bit data coäng theâm 1 bit Parity chaün, thì caùc leänh sau ñaây coù theå ñöôïc duøng ñeå phaùt 8 bit vaøo thanh ghi A vôùi Parity chaún ñöôïc coäng vaøo bit thöù 9. MOV C, P MOV TB8, C MOV SBUF, A Neáu Parity leû ñöôïc yeâu caàu thì caùc leänh treân ñöôïc söûa laïi laø: MOV C, P CPL C MOV TB8, C MOV SBUF, A Vieäc duøng bit Parity khoâng bò giôùi haïn trong mode 2 hoaëc mode 3. 8 bit data ñöôïc phaùt trong mode 1 coù theå bao goàm 7 bit data, vaø 1 bit Parity. Ñeå phaùt 1 maõ ASCII 7 bit vôùi 1 bit Parity chaún vaøo 8 bit, caùc leänh sau ñaây ñöôïc duøng : CLR ACC,7 : Xoùa bit MSB trong A ñaûm baûo Parity chaún. MOV C, P : Ñöa Parity chaún vaøo C MOV ACC.7, C : Ñöa Parity chaún vaøo bit SB cuûa A MOV SBUF, A : Gôûi bit data cuøng bit Parity chaún 4.4. Côø ngaét : Côø ngaét thu RI vaø phaùt TI trong thanh ghi SCON vaän haønh 1 rôle quan troïng trong söï truyeàn noái tieáp 8051. Caû hai bit ñeàu ñöôïc set bôûi phaàn cöùng nhöng phaûi xoùa bôûi phaàn meàm. Ñieån hình laø RI ñöôïc set ôû cuoái söï thu kyù töï vaø cho bieát : thanh ghi ñeäm thu ñaõ ñaày”. Ñieàu kieän naøy coù theå kieåm tra trong phaàn meàm hoaëc coù theå ñöôïc laäp trình ñeå sinh ra söï ngaét. Neáu phaàn meàm muoán nhaäp moät kyù töï töø moät thieát bò ñaõ ñöôïc keát noái ñeán Port noái tieáp, thì noù phaûi chôø ñeán khi RI ñöôïc set, sau khi xoùa RI vaø ñoïc kyù töï töø SBUF. Ñieàu naøy ñöôïc laäp trình nhö sau : WAIT : JNB RI, WAIT : Kieåm tra RI coù set chöa. CLR RI : Xoùa côø ngaét thu RI MOV A, SBUF : CPU ñoïc kyù töï TI ñöôïc set ôû cuoái söï phaùt kyù töï vaø cho bieát “thanh ghi ñeäm cuûa söï phaùt ñaõ roãng”. Neáu phaàn meàm muoán gôûi 1 kyù töï ñeán moät thieát bò ñaõ ñöôïc keát noái
  • 26. ñeán Port noái tieáp, tröôùc tieân noù phaûi kieåm tra xem Port noái tieáp ñaõ saün saøng chöa. Neáu kyù töï tröôùc ñaõ ñöôïc gôûi ñi, thì noù phaûi chôø cho ñeán khi söï phaùt ñi hoaøn thaønh. Caùc leänh sau ñaây duøng ñeå phaùt moät kyù töï trong thanh ghi A ra: WAIT : JNB TI, WAIT : Kieåm tra TI coù set chöa. CLR TI : Xoùa côø ngaét thu TI MOV A, SBUF : CPU ñoïc kyù töï 5. SÖÏ TRUYEÀN CUÛA BOÄ XÖÛ LYÙ ÑA KEÂNH Mode 2 vaø mode 3 coù moät söï cung caáp ñaëc bieät cho vieäc truyeàn ña keânh xöû lyù. ÔÛ caùc mode naøy, 9 bit data ñöôïc thu vaø bit thöù 9 ñi vaøo RB8. Port coù theå laäp trình nhö ñieàu maø bit Stop ñöôïc thu, söï ngaét cuûa Port chæ ñöôïc tích cöïc neáu RB8 =1. Ñaëc ñieåm naøy cho pheùp bôûi vieäc set bit MS2 trong thanh ghi SCON. ÖÙng duïng naøy laø moät söï caøi ñaët maïng ñöôïc duøng bôûi nhieàu 8051 ôû söï saép ñaët maùy chuû vaø maùy con nhö sau : Multiprocessor Communication Khi boä xöû lyù chuû muoán phaùt moät khoái döõ lieäu ñeán boä xöû lyù con rieâng leû, tröôùc tieân noù gôûi ra 1 byte ñòa chæ ñeå nhaän dieän boä xöû lyù con mong muoán. Byte ñòa chæ ñöôïc phaân bieät vôùi byte döõ lieäu bôûi bit thöù 9 : bit thöù 9 baèng 1 trong byte ñòa chæ vaø baèng 0 trong byte döõ lieäu. Tuy nhieân byte ñòa chæ seõ ngaét toaøn boä caùc boä xöû lyù con, do ñoù coù theå khaùm phaù byte ñaõ thu ñeå kieåm tra neáu noù ñang ñònh ñòa chæ. Boä xöõ lyù con ñaõ ñöôïc ñònh ñòa chæ seõ xoùa bit SM2 cuûa noù vaø chuaån bò thu caùc byte döõ lieäu theo sau ñoù. Nhöõng boä xöû lyù con khoâng ñöôïc ñònh ñòa chæ vaãn ñöôïc giöõ caùc bit SM2 cuûa noù vaø set trôû veà caùc baän cuûa chuùng ñoàng thôøi lôø ñi caùc byte döõ lieäu ñaõ thu thaäp. Chuùng seõ ñöôïc ngaét laïi khi byte ñòa chæ keá tieáp ñöôïc phaùt bôûi boä xöõ lyù cuõ. MASTER 8051 TXD P0 P1 P2 P3 8051 Slave # 1 RXD P0 P1 P2 P3 8051 Slave # 2 RXD 32 I/O lines 32 I/O lines
  • 27. Bit SM2 khoâng coù taùc duïng trong mode 0 vaø trong mode 1 noù coù theå ñöôïc duøng ñeå kieåm tra söï thích hôïp cuûa bit Stop. Trong söï thu mode 1, neáu SM2 = 0 thì söï ngaét thu seõ khoâng tích cöïc tröø khi bit Stop thích hôïp ñöôïc thu. 6. TOÁC ÑOÄ BAUD CUÛA PORT NOÁI TIEÁP : Toác ñoä Baud cuûa Port noái tieáp coá ñònh ôû mode 0 vaø mode 2. Trong mode 0 noù luoân luoân laø taàn soá dao ñoäng treân Chip chia cho 12. Thoâng thöôøng thaïch anh 12 MHz laùi dao ñoäng treân Chip 8051 neân toác ñoä Baud cuûa mode 0 laø 1MHz. On Chip Oscillator Baud Rate Clock MODE 0 Baèng söï maëc nhieân sau khi reset heä thoáng, toác ñoä Baud mode 2 laø taàn soá dao ñoäng chia cho 64, toác ñoä Baud cuõng bò aûnh höôûng bôûi bit SMOD cuûa thanh ghi PCON. Vieäc set bit SMOD seõ taêng gaáp ñoâi toác ñoä Baud trong caùc mode1,2 vaø 3. Trong mode 2, toác ñoä Baud coù theå ñöôïc gaáp ñoâi töø giaù trò maëc ñònh 1/64 taàn soá/Chip (öùng SMOD = 0) leân ñeán 1/32 taàn soá dao ñoäng treân Chip (öùng vôùi SMOD =1). SMOD = 0 On Chip Oscillator Baud Rate Clock SMOD = 1 MODE 2 Bôûi thanh ghi PCON khoâng coù bit ñònh vò, neân ñeå set bit SMOD maø khoâng thay ñoåi caùc bit khaùc cuûa thanh ghi PCON thì ñoøi hoûi phaûi coù 1 hoaït ñoäng “ñoïc boå sung ghi”. Caùc leänh sau ñaây set bit SMOD : MOV A, PCON : Nhaäp vaøo A giaù trò hieän haønh cuûa PCON SETB ACC, 7 : Set bit 7 cuûa ACC (bit SMOD) MOV PCON, A : Ghi giaù trò trôû veà PCON maø SMOD ñaõ ñöôïc set. ÷ 12 ÷ 64 ÷ 32
  • 28. Caùc toác ñoä Baud trong mode 1 vaø mode 3 cuûa 8051 ñöôïc xaùc ñònh bôûi toác ñoä traøn cuûa Timer 1. Bôûi vì Timer hoaït ñoäng ôû taàn soá cao lieân tuïc neân traøn xa hôn nöõa ñöôïc chia cho 32 (chia cho 16 neáu SMOD = 1) tröôc khi cung caáp xung clock toác ñoä Baud ñeán Port noái tieáp. Toác ñoä Baud ôû mode 1 vaø 3 cuûa 8051 ñöôïc xaùc ñònh bôûi toác ñoä traøn cuûa Timer 1 hoaëc Timer 2, hoaëc caû 2. SMOD = 0 On Chip Oscillator Baud Rate Clock SMOD = 1 MODE 1 and MODE 3 6.1 Duøng Timer 1 gioáng nhö söï ñeám toác ñoä Baud : Muoán sinh ra toác ñoä Baud, ta khôûi gaùn TMOD ôû mode töï ñoäng naïp 8 bit (mode 2 cuûa Timer) vaø ñaët giaù trò Reload ñuùng vaøo byte cao cuûa thanh ghi Timer 1 (TH1) ñeå sinh ra toác ñoä traøn chính xaùc cho toác ñoä Baud. Coù nhöõng toác ñoä Baud raát chaäm ta duøng mode 16 bit laø mode 1 cuûa Timer, nhöng ta phaûi khôûi gaùn sau moãi söï traøn cho TL1/TH1 trong thuû tuïc phuïc vuï ngaét ISR. Hoaït ñoäng khaùc ñöôïc ñeám giôø bôûi vieäc duøng Timer 1 ngoaøi laø T1 (P3.5). coâng thöùc chung ñeå xaùc ñònh toác ñoä Baud trong mode 1 vaø mode 3 laø : BAUD RATE = TIMER 1 OVERFLOW RATE÷32 Ví duï moät hoaït ñoäng 1200 Baud ñoøi hoûi moät toác ñoä traøn laø 1200/32 = 38,4KHz. Neáu thaïch anh 12 MHz laùi dao ñoäng treân Chip, thì Timer 1 ñöôïc ñeám giôø ôû toác ñoä cuûa taàn soá 1 MHz. Bôøi vì Timer phaûi traøn ôû toác ñoä taàn soá 38,4 KHz vaø Timer ñeám giôø ôû toác ñoä cuûa taàn soá 1 MHz, neân moät söï traøn ñöôïc yeâu caàu vôùi 1000 : 38,4 = 26,04 clock (laøm troøn 26). Bôûi vì caùc Timer ñeám leân vaø traøn treân söï chuyeån ñoåi töø FFH → 00H cuûa boä ñeám, neân 26 söï ñeám thaáp döôùi 0 laø giaù trò Reload caàn naïp cho TH1 (giaù trò ñuùng laø - 26). Ta duøng leänh MOV TH1, # 26. Ví duï sau khôûi ñoäng Port noái tieáp hoaït ñoäng gioáng nhö UART 8 bit ôû toác ñoä Baud 2400, duøng Timer 1 ñeå cung caáp söï ñeám giôø toác ñoä Baud : MOV SCON, # 01010010B : Port noái tieáp mode 1. MOV TMOD, # 20 : Timer 1 mode 2 ÷ 32 ÷ 16
  • 29. MOV TH1, # -13 : Naïp vaøo boä ñeám toác ñoä 2400 Baud. SETB TR1 : Start Timer 1. Trong SCON coù SM0/SM1 ñeå vaøo mode UART 8 bit, REN = 1 cho pheùp Port noái tieáp thu caùc kyù töï vaø TI = 1 cho pheùp phaùt kyù töï ñaàu tieân bôûi vieäc cho bieát thanh ghi ñeám roãng. TMOD coù M1/M0 = 1/0 ñeå ñaët Timer 1 vaøo mode töï ñoäng naïp 8 bit. Vieäc set bit TR1 ñeå môû maùy chaïy Timer. Toác ñoä Baud 2400 seõ cho ta toác ñoä traøn Timer 1 laø 2400/32 = 76,8 KHz ñoàng thôøi Timer 1 ñöôïc ñeám giôø ôû toác ñoä cuûa taàn soá 1000 KHz (öùng vôùi thaïch anh 12 MHz) seõ cho soá xung Clock sau moãi söï traøn laø 1000 : 76,8 = 13,02 ( laáy troøn 13). Vaäy - 13 laø giaù trò caàn naïp vaøo TH1 ñeå coù toác ñoä Baud laø 2400 Baud. Sau ñaây laø baûng toùm taét toác ñoä Baud phoå bieán öùng vôùi 2 loaïi thaïch anh 12 MHz vaø 11, 059 MHz : Baud Rate Crytal Frequency SMOD TH1 Reload Value Actua Baud Rate Error 9600 12MHz 1 - 7 (F9H) 8923 7% 2400 12MHz 0 -13 (F9H) 2404 0,16% 1200 12MHz 0 -26 (F9H) 1202 0% 19200 11,059MHz 1 -3 (F9H) 19200 0% 9600 11,059MHz 0 -3 (F9H) 9600 0% 2400 11,059MHz 0 -12 (F9H) 2400 0% 1200 11,059MHz 0 -24 (F9H) 1200 0% Baud rate sumary. IV. HOAÏT ÑOÄNG TIMER CUÛA 8051 : 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 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
  • 30. 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. Caùc Timer ñöôïc öùng duïng thöïc teá cho caùc hoaït ñoäng ñònh höôùng. 8051 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 8051 ñöôïc truy xuaát bôûi vieäc duøng 6 thanh ghi chöùc naêng ñaëc bieät nhö sau : Timer SFR Purpose Address Bit-Addressable TCON Control 88H YES TMOD Mode 89H NO TL0 Timer 0 low-byte 8AH NO TL1 Timer 1 low-byte 8BH NO TH0 Timer 0 high-byte 8CH NO TH1 Timer 1 high-byte 8DH NO 2. THANH GHI MODE TIMER TMOD (TIMER MODE REGITER): Thanh ghi mode goàm hai nhoùm 4 bit laø : 4 bit thaáp ñaët mode hoaït ñoäng cho Timer 0 vaø 4 bit cao ñaët mode hoaït ñoäng cho Timer 1. 8 bit cuûa thanh ghi TMOD ñöôïc toùm taét nhö sau : Bit Name Timer Description
  • 31. 7 GATE 1 Khi GATE = 1, Timer chæ laøm vieäc khi INT1=1 6 C/T 1 Bit cho ñeám söï kieän hay ghi giôø C/T = 1 : Ñeám söï kieän C/T = 0 : Ghi giôø ñeàu ñaën 5 M1 1 Bit choïn mode cuûa Timer 1 4 M0 1 Bit choïn mode cuûa Timer 1 3 GATE 0 Bit coång cuûa Timer 0 2 C/T 0 Bit choïn Counter/Timer cuûa Timer 0 1 M1 0 Bit choïn mode cuûa Timer 0 0 M0 0 Bit choïn mode cuûa Timer 0 Hai bit M0 vaø M1 cuûa TMOD ñeå choïn mode cho Timer 0 hoaëc Timer 1. M1 M0 MODE DESCRIPTION 0 0 0 Mode Timer 13 bit (mode 8048) 0 1 1 Mode Timer 16 bit 1 0 2 Mode töï ñoäng naïp 8 bit 1 1 3 Mode Timer taùch ra : Timer 0 : TL0 laø Timer 8 bit ñöôïc ñieàu khieån bôûi caùc bit cuûa Timer 0. TH0 töông töï nhöng ñöôïc ñieàu khieån bôûi caùc bit cuûa mode Timer 1. Timer 1 : Ñöôïc ngöøng laïi. TMOD khoâng coù bit ñònh vò, noù thöôøng ñöôïc LOAD moät laàn bôûi phaàn meàm ôû ñaàu chöông trình ñeå khôûi ñoäng mode Timer. Sau ñoù söï ñònh giôø coù theå döøng laïi, ñöôïc khôûi ñoäng laïi nhö theá bôûi söï truy xuaát caùc thanh ghi chöùc naêng ñaëc bieät cuûa Timer khaùc. 3. THANH GHI ÑIEÀU KHIEÅN TIMER TCON (TIMER CONTROL REGISTER) :
  • 32. Thanh ghi ñieàu khieån bao goàm caùc bit traïng thaùi vaø caùc bit ñieàu khieån bôûi Timer 0 vaø Timer 1. Thanh ghi TCON coù bit ñònh vò. Hoaït ñoäng cuûa töøng bit ñöôïc toùm taét nhö sau : Bit Symbol Bit Address Description TCON.7 TF1 8FH Côø traøn Timer 1 ñöôïc set bôûi phaàn cöùng ôû söï traøn, ñöôïc xoùabôûi phaàn meàm hoaëc bôûi phaàn cöùng khi caùc vectô xöû lyù ñeán thuû tuïc phuïc vuï ngaét ISR TCON.6 TR1 8EH Bit ñieàu khieån chaïy Timer 1 ñöôïc set hoaëc xoùa bôûi phaàn meàm ñeå chaïy hoaëc ngöng chaïy Timer. TCON.5 TF0 8DH Côø traøn Timer 0(hoaït ñoäng töông töï TF1) TCON.4 TR0 8CH Bit ñieàu khieån chaïy Timer 0 (gioáng TR1) TCON.3 IE1 8BH Côø kieåu ngaét 1 ngoaøi. Khi caïnh xuoáng xuaát hieän treân INT1 thì IE1 ñöôïc xoùa bôûi phaàn meàm hoaëc phaàn cöùng khi CPU ñònh höôùng ñeán thuû tuïc phuïc vuï ngaét ngoaøi. TCON.2 IT1 8AH Côø kieåu ngaét 1 ngoaøi ñöôïc set hoaëc xoùa baèng phaán meàm bôûi caïnh kích hoaït bôûi söï ngaét ngoaøi. TCON.1 IE0 89H Côø caïnh ngaét 0 ngoaøi TCON IT0 88H Côø kieåu ngaét 0 ngoaøi. 4. CAÙC MODE VAØ CÔØ TRAØN (TIMER MODES AND OVERFLOW) : 8051 côø Timer laø Timer 0 vaø timer 1. Ta duøng kyù hieäu TLx vaø Thx ñeå chæ 2 thanh ghi byte thaáp vaø byte cao cuûa Timer 0 hoaëc Tmer 1. 4.1. Mode Timer 13 bit (MODE 0) : Overflow TLx (5 bit) THx (8 bit) TFx Timer Clock
  • 33. MODE 0 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. 4.2. Mode Timer 16 bit (MODE 1) : Overflow MODE 1 Mode 1 laø mode Timer 16 bit, töông tö nhö mode 0 ngoaïi tröø Timer naøy hoaït ñoäng nhö moät Timer ñaày ñuû 16 bit, xung clock ñöôïc duøng vôùi söï keát hôïp caùc thanh ghi cao vaø thaáp (TLx,THx). Khi xung clock ñöôïc nhaän vaøo, boä ñeám Timer taêng leân 0000H, 0001H,0002H, . . ., vaø moät söï traøn seõ xuaát hieän khi coù söï chuyeån treân boä ñeám Timer töø FFFH sang 0000H vaø seõ set côø traøn Time, sau ñoù Timer ñeám tieáp. Côø traøn laø bit TFx trong thanh ghi TCON maø noù seõ ñöôïc ñoïc hoaëc ghi bôûi phaàn meàm. Bit coù troïng soá lôùn nhaát (MSB) cuûa giaù trò trong thanh ghi Timer laø bit 7 cuûa THx vaø bit coù troïng soá thaáp nhaát (LSB) laø bit 0 cuûa TLx. Bit LSB ñoåi traïng thaùi ôû taàn soá clock vaøo ñöôïc chia 216 = 65.536. Caùc thanh ghi Timer TLx vaø Thx coù theå ñöôïc ñoïc hoaëc ghi taïi baát kyø thôøi ñieåm naøo bôûi phaàn meàm. 4..3. Mode töï ñoäng naïp 8 bit (MODE 2) Overflow Reload MODE 2 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öï TLx (8 bit) TL x (8 bit) THx (8 bit) TFx TFx Timer Clock Timer Clock TH x (8 bit)
  • 34. chuyeån traïng thaùi töø FFH sang 00H keá tieáp vaø cöù theá tieáp tuïc. Mode naøy thì phuø hôïp bôûi vì caùc söï traøn xuaát hieän cuï theå maø moãi luùc nghæ thanh ghi TMOD vaø THx ñöôïc khôûi ñoäng. 4.4 Mode Timer taùch ra (MODE 3) : Overflow Overflow Overflow MODE 3 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 taát yeáu cung caáp 1 Timer ngoaïi 8 bit laø Timer thöù ba cuûa 8051. Khi vaøo Timer 0 ôû mode 3, Timer coù theå hoaït ñoäng hoaëc taét bôûi söï ngaét noù ra ngoaøi vaø vaøo trong mode cuûa chính noù hoaëc coù theå ñöôïc duøng bôûi Port noái tieáp nhö laø moät maùy phaùt toác ñoä Baud, hoaëc noù coù theå duøng trong höôùng naøo ñoùmaø khoâng söû duïng Interrupt. 5. CAÙC NGUOÀN XUNG CLOCK (CLOCK SOURCES) : Coù hai nguoàn xung clock coù theå ñeám giôø laø söï ñònh giôø beân trong vaø söï ñeám söï kieän beân ngoaøi. Bit C/T trong TMOD cho pheùp choïn 1 trong 2 khi Timer ñöôïc khôûi ñoäng. TL1 (8 bit) On Chip Osillator TH1 (8 bit) TL1 (8 bit) TH0 (8 bit) TF0 TF1 Timer Clock Timer Clock Timer Clock ÷12 Timer Clock Crystal
  • 35. 5.1 Söï baám giôø beân trong (Interval Timing) : Neáu bit C/T = 0 thì hoaït ñoäng cuûa Timer lieân tuïc ñöôïc choïn vaøo boä Timer ñöôïc ghi giôø töø dao ñoäng treân Chip. Moät boä chia 12 ñöôïc theâm vaøo ñeå giaûm taàn soá clock ñeán 1 giaù trò phuø hôïp haàu heát caùc öùng duïng. Caùc thanh ghi TLx vaø THx taêng toác ñoä 1/12 laàn taàn soá dao ñoäng treân Chip. Neáu duøng thaïch anh 12MHz thì seõ ñöa ñeán toác ñoä clock 1MHz. Caùc söï traøn Timer sinh ra sau moät con soá coá ñònh cuûa nhöõng xung clock, noù phuï thuoäc vaøo giaù trò khôûi taïo ñöôïc LOAD vaøo caùc thanh ghi THx vaø TLx. 5.2 Söï ñeám caùc söï kieän (Event Counting) : Neáu bit C/T = 1 thì boä Timer ñöôïc ghi giôø töø boä nguoàn beân ngoaøi trong nhieàu öùng duïng, boä 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 chaân P3.4 laø ngoõ nhaäp cuûa xung clock bôûi Timer 0 (T0) vaø P3.5 laø ngoõ nhaäp cuûa xung clock bôûi Timer 1 (T1). Trong caùc öùng duïng ñeám caùc thanh ghi Timer ñöôïc taêng trong ñaùp öùng cuûa söï chuyeån traïng thaùi töø 1 sang 0 ôû ngoõ nhaäp Tx. Ngoõ nhaäp beân ngoaøi ñöôïc thöû trong suoát S5P2 cuûa moïi chu kyø maùy : Do ñoù khi ngoõ nhaäp ñöa tôùi möùc cao trong moät chu kyø vaø möùc thaáp trong moät chu kyø keá tieáp thì boä ñeám taêng leân moät. Giaù trò môùi xuaát hieän trong caùc thanh ghi Timer trong suoát S5P1 cuûa chu kyø theo sau moät söï chuyeãn ñoåi ñöôïc khaùm thaáy. 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. 6. SÖÏ BAÉT ÑAÀU, KEÁT THUÙC VAØ SÖÏ ÑIEÀU KHIEÅN CAÙC TIMER (STARTING, STOPPING AND CONTROLLING THE TIMER) Bit TRx trong thanh ghi coù bit ñònh vò TCON ñöôïc ñieàu khieånbôû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 C/T T0 or T1 pin 0 = Up (internal Timing) 1 = Down (Event Counting)
  • 36. 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.
  • 37. 7. SÖÏ KHÔÛI ÑOÄNG VAØ TRUY XUAÁT CAÙC THANH GHI TIMER : Caùc Timer ñöôïc khôûi ñoäng 1 laàn ôû ñaàu chöông trình ñeå ñaët mode hoaït ñoäng cho chuùng. Sau ñoù trong thaân chöông trình caùc Timer ñöôïcbaé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 ñeà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. 8. SÖÏ ÑOÏC THANH GHI TIMER TREÂN TUYEÁN : Trong moät soá öùng duïng caàn thieát ñoïc giaù trò trong caùc thanh ghi Timer treân tuyeán, coù moät vaán ñeà tieàm naêng ñôn giaûn ñeå baûo veä laïi phaàn meàm. Bôûi vì 2 thanh ghi Timer phaûi ñöôïc ñoïc, neân “loãi giai ñoaïn” coù theå xuaát hieän neáu byte traøn vaø byte cao giöõa 2 hoaït ñoäng ñoïc. Moät giaûi phaùp ñeå khaéc phuïc laø ñoïc byte cao tröôùc, sau ñoù ñoïc byte thaáp, vaø ñoïc laïi byte cao : Neáu byte cao thay ñoåi thì laëp laïi caùc hoaït ñoäng ñoïc.
  • 38. V. HOAÏT ÑOÄNG INTERRUPT CUÛA 8051 : Trong nhieàu öùng duïng ñoøi hoûi ta phaûi duøng Interrupt maø khoâng duøng Timer bôûi vì neáu duøng Timer ta phaûi maát thôøi gian ñeå chôø côø traøn TimerTFx set môùi xöû lyù tieáp chöông trình. Do ñoù ta khoâng coù thôøi gian ñeå laøm caùc vieäc quan troïng khaùc maø öùng duïng ñoøi hoûi. Ñaây laø chöông trình raát quan troïng cuûa 8051 hay hoï MSC-51. 1. GIÔÙI THIEÄU : Interrupt laø moät söï coá coù ñieàu kieän maø noù gaây ra söï ngöng laïi taïm thôøi cuûa chöông trình ñeå phuïc vuï moät chöông trình khaùc. Caùc Interrupt vaän haønh moät Relay raát quan troïng trong thieát bò vaø söï cung caáp ñaày ñuû caùc öùng duïng vi ñieàu khieån. Chuùng cho pheùp 1 heä thoáng ñaùp öùng ñoààng boä ñeán söï kieän quan troïng vaø giaûi quyeát söï kieän ñoù trong khi chöông trình khaùc ñang thöïc thi. Moät heä thoáng ñöôïc laùi bôûi Interrupt cho 1 kyõ xaûo laøm nhieàu coâng vieäc cuøng môät luùc. Taát nhieân CPU khoâng theå thöïc thi nhieàu leänh taïi moät thôøi ñieåm, nhöng noù coù theå taïm thôøi treo vieäc thöïc thi cuûa chöông trình chính ñeå thöïc thi chöông trình khaùc vaø sau ñoù quay laïi chöông trình chính. Khi chöông trình chính ñang thöïc thi maø coù moät söï ngaét xaûy ñeán thì chöông trình chính ngöng thöïc thi vaøreû nhaùnh ñeán thuû tuïc phuïc vuï ngaét ISR (INTERRUPT SERVICE ROUTINE). ISR thöïc thi ñeå thöïc hieän hoaït ñoäng vaø keát thuùc vôùi leänh “trôû laïi töø söï ngaét” : Chöông trình tieáp tuïc nôi maø noù döøng laïi. Ta coù theå toùm taét söï thöïc thi cuûa 1 chöông trình trong tröôøng hôïp coù Interrupt vaø khoâng coù Interrupt nhö sau : Timer Program excution without interrut * ** * ** * ** Timer Program excution with interrupt. Main Program Main ISR Main ISR Main ISR Main
  • 39. Trong ñoù : Kyù hieäu * cho bieát ngaét chöông trình chính ñeå thöïc thi chöông trình con trong thuû tuïc phuïc vuï ngaét ISR. Coøn kyù hieäu ** cho bieát quay trôû laïi chöông trình chính thöïc thi tieáp khi keát thuùc chöông triønh con trong ISR. 2. TOÅ CHÖÙC INTERRUPT CUÛA 8051 (INTERRUPT ORGANIZATION) 8051 cung caáp 5 nguoàn ngaét, 2 söï ngaét ngoaøi, 2 söï ngaét Timer vaø moät söï ngaét Port noái tieáp. Taát caû caùc Interrrupt bò maát taùc duïng bôûi söï maëc ñònh sau khi reset heä thoáng vaø ñöôïc cho pheùp caù bieät bôûi phaàn meàm. Trong tröôøng hôïp coù hai hoaëc nhieàu hôn söï ngaét xaûy ra ñoàng thôøi hoaëc moät söï ngaét ñang ñöôïc phuïc vuï maø xuaát hieän moät söï ngaét khaùc, thì seõ coù hai caùch thöïc hieän söï ngaét laø söï kieåm tra lieân tieáp vaø söï öu tieân caáp 2. 2.1 Söï cho pheùp ngaét vaø söï caám ngaét Moãi nguoàn Interrupt ñöôïc cho pheùp rieâng bieät hoaëc söï caám rieâng bieät qua thanh ghi chöùc naêng ñaëc bieät coù bit ñònh vò IE (Interrupt Enable) taïi ñòa chæ 0A8H. Cuõng nhö söï caù bieät cho pheùp caùc bit cuûa moãi nguoàn ngaét coù 1 bit cho pheùp (hoaëc caám) chung maø noù ñöôïc xoùa ñeå caám taát caû caùc Interrupt hoaëc ñöôïc set ñeå cho pheùp chung caùc Interrupt. Hoaït ñoäng cuûa töøng bit trong thanh ghi cho pheùp ngaét IE ñöôïc toùm taét trong baûng sau : Bit Symbol Bit Address Söï moâ taû (Enable = 1; Dissble) IE.7 EA AFH Cho pheùp toaøn boä hoaëc caám toaøn boä. IE.6 - AEH Khoâng ñònh nghóa. IE.5 ET2 ADH Cho pheùp ngaét Timer 2 (8052). IE.4 ES ACH Cho pheùp ngaét Port noái tieáp. IE.3 ET1 ABH Cho pheùp ngaét Timer 1. IE.2 EX1 AAH Cho pheùp ngaét ngoaøi External 1. IE.1 ET0 A9H Cho pheùp ngaét Timer 0. IE.0 EX0 A8H Cho pheùp ngaét ngoaøi External 0. IE (Interrupt Enable) Register Sumary. Hai bit phaûi set ñeå cho pheùp 1 söï ngaét naøo ñoù : Laø bit cho pheùp rieâng vaø bit cho pheùp chung. Ví duï ñeå cho pheùp ngaét Timer 1 ta coù theå thöïc hieän treân
  • 40. bit: SETB ET1 vaø SETB EA hoaëc söï thöïc hieän treân byte : MOV IE, #10001000B. Caû 2 phöông phaùp naøy coù keát quaû chính xaùc sau khi reset heä thoáng, nhöng keát quaû khaùc nhau neáu thanh ghi IE ñöôïc ghi treân tuyeán ôû giöõa chöông trình. Giaûi phaùp thöù nhaát khoâng coù taùc duïng treân caùc bit coøn laïi trong thanh ghi IE, coøn giaûi phaùp thöù hai xoùa caùc bit coøn laïi trong thanh ghi IE. ÔÛ ñaàu chöông trình ta neân khôûi gaùn IE vôùi leänh MOV BYTE, nhöng söï cho pheùp ngaét vaø caám ngaét treân tuyeán trong moät chöông trình seõ duøng caùc leänh SET BIT vaø CLR BIT ñeå traùnh keát quaû phuï vôùi caùc bit khaùc trong thanh ghi IE. 2.2 Söï öu tieân ngaét (Interrupt Priority) : Moãi nguoàn ngaét ñöôïc laäp trình caù bieät ñeán moät trong hai möùc öu tieân qua thanh ghi chöùc naêng ñaëc bieät coù ñònh vò IP (Interrupr Priority) taïi ñòa chæ 0B8H. Hoaït ñoäng cuûa töøng bit trong thanh ghi IP ñöôïc toùm taét trong baûng sau : Bit Symbol Bit Address Söï moâ taû (Enable = 1; Disable) IP.7 - - Khoâng ñònh nghóa. IP.6 - - Khoâng ñònh nghóa. IP.5 PT2 BDH Öu tieân cho söï ngaét Timer 2 (8052). IP.4 PS BCH Öu tieân cho söï ngaét Port noái tieáp. IP.3 PT1 BBH Öu tieân cho söï ngaét Timer 1. IP.2 PX1 BAH Öu tieân cho söï ngaét ngoaøi External 1. IP.1 PT0 B9H Öu tieân cho söï ngaét Timer 0. IP.0 PX0 B8H Öu tieân cho söï ngaét ngoaøi External 0. IP (Interrupt Priority) Register Sumary. Thanh ghi öu tieân ngaét IP ñöôïc xoùa sau khi reset heä thoáng ñeå ñaët taát caû caùc söï ngaét ôû möùc öu tieân thaáp hôn söï maëc ñònh. Yù töôûng “caùc söï öu tieân” cho pheùp moät thuû tuïc phuïc vuï ngaét ISR môùi ñöôïc ngaét neáu söï ngaét môùi naøy öu tieân cao hôn cho söï ngaét hieän haønh ñang phuïc vuï. Treân 8051 coù 2 möùc öu tieân thaáp vaø 2 möùc öu tieân cao. Neáu moät thuû tuïc phuïc vuï ngaét coù möùc öu tieân thaáp ñang thöïc thi maø coù moät söï ngaét öu tieân cao hôn xuaát hieän, thì thuû tuïc phuïc vuï ñoù bò ngaét ñi ñeå thöïc thi thuû tuïc ngaét môùi. Ngöôïc laïi thuû tuïc phuïc vuï ngaét coù möùc öu tieân cao hôn ñang thöïc thi maø coù söï
  • 41. ngaét öu tieân thaáp hôn xuaát hieän, thì noù khoâng theå bò ngaét maø phaûi chôø thöïc thi xong thuû tuïc phuïc vuï cao hôn môùi nhaûy tôùi thuû tuïc phuïc vuï ngaét thaáp. Chöông trình thöïc thi ôû möùc cô baûn vaø khoâng keát hôïp vôùi söï ngaét naøo, noù coù theå luoân luoân bò ngaét baát chaáp söï öu tieân ngaét ôû möùc cao hay thaáp. Neáu 2 söï ngaét cuûa caùc öu tieân khaùc nhau xuaát hieän ñoàng thôøi, söï ngaét öu tieân cao hôn seõ ñöôïc phuïc vuï ñaàu tieân. 2.3 Söï kieåûm tra voøng queùt lieân tieáp. Neáu 2 söï ngaét coù cuøng möùc öu tieân xuaát hieän ñoàng thôøi, thì söï kieåm tra voøng queùt lieân tieáp seõ aán ñònh söï ngaét naøo seõ ñöôïc phuïc vuï tröôùc tieân. Söï kieåm tra voøng queùt lieân tieáp öu tieân töø treân xuoáng theo thöù töï laø : External 0, Timer 0, External 1, Timer 1, serial Port, Timer 2 Hình treân minh hoïa 5 nguoàn ngaét cuûa 8051, caùc kyõ xaûo cho pheùp ngaét rieâng vaø chung, söï kieåm tra voøng queùt lieân tieáp vaø möùc öu tieân. Traïng thaùi cuûa taát caû caùc nguoàn ngaét coù hieäu löïc thoâng qua caùc bit côø töông öùng trong caùc thanh ghi chöùc naêng ñaëc bieät. Neáu coù söï ngaét naøo bò caám thì söï ngaét ñoù khoâng xuaát hieän nhöng phaàn meàm vaãn coøn kieåm tra côø ngaét. Söï ngaét cuûa Port noái tieáp ñöa ñeán coång OR logic cuûa söï ngaét thu RI (Receive Interrupt) hoaëc söï ngaét phaùt TI (Transmit Interrupt). Töông töï söï ngaét cuûa Port noái tieáp, caùc söï ngaét cuûa Timer 2 coù theå ñöôïc sinh ra bôûi côø traøn TF2 hoaëc côø nhaäp ngoaøi EXF2 (External Input Flag). Caùc bit côø sinh ra caùc söï ngaét ñöôïc toùm taét nhö sau : Interrupt Flag SFR Register and Bit Position External 0 IE 0 TCON 1 External 1 IE 1 TCON 3 Timer 1 TF 1 TCON 7 Timer 0 TF 0 TCON 5 Serial Port TI SCON 1 Serial Port RI SCON 0 Timer 2 TF 2 T2CON 7 (8052) Timer 2 EXF 2 T2CON 6 (8052)
  • 42. 3. VIEÄC XÖÛ LYÙ CAÙC SÖÏ NGAÉT (PROCESSING INTERRUPT) : Khi moät söï ngaét xuaát hieän vaø ñöôïc chaáp nhaän bôûi CPU thì chöông trình chính bò ngaét. Caùc hoaït ñoäng sau ñaây xuaát hieän : √ Leänh hieän haønh vaø keát thuùc thöïc thi. √ Boä ñeám chöông trình PC ñöôïc caát giöõ vaøo Stack. √ Traïng thaùi ngaét hieän haønh ñöôïc caát giöõ vaøo beân trong. √ Nhöõng söï ngaét bò ngaên laïi taïi möùc ngaét. √ Boä ñeám chöông trình PC ñöôïc LOAD vôùi ñòa chæ vectô cuûa thuû tuïc phuïc vuï ngaét ISR. √ Thuû tuïc phuïc vuï ngaét ISR ñöôïc thöïc thi. Thuû tuïc phuïc vuï ngaét ISR thöïc thi vaø ñöa hoaït ñoäng vaøo ñaùp öùng ngaét, thuû tuïc phuïc vuï ngaét ISR keát thuùc vôùi leänh RETI (quay trôû veà chöông trình chính töø Stack). Ñieàu naøy khoâi phuïc laïi giaù htrò cuõ cuûa boä ñeám chöông trình töø Stack vaø hoaøn toaøn döøng laïi traïng thaùi cuõ. Söï thöïc thi cuûa chöông trình chính tieáp tuïc ôû nôi maø noù ngöøng laïi. 3.1 Caùc vectô ngaét (Interrupt Vectors) : Khi coù moät söï ngaét ñöôïc nhaän giaù trò ñöôïc LOAD vaøo PC ñöôïc goïi bôûi vectô ngaét. Noù laø ñòa chæ cuûa söï khôûi ñoäng thuû tuïc phuïc vuï ngaét ISR cuûa nguoàn ngaét. Caùc vectô ñöôïc cho trong baûng sau : Interrupt Flag Vectors Address System Reset RST 0000H External 0 IE 0 0003H Timer 0 TF 0 000BH External 1 IE 1 0013H Timer 1 TF1 001BH Serial Port RI or TI 0023H Timer 2 TF 2 or EXF2 002BH
  • 43. Vectô reset heä thoáng RST taïi ñòa chæ 0000H ñöôïc tính trong baûng naøy, bôûi vì trong yù nghóa naøy noù gioáng nhö 1 Interrupt : noù ngaét chöông trình vaø LOAD vaøo PC vôùi giaù trò môùi. Khi ñöa 1 vectô ngaét ñeán söï ngaét thì côø cuûa noù gaây ra söï ngaét, töï ñoäng bò xoùa bôûi phaàn cöùng, ngoaøi tröø RI vaø TI cuûa Port noái tieáp vaø TF2, EXF2 cuûa Timer 2 ñöôïc xoùa bôûi phaàn meàm. Nguyeân nhaân treân laø do coù 2 nguoàn ngaét coù theå chòu ñöïng ñöôïc cho moãi söï ngaét maø noù khoâng öùng duïng cho CPU ñeå xoùa côø ngaét. Vì caùc vectô ngaét naèm ôû döôùi cuøng trong vuøng maõ nhôù, neân leänh ñaàu tieân cuûa chöông trình chính laø leänh nhaûy ñeán vò trí cao hôn vò trí naøy nhö LJMP 0030H.
  • 44. CHÖÔNG2 GIAO TIEÁP MAÙY TÍNH GIÔÙI THIEÄU CAÙC PHÖÔNG PHAÙP GIAO TIEÁP MAÙY TÍNH Vieäc giao tieáp giöõa maùy tính vaø thieát bò ngoaïi vi coù theå giao tieáp baèng 3 caùch ρ Giao tieáp baèng Slot-Card. ρ Giao tieáp qua coång song song (maùy in) ρ Giao tieáp qua coång noái tieáp (COM) 1. GIAO TIEÁP BAÈNG SLOT CARD Beân trong maùy tính, ngoaøi nhöõng khe caém duøng cho card vaøo - ra, card maøn hình, vaãn coøn nhöõng raõnh caém ñeå troáng. Ñeå giao tieáp vôùi maùy tính, ta coù theå thieát keá card môû roäng ñeå gaén vaøo khe caém môû roäng naøy. ÔÛ maùy tính PC/XT raõnh caém chæ coù 1 loaïi vôùi ñoä roäng 8 bit vaø tuaân theo tieâu chuaån ISA (Industry Standard Architecture). Raõnh caém theo tieâu chuaån ISA coù 62 ñöôøng tín hieäu, qua caùc ñöôøng tín hieäu naøy maùy tính coù theå giao tieáp deã daøng vôùi thieát bò beân ngoaøi thoâng qua card môû roäng. Treân raõnh caém môû roäng, ngoaøi 20 ñöôøng ñòa chæ, 8 ñöôøng döõ lieäu, coøn coù moät soá ñöôøng ñieàu khieån nhö: RESET, IOR, IOW, AEN, CLK, ... Do ñoù card giao tieáp vôùi maùy tính qua slot card ñôn giaûn, soá bit coù theå taêng deã daøng, giaûm ñöôïc nhieàu linh kieän, toác ñoä truyeàn döõ lieäu nhanh (truyeàn sonh song). Tuy nhieân, do khe caém naèm beân trong maùy tính neân khi muoán gaén card giao tieáp vaøo thì phaûi môû naép ra, ñieàu naøy gaây baát tieän cho ngöôøi söû duïng. 2. GIAO TIEÁP BAÈNG COÅNG SONG SONG Vieäc giao tieáp giöõa KIT Vi ñieàu khieån 8051 vôùi maùy tính ñöôïc thöïc hieän qua oå caém 25 chaân ôû phía sau maùy tính. Qua coång naøy döõ lieäu ñöôïc truyeàn ñi song song, neân ñoâi khi coøn ñöôïc goïi laø coång gheùp noái song song. * Caùc chaân vaø ñöôøng daãn ñöôïc moâ taû nhö sau:
  • 45. CHAÂ N KYÙ HIEÄU VAØO/RA MOÂ TAÛ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 STROBE D0 D1 D2 D3 D4 D5 D6 D7 ACK BUSY PE SLCT AF ERROR INIT SLCTIN GND GND GND GND GND GND GND GND Loái ra (Output) Loái ra Loái ra Loái ra Loái ra Loái ra Loái ra Loái ra Loái ra Loái vaøo (Input) Loái vaøo Loái vaøo Loái vaøo Loái ra Loái vaøo Loái ra Loái ra : Byte ñöôïc in Ñöôøng döõ lieäu D0 Ñöôøng döõ lieäu D1 Ñöôøng döõ lieäu D2 Ñöôøng döõ lieäu D3 Ñöôøng döõ lieäu D4 Ñöôøng döõ lieäu D5 Ñöôøng döõ lieäu D6 Ñöôøng döõ lieäu D7 Acknowledge (Xaùc nhaän) 1 : Maùy in baän Heát giaáy Select (Löïa choïn) Auto Feed (Töï naïp) Error (Loãi) 0 : Ñaët laïi maùy in Select in Noái ñaát “ “ “ “ “ “ “ Khi maùy tính gôûi döõ lieäu ra coång maùy in muoán döõ lieäu naøy qua KIT Vi ñieàu khieån 8051 ta phaûi giao tieáp qua moät vi maïch 8255. IC 8255 laøm vieäc ôû Mode 1 : Port A laø nhaäp döõ lieäu ; Port B xuaát döõ lieäu . * Sô ñoà keát noái giöõa IC 8255 vôùi coång maùy in : 1 14 25 13
  • 46. Vì 8255 ñöôïc khôûi taïo laøm vieäc ôû Mode 1 : Port A nhaäp döõ lieäu Port B xuaát döõ lieäu neân khi maùy tính gôûi tín hieäu STROBE ñeán 8255, yeâu caàu 8255 nhaän döõ lieäu do maùy tính gôûi ñeán vaø khi 8255 nhaän döõ lieäu thì noù taïo ra moät tín hieäu ôû PC5 ñöa qua ACK baùo cho maùy tính bieát laø 8255 ñaõ nhaän döõ lieäu do maùy tính gôûi ñeán, ñoàng thôøi luùc ñoù ôû PC3 cuûa 8255 taïo tín hieäu INTRA taùc ñoäng ñeán chaân ngaét INT1 (pin 13) cuûa 8051 laøm cho 8051 chaïy chöông trình phuïc vuï ngaét vaø döõ lieäu töø maùy tính qua 8255 seõ ñöôïc gôûi ñeán CPU ñeå xöû lyù. 3. GIAO TIEÁP BAÈNG COÅNG NOÁI TIEÁP Coång noái tieáp RS232 laø moät giao dieän phoå bieán roäng raõi nhaát. Ngöôøi ta coøn goïi coång naøy laø coång COM1, coøn coång COM2 ñeå töï do cho caùc öùng duïng khaùc. Gioáng nhö coång maùy in coång COM cuõng ñöôïc söû duïng moät caùch thuaän tieän cho vieäc giao tieáp vôùi thieát bò ngoaïi vi. Vieäc truyeàn döõ lieäu qua coång COM ñöôïc tieán haønh theo caùch noái tieáp. Nghóa laø caùc bit döõ lieäu ñöôïc truyeàn ñi noái tieáp nhau treân moät ñöôøng daãn. Loaïi truyeàn naøy coù khaû naêng duøng cho nhöõng öùng duïng coù yeâu caàu truyeàn khoaûng caùch lôùn hôn, bôûi vì caùc khaû naêng gaây nhieãu laø nhoû ñaùng keå hôn khi duøng moät coång song song (coång maùy in). D0 D1 D2 D3 D4 D5 D6 D7 PC4 PC5 INTE PC3 TO INT 1 (8051) WR 1 13 14 25
  • 47. Coång COM khoâng phaûi laø moät heä thoáng bus noù cho pheùp deã daøng taïo ra lieân keát döôùi hình thöùc ñieåm vôùi ñieåm giöõa hai maùy caàn trao ñoåi thoâng tin vôùi nhau, moät thaønh vieân thöù ba khoâng theå tham gia vaøo cuoäc trao ñoåi thoâng tin naøy. * Caùc chaân vaø ñöôøng daãn ñöôïc moâ taû nhö sau: CHAÂN (Loaïi 9 chaân) CHAÂN (Loaïi 25 chaân) KYÙ HIEÄU VAØO/RA MOÂ TAÛ 1 2 3 4 5 6 7 8 9 8 3 2 20 7 6 4 5 22 DCD RXD TXD DTR GND DSR RTS CTS RI Loái vaøo Loái vaøo Loái ra Loái ra Loái vaøo Loái ra Loái vaøo Loái vaøo Data Carrier Detect Receive Data Transmit Data Data Terminal Ready Noái ñaát Data Set Ready Request to Send Clear to Send Ring Indicator Phích caém COM coù toång coäng 8 ñöôøng daãn, chöa keå ñeán ñöôøng noái ñaát. Treân thöïc teá coù hai loaïi phích caém, moät loaïi 9 chaân vaø moät loaïi 25 chaân. Caû hai loaïi naøy ñeàu coù chung moät ñaëc ñieåm. Vieäc truyeàn döõ lieäu xaûy ra ôû treân hai ñöôøng daãn. Qua chaân caém ra TXD maùy tính gôûi döõ lieäu cuûa noù ñeán KIT Vi ñieàu khieån. Trong khi ñoù caùc döõ lieäu maø maùy tính nhaän ñöôïc, laïi ñöôïc daãn ñeán chaân RXD caùc tín hieäu khaùc ñoùng vai troø nhö laø tín hieäu hoå trôï khi trao ñoåi thoâng tin, vaø vì theá khoâng phaûi trong moïi tröôøng hôïp öùng duïng ñeàu duøng heát. Vì tín hieäu coång COM thöôøng ôû möùc +12V, -12V neân khoâng töông thích vôùi ñieän aùp TTL neân ñeå giao tieáp KIT Vi ñieàu khieån 8051 vôùi maùy tính qua coång COM ta phaûi qua moät vi maïch bieán ñoåi ñieän aùp cho phuø hôïp vôùi möùc TTL, ta choïn vi maïch MAX232 ñeå thöïc hieän vieäc töông thích ñieän aùp. 13 25 14 1 1 5 6 9 Loaïi 25 chaân Loaïi 25 chaân
  • 48. * Sô ñoà keát noái giöõa coång COM vôùi KIT Vi ñieàu khieån 8051 : Vi maïch MAX232 duøng ñeå töông thích tín hieäu ôû möùc (+12V, -12V) treân giao dieän RS232. Vi maïch naøy nhaän möùc RS232 ñaõ ñöôïc gôûi tôùi töø maùy tính vaø bieán ñoåi tín hieäu naùy thaønh tín hieäu TTL ñeå cho töông thích vôùi IC 8051 vaø noù cuõng thöïc hieän ngöôïc laïi laø bieán ñoåi tín hieäu TTL töø Vi ñieàu khieån thaønh möùc +12V, -12V ñeå cho phuø hôïp hoaït ñoäng cuûa maùy tính. Giao tieáp theo caùch naøy, khoaûng caùch töø maùy tính ñeán thieát bò ngoaïi vi coù theå ñaït tôùi treân 20 meùt. Ñoái vôùi ñeà taøi chæ yeâu caàu truyeàn döõ lieäu töø maùy tính qua KIT chöù khoâng truyeàn döõ lieäu töø KIT qua maùy tính vì vaäy chuùng em choïn vi maïch MAX232 ñeå thöïc hieän bieán ñoåi töông thích möùc tín hieäu. Öu ñieåm cuûa giao dieän naøy laø coù khaû naêng thieát laäp toác ñoä Baud. Khi döõ lieäu töø maùy tính ñöôïc gôûi ñeán KIT Vi ñieàu khieån 8051 qua coång COM thì döõ lieäu naøy seõ ñöôïc ñöa vaøo töøng bit (noái tieáp) vaøo thanh ghi SBUF (thanh ghi ñeäm), ñeán khi thanh ghi ñeäm ñaày thì côø RI trong thanh ghi ñieàu khieån seõ töï ñoäng Set leân 1 vaø luùc naøy CPU seõ goïi chöông trình con phuïc vuï ngaét vaø döõ lieäu seõ ñöôïc ñöa vaøo ñeå xöû lyù. 4. TRUYEÀN DÖÕ LIEÄU 8 9 5 1 RXD TXD 10 11 MAX 2 3 2 RXD TXD
  • 49. 1. Thoâng tin soá lieäu Heä thoáng thoâng tin soá lieäu duøng ñeå xöû lyù vaø truyeàn caùc chuoãi maõ nhò phaân. Caùc maõ naøy ñöôïc taïo ra, löu tröõ vaø xöû lyù bôûi maùy tính vaø caùc thieát bò ngoaïi vi, bao goàm caùc loaïi nhö: caùc tin töùc ñaõ maõ hoùa, taäp tin vaên baûn, hình aûnh, döõ lieäu soá vaø caùc thoâng tin khaùc. Ñöôøng truyeàn laø ñöôøng truyeàn aãn tín hieäu soá vaø caùc kyù töï truyeàn phoå bieán laø maõ ASCII. 2. Phöông thöùc truyeàn a. Truyeàn noái tieáp/ Song song (Serial/ Parallel) Truyeàn song song: truyeàn taát caû caùc bit cuûa moät kyù töï cuøng moät luùc. Truyeàn noái tieáp: truyeàn tuaàn töï töøng bit cuûa 1 kyù töï. Truyeàn song song nhanh hôn truyeàn noái tieáp ( thöôøng duøng ôû cöï ly thoâng tin gaàn). Truyeàn noái tieáp ít toán ñöôøng truyeàn hôn song song (thöôøng duøng ôû cöï ly xa). b7 b6 b5 b4 b3 b2 b1 b0 Hình 4.1 Truyeàn song song Hình 4.2 Truyeàn noái tieáp Tx Shift Reg Rx Shift Reg b7 b6 b5 b4 b3 b2 b1 b0
  • 50. b. Truyeàn ñoàng boä/ Baát ñoàng boä (Synchoronous / Asynchonous) ♦ Truyeàn ñoàng boä - noái tieáp: Duøng 1 xung clock ñeå ñoàng boä quaù trình nhaän theo töøng bit kyù töï. Maùy seõ cung caáp tín hieäu clock cho caû 2 ñaàu phaùt vaø thu. Öu ñieåm: chæ truyeàn data, hoâng caàn theâm tín hieäu ñoàng boä vaøo chuoãi data → nhanh hôn. Nhöôïc ñieåm: phaûi theâm 1 keânh thöù 2 ñeå truyeàn tín hieäu clock song song vôùi keânh truyeàn data. ♦ Truyeàn baát ñoàng boä noái tieáp: Theâm vaøo phía tröôùc moãi kyù töï 1 bit START vaø phía sau 1 hoaëc 2 bit STOP. Maùy thu seõ taùch bit START 9eå khôûi ñoäng tín hieäu ñoàng boä duøng cho vieäc thu caùc bit kyù töï. Caùc bit STOP ñöôïc duøng ñeå ngaên caùch giöõa caùc kyù töõ. Phöông phaùp naøy cho pheùp truyeàn ngaãu nhieân, khoâng caàn truyeàn lieân tuïc. Vì phaûi theâm caùc bit START, STOP neân toác ñoä truyeàn toång quaùt laø chaäm so vôùi truyeàn ñoàng boä nhöng laïi ñôn giaûn reû tieàn hôn. Toác Ñoä truyeàn baát ñoàng boä: 75, 110, 300, 1200 bit/s Toác Ñoä truyeàn ñoàng boä: 2400, 4800, 9600 bit/s 3. THOÂNG TIN NOÁI TIEÁP BAÁT ÑOÀNG BOÄ. a/ Daãn nhaäp * Truyeàn soá lieäu noái tieáp cho pheùp trao ñoåi thoâng tin giöõa maùy tính vaø thieát bò ngoaïi vi töøng bit moät. Soá lieäu trao ñoåi thöôøng ñöôïc gôûi theo caùc nhoùm bit (taïo thaønh moät kí töï hay moät töø). Thí duï: moät kyù töï ñöôïc theå hieän baèng maõ ASCII. Trao ñoåi noái tieáp chæ caàn moät ñöôøng daây tín hieäu hay moät keânh lieân laïc. * Truyeàn soá lieäu noái tieáp ñöôïc söû duïng khi: b7 b6 b5 b4 b3 b2 b1 b0 CLOCK Tx Rx Load/Shift Input Read/Shift Output Hình 4.3 Truyeàn ñoàng boä - noái tieáp
  • 51. 1. Thieát bò ngoaïi vi caàn trao ñoåi soá lieäu voán ñaõ laø vaøo/ra/noái tieáp. Ví duï: Teletype, baêng töø, catssete... 2. Khoaûng caùch giöõa maùy tính vaø thieát bò ngoaïi vi töông ñoái lôùn. Neáu khoaûng caùch ñoù taêng thì giaù thaønh taêng leân theo toång soá ñöôøng daây daãn soá lieäu. Giaù cuûa heä coøn phuï thuoäc vaøo caùc boä khuyeách ñaïi ñöôøng daây vaø boä thu. Do ñoù söû duïng phöông phaùp trao ñoåi noái tieáp seõ kinh teá hôn. * Toác ñoä truyeàn (coøn goïi laø toác ñoä Baud-Rate) ñöôïc xaùc ñònh nhö toån gsoá laàn thay ñoåi tín hieäu trong 1giaây. Neáu tín hieäu truyeàn ñi laø nhò phaân toác ñoä truyeàn töông ñoái vôùi soá Bit truyeàn trong 1 giaây. Caùc keânh thoâng tin ñöôïc ñaùnh giaù baèng toác ñoä truyeàn. Neáu soá lieäu ñöôïc truyeàn vôùi toác ñoä ngoaøi khaû naêng cuûa keânh seõ saûy ra loãi, beân thu seõ khoâng nhaän ñuùntg ñöôïc thoâng tin. * Heä thoáng truyeàn soá lieäu noái tieáp goàm caùc daïng: - Ñôn coâng: Soá lieäu chæ ñöôïc göûi ñi theo moät höôùng. - Baùn song coâng: Soá lieäu ñöôïc göûi theo hai höôùng nhöng moãi thôøi ñieåm chæ ñöôïc truyeàn theo moät höôùng. - Song coâng: Soá lieäu ñöôïc truyeàn ñoàng thôøi theo hai höôùng. * Truyeàn soá lieäu noái tieáp coù theå laø: - Ñoàng boä (DB) - Baát ñoàng boä (BDB) Ñieåm chung cuûa hai phöông phaùp naøy ñeàu ñoøi hoûi thoâng tin khung (Frame) theâm vaøo thoâng tin soá lieäu ñeå taïo ñieàui kieän cho beân thu/nhaän bieát daïng cuûa soá lieäu. Ñieåm khaùc nhau cô baûn laø: Trong truyeàn BDB, thoâng tin khoâng caàn cho töøng kyù töï, trong khí ñoù, ôû truyeàn DB thoâng tin khung chæ caàn ôû moät chuoãi kyù töï hay moät khoái (Block). Truyeàn soá lieäu noái tieáp DB coù hieäu suaát lôùn hôn truyeàn BDB nhöng ñoøi hoûi vieäc giaûi maõ phöùc taïp hôn. Phöông phaùp truyeàn DB söû duïng ôû moâi tröôøng truyeàn daãn coù toác ñoä cao, truyeån BDB duøng ôû moâi tröôøng coù khaû naêng truyeàn daãn chaäm hôn. Trong truyeàn BDB, daïng soá lieäu ñöôïc caáu taïo töø caùc Bit soá lieäu cô baûn (caùc Bit thoâng tin vaø kieåm tra chaün leû) vaø theâm vaøo phía tröôùc moät Bit khôûi ñoäng
  • 52. (Start) vaø phía sau moät hay nhieàu Bit döøng (Stop). Bit START coù möùc logic “0” ñöôïc ñònh nghóa nhö möùc ñieän aùp döông trong chuaån RS-232C. Bit STOP coù möùc logic “1”. Bit START baùo cho phía thu baét ñaàu nhaän kyù töï vaø ñoàng boä vôùi beân phaùt. Quaù trình ñoàng boä naøy chæ keùo daøi trong thôøi gian “1” kyù töï. Moät hay nhieàu Bit STOP ñöôïc ñöa vaøo sau kyù töï ñeå ñaûm baûo raèng Bit START cuûa kyù töï tieáp theo seõ taïo ra quaù trình truyeån tieáp treân ñöôøng daây lieân laïc. Beân thu coù theå ñuoåi kòp beân phaùt neáu xung ñoàng boä coù chaäm hôn. Maët khaùc, neáu ñoàng boä beân thu nhanh hôn beân phaùt, beân thu seõ thaáy coù khoaûng caùch giöõa caùc kyù töï nhöng giaûi maõ soá lieäu vaãn ñuùng. Nhö vaäy, cho pheùp moät sai soá nhaát ñònh giöõa beân thu vaø beân phaùt trong truyeån noái tieáp baát ñoàng boä. Trong truyeàn noái tieáp ñoàng boä, moät hay vaøi kyù töï khung seõ ñöôïc theâm vaøo moät nhoùm kyù töï. Nhöõng kyù töï naøy goïi laø kyù töï ñoàng boä. Nhôø nhöõng kyù töï naøy, thieát bò thu taùi taïo ñöôïc caùc kyù töï thoânh tin töø chuoãi Bit. Söï ñoàng boä phaûi ñöôïc giöõ suoát trong moät chuoãi soá lieäu daøi. Kyù töï ñoàng boä thöôøng ñöôïc ñöa vaøo töø keânh lieân laïc ôû MODEM ngay töø beân ngoaøi. b/ Thuû tuïc truyeàn noái tieáp baát ñoàng boä * Ñaëc ñieåm cuûa tín hieäu truyeàn noái tieáp baát ñoàng boä laø: Taàn soá CLOCK thu, phaùt phaân bieät vôùi cuøng moät taàn soá danh ñònh tuøyheo toác ñoä truyeàn bit. Caùc kyù töï truyeàn vôùi nhöõng thôøi ñieåm khoâng caàn lieân tuïc, truyeàn rieâng bieät vaø ngaãu nhieân. Ñöôøng truyeàn giöõ ôû traïng thaùi 1 trong khoaûng caùch giöõa caùc kyù töï, goïi laø traïng thaùi roãi (idle). Ñoái vôùi moät kyù töï thì LSB (Least Significant Bit) ñöôïc truyeàn ñaàu tieân vaø laàn löôït laø caùc Bit keá tieáp. ÔÛ ñaàu phaùt: Khi tín hieäu LOAD = 1 thì döõ lieäu ôû daïng song song seõ ñöôïc naïp vaøo TSR (töø ngoõ nhaäp döõ lieäu) Khi tín hieäu LOAD = 0 thì caùc bit naøy seõ ñöôïc dòch noái tieáp ra ñöôøng truyeàn. Thanh ghi dòch phaùt TSR cuõng seõ bao goàm maïch logic töï ñoäng theâm caùc bit START vaø bit STOP. ÔÛ ñaàu thu: Seõ nhaän bieát ñieåm baa moät kyù töï baèng caùch taùch bit START nhôø maïch taùch bit START (START BIT DETECT) khi traïng thaùi ñöôøng truyeàn daãn chuyeån töø 1 xuoáng 0 vaø luùc naøy boä phaän ñieàu khieån seõ ñieàu khieån thanh ghi dòch baét ñaàu dòch caùc bit treân ñöôøng daây vaøo. Sau 11 laàn dòch (1 BIT START + 8 BIT
  • 53. DATA + 2 BIT STOP) thì coù theå ñoïc ñöôïc kyù töï thu daïng song song ôû ngoõ ra thanh ghi dòch khi coù tín hieäu READ. * Ñeå kieåm tra sai khi truyeàn, trong 8 bit DATA seõ coù moät bit kieåm tra theo moät trong hai thuû tuïc sau: Kieåm tra chaün (Even parity): ToÅng soá bit moät trong 8 bit phaûi luoân luoân chaün. Kieåm tra leû (Odd parity): Toång soá bit 1 luoân luoân leû. Nhö vaäy, ôû ñaàu phaùt seõ coù boä phaän ñeå ñeám soá bit 1 cuûa 8 bit döõ lieäu vaø tuyø theo hình thöc kieåm, tra chaün hay leû seõ theâm vaøo bit cuoái cuøng giaù trò 0 hoaëc 1 cho thích hôïp. ÔÛ ñaàu thu seõ ñeám soá bit 1 cuûa moãi kyù töï ñeå xaùc ñònh xem tính hình döõ lieäu ñeán coù ñuùng hay khoâng? * Taát caû caùc thuû tuïc treân khoâng phaûi laø baét buoäc maø coù theå thay ñoåi khaùc nhau tuøy theo vieäc caøi ñaët thoâng soá ban ñaàu bôûi ngöôøi thöïc hieän vieäc truyeàn. Chæ baét buoäc laø caùc thuû tuïc ôû hai ñaàu thu vaø phaùt töông öùng nhau. Taát caû nhöõng coâng vieäc ñaõ moâ taû ôû treân seõ ñöôïc thöïc hieän bôûi moät boä phaän giao tieáp thoâng tin baát ñoàng boä maø thaønh phaàn chính laø chip LSI- goïi laø UART. 4. THOÂNG TIN NOÁI TIEÁP ÑOÀNG BOÄ. Caùc thuû tuïc truyeàn noái tieáp baát ñoàng boä ñôn giaûn vaø reû tieàn, nhöng chæ thích hôïp khi truyeàn caùc thoâng tin ngaén hoaëc moät vaøi kyù töï caùch quaõng. Ñoái vôùi caùc taäp tin daøi, söû duïng phöông thöùc truyeàn thoâng tin ñoàng boä seõ hieäu quaû hôn. Trong phöông phaùp naøy, thoâng tin ñöôïc truyeàn theo töøng khoái (Blocks). Moãi khoái bao goàm moät soá tuaàn töï caùc kyù töï vaø khoâng caàn caùc bit Start, bit Stop, maø seõ ñoàng boä theo töøng khoái cuõng nhö vieäc kieåm tra sai. Trong caùc heä thoáng ñoàng boä, tín hieäu Clock cuûa maùy phaùt seõ ñöôïc truyeàn qua maùy thu song song vôùi döõ lieäu ñeå duøng laøm xung Clock cho vieäc dòch chuyeån caùc bit thu. Neáu trong thöïc teá khoâng theå thöïc hieän vieäc truyeàn tín hieäu Clock, thì maùy thu phaûi töï taïo ra tín hieäu naøy. Do ñoù seõ phöùc taïp hôn vaø coù giaù thaønh cao hôn so vôùi thoâng tin baát ñoàng boä. Ñeå traùnh tröôøng hôïp caùc chuoãi bit 0 hoaëc 1 keùo daøi ñoâi khi coù theå duøng loaïi maõ nhò phaân ñaëc bieät ñeå maùy thu giöõ ñöôïc khaû naêng ñoàng boä. Maùy thu göûi moät hoaëc nhieàu kyù töï ñoàng boä nhaän daïng khi baét ñaàu vieäc truyeàn vaø ngay khi nhaän ñöôïc bit ñoàng boä, maùy thu baét ñaàu nhaän bit. Phaàn lôùn caùc maïng ñoàng boä söû duïng caùc nghi thöùc do IBM taïo ra vaø nghi thöùc ñoàng boä nhò phaân BISYNC (Binary Synchronous) hoaëc ñoàng boä ñöôøng ñieàu khieån döõ lieäu SDLC (Synchronous Data Link Control).
  • 54. Caùc giao tieáp chuaån RS-232C vaø RS-449 cung caáp caùc chaân sau ñeå truyeàn tín hieäu Clock: + Ñoái vôùi RS-232: Chaân 15: TCLK- Transmit Clock (töø DCE). Chaân 17: RCLK- Receive Clock (töø DCE). Chaân 24: ETCLK- Externel Transmit Clock. + Ñoái vôùi RS-449: Chaân 6 vaø chaân 23: Send Timing Chaân 8 vaø chaân 26: Receive Timing. Chaân 17 vaø chaân 35:Terminal Timing (töø DCE). Khi duøng Modem ñoàng boä thì tín hieäu ñònh thôøi seõ ñöôïc cung caáp töø Modem ñeán maùy tính. Taàn soá Clock phaùt coù theå taïo töø Modem hoaëc thieát bò ñaàu cuoái. LÖU ÑOÀ VAØ CHÖÔNG TRÌNH DAØNH CHO PHAÀN CÖÙNG Ñeå vieát chöông trình treânmaùy cho PC, ngöôøi ta coù theå duøng caùc ngoân ngöõ laäp trình khaùc nhau. Döïa vaøo yeâu caàu thieáát keá maïch, döïa vaøo möùc ñoä nhoùm thöïc hieän thaáy vieäc söû duïng ngoân ngöõ Assembly keát hôïp vôùi caùc phuïc vuï ngaét cuûa Bios ñeå vieát chöông trình. Caùc nhaø thieát keá PC daønh rieâng Int 14H cuûa Bios ñeå phuïc vuï cho coång noái tieáp. Ngaét naøy phuïc vuï khaù ñaày ñuû caùc yeâu caàu veà xuaát, nhaäp vaø kieåm tra traïng thaùi ñöôøng truyeàn vaø Modem. Vieäc söû duïng ngaét naøy laøm cho chöông trình trôû neân deã daøng, ngaén goïn. I- Giôùi thieäu ngaét INT 14h cuûa Bios: Bios truy caäp tôùi khoái gheùp noái noái tieáp nhôø ngaét INT 14h vôùi caùc haøm nhö sau:
  • 55. Haøm: Vai troø. 00h Khôûi phaù khoái gheùp noái tieáp 01h Göûi moät kyù töï 02h Nhaän moät kyù töï 03h Ñoïc traïng thaùi cuûa khoái gheùp noái tieáp 04h Khôûi phaùt caûng noái tieáp môû roäng 05h Ñieàu khieån truyeàn thoâng cuûa caûng noái tieáp môû roäng Bios coù theå ñieàu haønh toái ña 4 khoái gheùp noái tieáp, coù teân töø COM1 ñeán COM4 vôùi caù ñòa chæ nhö sau: Khoái gheùp noái Ñòa chæ cô sôû Ngaét cöùng IRQ COM1 COM2 COM3 COM4 3F8h 2F8h 3E8h 2E8h IRQ4 IRQ3 IRQ4 (hoaëc hoûi voøng) IRQ3 (hoaëc hoûi voøng) ÔÛ möùc ñoä chöông trình, ta coù theå choïn moät khoái gheùp noái tieáp baèng caùch gaén caùc maõ töông öùng vaøo thanh ghi DX vôùi caùc giaù trò: 00h Cho 01h Cho 02h Cho 03h Cho COM1 COM2 COM3 COM4 * Phuïc vuï 00h: Khôûi phaùt khoái gheùp noái tieáp. Phuïc vuï 00h aán ñònh nhöõng thoâng soá khaùc nhau cuûa caùc khoái gheùp noái tieáp cuõng nhö RS – 232C. Ñoù laø caùc thoâng soá: - Soá baud: Toác ñoä trao ñoåi thoâng tin - Tín chaün leû - Soá bit döøng Kích thöôùc kyù töï haây soá bit noái tieáp. Nhöõng thoâng soá naøy ñöôïc toå hôïp trong maõ 8 bit, ñöôïc ñaët vaøo thanh ghi AL, theo thöù töï caùc bit nhö sau: + D7, D6, D5: maãu caû vaän toác (tính baèng baud) + D4, D3: maõ cuûa tính chaün leû + D2: maõ cuûa bit döøng D1, D0: maõ cuûa kích thöôùc kyù töï Caùc maõ treân theo baûng sau:
  • 56. D7 D6 D5 Vaän toác (bit persec ) D4 D3 Tính chaün leû 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 110 150 300 600 1200 2400 4800 9600 0 0 1 1 0 1 0 1 Khoâng coù Tính leû Khoâng coù Tính chaün D1 Kích thöôùc kyù töï D1 D0 Tính chaün leû 0 1 Moät bit Stop Hai bit Stop 0 0 1 1 0 1 0 1 Khoâng duøng Khoâng duøng 7 bit 8 bit • Phuïc vuï 01h: Göûi moät kyù töï Haøm naøy göûimoät kyù töï ra thieát bò ngoaøi vôùi khoái gheùp noái tieáp. Muoán vaäy, thöïc hieän chuoãi haønh ñoäng sau: - Ñaët soá lieäu töø khoái gheùp noái tieáp vaøo thanh ghi DX (ví duï COM1 vôùi 00h) - Göûi maõ kyù töï vaøo thanh ghi AL. - Göûi 01h vaøo thanh ghi AH. - Goïi INT 14h Sau khi thöc hieän chöông trình con, thanh ghi AH chöùa keát quaû chöông trình. Neáu: - Bit D7 = 1, kyù töï khoâng ñöôïc truyeàn ñi - Bit D7 = 0, kyù töï ñaõ ñöôïc truyeàn ñi • Phuïc vuï 02h: Nhaän moät kyù töï. Trình töï nhaän moät kyù töï cuõng nhö treân, töùc laø: Ñaët soá lieäu töø khoái gheùp noái tieáp vaøo DX. Ñaët giaù trò AH baèng 02h
  • 57. Goïi INT 14h Keát quaû cuûa chöông trình con laø kyù töï ñöôïc göûi vaøo khoái gheùp noái tieáp trong thanhghi AL. Thanh ghi AH cuõng chöùa keát quaû cuûa vieäc thöïc hieän chöông trình nhö tröôøng hôïp AH = 01h, töùc laø: Bit D7=1, kyù töï khoâng töï nhaän Khi D7=0, kyù töï ñaõ ñöôïc nhaän. • Phuïc vuï 02h: Ñoïc traïng thaùi cuûa khoái gheùp noái. Muoán vaäy cuõng phaûi theo caùc trình töï: Ñaët soá hieäu khoái gheùp noái vaøo DX Ñaët 03h vaøo AH Keát quaû caùc chöông trình con laø: Traïng thaùi cuûa ñöôøng daây (cuûa khoái gheùp noái) ñöôïc ñaët trong thanh ghi AH, coù caùc bit nhö hình döôùi. Traïng thaùi cuûa Modem ñöôïc ñaët trong thanh ghi AL nhö hình döôùi: Bit YÙ nghóa Bit YÙ nghóa D7 Vöôït qua ñoä treã =0: Khoâng coù sai soá =1 Coù sai soá D7 Tín hieäu cuûa soùng mang = 0 Khoâng ñöôïc phaùt hieän = 1 Ñaõ ñöôïc phaùt hieän D6 Thanh ghi dòch chuyeån =0 Thanh ghi baän =1 Thanh ghi roãi D6 Chæ baùo chuoâng = 0 Khoâng reo chuoâng = 1 Reo chuoâng D5 Thanh ghi ñôïi =0 Thanh ghi baän =1 Thanh ghi roãi D5 Thieát bò ñaàu cuoái cuûa thanh ghi ñaõ saün saøng = 0 Modem khoâng saün saøng = 1 Modem saün saøng
  • 58. D4 Ngaét bôûi tín hieäu Break =0 Khoâng bieát =1 Coù tín hieäu Break D4 Saün saøng phaùt (truyeàn) = 0 Chöa saün saøng = 1 Saün saøng D3 Giao thöùc = 0 Khoâng coù loãi = 1 Coù loãi D3 Tín hieäu soùng mang ñaõ thay ñoåi =0 Khoâng thay ñoåi = 1 Thay ñoåi D2 Tính chaün leû = 0 Khoâng coø loãi = 1 Coù loãi D2 Ñöôøng chæ baùo chuoâng thay ñoåi = 0 Khoâng thay ñoåi = 1 Coù thay ñoåi D1 Soá lieäu = 0 Khoâng coù traøn = 1 Bò traøn D1 Ñöôøng daây “traïm soá lieäu saün saøng” ñaõ thay ñoåi =0 Khoâng coù thai = 1 Coù thay ñoåi D0 Soá lieäu ñaõ saün saøng = 0 Khoâng coù soá lieäu saün saøng = 1 Coù Soá lieäu saün saøng D0 Ñöôøng daây “saün saøng truyeàn” ñaõ thay ñoåi = 0 Khoâng thay ñoåi = 1 Thay ñoåi
  • 59. CHÖÔNG III THIEÁT KEÁ VAØ THI COÂNG MODUL GIAO TIEÁP MAÙY TÍNH VÔÍ KIT 8051 3. GIÔÙI THIEÄU VI MAÏCH GIAO TIEÁP MAX 232 Vi maïch MAX 232 cuûa haõng MAXIM laø moät vi maïch chuyeân duøng trong giao dieän noái tieáp vôùi maùy tính. Chuùng coù nhieäm vuï chuyeån ñoåi möùc TTL ôû loái vaøo thaønh möùc +10V hoaëc –10V ôû phía truyeàn vaø caùc möùc +3…+15V hoaëc -3…-15V thaønh möùc TTL ôû phía nhaän. Vi maïch MAX 232 coù hai boä ñeäm vaø hai boä nhaän. Ñöôøng daãn ñieàu khieån loái vaøo CTS, ñieàu khieån vieäc xuaát ra döõ lieäu ôû coång noái tieáp khi caàn thieát, ñöôïc noái vôùi chaân 9 cuûa vi maïch MAX 232. Coøn chaân RST (chaân 10 cuûa vi maïch MAX ) noái vôùi ñöôøng daãn baét tay ñeå ñieàu khieån quaù trình nhaän. Thöôøng thì caùc ñöôøng daãn baét tay ñöôïc noái vôùi coång noái tieáp qua caùc caàu noái, ñeå khi khoâng duøng ñeán nöõa coù theå hôû maïch caùc caàu naøy. Caùch truyeàn döõ lieäu ñôn giaûn nhaát laø chæ duøng ba ñöôøng daãn TxD, RxD vaø GND (mass) THIEÁT KEÁ VAØ THI COÂNG MODUL GIAO TIEÁP 1. Sô ñoà keát noái VCC GND T1 OUT R1 IN R1 OUT T1 IN T2 IN R2 OUT C1 + V+ C1 - C2 + C2 - V - T2 OUT R2 IN M A X 2 3 2
  • 60. * Sô ñoà keát noái giöõa coång COM vôùi KIT Vi ñieàu khieån 8051 : 2. Sô ñoà thöïc thöïc teá 8 0 5 1 RXD TXD 10 11 MAX 2 3 2 RXD TXD P3.0 P3.1 +V 5V MCS-8051 MAX-232 + 10uF + 10uF + 10uF + 10uF + 10uF +V 5V MCS-8051 MAX-232 + 10uF + 10uF + 10uF + 10uF + 10uF
  • 62. CHÖÔNG 1 GIÔÙI THIEÄU NGOÂN NGÖÕ HÔÏP NGÖÕ 1. NGOÂN NGÖÕ MAÙY VAØ HÔÏP NGÖÕ Chöông trình laø moät teäp leänh ñöôïc ñöa vaøo boä nhôù cho maùy thöïc hieän. Caùc leänh coù theå ñöôïc theå hieän theo nhieàu daïng (ngoân ngöõ) khaùc nhau, daïng cô baûn nhaát maø maùy (CPU) coù theå hieåu ngay goïi laø ngoân ngöõ maùy (Machine Language). Tuøy theo CPU maø ngoân ngöõ maùy coù moät daïng nhaát ñònh, ñieàu ñoù coù nghóa vôùi moät loaïi CPU coù moät ngoân ngöõ maùy rieâng. Sau ñaây laø moät ñoaïn chöông trình ngoân ngöõ maùy thuoäc hoï Intel 8086/80x86 : Leänh Daïng thaäp luïc phaân Daïng nhò phaân 1 B4 02 1011 0100 0000 0010 2 80 C2 30 1000 0000 1100 0010 0011 0000 3 50 0101 0000 Ñoïan chöông trình treân goàm 3 caâu leänh coù chieàu daøi laàn löôïc laø 2, 3 vaø1 byte. Byte ñaàu tieân goïi laø maõ leänh hay taùc töû (Operation Code) xaùc ñònh taùc vuï maø CPU phaûi thöïc hieän, phaàn coøn laïi laø taùc toá (Operand) xaùc ñònh döõ lieäu hoaëc nôi chöùa döõ lieäu maø leänh taùc ñoäng vaøo. Chieàu daøi caùc caâu leänh theo qui ñònh cuûa CPU. Ñeå coù theå laäp trình vôùi loaïi ngoân ngöõ naøy, laäp trình vieân phaûi bieát veà toå chöùc cuûa maùy ñang söû duïng. Vì laø ngoân ngöõ rieâng cuûa maùy neân chöông trình vieát baèng ngoân ngöõ naøy thöïc hieän raát nhanh vaø chieám ít choã trong boä nhôù tuy nhieân vì chöông trình vieát döôùi daïng nhò phaân neân raát khoù vieát vaø khoù nhôù deã nhaàm laãn. Hôïp ngöõ (Assembly Language) laø moät loaïi ngoân ngöõ giuùp laäp trình vieân vieát chöông trình deã daøng hôn thay cho ngoân ngöõ maùy. Hôïp ngöõ coù daïng nhö ngoân ngöõ maùy töùc laø moät leänh hôïp ngöõ töông ñöông vôùi moät leänh cuûa ngoân ngöõ maùy vaø cuõng coù theå moät leänh hôïp ngöõ töông ñöông vôùi nhieàu leänh ngoân ngöõ maùy nhöng khaùc vôùi ngoân ngöõ maùy ôû choã thay vì vieát chöông trình döôùi daïng nhò phaân ngöôøi ta duøng moät soá kyù hieäu töôïng tröng deã nhôù nhö MOV laø leänh chuyeån, ADD laø leänh coäng, SUB laø leänh tröø. Ví duï 3 leänh ngoân ngöõ maùy ôû treân coù theå vieát döôùi daïng hôïp ngöõ nhö sau: Leänh Daïng ngoân ngöõ maùy Daïng hôïp ngöõ 1 B4 02 MOV AH, 02h 2 80 C2 30 ADD DL, 30h 3 50 PUSH AX
  • 63. Dó nhieân laø maùy khoâng theå hieåu ñöôïc chöông trình vieát baèng hôïp ngöõ neân phaûi qua giai ñoaïn dòch, ñeå dòch chöông trình töø hôïp ngöõ sang ngoâng ngöõ maùy. Chöông trình laøm nhieäm vuï dòch moät chöông trình sang ngoân ngöõ maùy goïi laø trình hôïp dòch (Assembler ). Chöông trình vieát baèng hôïp ngöõ goïi laø chöông trình nguoàn( hay goác –sourse program ) vaø chöông trình döôùi daïng ngoân ngöõ maùy dòch töø chöông trình nguoàn goïi laø chöông trình ñích (hay ñoái töôïng -object program) nhö sô ñoà sau: TAÏO VAØ CHAÏY CHÖÔNG TRÌNH HÔÏP NGÖÕ Ñeå taïo vaø chaïy moät chöông trình hôïp ngöõ baïn caàn coù moät trong caùc boä trình hôïp dòch nhö Turbo Assembler cuûa haõng Borland International (goàm trình hôïp dòch TASM.EXE vaø trình lieân keát TLINK.EXE ) hoaëc Microsoft Assembler cuûa haõng Microsoft (goàm trình hôïp dòch MASM.EXE vaø trình lieân keát LINK.EXE) ngoaøi ra coøn moät soá taäp tin khaùc trong caùc boä chöông trình naøy. Duø ñang söû duïng cuûa haõng naøo cuõng phaûi theo qui trình sau: Böôùc 1: Tröôùc heát baïn caàn coù moát trình soaïn thaûo vaên baûn ñeå taïo chöông trình nguoàn hôïp ngöõ nhö NC (Norton Commander), Turbo trong Turbo Pascal…, sau khi soaïn ñöôïc ghi leân ñóa thaønh moät taäp tin coù hoï laø ASM (ví duï HELLO.ASM) Böôùc 2: Dòch chöông trình ñaõ soaïn (HELLO.ASM) vôùi trình hôïp dòch TASM.EXE (ñoái vôùi söû duïng boä dòch cuûa haõng turbo). Sau khi dòch treân ñóa seõ coù moät taäp tin môùi goïi laø taäp ñoái töôïng (HELLO.OBJ) doøng leänh dòch chöông trình nhö sau: C: TASM HELLO.ASM Turbo Assembler Version 2.01 Copyright (c) 1990 Borland International Assembling file: hello.asm to hello.obj Error message: None Warning message: None Passes: 1 Remaining memory: 370k Thoâng baùo treân cho bieát chöông trình cuûa baïn khoâng coù loãi sai. Neáu coù, phaûi söûa laïi chöông trình (vôùi trình soaïn thaûo ) vaø cho dòch laïi. Baây giôø treân ñóa cuûa baïn coù hai taäp tin HELLO.ASM (chöông trình nguoàn do baïn taïo ra) vaø HELLO.OBJ (taäp tin ñoái töôïng). Neáu chöông trình khoâng loãi thì qua böôùc 3 Trình nguoàn (Source program) Trình hôïp dòch (Assembler) Trình ñoái töôïng (Object program)
  • 64. Böôùc 3: Lieân keát chöông trình vôùi trình lieân keát TLINK.EXE. doøng leänh thöïc hieän lieân keát nhö sau: C:TLINK HELLO.OBJ Turbo Link Version 3.01 Copyright (c) 1990 Borland International Neáu chöông trình cuûa baïn khoâng coù loãi sai, TLINK seõ taïo taäp thöïc hieän HELLO.EXE. Böôùc 4: Cuoái cuøng laø thöïc hieän chöông trình cuûa baïn. Qui trình taïo vaø thöïc hieän chöông trình coù theå toùm taét nhö ôû hình sau: CUÙ PHAÙP LEÄNH HÔÏP NGÖÕ Chöông trình hôïp ngöõ goàm nhieàu leänh, moãi leänh vieát treân moät doøng. Leänh hôïp ngöõ phaân laøm hai loaïi laø chæ thò vaø chæ daãn. Chæ thò laø leänh seõ ñöôïc dòch sng maõ maùy, töùc laø leänh seõ ñöôïc thi haønh, coøn chæ daãn ( coøn goïi laø leänh giaû) chæ laø leänh höôùng daãn trình hôïp dòch trong quaù trình dòch chöông trình. Daïng toång cuûa moät leänh goàm 4 chöông trình nhö sau: <teân> <taùc töû> <taùc toá> < ;ghi chuù> vd: DoAddition: ADD AX, DX ;Taêng AX löôïng DX Trình nguoàn (treân giaáy) Trình soaïn thaûo Trình nguoàn (treân ñóa –ASM) TASM.EXE (dòch chöông trình ) TLINK.EXE (lieân keát chöông trình Taäp ñoái töôïng (.OBJ) Trình ñích (.EXE)
  • 65. Caùc tröôøng hôïp caùch nhau ít nhaát laø moät khoaûng traéng hoaëc kí töï nhaûy (Tab) a/ Tröôøng teân Tröôøng teân coù theå laø nhaõn (Label ) hoaëc kí hieäu (Symbol). Nhaõn laø moät teân ñaïi dieän cho moät vò trí trong chöông trình (tröôøng hôïp naøy coù daáu : theo sau), hoaëc teân thuû tuïc (chöông trình con) hoaëc teân bieán vuøng nhôù chöùa döõ lieäu ). b/ Tröôøng taùc töû Tröôøng taùc töû laø teân gôïi nhôù cuûa leänh. Neáu laø chæ thò nhö MOV, ADD, … thì leänh seõ ñöôïc dòch sang maõ maùy coøn neáu laø chæ daãn nhö ENDS, PROC, … thì ñoù laø leänh höôùng daãn trình hôïp dòch trong quaù trình dòch chöông trình sang maõ maùy. c/ Tröôøng taùc toá Tröôøng taùc toá xaùc ñònh döõ lieäu seõ ñöôïc xöû lyù bôûi leänh. Leänh coù theå coù hoaëc khoâng coù taùc toá. Neáu coù hai taùc toá thì chuùng caùch nhau baèng daáp phaåy, taùc toá thöù nhaát (töø traùi qua ) goïi laø taùc toá ñích, taùc toá thöù hai goïi laø taùc toá nguoàn. d/ Tröôøng ghi chuù Sau moãi caâu leänh coù theå vieát doøng ghi chuù sau daáu chaám phaåy vôùi muïch ñích laø ñeå giaûi thích yù nghóa cuûa leänh KHAI BAÙO DÖÕ LIEÄU Döõ lieäu trong chöông trình ñeàu ñöôïc chuyeån sang döôùi daïng nhò phaân, tuy nhieân baïn coù theå vieát döôùi daïng thaäo phaân, thaäp luïc phaân hoaëc chuoãi kyù töï a/ Caùch vieát soá Trong caùc chöông trình bình thöôøng ñöôïc hieåu laø thaäp phaân, khi caàn coù theâm chöõ D hoaëc d ñaèng sau soá (ví duï 10,10D, 10d ) ñeàu coù giaù trò nhö nhau Soá vieát theo heä thaäp luïc phaân keát thuùc baèng chöõ H hoaëc h phaûi baét ñaàu laø moät soá (ví duï 10h, 10H, 2F8h, 2F8H) Soà nhò phaân keát thuùc baèng B hoaëc b (ví duï 1001b, 1001B ) b/ Chuoãi kyù töï Kyù töï hoaëc chuoãi kyù töï phaûi raøo giöõa hai daáu nhaùy ñôn (‘) hoaëc daáu nhaùy keùp(“) (ví duï ‘Hello’,”hello”,’A’, “A” ) caùc kyù töï ñöôïc chuyeån thaønh maõ ASCII töông öùng, do ñoù ‘A’,”A” ,41h hoaëc 65 ñeàu coù nghóa nhö nhau. c/ Ñònh nghóa döõ lieäu Caùc chæ daãn thoâng duïng duøng ñònh nghóa döõ lieäu kieåu byte, töø (2 byte – Word ) hoaëc töø keùp (4 byte – Double word ) nhö sau: Nhaõn DB trò, trò, ;byte
  • 66. Nhaõn DW trò, trò, ;word Nhaõn DD trò, trò, ;double word Vôùi nhaõn laø teân vuøng nhôù (coøn goïi laø bieán, thöïc chaát laø ñòa chæ töôïng tröng cuûa vuøng nhôù vaø ñöôïc chuyeån thaønh ñòa chæ thaät sau khi dòch chöông trình ) ñöôïc ñònh nghóa vôùi kích thöôùc 1 byte (DB ), 2 byte (DW ) hoaëc 4 byte (DD ). Moãi trò ghi trong phaàn taùc toá seõ laø trò ñöôïc gaùn cho vuøng nhôù ñöôïc caáp phaùt. Neáu thay trò baèng daáu ? thì seõ khoâng gaùn trò cho vuøng nhôù Vd : B DB 5 coù nghóa laø vuøng nhôù ñöôïc caáp phaùtcoù ñòa chæ laø B, chieám 1 byte vaø coù trò laø 5 Vd : W DW 10 coù nghóa laø vuøng nhôù ñöôïc caáp phaùt coù ñòa chæ laø W chieám 2 byte vaø coù giaù trò laø 0Ah (W laø 0A coøn W+1 laø 00 ) d/ Ñònh nghóa haèng Thay vì vieát tröïc tieáp caùc haèng soá hoaëc chuoãi trong chöông trình, ta coù theå ñaët teân (goïi laø kí hieäu ) cho raèng ôû ñaàu chöông trình, sau ñoù chæ caàn duøng caùc teân ñoù thay cho caùc haèng. Caùch ñaët teân cho haèng naøy laøm chöông trình deã ñoïc vaø deã hieåu hôn vôùi cuù phaùp sau: Teân EQU Haèng Vd: CR EQU 0D h LF EQU 0A h STR EQU ‘Du lieu nhap sai!!!!’ Sau ñoù coù hai doøng sau laø töông ñöông MESS DB STR, CR, LF , ’S’ MESS DB ‘Du lieu nhap sai!!!!’, 0Dh, 0Ah, ’$’ CAÁU TRUÙC CHÖÔNG TRÌNH Nhö ñaõ trình baøy, chöông trình maõ maùy goàm 3 phaàn chöùa trong 3 ñoaïn laø ñoaïn maõ döõ lieäu vaø ngaên xeáp do ñoù trình hôïp ngöõ cuõng ñöôïc toå chöùc töông töï vôùi caùc leänh thích hôïp. a/ Kieåu boä nhôù Kích thöôùc boä nhôù duøng cho ñoaïn maõ vaø döõ lieäu ñöôïc xaùc ñònh baèng chæ daãn MODEL nhö sau: MODEL kieåu Vôùi kieåu laø: •TINY Maõ vaø döõ lieäu naèm cho phaïm vi moät ñoaïn
  • 67. •SMALL Maõ naèm trong moät ñoaïn 64K nhöng döõ lieäu ôû trong phaïm vi moät ñoaïn 64K •COMPACT Maõ trong phaïm vi moät ñoaïn 64K vaø döõ lieäu coù theå lôùn hôn 64K Thöôøng coù ít chöông trình naøo coù maõ hoaëc döõ lieäu lôùn hôn 64K neân kieåu SMALL laø ñuû. Kieåu TINYduøng ñeå dòch chöông trình sang daïng .COM. b/ Ñoaïn ngaên xeáp Ñoaïn ngaên xeáp khai baùo kích thöôùc vuøng ngaên xeáp vôùi chæ daãn : . STACK Kích Thöôùc Kích thöôùc laø ñoä lôùn ngaên xeáp tính baèng byte, neáu khoâng ghi seõ maëc nhieân laø 1024. Ví duï sau khai baùo vuøng ngaên xeáp 256 byte . STACK 100h c/ Ñoaïn döõ lieäu Ñoaïn döõ lieäu duøng khai baùo bieán hoaëc haèng baét ñaàu baèng chæ daãn .DATA. Ví duï: . DATA CR EQU 13 LF EQU 10 VungNho1 DW 2 VungNho2 DW 3 ThongBao DB ‘CHUONG TRINH ABC ’ d/ Ñoaïn maõ Ñoaïn maõ chöùa caùc leänh cuûa chöông trình baét ñaàu baèng chæ daãn : . CODE Leänh cuoái cuøng cuûa chöông trình laø chæ daãn END. Toùm laïi moät chöông trình hôïp ngöõ thoâng thöôøng coù daïng sau: . MODEL SMALL . STACK 100h . DATA ; phaàn khai baùo döõ lieäu . CODE ; phaàn leänh END
  • 68. CHÖÔNG 2 GIÔÙI THIEÄU NGOÂN NGÖÕ LAÄP TRÌNH VISUAL C++ I. Toång quan ngoân ngöõ visual c Taïi thôøi ñieåm hieän nay ñaõ coù raát nhieàu ngoân ngöõ laäp trình khaùc nhau phuïc vuï cho nhieàu muïc ñích khaùc nhau, tuøy vaøo öùng duïng cuï theå maø ngöôøi laäp trình seõ söû duïng moät ngoân ngöõ naøo maø mình bieát ñeå vieát chöông trình. Trong cuoán Luaän vaên toát nghieäp naøy ñeå taïo phaàn giao dieän cho chöông trình toâi söû duïng ngoân ngöõ laäp trình Visual C++ moät ngoân ngöõ khaù phoå bieán hieän nay. Visual C++ laø moät ngoân ngöõ laäp trình tröïc quan noù döïa treân neàn taûng cuûa Ngoân ngöõ C/C++ vì theá nhöõng ai ñaõ bieát ñeán ngoân ngöõ C/C++ ñeàu coù theå töï hoïc vaø töï vieát cho mình moät chöông trình. Ñaây laø ngoân ngöõ chaïy treân moâi tröôøng Windows vaø coù theå lieân keát vôùi caùc chöông trình trong moâi tröôøng Dos 2. Caùch vieát moät chöông trình baèng visual c++ Toâi khoâng theå giôùi thieäu moät caùch ñaày ñuû veà Visual C++ nhöng coù theå toùm taét quaù trình vieát chöông trình baèng Visual C++ nhö sau: Böôùc 1: Thieát keá giao dieän Böôùc 2: Vieát maõ leänh Ñoái vôùi böôùc thieát keá giao dieän, baïn seõ thieát keá “boä maët“ cuûa chöông trình. Baïn duøng caùc coâng cuï Visual C++ ñeå ñöa caùc ñoái töôïng khaùc nhau (nhö laø caùc nuùt baám, thanh cuoän, nuùt radio…) vaøo trong cöûa soå chöông trình cuûa baïn. Ñaëc bieät trong phaàn thieát keá giao dieän baïn khoâng phaûi vieát moät maõ leänh naøo. Ñoái vôùi böôùc vieát maõ leänh baïn duøng trình soaïn thaûo cuûa Visual C++ vaø ngoân ngöõ laäp trình C++ ñeå vieát maõ leänh cho chöông trình
  • 69. CHÖÔNG 3 CHÖÔNG TRÌNH CHÖÔNG TRÌNH GIAO DIEÄN CAÙC MAÕ LEÄNH VIEÁT CHO CHÖÔNG TRÌNH GIAO DIEÄN ♦ HIEÅN THÒ FILE void CLUANVANTOTNGHIEPDoc::Serialize(CArchive& ar) { if (ar.IsStoring()) { // TODO: add storing code here } else { // TODO: add loading code here } // Calling the base class CRichEditDoc enables serialization // of the container document's COleClientItem objects. m_bRTF=FALSE; CRichEditDoc::Serialize(ar); } ♦ CHUYEÅN ÑOÅI FILE ASM THAØNH LILE LIST void CChildFrame::OnCovertlst() { // TODO: Add your command handler code here system("C:LVTNASM51 TEST1.ASM "); }
  • 70. ♦ CHUYEÅN ÑOÅI FILE OBJ THAØNH FILE HEX void CChildFrame::OnConverthex() { // TODO: Add your command handler code here system("C:LVTNRL51 TEST1.OBJ"); system("C:LVTNOH TEST1.OBJ"); } ♦ GOÏI CHÖÔNG TRÌNH MAÙY TÍNH TRÔÏ GIUÙP CHO VIEÄC ÑOÅI CAÙC CÔ SOÁ KHAÙC NHAU void CLUANVANTOTNGHIEPView::OnCalCulator() { // TODO: Add your command handler code here system("Calc.exe"); } ♦ GOÏI CHÖÔNG TRÌNH TRUYEÀN TÖØNG BYTE KÍ TÖÏ void CLUANVANTOTNGHIEPView::OnTransmitted() { // TODO: Add your command handler code here system("C:LVTNTERMINAL.EXE"); } ♦ GOÏI CHÖÔNG TRÌNH TRUYEÀN FILE DÖÕ LIEÄU (*.HEX) void CChildFrame::OnLoadfile() { // TODO: Add your command handler code here system("C:LVTNTERMINA3.EXE"); }
  • 71. CHÖÔNG TRÌNH TRUYEÀN DÖÕ LIEÄU TRUYEÀN GIÖÕA 2 KIT VI ÑIEÀU KHIEÅN 1. LÖU ÑOÀ ♦ BEÂN KIT VÑK TRUYEÀN: BEGIN KHÔØI TAÏO 8051 ÔÛ CHEÁ ÑOÄ GIAO TIEÁP NOÁI TIEÁP NAÏP ÑÒA CHÆ QUAÛN LYÙ VUØNG DÖÕ LIEÄU CAÀN TRUYEÀN KIEÅM TRA BEÂN NHAÄN SAÜN SAØNG ? KIEÅM TRA DÖÕ LIEÄU CAÀN TRUYEÀN HEÁT CHÖA ? TRUYEÀN TÖØNG BYTE END YES NO NO YES
  • 72. ♦ BEÂN KIT VÑK 8051 NHAÄN: BEGIN KHÔØI TAÏO 8051 ÔÛ CHEÁ ÑOÄ GIAO TIEÁP NOÁI TIEÁP NAÏP ÑÒA CHÆ QUAÛN LYÙ VUØNG DÖÕ LIEÄU TRUYEÀN ÑEÁN KIEÅM TRA BEÂN PHAÙT SAÜN SAØNG CHÖA ? KIEÅM TRA Ñ/C QUAÛN LYÙ VUØNG DL TRUYEÀN ÑEÁN HEÁT CHÖA ? NHAÄN TÖØNG BYTE END YES NO NO YES
  • 73. 2. CHÖÔNG TRÌNH ♦ BEÂN KIT VÑK TRUYEÀN: org 5000h mov IE,#00h ;khoi tao khong cho phep ngat mov tmod,#20h mov th1,#-13 ;timer mode 2, 2400baud setb tr1 ;cho phep chay mov scon,#0fch ;khoi tao truyen data mode 3 mov dptr,#6000h ;nap dia chi quan li vung ma x2: jb p1.1,x2 ;neu bang 1 thi cho 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 ;neu dung bang 1 thi xoa de goi tiep byte thu 2 clr ti inc dptr mov a,dpl cjne a,#0ffh,x2 mov a,#76h mov dptr,#0c000h movx @dptr,a sjmp $ end ♦ BEÂN KIT VÑK 8051 NHAÄN: org 5000h setb p1.1 mov IE,#00h ;cam ngat mov tmod,#20h mov th1,#-13 setb tr1 mov scon,#0fch ;khoi tao giao tiep noi tiep mov dptr,#6000h xr2: clr p1.1 xr1: jnb ri,xr1 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 mov a,dpl cjne a,#0ffh,xr2 mov a,#79h
  • 74. mov dptr,#0c000h movx @dptr,a sjmp $ ;nhay tai cho end ;RxD cua may phat va RxD cua may thu duoc noi voi nhau lam duong truyen data ;TxD cua may phat va TxD cua may thu duoc noi voi nhau lam xung clk TRUYEÀN DÖÕ LIEÄU TÖØ MAÙY TÍNH ÑEÁN KIT VÑK 8051 B1. TRUYEÀN TÖØNG BYTE KÍ TÖÏ TÖØ MAÙY TÍNH ÑEÁN KIT VÑK 1. LÖU ÑOÀ ♦ BEÂN TRUYEÀN (MAÙY TÍNH)
  • 75. BEGIN THIEÁT ÑAËT ÑÒA CHÆ VUØNG DÖÕ LIEÄU CUÛA CHÖÔNG TRÌNH, LÖU VAØ CAØI ÑAËT CAÙC NGAÉT CUÛA MAÙY TÍNH , ÑAËT PHUÔNG THÖÙC GIAO TIEÁP CHUAÅN (2400 b/s, 8 bit, None Parity, 1 Stopbit) HIEÅN THÒ MENU CUÛA CHÖÔNG TRÌNH KIEÅM TRA COÙ PHÍM NAØO ÑÖÔÏC AÁN ? END GOÏI CHÖÔNG TRÌNH HIEÅN THÒ VAØ TRUYEÀN KÍ TÖÏ ÑÖÔÏC NHAÁN PHÍM F1 # PHÍM F1, F9 PHÍM F9 KIEÅM TRA COÙ PHÍM NAØO ÑÖÔÏC NHAÁN ?
  • 76. ♦ BEÂN NHAÄN (KIT VI ÑIEÀU KHIEÅN 8051): 2. CHÖÔNG TRÌNH ♦ BEÂN TRUYEÀN (MAÙY TÍNH): BEGIN KHÔÛI TAÏO 8051 ÔÛ CHEÁ ÑOÄ GIAO TIEÁP NOÁI TIEÁP NOÁI TIEÁP NAÏP ÑÒA CHÆ QUAÛN LYÙ VUØNG DÖÕ LIEÄU SEÕ ÑÖÔÏC GÖÛI TÔÙI NHAÄN TÖØNG BYTE ÑÖÔÏC GÔÛI TÔÙI END KIEÅM TRA XEM ÑAÕ HEÁT ÑÒA CHÆ QUAÛN LYÙ VUØNG DL YES NO
  • 77. CHÖÔNG TRÌNH TRUYEÀN TÖØNG BYTE KÍ TÖÏ TÖØ MAÙY TÍNH ; STACK stack segment stack db 300 dup('?') stack ends ;------------------------------------------ DATA ---------------------- Data Segment ;Messages MENU_MS db '',0dh,0ah db '',0dh,0ah db '* THE TRANSMITTED CHARACTERS * ‘,0dh,0ah db '** --> Press <F1> To Redisplay This MENU ** ',0dh,0ah db '** --> Press <F9> To Exit This Program ** ’, 0dh,0ah db 'Input characters from keyboard:' db '$' ; PROT_MS db '',0dh,0ah ERR1_MS db 0dh,0ah,'*** Cannot Transmit ***',0dh,0ah ; ;PROGRAM PARAMETER STORAGE CARD_BASE dw 03f8h ;Address of RS 232 card for all harware ;type except INT_NUM db 0ch ;Offset in Bios table as follows SETUP_BYTE db 0bbh ;Default value ; ;Origin interrupt vector address to restore on exit O_INT_SEG dw 0000h ;segment O_INT_OFF dw 0000h ;offset ; ;circular buffer and pointers: CIRC_BUF db 20 dup(00h) ;Circular buffer dw 0 DATA_IN dw 0 ;imput pointer DATA_OUT dw 0 ;output pointer ; DATA Ends ;-------------------------------------- CODE -------------------------------------- CODE SEGMENT ASSUME CS:CODE START:
  • 78. ; ;Establish addressability of program's data Segment 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 | ;----------------------| ; ;Examine Ram location F000:FFFE to determine IBM hardware push ds ;Save program 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 ;Bios data area segment mov ds,dx ;Data segment to Bios area mov cx,ds:0400h ;Offset card 1 pop ds ;Restore program ds mov Card_Base,cx ;Save in program's data ; ;determine interrupt number: ; 0bh IRQ4 all other hardware cmp al,0fdh ;Code for PCjr jne Set_Address mov int_num,0bh ; ;----------------------------------| ;Save/Install Interrupt | ;----------------------------------| ;Obtain and save the segment/offset of the original communications ;interrup installed on entry using Dos service number 53 ;of Int 21h Set_Address:
  • 79. mov ah,53 ;Dos service request number mov al,Int_Num ;Interrup number (0bh or 0ch) int 21h ; ;ES:BX = segment/offset of original handler mov O_Int_Seg,es ;Save segment mov O_Int_Off,bx ;and offset ; ;Insert address of the interrup service routine in the Bios ;Label for interrup service routine is: RS232_INT ;use DOS service number 37 of INT 21h mov ah,37 ;Dos service request number mov al,int_num ;Machine interrup number mov dx,offset cs:RS232_Int push ds ;Save program data segment push cs pop ds ;Set DS to segment base of int 21h ;interrup service routine pop ds ;Restore program's ds ; ;------------------| ;Set protocol | ;------------------| ;Set default communication parameters mov al,10100011b ;Control code mov ah,0 ;Bios request number mov dx,0 ;Comm1 in all hardware types int 14h ;Bios service request call comm_on call flush ;Flush keyboard buffer ; ;------------------------------------------------------------------------------------| ; Send and receive characters | ; monitor funtion key | ;------------------------------------------------------------------------------------| Monitor: mov ah,1 ;Code for read keyboard status int 16h ;Bios service jz ser_imp ;Nothing in keyboard buffer jmp char_typed ;Character in keyboard buffer ;
  • 80. ;Delay loop to allow interrupt to occur Ser_imp: sti ;interrupt on mov cx,50 Delay: nop nop loop delay ; ;--------------------------------------| ;Test for new data received | ;--------------------------------------| cli ;Interrup off while reading pointer mov bx,data_out ;Compare pointers cmp bx,data_in jne new_data ;New data item or items sti ;Interrup on jmp Monitor ;Reapeat cycle ; ;------------------| ;Process char | ;------------------| ;Receive character type from keyboard buffer char_typed: mov ah,0 ;Code for read keyboard char int 16h ;Bios service ;Test for <F1> and <F9> keys cmp ax,3b00h ;<F1> jne test_f9 jmp show_menu ;<F1> key pressed Test_F9: cmp ax,4300h ;<F9> je dos_exit jmp show_and_send ;<F9> key pressed ; ;----------------| ; Exit | ;----------------| Dos_Exit: ;Communications interrupts OFF call Comm_Off ; ;Restore orginal interrupt vector for communications interrup number
  • 81. mov ah,37 ;Dos service request number mov al,int_num ;Machine interrup number mov dx,o_int_off ;Offset to DX mov ax,o_int_seg ; Segment mov ds,ax ;to DS int 21h ;Exit mov ah,76 ;Dos service request number mov al,0 ;No return code int 21h ;Exit to dos ; ;----------------------| ;Redisplay Menu | ;----------------------| Show_Menu: mov dx,offset menu_ms call show_message ;Display message routine jmp monitor ; ;--------------------------| ;New Data Receiver | ;--------------------------| New_Data: lea si,circ_buf ;Circular buffer address mov bx,data_out ;Output pointer add si,bx ;Buffer start +displacement mov al,byte ptr[si] ;Get character ; ;Update output pointer inc bx ;Bump cmp bx,20 ;Pointer overflows buffer? jne ok_out_ptr mov bx,0 ;Request to start of buffer ; Ok_Out_Ptr: mov data_out,bx ;Update ; ;Display byte taken from buffer sti call tty jmp monitor ;
  • 82. ;------------------------| ;Display Protocol | ;------------------------| Show_Protocol: mov dx,offset prot_ms call show_message ;Display message routine jmp monitor ; ;--------------------------| ; Output and Display | ;--------------------------| Show_and_Send: ;Send through RS-232c line ;Wait loop for tranmitter holding register empty mov cx,2000 ;Prime wait counter push ax ;Save character to transmit ; Thre_Wait: mov dx,card_base add dx,5 ;Line status register in al,dx ;Get byte at port jmp short $+2 ;Thre bit set? test al,20h jnz ok_2_send loop thre_wait ; ;Wait period timed out,display error message and exit pop ax ;Restore stack mov dx,offset err1_ms call show_message ;Error to screen jmp monitor ; Ok_2_Send: pop ax ;Retrieve byte ;Place in transmitter hoding register to send mov dx,Card_Base ;THR register out dx,al ;Send jmp short $+2 ;I/O delay ;Display character call tty jmp monitor ;------------------------------------------------------------------------------|
  • 83. ; PROCEDURES | ;------------------------------------------------------------------------------| Comm_On proc near ;Set communication line for interrupt operation received data 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 ; ;Init mode control register for data terminal ready ;(bit 0) request to send (bit1) and output 2 (bit3) ;DX is still holding port address mov dl,0fch ;MCR address mov al,00001011b ;Bit 0,1 and 3 set out dx,al jmp short $+2 ; ;Set bit 7 of the line control register (DLAB) to access ;the interrupts enable register at xF9h mov dl,0fbh ;xFBH =line control register in al,dx ;Read byte at port jmp short $+2 ;I/O delay and al,7fh ;Reset DLAB out dx,al ;Write to LCR jmp short $+2 ;I/O delay ; ;Enable interrupts for DATA READY only mov dl,0f9h ;Interrupt enable register mov al,1 ;Data ready interrupt out dx,al jmp short $+2 ;I/O delay ; ;Enable communications interrupts by resetting the bits ;corresponding to the irq3 and iqr4 line on the interrupt mask ;register(port address =21h) in al,21h ;Read byte at port jmp short $+2 ;I/O delay and al,0e7h ;Reset bit 3 and bit 4 out 21h,al
  • 84. jmp short $+2 ;I/o delay ; ;Reenable interrupt sti ret Comm_on Endp ; ;---------------------------------------| ; Communication line off | ;---------------------------------------| Comm_off proc near ;Disable communications interrup by setting for irq3 and iqr4 line ;on the interrupt mask register (port address=21) in al,21h or al,18h ;Set bit 3 and 4 out 21h,al jmp short $+2 ret Comm_off Endp ; Show_Message proc near ;Display string ->by the DX register using Dos function 09h mov ah,9 ;Service request number int 21h ;Dos interrupt ret Show_Message Endp ; ;-----------------------------| ; Teletype write | ;-----------------------------| tty proc near ;Display character or control code at cursor position tty_one: push ax ;Save character mov ah,14 ;Bios service request number ;for ASCII teletype write mov bx,0 ;Display page int 10h ;Bios service request pop ax ; ;Test for carriage return and add line feed
  • 85. cmp al,0dh jne not_cr mov al,0ah jmp tty_one not_cr: ret tty endp ; ;-------------------------| ; Flush Buffer | ;-------------------------| flush proc near flush_1: mov ah,1 ;Bios service request code int 16h jz no_old_chars ;Flush old character mov ah,0 int 16h jmp flush_1 no_old_chars: ret flush endp ; get_key proc near mov ah,0 ;Bios service request number int 16h ret get_key endp ; ;----------------------------------------------------------------------------| ; Interrupt Service Routine | ;----------------------------------------------------------------------------| rs232_int: sti ;interrupt on ;communications ;Save register to be used by the service routine push ax push bx push dx push di push ds
  • 86. ;Set Ds establish addressability of main program data mov dx,data mov ds,dx assume ds:data ; ;Check line status register for reception error and data ready Data_check: mov dx,card_base mov dl,0fdh ;line status register in al,dx ;Read port byte jmp short $+2 ;I/O delay ;Check for error codes test al,1eh jnz data_error jmp data_check ; data_error: mov al,'?' ;Error symbol jmp store_byte ; ;Pull data from the receiver data register and store in ;the circular buffer Data_Ready: mov dl,0f8h ;RDR in al,dx ;Get byte jmp short $+2 ;I/O delay and al,7fh ;Mask off high bit ; ;Place byte in circular buffer Store_Byte: lea di,circ_buf ;Buffer pointer mov bx,data_in ;Input pointer add di,bx ;Point Di to active byte mov byte ptr[di],al ;Store in Circ_Buf ; ;Index input pointer. Reset if pointer overflows buffer inc bx ;Bump pointer cmp bx,20 ;Past end of buffer ? jne ok_in_ptr ; ;Reset pointer to start of buffer mov bx,0
  • 87. ok_in_ptr: mov data_in,bx ;Store new pointer displacement ; ;Signal end of -interrupt to the interrupt command register mov al,20h ;Code out 20h,al ;EOl port address jmp short $+2 ;I/O delay ; ;Requset register from stack pop ds pop di pop dx pop bx pop ax ; ;Return from interrupt iret code ends End start ♦ BEÂN NHAÄN (KIT VÑK 8051): org 5000h setb p1.1 mov IE,#00h ;cam ngat mov tmod,#20h mov th1,#-13 setb tr1 mov scon,#0fch ;khoi tao giao tiep noi tiep mov dptr,#6000h xr1: jnb ri,xr1 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 mov a,dpl cjne a,#0ffh,xr1 sjmp $ ;nhay tai cho end B2. TRUYEÀN FILE DÖÕ LIEÄU TÖØ MAÙY TÍNH ÑEÁN KIT VÑK 1. LÖU ÑOÀ
  • 88. ♦ BEÂN TRUYEÀN (MAÙY TÍNH): BEGIN THIEÁT ÑAËT ÑÒA CHÆ VUØNG DÖÕ LIEÄU CUÛA CHÖÔNG TRÌNH, LÖU VAØ CAØI ÑAËT CAÙC NGAÉT CUÛA MAÙY TÍNH , SET PHUÔNG THÖÙC GIAO TIEÁP CHUAÅN HIEÅN THÒ MENU CUÛA CHÖÔNG TRÌNH END GOÏI CHÖÔNG TRÌNH HIEÅN THÒ VAØ TRUYEÀN FILE AÁN ÑÒNH PHÍM F1 PHÍM F4 PHÍM F9 KIEÅM TRA COÙ PHÍM NAØO ÑÖÔÏC AÁN ?
  • 89. ♦ BEÂN NHAÄN KIT VÑK 8051: BEGIN KHÔÛI TAÏO 8051 ÔÛ CHEÁ ÑOÄ GIAO TIEÁP NOÁI TIEÁP NHAÄN BYTE ÑAÀU TIEÂN TREÂN MOÄT DOØNG CUÛA FILE SAO SAÙNH = 3AH NHAÄN BYTE TIEÁP THEO KTRA HEÁT DÖÕ LIEÄU TREÂN DOØNG YES NO NO YES
  • 90. 2. CHÖÔNG TRÌNH ♦ BEÂN TRUYEÀN (MAÙY TÍNH) CHÖÔNG TRÌNH TRUYEÀN FILE DÖÕ LIEÄU (*.HEX) Döïa vaøo chöông trình truyeàn töøng byte kí töï coù söï theâm vaøo moät soá haøm ; 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 '<F1> to redisplay this MENU',0dh,0ah KIEÅM TRA HEÁT DÖÕ LIEÄU TREÂN FILE END YES NO
  • 91. db '<F4> to open file.hex and trasnmit',0dh,0ah db '<F9> to exit the TERMINAL program',0dh,0ah db 0dh,0ah,'$' PROT_MS db ' ',0dh,0ah 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 phaàn code gioáng coù thay ñoåi nhö sau: ;----------------------------------------- CODE ------------------------------ ;------------------| ;Process char | ;------------------| ;Receive character type from keyboard buffer char_typed: mov ah,0 ;Code for read keyboard char int 16h ;Bios service ;Test for <F1> ,<F4> and <F9> keys cmp ax,3b00h ;<F1> jne test_f4 jmp show_menu ;<F1> key pressed Test_F4: cmp ax,3e00h jne test_F9 jmp tran_file ;<F4> key pressed Test_F9: cmp ax,4300h ;<F9> je dos_exit jmp show_and_send ;<F9> key pressed ; Phaàn procedure theâm vao moät soá chöông trình con
  • 92. ;------------------------------------------------------------------------------| ; PROCEDURES | ;------------------------------------------------------------------------------| tran_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 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:
  • 93. 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 done: mov al,0 stosb ;luu byte 0 pop di pop dx pop ax ret
  • 94. 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,06h edel2: mov bx,0ffffh edel1: dec bx jnz edel1 dec ax jnz edel2 pop bx pop ax ret edelay endp
  • 95. ;--------------------- 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 mov al,[di] ;lay so can goi MSD sub al,30h ;tru di 30 de thanh so hex
  • 96. 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
  • 97. mov [si],al ;cat so byte can goi dang HEX 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
  • 98. 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 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 RET push di mov di,bx mov ah,1
  • 99. stosw mov bx,di pop di ret goi_ht endp so_lonproc near cmp al,9 jg yyy ret yyy: sub al,7 ret so_lonendp ♦ BEÂN NHAÄN (KIT VÑK 8051): ;chuong trinh cua may nhan du lieu (receiver) dk equ 0c001h ht equ 0c000h org 5200h mov ie,#00h mov tmod,#20h mov th1,#-13 setb tr1 mov scon,#0fch mov 24h,#00 mov 25h,#00 xr1: jnb ri,xr1 ;nhan ma dau ':' clr ri mov a,sbuf cjne a,#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 11h,dph ;chuyen dia chi de giai ma hthi mov 10h,dpl mov a,sbuf
  • 100. movx @dptr,a mov 14h,a ;cat de giai ma hien thi lcall decode inc dptr djnz r1,xr5 sjmp xr1 ;chuong trinh con giai ma hien thi decode: push dpl push dph mov dptr,#0200h mov a,11h ;lay byte B_A_H de giai ma hien thi push 0e0h ;cat A swap a ;xu li so thu nhat anl a,#0fh mov dpl,a movx a,@dptr mov 20h,a pop 0e0h ;lay lai A anl a,#0fh ;xu li so thu 2 mov dpl,a movx a,@dptr mov 21h,a mov a,10h ;lay byte B_A_L de giai ma hien thi push 0e0h ;cat A swap a ;xu li so thu nhat anl a,#0fh mov dpl,a movx a,@dptr mov 22h,a pop 0e0h ;lay lai A anl a,#0fh ;xu li so thu 2 mov dpl,a movx a,@dptr mov 23h,a mov a,14h ;lay byte DATA de giai ma hien thi push 0e0h ;cat A swap a ;xu li so thu nhat anl a,#0fh mov dpl,a
  • 101. movx a,@dptr mov 26h,a pop 0e0h ;lay lai A anl a,#0fh ;xu li so thu 2 mov dpl,a movx a,@dptr mov 27h,a lcall display pop dph pop dpl ret display: mov r2,#80h ;tu dieu khien 8279 chong nhap nhay mov r0,#20h ;quan li dia chi ma hien thi dis1: mov dptr,#dk mov a,r2 movx @dptr,a mov dptr,#ht mov a,@r0 movx @dptr,a inc r2 inc r0 mov a,r0 cjne a,#28h,dis1 ret end
  • 102. CHÖÔNG 1 HÖÔÙNG DAÃN SÖÛ DUÏNG KIT VI ÑIEÀU KHIEÅN 8051 I. GIÔÙI THIEÄU CAÁU TRUÙC PHAÀN CÖÙNG KIT VI XÖÛ LYÙ: 1. Taàn soá laøm vieäc: ƒKít vi ñieàu khieånsöû duïng vi ñieàu khieån 8051 hoaëc 8951 cuûa Intel vôùi taàn soá hoaït ñoäng 12MHZ. ƒCaùc chöông trình veà thôøi gian ñöôïc vieát töông öùng vôùi ñòa chæ naøy. 2. Toå chöùc boä nhôù: a. Boä nhôù EPROM: Coù dung löôïng 16kbyte söû duïng 2 EPROM 2764, chöông trình heä thoáng chöùa ôû EPROM thöù nhaát, EPROM thöù 2 chöa söû duïng ñöôïc thieát keá ôû daïng socket. ƒ EPROM 1 coù ñòa chæ töø 0000H - 1FFFH. ƒ EPROM 2 coù ñòa chæ töø 2000H - 3FFFH. b. Boä nhôù RAM: Boä nhôù RAM coù dung löôïng 16kbyte söû duïng 2 IC 6264. ƒRAM 1 coù ñòa chæ töø 4000H - 5FFFH. ƒRAM 2 coù ñòa chæ töø 6000H - 7FFFH. ƒChöông trình coù theå söû duïng toaøn boä caùc vuøng nhôù RAM. Q G T P I K R C 8 D 9 E A F B 6 2 7 3 4 0 5 1 S Caùc phím nhaäp döõ lieäu Caùc phím chöùc naêng
  • 103. 3. Caùc IC ngoaïi vi: trong heä thoáng coù söû duïng 2 IC 8255A duøng ñeå giao tieáp vôùi thieát bò ngoaïi vi. Baûng ñoà nhôù cuûa 2 IC 8255: Ñòa chæ cuûa caùc port 8255_1 8255-2 Port A 8000H A000H Port B 8001H A001H Port C 8002H A002H Thanh ghi ñieàu khieån 8003H A003H ƒCaùc ngoõ ra cuûa IC 8255A -1, 8255 -2, ñöôïc ñöa ra beân ngoaøi baèng connect 64 chaân coù sô ñoà chaân tra ôû baûng tra. Moãi IC 8255A coù 3 port, moãi port coù 8 chaân ñieàu khieån neân soá chaân ñöa ra beân ngoaøi ñeå ñieàu khieån laø 48. 4. Khoái giaûi maõ hieån thò – queùt phím söû duïng IC 8279: Vuøng ñòa chæ söû duïng cuûa IC 8279 laø C000H - C001H, trong ñoù: ƒ Ñòa chæ C000H laø ñòa chæ duøng ñeå gôûi döõ lieäu caàn hieån thò vaø ñoïc maõ phím. ƒ Ñòa chæ C001H laø ñòa chæ duøng ñeå gôûi töø ñieàu khieån ra 8279 – ñoïc thanh ghi traïng thaùi. a. Phaàn giaûi maõ hieån thò: Goàm coù 8 led vôùi thöù töï Led 1 ñeán led 8 theo höôùng töø phaûi sang traùi nhö hình 2: Hình 2. ♦ Caáu truùc byte döõ lieäu cuûa led: p g f e d c b a Heä thoáng söû duïng Led loaïi Anode chung neân muoán ñoaïn naøo saùng thì bit döõ lieäu töông öùng vôùi ñoaïn ñoù baèng 1. Ñoaïn naøo taét thì bit töông öùng vôùi ñoaïn ñoù baèng 0. Ví duï muoán saùng soá “9” thì byte döõ lieäu seõ gôûi ra led laø: Led8 Led7 Led6 Led5 Led4 Led3 Led2 Led1
  • 104. 0 1 1 0 1 1 1 1 Töông öùng vôùi soá hex laø 6FH. Sau ñaây laø maõ 7 ñoaïn cuûa 1 soá chöõ soá vaø chöõ caùi: p g f e d c b a hex Soá 0 0 0 1 1 1 1 1 1 3F Soá 1 0 0 0 0 0 1 1 0 06 Soá 2 0 1 0 1 1 0 1 1 5B Soá 3 0 1 0 0 1 1 1 1 4F Soá 4 0 1 1 0 0 1 1 0 66 Soá 5 0 1 1 0 1 1 0 1 6D Soá 6 0 1 1 1 1 1 0 1 7D Soá 7 0 0 0 0 0 1 1 1 07 Soá 8 0 1 1 1 1 1 1 1 7F Soá 9 0 1 1 0 1 1 1 1 6F Chöõ A 0 1 1 1 0 1 1 1 77 Chöõ b 0 1 1 1 1 1 0 0 7C Chöõ C 0 0 1 1 1 0 0 1 39 Chöõ d 0 1 0 1 1 1 1 0 5E Chöõ E 0 1 1 1 1 0 0 1 79 Chöõ F 0 1 1 1 0 0 0 1 71 Chöõ P 0 1 1 1 0 0 1 1 73 Chöõ H 0 1 1 1 0 1 1 0 76 Chöõ U 0 0 1 1 1 1 1 0 3E Coù theå tìm caùc maõ töông öùng coøn laïi. ‰ Coù 2 caùch hieån thò döõ lieäu treân caùc Led: ‰ Caùch 1: khi gôûi döõ lieäu môùi ra ñòa chæ C000H thì döõ lieäu naøy seõ hieån thi ôû led 1, döõ lieäu tröôùc ñoù cuûa caùc led seõ dòch sang traùi theo chieàu muõi teân trong hình 3. Rieâng byte döõ lieäu tröôùc ñoù cuûa Led8 seõ dòch vaø maát ñi. Muõi teân naèm ngang chæ chieàu nhaän döõ lieäu töø vi ñieàu khieån ñöa ñeán led 1. Caùc muõi teân voøng cung chæ chieàu dòch chuyeån döõ lieäu. LED8 LED7 LED6 LED5 LED4 LED3 LED2 LED1
  • 105. ⊥ Chuù yù: neáu muoán xoùa heát maøn hình 8 led thì gôûi 8 byte 00h lieân tieáp ra A000h. ‰ Caùch 2: kieåu gôûi döõ lieäu ôû caùch 1 coøn ñöôïc goïi laø kieåu dòch chuyeån döõ lieäu tuaàn töï. Beân caïnh ñoù 8279 coøn cho pheùp gôûi döõ lieäu tröïc tieáp ñeán baát kyø led naøo trong 8 led – toå chöùc cuûa led khoâng coù gì thay ñoåi ñòa chæ gôûi döõ lieäu vaãn laø C000H nhöng moãi led coøn coù theâm 1 ñòa chæ ñieàu khieån nhö trong hình 4. Ñòa chæ ñieàu khieån cuûa led phaûi gôûi ra ñòa chæ C001H tröôùc khi gôûi döõ lieäu ra ñòa chæ C000H. b. Phaàn giaûi maõ baøn phím: Chöông trình con giaûi maõ baøn phím ñöôïc vieát taïi ñòa chæ 0223H söû duïng caùc thanh ghi R2, A, DPTR, R6, R7, oâ nhôù 41h. Khi goïi chöông trình con 0223H: •Neáu khoâng aán phím thì sau khi thöïc hieän xong chöông trình seõ trôû veà chöông trình chính vôùi noäi dung thanh ghi A =FFH. •Neáu coù aán phím thì maõ cuûa phím aán chöùa trong A. Chöông trình naøy neáu coù aán phím hoaëc khoâng aán phím ñeàu trôû veà chöông trình sau khi thöïc hieän xong vaø phaûi chuù yù caát döõ lieäu trong caùc thanh ghi khi goïi chöông trình con naøy. Baûng maõ caùc phím soá: Phím Maõ Phím M aõ Phím Maõ Phím Maõ 0 00 4 04 8 08 C 0C 1 01 5 05 9 09 D 0D 2 02 6 06 A 0A E 0E 3 03 7 07 B 0B F 0F Baûng maõ caùc phím chöùc naêng: Phím Maõ Phím M aõ T 10 S 14 G 11 15 R 12 P 16 13 K 17 LED8 LED7 LED6 LED5 LED4 LED3 LED2 LED1 80H 81H 82H 83H 84H 85H 86H 87H
  • 106. II. HÖÔÙNG DAÃN SÖÛ DUÏNG KIT VI ÑIEÀU KHIEÅN 8051 1. Baøn phím: ♦ Kít vi ñieàu khieån coù taát caû laø 26 phím nhaán nhö hình 1 ñöôïc chia thaønh caùc nhoùm nhö sau: ƒ 16 phím nhaäp döõ lieäu cuûa chöông trình daïng soá thaäp luïc phaân töø 0 ñeán F ƒ Caùc phím chöùc naêng. 2. Chöùc naêng cuûa phím: ♦ Khi môùi caáp ñieän cho maùy 4 Led beân traùi seõ hieän thò 4 soá 0000, boán led beân phaûi taét. ♦ Neáu khoâng hieån thò ñuùng haõy nhaán phím “Q”. Phím “Q” coù chöùc naêng Reset maïch khi khôûi ñoäng hoaëc khi muoán thoaùt khoûi chöông trình vi ñieàu khieån ñang thöïc hieän (chöùc naêng nhö phím RESET cuûa maùy vi tính). 3. Chöùc naêng cuûa phím: ♦ Muoán nhaäp döõ lieäu môùi vaøo oâ nhôù coù ñòa chæ ví duï 4000, haõy duøng caùc phím nhaäp döõ lieäu ñaùnh soá 4000, ñòa chæ naøy seõ xuaát hieän ôû 4 led beân phaûi. ♦ Nhaán phím “S” thì ñòa chæ 4000 seõ thay theá cho ñòa chæ tröôùc ñoù ôû 4 led beân traùi. ♦ 4 led coøn laïi chæ coù 2 led saùng ñoù chính laø noäi dung cuûa oâ nhôù töông öùng vôùi ñòa chæ 4 led beân traùi. 4. Chöùc naêng cuûa phím: ♦ Duøng ñeå löu tröõ döõ lieäu vaøo oâ nhôù coù ñòa chæ ôû 4 Led beân traùi, ví duï muoán löu tröõ döõ lieäu laø “3F” vaøo oâ nhôù coù ñòa chæ laø 4000, haõy ñaùnh “3F” töø caùc phím döõ lieäu, döõ lieäu môùi “3F” seõ thay theá döõ lieäu cuõ tröôùc ñoù. ♦ Sau ñoù nhaán phím “ ↑ “ ñeå löu tröõ döõ lieäu naøy vaøo oâ nhôù 4000. Ñòa chæ seõ taêng leân 1 laø 4001 ñeå saün saøng nhaän döõ lieäu tieáp theo vaø 2 led beân traùi hieån thò noäi dung cuûa oâ nhôù 4001. ♦ Chöùc naêng cuûa phím naøy laø löu tröõ döõ lieäu ñoàng thôøi taêng ñòa chæ cuûa oâ nhôù. 5. Chöùc naêng cuûa phím: ♦ Coù chöùc naêng giaûm ñòa chæ cuûa oâ nhôù xuoáng 1 ñôn vò töông öùng vôùi moãi laàn nhaán. Ví duï muoán kieåm tra laïi oâ nhôù môùi vöøa nhaäp laø 4000 xem coù ñuùng laø döõ lieäu “3F” khoâng, haõy nhaán phím “ ↓ “. Neáu sai thì nhaäp laïi, neáu ñuùng thì nhaán phím taêng ñòa chæ ñeå naïp caùc döõ lieäu tieáp theo. Q S ↓ ↑ P
  • 107. 6. Chöùc naêng cuûa phím: ♦ Sau khi nhaäp döõ lieäu cuûa moät chöông trình taïi ñòa chæ 4000, ñeå vi ñieàu khieån thöïc hieän chöông trình naøy haõy nhaán phím “P”. Khi ñoù treân maøn hình 8 Led seõ xuaát hieän “PC 4000”. Neáu muoán thöïc hieän chöông trình taïi ñòa chæ 4000 haõy nhaán phím taêng ñòa chæ, khi ñoù treân maøn hình seõ xuaát hieän theâm daáu “=“ nhö sau: “PC =4000’. Sau ñoù nhaán phím “G”. Chöông trình seõ ñöôïc thi haønh. ♦ Neáu chöông trình löu taïi ñòa chæ khaùc vôùi ñòa chæ 4000 thì tröôùc khi nhaán phím taêng ñòa chæ haõy ñaùnh ñòa chæ cuûa chöông trình ñoù vaøo baèng caùc phím nhaäp döõ lieäu. Sau ñoù nhaán phím taêng ñòa chæ, ví duï muoán thöïc hieän chöông trình taïi ñòa chæ 5000 thì treân maøn hình 8 led seõ hieån thò “PC =5000”. Nhaán tieáp phím “G” chöông trình seõ ñöôïc thi haønh taïi ñòa chæ 5000. 7. Chöùc naêng cuûa phím: ♦ Duøng ñeå xem noäi dung caùc thanh ghi, tröôùc tieân nhaán phím “R” vaø sau ñoù nhaán caùc phím thaäp phaân töông öùng töø “6” cho ñeán “F”. ƒ Nhaán phím thaäp phaân “A”: xem noäi dung thanh ghi A. ƒ Nhaán phím thaäp phaân “B”: xem noäi dung thanh ghi B. ƒ Nhaán phím thaäp phaân “C”: xem noäi dung thanh ghi C. ƒ Nhaán phím thaäp phaân “D”: xem noäi dung thanh ghi D. ƒ Nhaán phím thaäp phaân “E”: xem noäi dung thanh ghi E. ƒ Nhaán phím thaäp phaân “F”: xem noäi dung thanh ghi F. ƒ Nhaán phím thaäp phaân “8”: xem noäi dung thanh ghi H. ƒ Nhaán phím thaäp phaân “9”: xem noäi dung thanh ghi L. ƒ Nhaán phím thaäp phaân “7”: xem noäi dung caëp thanh ghi SP. ƒ Nhaán phím thaäp phaân “6”: xem noäi dung caëp thanh ghi PC. 8. Chöùc naêng cuûa phím: ♦ Phím naøy taùc ñoäng ñeán ngaét cöùng cuûa heä thoáng vi xöû lyù. Chöông trình seõ bò ngöøng sau khi nhaán phím “I”, neáu nhaán “I” theâm laàn nöõa heä thoáng seõ ñöôïc ñaët laïi traïng thaùi maëc ñònh ban ñaàu töông ñöông vôùi reset maùy baèng phím Q. 9. Chöùc naêng cuûa phím: ♦ Chöùc naêng cuûa phím naøy laø thöïc hieän chöông trình töøng böôùc. Trình töï nhaán phím gioáng nhö phím “G”. Neáu nhaán phím “G” ñeå thöïc hieän caû chöông trình taïi ñòa chæ chöùa trong caëp thanh ghi PC, ta nhaán phím “T” chöông trình seõ ñöôïc thöïc hieän töøng leänh taïi ñòa chæ chöùa trong PC. R I T