Nguồn xung nhịp cho các timer là xung vuông có tần số bằng 1/12 tần số xung nhịp cung cấp cho 8051 Nguyên lý hoạt động của bộ định thời • Tần số của bộ định thời luôn bằng 1/12 tần số củ
Trang 1Bộ định thời họ VXL 8051
Giảng viên: TS Đoàn Thị Hương Giang
ĐT: 037 263 0593 Email: giangdth@epu.edu.vn
Trang 2Timers /Counters trong 8051
8051 có 2 timers/counters:
– Timer/counter 0
– Timer/counter 1
Chúng có thể được sử dụng như sau:
1 Timerđược sử dụng như một bộ định thời.
– Nguồn tạo xung đồng hồ The clock source is the internal crystal frequency of
the 8051.
2 Đếm sự kiện với chức năngcounter.
– Tín hiệu ngoàitừ chân vào để đếm số lượng các sự kiện.
– Có thể dùng để đến số người ra vào cửa, số vòng quay, ….
3 tạo tốc độ baud cho cổng nối tiếp có sẵn trong 8051/8031
VD với timer 16 bit có 16 tầng, tầng cuối cùng chia tần số xung nhịp cho
2 16 =65536 Nguồn xung nhịp cho các timer là xung vuông có tần số bằng
1/12 tần số xung nhịp cung cấp cho 8051
Nguyên lý hoạt động của bộ định thời
• Tần số của bộ định thời luôn bằng 1/12 tần số của thạch anh gắn với 8051
• Bộ đếm/Bộ định thời: Đây là các ngoại vi được thiết kế để thực hiện một nhiệm
vụ đơn giản: đếm các xung nhịp Mỗi khi có thêm một xung nhịp tại đầu vào
đếm thì giá trị của bộ đếm sẽ được tăng lên 01 đơn vị (trong chế độ đếm
tiến/đếm lên) hay giảm đi 01 đơn vị (trong chế độ đếm lùi/đếm xuống).
Tràn (overflow): là sự kiện bộ đếm đếm vượt quá giá trị tối đa mà nó có thể biểu
diễn và quay trở về giá trị 0 Với bộ đếm 8 bit, giá trị tối đa là 255 (tương đương
với FF trong hệ Hexa) và là 65535 (FFFFH) với bộ đếm 16 bit.
Trang 3Các bộ định thời (Timers)
• Chế độ định thời - Timer
– Tăng sau mỗi chu kỳ máy (tương đương với 12 chu kỳ
thạch anh)
• Chế độ đếm - Counter
– Tăng khi chân T0/T1 chuyển từ 1 - 0 (tín hiệu ngoài)
• Có thể truy cập các giá trị định thời một cách trực tiếp
• Các bộ định thời có thể tạo ra ngắt
• Hoạt động của Timer/Counter:
– Thanh ghi điều khiển chế độ - Mode control register
(TMOD)
– Thanh ghi điều khiển - Control register (TCON)
Chế độ định thời - Timer
• Khởi tạo bộ định thời thông qua các thanh ghi
• Bắt đầu định thời và sau đó 8051 sẽ đếm tiến
• Đầu vào từ nguồn xung đồng hồ hệ thống nội (machine cycle)
• Khi các thanh ghi bằng 0 thì 8051 đặt một bit báo đã đếm xong
ĐK LCD,…
P1
8051
TL0 TH0
P2
Đặt bộ định thời 0
Trang 4Chế độ đếm - Counter
• Đếm số lượng các sự kiện
– Lưu số lượng các sự kiện đếm được trong thanh ghi
– Nguồn xung đếm từ ngoài ở chân T0(P3.4) đối với
bộ đếm 0
– Nguồn xung đếm từ ngoài ở chân T1(P3.5) đối với
bộ đếm 1
– Đầu vào từ ngoàitrên chân Tx
– Tx (T0 hoặc T1)
T0 P3.4
8051
Xung
TL0 TH0
Đếm số lần chuyển trạng thái từ 1 xuống 0 tới một chân P3.4 TS Đoàn Thị Hương Giang 7
Chế độ đếm - Counter
Timer 0
external
input Pin
3.4
TR0
TH0 TL0 TF0
TF0 goes high when FFFF 0
overflow flag
C/T = 1
Trang 5Các thanh ghi đặc biệt dùng trong
chế độ đinh thời
SFR của bộ định thời Mục đích Địa chỉ Định địa chỉ bit
TCON Điều khiển 88H Có
TMOD Chọn chế độ 89H Không
TL0 Byte thấp của bộ định thời 0 8AH Không
TL1 Byte thấp của bộ định thời 1 8BH Không
TH0 Byte cao của bộ định thời 0 8CH Không
TH1 Byte cao của bộ định thời 1 8DH Không
T2CON Điều khiển bộ định thời 2 C8H Có
RCAP2L Nhặn byte thấp của bộ định thời 2 CAH Không
RCAP2H Nhận byte cao của bộ định thời 2 CBH Không
TL2 Byte thấp của bộ định thời 2 CCH Không
TH2 Byte cao của bộ định thời 2 CDH Không
Thanh ghi TMOD
• Thanh ghi chế độ timer: TMOD
MOV TMOD,#21H
– 8-bit, ở địa chỉ 89H trong RAM nội
– Thiết lập chế độ sử dụng cho 02 timer
• 4 bit thấp cho Timer 0 (đặt bằng 0000 nếu không sử dụng)
• 4 bit cao cho Timer 1 (đặt bằng 0000 nếu không sử dụng)
– Không được truy cập theo từng bit
• C/T – Chỉ định chế độ Timer/counter:
= 0 Chế độ Timer
= 1 Chế độ Counter
GATE C/T M1 M0 GATE C/T M1 M0
Timer 1 Timer 0
Trang 6Thanh ghi TMOD
• GATE – cho phép khởi động/dừng timer bằng phần cứng
hay phần mềm:
– GATE=0: Khởi động/dừng timer bằng phần mềm
• Chân INT(P3.2, P3.3) không được sử dụng trong chế độ định thời và
được sử dụng như chức năng của cổng vào/ra thông thường.
– GATE=1: Khởi động/dừng timer bằng phần cứng
• Chân INT(P3.2, P3.3) được sử dụng trong chế độ counter C/T
11
GATE C/T M1 M0 GATE C/T M1 M0
Timer 1 Timer 0
TS Đoàn Thị Hương Giang
M1, M0
• M0 và M1 - Lựa chọn chế độ cho timer 0 & 1.
M1 M0 Chế độ Ý nghĩa hoạt động
0 0 0 13-bit timer – chế độ định thời 13 bit 8191
8-bit THx + 5-bit TLx (x= 0 hoặc 1)
0 1 1 16-bit timerchế độ định thời 16 bit 65535
8-bit THx + 8-bit TLx
1 0 2 8-bit tự động nạp lại 255
8-bit timer/counter tự động nạp lại;
THx giữ giá trị để nạp lại cho TLx khi timer đếm tràn
1 1 3 8- bit: Chế độ định thời chia tách; Timer0 dùng cờ tràn, timer1
không dùng chế độ tràn
GATE C/T M1 M0 GATE C/T M1 M0
Timer 1 Timer 0
Trang 7Các chế độ của bộ định thời
Ví dụ 1
• Tìm giá trị nạp cho TMOD nếu muốn lập trình timer 0 ở chế độ 2
Sử dụng XTAL của 8051 làm nguồn xung clock và sử dụng lệnh để
khởi động cho bộ định thời
Giải:
TMOD= 0000 0 10
Timer 0, Chế độ 2(SM0 = 0; SM1 =1) C/T = 0 => Chế độ timer
GATE = 0 =>ĐK timer khởi động và dừng bằng
phần mềm
timer 1 timer 0
Trang 8Thanh ghi điều khiển định thời (TCON )
• Thanh ghi TCON chứa các bit điều khiển và trạng thái của bộ
định thời 0 và bộ định thời 1
• Bốn bit cao trong TCON (TCON.4 - TCON.7 ) được dùng để
điều khiển các bộ định thời hoạt động hoặc ngừng (TR0, TR1)
hoặc để báo các bộ định thời tràn (TF0, TF1)
• Bốn bit thấp của TCON ( TCON.0 - TCON.3 ) không dùng để
điều khiến các bộ định thời, chúng được dùng để phát hiện và
khởi động các ngắt ngoài
Thanh ghi điều khiển định thời (TCON )
TCON.7 TF1
Cờ báo tràn của bộ định thời 1
Được set bởi phần cứng khi có tràn, được xóa bởi phần mềm, hoặc bởi phần cứng khi bộ vi xử lý trỏ đến trình phục vụ ngắt.
TCON.6 TR1
Bit diều khiển hoạt động của bộ định thời 1.
Bit này được set hoặc được xóa bởi phần mềm để điều khiển bộ định thời hoạt động hay ngưng hoạt động.
TCON.5 TF0 Cờ báo tràn của bộ định thời 0
TCON.4 TR0 bit điều khiển hoạt động của bộ định thời 0
TCON.3 IE1
Cờ ngắt bên ngoài 1 (kích khởi cạnh ) Cờ này được set bởi phần cứng khi có cạnh âm (xuống) xuất hiện trên chân /INT1, Được xóa bởi phần mềm hoặc phần cứng khi CPU trỏ đến trình phục vụ ngắt
TCON.2 IT1
Cờ ngắt bên ngoài 1 ( kích khởi cạnh hoặc mức ) Cờ này được set hoặc xóa bởi phần mềm khi xảy ra cạnh âm (xuống ) hoặc mức thấp tại chân ngắt ngoài
TCON.1 IE0 Cờ ngắt bên ngoài 0 (kích khởi cạnh)
TCON.0 IT0 Cờ ngắt bên ngoài 0 (kích khởi cạnh hoặc mức) TS Đoàn Thị Hương Giang 16
Trang 9Các bước lập trình ở chế độ 1
Để tạo ra một độ trễ thời gian dùng chế độ 1 (16 bit) của bộ
định thời thì cần phải thực hiện các bước dưới đây:
1 Nạp giá trị TMOD cho thanh ghi báo độ định thời nào
(Timer0 hay Timer1) được sử dụng và chế độ nào được
chọn.
2 Nạp các thanh ghi TL và TH với các giá trị đếm ban đầu.
3 Khởi động bộ định thời.
4 Duy trì kiểm tra cờ bộ định thời TF bằng một vòng lặp
để xem nó được bật lên 1 không Thoát vòng lặp
khi TF được lên cao.
5 Dừng bộ định thời.
6 Xoá cờ TF cho vòng kế tiếp.
7 Quay trở lại bước 2 để nạp lại TL và TH.
Cách tính toán độ trễ (1)
• Sử dụng chế độ 1 (16 bit) của bộ định thời đối với tần
số thạch anh XTAL = f (MHz):
Trang 10Các bước để tìm các giá trị của các
thanh ghi TH và TL
1 Tính t cần trễ cho chu kỳ lệnh T=1.085 s
2 Thực hiện (65535 – n +1)T = t => n
3 Chuyển đổi kết quả ở bước 2 sang số Hex:
ta có YYXX là giá trị Hexa ban đầu cần
phải nạp vào các thanh ghi Timer.
4 Đặt TL = XX và TH = YY
Bảng tính giá trị THTL theo các chế độ
Chế độ Công thức tính
Trang 11Ví dụ
thì để tạo trễ là 6ms thì nên dùng timer0 chế
độ nào?
Chế độ Công thức tính
Chế độ 8 bit t = (256)*10-6=0.256ms
Chế độ 13 bit t = (8192)*10-6 = 8.192ms
Chế độ 16 bit t = (65536)*10-6=65,536ms
Bảng các thời gian trễ tối đa của bộ
định thời
Tần số thạch anh 6MHz 12MHz 18MHz 24MHz 36MHz
Chế độ 8 bit 0.512ms 0.256ms 0.17ms 0.128ms 0.085ms
Chế độ 13 bit 16.384ms 8.192ms 5.461ms 4.096ms 2.73ms
Chế độ 16 bit 131.072ms 65.536ms 43.69ms 32.768ms 21.845ms
Trang 12Các bước lập trình ở chế độ 1
Để tạo ra một độ trễ thời gian dùng chế độ 1 (16 bit) của bộ định
thời thì cần phải thực hiện các bước dưới đây:
1 Nạp giá trịTMODcho thanh ghi báo độ định thời nào (Timer0
hay Timer1) được sử dụng và chế độ nào được chọn
2 Nạp các thanh ghi TLx và THxvới các giá trị đếm ban đầu
3 Khởi độngbộ định thời (TRx)
4 Duy trì kiểm tra cờbộ định thờiTFxbằng một vòng lặp để
xem nó được bật lên 1 không Thoát vòng lặp khi TF được lên
cao
5 Dừngbộ định thời
6 Xoá cờ TFxcho vòng kế tiếp
7 Quay trở lại bước 2 để nạp lại TL và TH.
Ví dụ tính TH, TL ViÕt chư¬ng tr×nh t¹o xung f = 2KHz trªn P1.5?
Giải:
• Chu kú xung ra P1.5 :
• Thêi gian cao thÊp/cao cña xung hay thời gian trễ:
”t”= Txung/2 = 250s
• Tần số thạch anh: fta=12MHz=> T=12/fta=1s
• Gi¸ trÞ cÇn n¹p vµo TH vµ TL lµ:
(65.535 – THTL+1)T = t
THTL=65286
THTL=FF06=> TH=0FFh, TL=06h
s ms f
10 2 1
3
P1.5
250 s
Trang 13Chương trình
CLR TF0 ; Xóa cờ tràn T0
MOV TMOD,#01h ;DùngT0 ở chế độ1
AGAIN:
MOV TL0,#06h
MOV TH0,#0FFh
SETB TR0 ; Khởi động T0
BACK:
JNB TF0,BACK ; Nhảy tại chỗ nếu cờ tràn chưa báo 0
CLR TR0 ; Dừng T0
CPL P1.5 ; Đảo giá trị cuả cổng P1.5
CLR TF0 ; Xóa cờ tràn T0
JMP AGAIN ; Lặp lại quá trình chạy T0
Main:
cpl P1.5
lcall Timer1
sjmp Main
Timer1:
CLR TF1
MOV TMOD, #10h
AGAIN:
MOV TL1,#BFH
SETB TR1
BACK:
JNB TF1,BACK
CLR TR1
CLR TF1
ret
end
Main:
CLR TF1 MOV TMOD,#10h
AGAIN:
MOV TL1,#06h MOV TH1,#0FFh SETB TR1 BACK:
JNB TF1,BACK CLR TR1
CPL P1.5
CLR TF1 JMP AGAIN
end
Trang 14;Tạo xung dung timer
MOV TMOD,#01h ;Dựng T0 ở chế độ 1
MAIN:
CPL P0.1 ;Đảo giỏ trị cổng P0.1
CALL Delay_Timer0 ;Gọi chương trinh trễ
;Tạo trễ dựng timer
Delay_Timer0:
AGAIN:
JNB TF0,AGAIN ; TF0 = 0 nhảy tại chỗ chờ timer0 đếm xong
RET
Vớ dụ: Tạo xung cú độ rộng 50% trờn chõn P1.0
8s = 200 x 0.04s = 200 x 40,000 s 40,000 nhịp đếm, mỗi nhịp 1 s
- Giá trị nạp vào T1 là : 65,536 – 40,000 = 25,536 = 63BFH
( hoặc : FFFFh – 9C40H = 63BFH)
- Lặp 200 lần
Chương trình : = Sai
Wait8s:
CLR TF1 ;Xóa cờ tràn T1 MOV TMOD,#10h ; Dùng T1 ở chế độ 1 MOV R3,#200 ; Lặp 200 lần AGAIN: MOV TL1,# 0 BF H
MOV TH1,#63 H
SETB TR1 BACK: JNB TF1,BACK ; Nhảy tại chỗ nếu cờ tràn bằng 0
CLR TR1 ; Tắt T1 CLR TF1 ; Xóa cờ tràn DJNZ R3,AGAIN ; Nếu R3 khác 0 thì lặp lại
RET
Viết ch ương trình tạo trễ 8s dùng T1
Trang 15Thời gian trễ t=8s => số thời gian quá lớn t= 8s = 200*0.04s
Thực hiện lặp 200 lần thời gian tạo trễ của timer=> coi nh tính toán cho timer 1 với
thời gian trễ là t1=0.04s
Chu kỳ lệnh: T= 1 s
Giá trị nạp vào T1 là: (65535-THTL+1)*T=t1
65,536 – 40,000 = 25,536 = 63BF H (hoặc : FFFFh – 9C40 = 63BF)
Lặp 200 lần:
CLR TF1 ;Xóa cờ tràn T1
MOV TMOD,#10h ; Dùng T1 ở chế độ 1
MOV R3,#200 ; Lặp 200 lần
AGAIN:
MOV TL1,#BF
MOV TH1,#63
SETB TR1
BACK:
JNB TF1,BACK ; Nhảy tại chỗ nếu cò tràn bằng 0
CLR TR1 ;Tắt T1
CLR TF1 ;Xóa cờ tràn
DJNZ R3,AGAIN ;Nếu R3 khác 0 thì lặp lại
Viết chương trình tạo trễ 8s dùng T1
To Chapter 4….