Tải bản đầy đủ (.pdf) (51 trang)

Kỹ thuật vi điều khiển-p10 potx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (410.82 KB, 51 trang )

Xung & Hoi1
1.Giớithiệu
2.Sơ đồ khốivàchân
3.Tổchứcbộnhớ
4.Cácthanhghichứcnăng đặcbiệt(SFR)
5.Dao độngvàhoạt độngreset
6.Tậplệnh
7.Cácmode định địachỉ
8.LậptrìnhIO
9.Tạotrễ
10.
10.
L
L


p
p
tr
tr
ì
ì
nh
nh
Timer/Counter
Timer/Counter
11.Lậptrìnhgiaotiếpnốitiếp
12.Lậptrìnhngắt
13.Lậptrìnhhợpngữ
Xung & Hoi2
•8051 có2 timers/counters: timer/counter 0 & timer/counter 1.


Chúngcóthểđượcdùngnhư:
1.Bộđịnhthời (Timer) dùngnhư 1 bộ tạotrễ
–Nguồnxungclock chínhlàdao độngthạchanhbêntrong
2.Bộđếmsựkiện (Event Counter)
– Đầuvàotừchânbênngoài đểđếmsốsựkiện
–Cóthể dùng đếmsốngười điqua cổng, số vòngquay của
bánhxe, hay bấtkểcácsựkiệnmàchuyển đượcsang dạng
xung
3.Tạotốcđộ baud (baud rate) choport nốitiếpcủa8051
10-1. Giớithiệu
Xung & Hoi3
Timer
•Khởitạogiátrị ban đầuchocácthanhghi
•KíchhoạtTimer, sau đó8051 tínhlên
•Ngõvàolàtừclock nội(machine cycle)
•Khicácthanhghibằng0 thì8051 sẽ set cờ tràn
to
LCD
P1
8051
TL0
TH0
P2
Set
Timer 0
Xung & Hoi4
Counter
• Đếmsốsựkiện:
–Chỉ rasốsựkiệntrêncácthanhghi
–Counter 0: NgõvàotừchânbênngoàiT0 (P3.4)

–Counter 1: NgõvàotừchânbênngoàiT1 (P3.5)
T0
to
LCD
P3.4
P1
a switch
TL0
TH0
Xung & Hoi5
CácthanhghidùngtruyxuấtTimer/Counter
•TH0, TL0, TH1, TL1
•TMOD thanhghichếđộđịnhthời(Timer mode register)
•TCON thanhghi điềukhiển địnhthời(Timer control register)
•8052 với3 timers/counters sẽ cóthêmcácthanhghiT2CON
(Timer 2 control register), TH2 and TL2
89hTimer ModeTMOD
88hTimer ControlTCON
8BhTimer 1 Low ByteTL1
8DhTimer 1 High ByteTH1
8AhTimer 0 Low ByteTL0
8ChTimer 0 High ByteTH0
SFR AddressDescriptionSFR Name
Xung & Hoi6
TH0, TL0, TH1, TL1 (not bit addressable)
•Cảtimer 0 & timer 1 đềucó độ rộng16 bits
–Cácthanhghinàylưutrữ
•Giátrị tạothờigiantrễ (time delay) (nếulàtimer)
•Sốsựkiện(number of events) (nếulàcounter)
–Timer 0: TH0 & TL0

•Timer 0 high byte, timer 0 low byte
–Timer 1: TH1 & TL1
•Timer 1 high byte, timer 1 low byte
–Mỗibộđịnhthời16-bit cóthểđượctruycậpnhư 2
thanhghi8-bit táchbiệt
Xung & Hoi7
D15 D8D9D10D11D12D13D14 D7 D0D1D2D3D4D5D6
TH0TL0
D15 D8D9D10D11D12D13D14 D7 D0D1D2D3D4D5D6
TH1TL1
Timer 0
Timer 1
Xung & Hoi8
10-2. ThanhghichếđộđịnhthờiTMOD
•Timer mode register: TMOD (not bit addressable)
–Thanhghi8-bit
–Thiếtlậpchếđộ hoạt độngchocácbộđịnhthời:
•4 bits thấpdànhchoTimer 0 (Set to 0000 if not used)
•4 bits caodànhchoTimer 1 (Set to 0000 if not used)
GATE C/T M1 M0 GATE C/T M1 M0
Timer 1 Timer 0
(MSB)(LSB)
Xung & Hoi9
GATE
Bit điềukhiểncổng. Khiset lên1, timer chỉ hoạt độngkhi
chân/INTx ở mứccaovàTRx= 1. Khixóa, timer hoạt động
khiTRx= 1
C/T
Bit chọnchứcnăng đếmhoặc địnhthời: 1: đếm; 0: địnhthời
M1

