Download miễn phí Bài giảng Kỹ thuật vi điều khiển - Lập trình Timer/Counter





GATE
– GATE=0
• Điều khiển bên trong (Internal control)
•Bật haytắt timer bằng phầnmềm
• Timer được cho phép khi TR được set
– GATE=1
• Điều khiển bên ngoài (External control)
•Bật haytắt timer bằng phầnmềm &một nguồn bên
ngoài (external source)
• Timer được cho phép khi chân /INT ở mức cao & TR được set



Để tải bản Đầy Đủ của tài liệu, xin Trả lời bài viết này, Mods sẽ gửi Link download cho bạn sớm nhất qua hòm tin nhắn.
Ai cần download tài liệu gì mà không tìm thấy ở đây, thì đăng yêu cầu down tại đây nhé:
Nhận download tài liệu miễn phí

Tóm tắt nội dung tài liệu:

Xung & Hoi 1
1. Giới thiệu
2. Sơ đồ khối và chân
3. Tổ chức bộ nhớ
4. Các thanh ghi chức năng đặc biệt (SFR)
5. Dao động và hoạt động reset
6. Tập lệnh
7. Các mode định địa chỉ
8. Lập trình IO
9. Tạo trễ
10.Lập trình Timer/Counter
11.Lập trình giao tiếp nối tiếp
12.Lập trình ngắt
13.Lập trình hợp ngữ
Xung & Hoi 2
• 8051 có 2 timers/counters: timer/counter 0 & timer/counter 1.
Chúng có thể được dùng như:
1. Bộ định thời (Timer) dùng như 1 bộ tạo trễ
– Nguồn xung clock chính là dao động thạch anh bên trong
2. Bộ đếm sự kiện (Event Counter)
– Đầu vào từ chân bên ngoài để đếm số sự kiện
– Có thể dùng đếm số người đi qua cổng, số vòng quay của
bánh xe, hay bất kể các sự kiện mà chuyển được sang dạng
xung
3. Tạo tốc độ baud (baud rate) cho port nối tiếp của 8051
10-1. Giới thiệu
Xung & Hoi 3
Timer
• Khởi tạo giá trị ban đầu cho các thanh ghi
• Kích hoạt Timer, sau đó 8051 tính lên
• Ngõ vào là từ clock nội (machine cycle)
• Khi các thanh ghi bằng 0 thì 8051 sẽ set cờ tràn
to
LCD
P1
8051
TL0
TH0
P2Set
Timer 0
Xung & Hoi 4
Counter
• Đếm số sự kiện:
– Chỉ ra số sự kiện trên các thanh ghi
– Counter 0: Ngõ vào từ chân bên ngoài T0 (P3.4)
– Counter 1: Ngõ vào từ chân bên ngoài T1 (P3.5)
T0
to
LCD
P3.4
P1
a switch
TL0
TH0
Xung & Hoi 5
Các thanh ghi dùng truy xuất Timer/Counter
• TH0, TL0, TH1, TL1
• TMOD thanh ghi chế độ định thời (Timer mode register)
• TCON thanh ghi điều khiển định thời (Timer control register)
• 8052 với 3 timers/counters sẽ có thêm các thanh ghi T2CON
(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 & Hoi 6
TH0, TL0, TH1, TL1 (not bit addressable)
• Cả timer 0 & timer 1 đều có độ rộng 16 bits
– Các thanh ghi này lưu trữ
• Giá trị tạo thời gian trễ (time delay) (nếu là timer)
• Số sự kiện (number of events) (nếu là 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ỗi bộ định thời 16-bit có thể được truy cập như 2
thanh ghi 8-bit tách biệt
Xung & Hoi 7
D15 D8D9D10D11D12D13D14 D7 D0D1D2D3D4D5D6
TH0 TL0
D15 D8D9D10D11D12D13D14 D7 D0D1D2D3D4D5D6
TH1 TL1
Timer 0
Timer 1
Xung & Hoi 8
10-2. Thanh ghi chế độ định thời TMOD
• Timer mode register: TMOD (not bit addressable)
– Thanh ghi 8-bit
– Thiết lập chế độ hoạt động cho các bộ định thời:
• 4 bits thấp dành cho Timer 0 (Set to 0000 if not used)
• 4 bits cao dành cho Timer 1 (Set to 0000 if not used)
GATE C/T M1 M0 GATE C/T M1 M0
Timer 1 Timer 0
(MSB) (LSB)
Xung & Hoi 9
GATE
Bit điều khiển cổng. Khi set lên 1, timer chỉ hoạt động khi
chân /INTx ở mức cao và TRx = 1. Khi xóa, timer hoạt động
khi TRx = 1
C/T
Bit chọn chức năng đếm hay định thời: 1: đếm; 0: định thời
M1
Chọn mode - bit 1
M0
Chọn mode - bit 0
GATE C/T M1 M0 GATE C/T M1 M0
Timer 1 Timer 0
(MSB) (LSB)
Xung & Hoi 10
GATE
– GATE=0
• Điều khiển bên trong (Internal control)
• Bật hay tắt timer bằng phần mềm
• Timer được cho phép khi TR được set
– GATE=1
• Điều khiển bên ngoài (External control)
• Bật hay tắt timer bằng phần mềm & một nguồn bên
ngoài (external source)
• Timer được cho phép khi chân /INT ở mức cao & TR
được set
Xung & Hoi 11
XTAL
oscillator ÷ 12
TR0
INT0 Pin
Pin 3.2
C/T = 0
Gate
T0 Pin
Pin 3.4
C/T = 1
Xung & Hoi 12
M1, M0
3
2
1
0
Mode
Chế độ định thời chia sẻ
(Split timer mode)
11
Chế độ tự động nạp lại 8-bit
(auto reload mode)
8-bit auto reload timer/counter;
THx lưu trữ giá trị nạp lại cho TLx mỗi
khi tràn (overflow)
01
Chế độ định thời 16-bit
8-bit THx + 8-bit TLx10
Chế độ định thời 13-bit
8-bit THx + 5-bit TLx (x= 0 or 1)00
Hoạt độngM0M1
Xung & Hoi 13
Giải đáp:
VD: Tìm giá trị TMOD nếu muốn lập trình Timer 0 làm việc ở
mode 2 ? Dùng 8051 XTAL cho xung clock, & dùng lệnh để
bật hay tắt timer
timer 1 timer 0
TMOD= 0000 0010 Timer 1 không dùng
Timer 0, mode 2
C/T = 0 à dùng nguồn xung clock (Timer)
GATE = 0 à điều khiển bằng phần mềm
Xung & Hoi 14
10-3. Thanh ghi điều khiển định thời TCON
• Timer control register: TCON
– ½ byte cao cho timer/counter, ½ byte thấp cho interrupts
• TR (run control bit)
– TR0 for Timer/counter 0; TR1 for Timer/counter 1.
– TR được set hay xóa bởi phần mềm để bật/tắt timer/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 & Hoi 15
• TF (timer flag, control flag)
– Cờ tràn của bộ định thời
– TF0 cho timer/counter 0; TF1 cho timer/counter 1
– Khởi đầu, TF=0 & được set bởi phần cứng khi có tràn – tức
TH-TL chuyển đếm về 0000 từ FFFFH
• Nếu cho phép ngắt, thì TF=1 sẽ kích khởi ISR
– Được xóa bởi phần mềm (hay bởi phần cứng khi bộ xi xử
lý trỏ đến trình phục vụ ngắt)
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
Timer 1 Timer0 for Interrupt
(MSB) (LSB)
Xung & Hoi 16
10-4. Các chế độ định thời
TLx
THx
TFx overflow flag
reload
Timer clock
TLx THxTimer clock TFx
overflow flag
TLx THxTimer clock TFx
overflow flag 0
1
2
3
mode
TLx THxTimer clock
TL0 TF0Timer clock
TH0 TF1Fosc/12
Xung & Hoi 17
3
2
1
0
Mode
Chế độ định thời chia sẻ
(Split timer mode)
11
Chế độ tự động nạp lại 8-bit
(auto reload mode)
8-bit auto reload timer/counter;
THx lưu trữ giá trị nạp lại cho TLx mỗi
khi tràn (overflow)
01
Chế độ định thời 16-bit
8-bit THx + 8-bit TLx10
Chế độ định thời 13-bit
8-bit THx + 5-bit TLx (x= 0 or 1)00
Hoạt độngM0M1
Xung & Hoi 18
1. Chọn timer 0 làm việc ở mode 1 (định thời 16-bit)
– MOV TMOD,#01H
2. Khởi tạo giá trị ban đầu nạp cho TH0 & TL0.
– MOV TH0,#FFH
– MOV TL0,#FCH
3. Thoạt đầu nên xóa cờ TF0 về 0
– CLR TF0
4. Bật Timer 0
– SETB TR0
10-4-1. Chế độ định thời 16-bit (mode 1)
Xung & Hoi 19
5. Khi có xung clock đến, 8051 bắt đầu đếm lên bằng cách tăng
giá trị trong các thanh ghi TH0-TL0
TH0-TL0= FFFCH,FFFDH,FFFEH,FFFFH,0000H
TLx THxTimer clock TFx
overflow flag
FFFC FFFD FFFE FFFF 0000
TF = 0 TF = 0 TF = 0 TF = 0 TF = 1
TH0 TL0Start timer Stop timer
TR0=1 TR0=0
TF Theo dõi TF đến khi TF = 1
Xung & Hoi 20
6. Khi TH0-TL0 có sự chuyển số đếm từ FFFFH à 0000 thì
8051 set TF0=1
– TH0-TL0 = FFFEH, FFFFH, 0000H (khi này TF0=1)
7. Theo dõi cờ tràn (TF)
– AGAIN: JNB TF0, AGAIN
8. Xóa TR0 để tắt timer 0
– CLR TR0
9. Xóa cớ tràn cho vòng tiếp theo
– CLR TF0
Xung & Hoi 21
XTAL
oscillator ÷ 12
TRx
THx TLx TFx
overflow flagTF goes high when FFFF à 0
C/T=0: up
C/T=0: down
Nguồn xung clock cung cấp cho bộ định thời
Timer clockT0 hay
T1 pin
Mode 1
C/T
Xung & Hoi 22
EViết chương trình tạo sóng vuông có thời gian mức cao và
thấp bằng nhau trên chân P1.5. Dùng Timer 0 tạo trễ 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ài toán 10.1. Sóng vuông
Xung & Hoi 23
;tạo trễ dùng timer 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 = 0 TF0 = 0 TF0 = 1
Xung & Hoi 24
Vài điểm cần chú ý trong VD trên:
1. TMOD = 0000 0001 được thực thi
2. FFF2H chuyển vào TH0 – TL0
3. Set và xóa P1.5 trong thời gian mức cao và thấp của xung
4. CTC DELAY dùng Timer được gọi
5. Trong CTC DELAY, bật timer 0 dùng lệnh “SETB TR0”
6. Timer 0 đếm lên mỗi khi có xung clock (cung cấp bởi dao
động thạch anh)
Timer 0 đếm qua các giá trị: FFF3, FFF4, FFF5, FFF6, FFF7,
FFF8, FFF9, FFFA, FFFB, FFFC, FFFFD, FFFE, FFFFH,
0000H à TF0 = 1 và khi n...
 
Top