Baøi giaûng VI XÖÛ LYÙ Chöông 4: Caùc chöùc naêng cuûa hoï MCS-51
http://www.ebook.edu.vn 1
CHÖÔNG 4: CAÙC CHÖÙC NAÊNG CUÛA HOÏ VI ÑIEÀU KHIEÅN
MCS-51
I. TIMER
1. Giôùi thieäu
- Moät boä ñònh thôøi (timer) laø moät chuoãi caùc Flip Flop (FF) vôùi moãi FF laø moät maïch chia
2. Chuoãi naøy nhaän moät tín hieäu ngoõ vaøo laøm xung clock kích cho taàng ñaàu tieân, ngoõ ra cuûa taàng
ñaàu laïi trôû thaønh nguoàn xung clock cho taàng keá tieáp. Ngoõ ra cuûa taàng cuoái cuøng laøm xung clock
cho moät FF baùo traøn timer hay coøn goïi laø côø traøn (overflow flag). Côø traøn naøy seõ ñöôïc kieåm tra
bôûi phaàn meàm hay taïo ra moät ngaét (interrupt). Hình 4.1 minh hoïa moät timer ñôn giaûn 3-bit.
- Giaù trò nhò phaân trong caùc FF cuûa timer ñöôïc duøng ñeå tính soá xung clock (soá chu kì) cuûa
tín hieäu ngoõ vaøo töø khi timer baét ñaàu ñeám.
Hình 4.1
- 8051/8031 coù 2 timer 16 bit:
+ Timer 0: soá ñeám chöùa trong thanh ghi TH0 (byte cao) vaø TL0 (byte thaáp)
+ Timer 1: soá ñeám chöùa trong thanh ghi TH1 (byte cao) vaø TL1 (byte thaáp)
Ngoaøi ra, caùc chip 8032/8052 coøn coù theâm timer 2.
- Caùc timer chæ ñeám leân (0000H ÷ FFFFH). Khi soá ñeám traøn töø FFFFH xuoáng 0000H, côø
traøn seõ ñöôïc ñaët leân 1.
2. Caùc thanh ghi cuûa timer:
a. Thanh ghi cheá ñoä ñònh thôøi (TMOD):
MSB LSB
Gate T/C M1 M0 Gate T/C M1 M0
Timer 1
Timer 0
- Khoâng ñöôïc ñònh ñòa chæ bit.
- Ñöôïc duøng ñeå ñònh cheá ñoä hoaït ñoäng cho caùc timer.
- Chöùc naêng töøng bit:
+ M1, M0: choïn cheá ñoä hoaït ñoäng.
M1 M0 Cheá ñoä (Mode)
0 0 0
0 1 1
1 0 2
1 1 3
+ T/C : bit choïn chöùc naêng ñeám hoaëc ñònh thôøi cho timer.
+ Gate: bit ñieàu khieån coång cho boä ñònh thôøi.
D/Q
Q
D/Q
Q
D/Q
Q
D /Q
Q Flag
Clock
LSB MSB
Baøi giaûng VI XÖÛ LYÙ Chöông 4: Caùc chöùc naêng cuûa hoï MCS-51
http://www.ebook.edu.vn 2
b. Thanh ghi ñieàu khieån ñònh thôøi (TCON):
MSB LSB
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
Timer
Interrupt
- Chöùa caùc bit ñieàu khieån vaø traïng thaùi cuûa timer 0 vaø 1 ôû 4 bit cao, 4 bit thaáp ñöôïc duøng
cho chöùc naêng ngaét (interrupt).
- Ñöôïc ñònh ñòa chæ bit.
- Chöùc naêng töøng bit:
+ TFx: côø traøn cuûa timer x (x laø 0 hay 1)
+ TRx = 0: khoâng cho pheùp timer chaïy.
TRx = 1: cho pheùp timer chaïy.
3. Ñieàu khieån caùc boä ñònh thôøi
Hình 4.2
- T/C (Counter/Timer):
+ T/C = 0: timer nhaän xung clock töø boä dao ñoäng noäi (sau khi qua boä chia 12).
ÖÙng duïng: thöôøng duøng cho vieäc ñònh thôøi moät khoaûng thôøi gian (moãi soá ñeám
töông öùng vôùi 1 chu kyø maùy).
+ T/C = 1: timer nhaän xung clock töø chaân Tx (P3.4 ñoái vôùi timer 0 vaø P3.5 ñoái
vôùi timer 1).
ÖÙng duïng: thöôøng duøng ñeå ñeám söï kieän beân ngoaøi. Moãi söï kieän taïo ra moät
xung kích vaøo chaân Tx (tích cöïc caïnh xuoáng). Soá caùc söï kieän ñöôïc xaùc ñònh trong phaàn
meàm baèng caùch ñoïc caùc thanh ghi ñònh thôøi (THx/TLx), giaù trò 16-bit trong caùc thanh ghi
naøy taêng theo moãi söï kieän.
- Gate:
+ Gate = 0: vieäc ñieàu khieån timer x chæ phuï thuoäc vaøo TRx.
TRx = 0: khoâng cho pheùp timer x chaïy.
TRx = 1: cho pheùp timer x chaïy.
÷12
On-chip
Osc.
T/C
TRx
Gate
0: treân
1: döôùi
0: treân
1: döôùi
TLx THx TFx
Tx
INTx 8051
Baøi giaûng VI XÖÛ LYÙ Chöông 4: Caùc chöùc naêng cuûa hoï MCS-51
http://www.ebook.edu.vn 3
+ Gate = 1: vieäc ñieàu khieån timer x phuï thuoäc vaøo TRx vaø xINT .
TRx = 1 vaø xINT = 1: cho pheùp timer chaïy.
ÖÙng duïng: thöôøng duøng ñeå ño ñoä roäng xung (thôøi gian xung ôû möùc cao) ñöa
vaøo ôû chaân xINT . Ñoä roäng xung töông öùng vôùi soá ñeám trong THx/TLx.
4. Caùc cheá ñoä ñònh thôøi
a. Cheá ñoä 0
- Xaùc laäp M1M0 = 00
- Laø cheá ñoä ñònh thôøi 13-bit töông thích vôùi boä vi ñieàu khieån 8048 tröôùc ñoù. Cheá ñoä naøy
thöôøng ít duøng.
b. Cheá ñoä 1
- Xaùc laäp M1M0 = 01
- Laø cheá ñoä ñònh thôøi 16-bit: soá ñeám 16-bit chöùa trong caëp thanh ghi THx/TLx khoaûng
ñeám toái ña laø 65536 chu kì maùy.
- Giaù trò baét ñaàu ñeám ñöôïc naïp vaøo THx vaø TLx. Khi timer traøn, ñeå naïp laïi giaù trò baét
ñaàu ñeám caàn phaûi döøng timer.
Ví duï 1.1: Vieát 1 ñoaïn chöông trình khôûi ñoäng timer 0 ôû cheá ñoä 1 vaø duøng timer 0 ñeå taïo ra 1
xung möùc cao roäng 1ms ôû chaân P1.0. Giaû söû duøng thaïch anh 12MHz.
Giaûi:
MOV TMOD,#00000001B ; khôûi ñoäng timer 0 ôû cheá ñoä 1
CLR P1.0 ; xoùa P1.0
MOV TH0,#HIGH(-1000) ; naïp byte cao cuûa -1000 (FCH) vaøo TH0
MOV TL0,#LOW(-1000) ; naïp byte thaáp cuûa -1000 (18H) vaøo TL0
SETB TR0 ; cho timer 0 chaïy
SETB P1.0 ; ñaët P1.0 leân möùc cao
JNB TF0,$ ; chôø cho ñeán khi timer traøn (TF0 = 1)
CLR P1.0 ; xoùa P1.0
CLR TF0 ; xoùa côø traøn TF0 ñeå duøng cho caùc laàn sau
Ví duï 1.2: Vieát chöông trình con taïo treã 200ms duøng timer 1. Giaû söû fOSC = 12MHz.
Giaûi:
fOSC = 12MHz chu kyø maùy s1
f
12
T
OSC
Mμ==
Neáu duøng timer 1 ôû cheá ñoä 1 thì thôøi gian ñònh thôøi toái ña laø 65536μs < 200.000μs =
200ms phaûi duøng theâm voøng laëp ngoaøi. Ñeå ñôn giaûn, moãi voøng laëp seõ delay 50.000μs soá
laàn laëp laø 4.
Chöông trình:
DELAY_200MS:
MOV TMOD,#10H
MOV R7,#4
LOOP:
MOV TH1,#HIGH(-50000)
MOV TL1,#LOW(-50000)
SETB TR1
JNB TF1,$
CLR TR1
CLR TF1
DJNZ R7, LOOP
RET
Baøi giaûng VI XÖÛ LYÙ Chöông 4: Caùc chöùc naêng cuûa hoï MCS-51
http://www.ebook.edu.vn 4
Ví duï 1.3: Vieát chöông trình duøng timer taïo soùng vuoâng ñoái xöùng coù taàn soá 1KHz treân chaân
P1.0.
Giaûi:
f = 1KHz chu kyø s1000s10
10
1
f
1
T3
3μ==== tH = tL = 500μs
Taàn soá thaïch anh:
fOSC = 12MHz chu kyø maùy s1
f
12
T
OSC
Mμ== tH = tL = 500TM
Chöông trình: (söû duïng timer 0)
ORG 0
MOV TMOD,#01H
LOOP:
MOV TH0,#HIGH(-500)
MOV TL0,#LOW(-500)
SETB TR0
JNB TF0,$
CLR TR0
CLR TF0
CPL P1.0
SJMP LOOP
END
c. Cheá ñoä 2
- Xaùc laäp M1M0 = 10
- Laø cheá ñoä ñònh thôøi 8 bit töï ñoäng naïp laïi.
+ TLx: boä ñeám 8 bit khoaûng ñeám toái ña laø 256 chu kì maùy.
+ THx: löu giaù trò baét ñaàu ñeám ñöôïc caøi ñaët.
- Moãi khi timer traøn töø FFH xuoáng 00H, khoâng chæ côø traøn ñöôïc ñaët leân 1 maø giaù trò löu
trong THx coøn ñöôïc töï ñoäng naïp vaøo cho TLx (khoâng caàn döøng timer) vaø vieäc ñeám seõ tieáp tuïc
töø giaù trò naøy cho ñeán khi xaûy ra laàn traøn keá tieáp roài laëp laïi…
Ví duï 1.4: Vieát chöông trình con delay 100μs duøng timer. Giaû söû fOSC = 12MHz.
Giaûi:
Do khoaûng thôøi gian taïo treã laø 100 μs = 100 TM < 256 coù theå duøng timer ôû cheá ñoä 2.
Chöông trình:
DELAY_100US:
MOV TMOD,#02H ; khôûi ñoäng timer 0 ôû cheá ñoä 2
MOV TH0,#-100 ; naïp giaù trò baét ñaàu ñeám –100 vaøo TH0
MOV TL0,TH0
SETB TR0
JNB TF0,$
CLR TR0
CLR TF0
RET
tH tL
T
Baøi giaûng VI XÖÛ LYÙ Chöông 4: Caùc chöùc naêng cuûa hoï MCS-51
http://www.ebook.edu.vn 5
Löu yù: thoâng thöôøng leänh khôûi ñoäng cheá ñoä timer ñöôïc ñaët trong chöông trình chính.
Ví duï 1.5: Vieát chöông trình duøng timer 1 ñeå taïo soùng vuoâng ñoái xöùng, taàn soá f = 10KHz taïi
chaân P1.7 (giaû söû fOSC = 6MHz).
Giaûi:
f = 10KHz chu kyø s100s10
10.10
1
f
1
T4
3μ==== tH = tL = 50μs
Taàn soá thaïch anh:
fOSC = 6MHz chu kyø maùy s2
f
12
T
OSC
Mμ== tH = tL = 25TM
Chöông trình:
ORG 0
MOV TMOD,#20H
MOV TH1,#-25
SETB TR1
LOOP:
JNB TF1,$
CPL P1.7
CLR TF1
SJMP LOOP
END
4. Cheá ñoä 3
- Xaùc laäp M1M0 = 11
- Laø cheá ñoä taùch timer: timer 0 16-bit ñöôïc chia thaønh 2 timer 8-bit rieâng leõ TL0 vaø TH0
vôùi côø traøn töông öùng laø TF0 vaø TF1 (TF1 luùc naøy khoâng coøn laø côø traøn cuûa timer 1 nöõa).
- Timer 1 khoâng hoaït ñoäng ôû cheá ñoä 3 nhöng coù theå ñöôïc duøng trong caùc cheá ñoä khaùc
(khoâng söû duïng côø traøn TF1).
Chuù yù: Caùc kyõ thuaät thöôøng ñöôïc duøng ñeå taïo caùc khoaûng thôøi gian ñònh thôøi khaùc nhau
Khoaûng thôøi gian (chu kyø maùy) Kyõ thuaät
10 Ñieàu chænh phaàn meàm
256 Boä ñònh thôøi 8 bit töï ñoäng naïp laïi
65536 Boä ñònh thôøi 16 bit
Khoâng giôùi haïn Boä ñònh thôøi 16 bit + caùc voøng laëp
II. PORT NOÁI TIEÁP
1. Giôùi thieäu
- Chöùc naêng cô baûn cuûa port noái tieáp laø chuyeån ñoåi döõ lieäu töø song song thaønh noái tieáp
khi phaùt vaø töø noái tieáp thaønh song song khi thu.
- Truy xuaát port noái tieáp thoâng qua 2 chaân:
+ RxD (P3.0): chaân thu cuûa port noái tieáp.
+ TxD (P3.1): chaân phaùt cuûa port noái tieáp.
- Coù khaû naêng hoaït ñoäng song coâng (full duplex), töùc laø thu vaø phaùt ñoàng thôøi. Ngoaøi ra
port noái tieáp coøn coù chöùc naêng ñeäm döõ lieäu khi thu cho pheùp moät kyù töï ñöôïc nhaän vaø löu giöõ
trong boä ñeäm thu trong khi kyù töï tieáp theo ñöôïc nhaän vaøo. Neáu vi ñieàu khieån ñoïc kyù töï thöù nhaát
tröôùc khi kyù töï thöù hai ñöôïc thu ñaày ñuû, döõ lieäu seõ khoâng bò maát.
- Caùc thanh ghi lieân quan ñeán port noái tieáp:
+ SCON: chöùa caùc bit traïng thaùi vaø caùc bit ñieàu khieån port noái tieáp.
+ SBUF: laø boä ñeäm cuûa port noái tieáp. Thöïc teá, port noái tieáp goàm 2 boä ñeäm rieâng
cho phaùt vaø thu.