Chọnmode -bit 1
M0
Chọnmode -bit 0
GATE C/T M1 M0 GATE C/T M1 M0
Timer 1 Timer 0
(MSB)(LSB)
Xung & Hoi10
GATE
–GATE=0
• Điềukhiểnbêntrong(Internal control)
•Bậthay tắttimer bằngphầnmềm
•Timer đượcchophépkhiTR đượcset
–GATE=1
• Điềukhiểnbênngoài(External control)
•Bậthay tắttimer bằngphầnmềm& mộtnguồnbên
ngoài(external source)
•Timer đượcchophépkhichân/INT ở mứccao& TR
đượcset
Xung & Hoi11
XTAL
oscillator
÷
12
TR0
INT0 Pin
Pin 3.2
C/T = 0
Gate
T0 Pin
Pin 3.4

C/T = 1
Xung & Hoi12
M1, M0
3
2
1
0
Mode
Chếđộđịnhthờichiasẻ
(Split timer mode)
11
Chếđộ tựđộngnạplại8-bit
(auto reload mode)
8-bit auto reload timer/counter;
THxlưutrữ giátrị nạplạichoTLxmỗi
khitràn(overflow)
01
Chếđộđịnhthời 16-bit
8-bit THx+ 8-bit TLx
10
Chếđộđịnhthời 13-bit
8-bit THx+ 5-bit TLx(x= 0 or 1)
00
Hoạt độngM0M1
Xung & Hoi13
Giải đáp:
VD: Tìmgiátrị TMOD nếumuốnlậptrìnhTimer 0 làmviệc ở
mode 2 ? Dùng8051 XTAL choxungclock, & dùnglệnh để
bậthay tắttimer
timer 1 timer 0

TMOD= 0000 0010 Timer 1 khôngdùng
Timer 0, mode 2
C/T = 0 à dùngnguồnxungclock (Timer)
GATE = 0 à điềukhiểnbằng phầnmềm
Xung & Hoi14
10-3. Thanhghi điềukhiển địnhthờiTCON
•Timer control register: TCON
–½byte caochotimer/counter, ½byte thấpchointerrupts
• TR (run control bit)
–TR0 for Timer/counter 0; TR1 for Timer/counter 1.
–TR đượcset hay xóabởiphầnmềmđể bật/tắttimer/counter
•TR=0: off (stop)
•TR=1: on (start)
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
Timer 1 Timer0 for Interrupt
(MSB)(LSB)
Xung & Hoi15
• TF (timer flag, control flag)
–Cờtràncủabộđịnhthời
–TF0 chotimer/counter 0; TF1 chotimer/counter 1
–Khởi đầu, TF=0 & đượcset bởiphầncứngkhicótràn–tức
TH-TL chuyển đếmvề0000 từ FFFFH
•Nếuchophépngắt, thìTF=1 sẽ kíchkhởiISR
– Đượcxóabởiphầnmềm(hoặcbởiphầncứngkhibộxi xử
lýtrỏđếntrìnhphụcvụngắt)
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
Timer 1 Timer0 for Interrupt
(MSB)(LSB)
Xung & Hoi16
10-4. Cácchếđộđịnhthời

TLx
THx
TFx
overflow flag
reload
Timer clock
TLx THx
Timer clock
TFx
overflow flag
TLx
THx
Timer clock
TFx
overflow flag
0
1
2
3
mode
TLx THx
Timer clock
TL0 TF0
Timer clock
TH0 TF1
Fosc/12
Xung & Hoi17
3
2
1

0
Mode
Chếđộđịnhthờichiasẻ
(Split timer mode)
11
Chếđộ tựđộngnạplại8-bit
(auto reload mode)
8-bit auto reload timer/counter;
THxlưutrữ giátrị nạplạichoTLxmỗi
khitràn(overflow)
01
Chếđộđịnhthời 16-bit
8-bit THx+ 8-bit TLx
10
Chếđộđịnhthời 13-bit
8-bit THx+ 5-bit TLx(x= 0 or 1)
00
Hoạt độngM0M1
Xung & Hoi18
1.Chọntimer 0 làmviệc ở mode 1 (địnhthời16-bit)
– MOV TMOD,#01H
2.Khởitạogiátrị ban đầunạpchoTH0 & TL0.
– MOV TH0,#FFH
– MOV TL0,#FCH
3.Thoạt đầunênxóacờTF0 về 0
– CLR TF0
4.BậtTimer 0
– SETB TR0
10-4-1. Chếđộđịnhthời16-bit (mode 1)
Xung & Hoi19

5.Khicóxungclock đến, 8051 bắt đầu đếmlênbằngcáchtăng
giátrị trongcácthanhghiTH0-TL0
TH0-TL0= FFFCH,FFFDH,FFFEH,FFFFH,0000H
TLx THx
Timer clock
TFx
overflow flag
FFFC FFFD
FFFE
FFFF 0000
TF = 0
TF = 0
TF = 0TF = 0
TF = 1
TH0 TL0
Start timer
Stop timer
TR0=1
TR0=0
TF
Theo dõiTF đếnkhiTF = 1
Xung & Hoi20
6.KhiTH0-TL0cósựchuyểnsốđếmtừFFFFH à 0000 thì
8051 set TF0=1
– TH0-TL0 = FFFEH, FFFFH, 0000H (khinàyTF0=1)
7.Theo dõicờtràn(TF)
– AGAIN: JNB TF0, AGAIN
8.XóaTR0 để tắttimer 0
– CLR TR0
9.Xóacớtrànchovòngtiếptheo

– CLR TF0
Xung & Hoi21
XTAL
oscillator
÷
12
TRx
THx
TLx
TFx
overflow flag
TF goes high
when FFFF
à
0
C/T=0: up
C/T=0: down
Nguồnxungclock cungcấpchobộđịnhthời
Timer clock
T0 hay
T1 pin
Mode 1
C/T
Xung & Hoi22
EViếtchươngtrìnhtạosóngvuôngcóthờigianmứccaovà
thấpbằngnhautrênchânP1.5. DùngTimer 0 tạotrễ mode 1
;each loop is a half clock
MOV TMOD, #01 ;Timer 0,mode 1(16-bit)
HERE: MOV TL0, #0F2H ;Giátrị Timer0 = FFF2H
MOV TH0, #0FFH

CPL P1.5
ACALL DELAY
SJMP HERE
50% 50%
whole clock
P1.5
Bàitoán10.1. Sóngvuông
Xung & Hoi23
;tạotrễ dùngtimer 0
DELAY:
SETB TR0 ;start the timer 0
JNB TF0, $
CLR TR0 ;stop timer 0
CLR TF0 ;clear timer 0 flag
RET
FFF2 FFF3
FFF4
FFFF 0000
TF0 = 0
TF0 = 0
TF0 = 0TF0 = 0
TF0 = 1
Xung & Hoi24
Vài điểmcầnchúý trongVD trên:
1. TMOD = 0000 0001 đượcthựcthi
2. FFF2H chuyểnvàoTH0 –TL0
3. Set vàxóaP1.5 trongthờigianmứccaovàthấpcủaxung
4. CTC DELAY dùngTimer đượcgọi
5. TrongCTC DELAY, bậttimer 0 dùnglệnh“SETB TR0”
6. Timer 0 đếmlênmỗikhicóxungclock (cungcấpbởidao

độngthạchanh)
Timer 0 đếmqua cácgiátrị: FFF3, FFF4, FFF5, FFF6, FFF7,
FFF8, FFF9, FFFA, FFFB, FFFC, FFFFD, FFFE, FFFFH,
0000H à TF0 = 1 vàkhinàylệnhJNB bị bỏ qua
7. TắtTimer 0 dùnglệnh“CLR TR0”. CTC DELAY kếtthúc,
tiếntrình đượclặplại.
Chúý, làmviệcvớimode 1, nên để lặplạitiếntrình, taphải
nhậplạigiátrị chocácthanhghiTH-TL & bậtlạiTimer.
Xung & Hoi25
10-4-2. Chếđộđịnhthời13-bit (mode 0)
•Mode 0 tươngtựmode 1, ngoạitrừ nólà 13-bit timer thayvì
16-bit.
–8-bit TH0 + 5-bit TL0
•Bộđếmvìthế cógiátrị từ 0000 đến1FFF trongcácthanhghi
địnhthờiTH0-TL0
–2
13
-1= 2000H-1=1FFFH
•Ta cũnggáncácgiátrị ban đầuvàoTH0-TL0 để thựchiện
đếmlên
•KhiTimer đạt đến1FFFH thìnóchuyểnvề0000, vàTF0 được
set
TLx
THx
Timer clock
TFx
overflow flag

×