Một định nghĩa đơn giản của timer là một chuỗi các flip-flop chia đơi tần sồ nối tiếp với nhau, chúng nhận tín hiệu vào làm nguồn xung nhịp. Ngõ ra của tầng cuối làm xung nhịp cho flip - flop báo tràn của timer (flip - flop cờ). Giá trị nhị phân trong các flip - flop của timer cĩ thể xem như đếm số xung nhịp (hoặc các sự kiện) từ khởi động timer. Ví dụ timer 16 bit sẽ đếm từ 0000H đến FFFFH. Cờ báo tràn sẽ lên 1 khi số đếm tràn từ FFFFH đến 0000H.
Chip 8051 cĩ hai timer 16 bit, mỗi timer cĩ 4 mode làm việc. Người ta sử dụng các timer để:
Định khoảng thời gian.
Đếm sự kiện.
Tạo tốc độ baud cho port nối tiếp của chip 8051.
1) Thanh ghi chế độ định thời( TMOD):
Thanh ghi TMOD chứa hai nhĩm 4 bit dùng để đặt chế độ làm việc cho timer 0 và timer 1.
Bit Tên Timer Mơ tả
7 GATE 1 Bit điều khiển cổng. Khi được set lên 1, bộ định thời chỉ hoạt động khi INT1\ ở mức cao 6 C/T 1 Bit chọn chế độ counter/ timer 1 = Bộ đếm sự kiện
0 = Bộ định khoảng thời gian
5 M1 1 Bit chọn chế độ thứ nhất
4 M0 1 Bit chọn chế độ thứ hai
3 GATE 0 Bit điều khiển cổng cho bộ định thời 0.
2 C/T 0 Bit chọn counter/ timer cho bộ định thời 0
1 M1 0 Bit chọn chế độ thứ nhất.
0 M0 0 Bit chọn chế độ thứ hai
Trang 27 MSSV: 06DT053 SVTH: Phùng Khắc Hy Các chế độ định thời: M1 M0 Chế độ Mơ tả 0 0 0 Chế độ định thời 13 bit 0 1 1 Chế độ định thời 16 bit 1 0 2 Chế độ tự động nạp lại 8 bit 1 1 3 Chế độ định thời chia xẻ Bảng 2.4 : Các chế độ định thời
2) Thanh ghi điều khiển time r ( TCON ):
Thanh ghi TCON chứa các bit trạng thái và các bit điều khiển cho timer 0 và timer 1 như được mơ tả trong bảng sau :
Bit Ký hiệu Địa chỉ Mơ tả
TCON.7 TF1 8FH Cờ báo tràn timer1. Được set bởi phần cứng khi tràn, được xĩa bởi phần mềm hoặc phần cứng khi bộ xử lí trỏ đến chương trình phục vụ ngắt. TCON.6 TR1 8EH Bit điều khiển hoạt động của timer1. Được set/xĩa bằng phần mềm để bộ định thời chạy/
ngưng
TCON.5 TF0 8DH Cờ báo tràn timer 0.
TCON.4 TR0 8CH Bit điều khiển hoạt động của timer 0.
TCON.3 IE1 8BH
Cờ ngắt bên ngồi 1 (kích khởi cạnh ). Được set bởi phần cứng khi phát hiện một cạnh xuống ở INT1\ xĩa bằng phần mềm hoặc phần cứng khi CPU chỉ đến chương trình phục vụ ngắt.
TCON.2 IT1 8AH Cờ ngắt bên ngồi 1 ( kích khởi cạnh hoặc mức). Được set/xĩa bằng phần mềm khi xảy ra cạnh xuống hoặc mức thấp tại chân ngắt ngồi.
TCON.1 IE0 89H Cờ ngắt bên ngồi 0 ( kích khởi cạnh )
Bảng 2.5 : Thanh ghi điều khiển định thời TCON
3) Các chế độ định thời và cờ tràn :
a. Chế độ định thời 13 bit ( chế độ 0 ) :
Chế độ này khơng được dùng cho các thiết kế mới. Byte cao của bộ định thời THx được ghép cascade với 5 bit thấp của byte thấp của bộ định thời TLx để tạo thành một bộ định thời 13 bit. Ba bit cao của TLx khơng sử dụng.
Hình 2.4 : Chế độ 0 b. Chế độ định thời 16 bit ( chế độ 1 ) :
Khi cĩ xung clock đến, bộ định thời đếm lên : 0000h, 0001h,…. Một tràn sẽ xuất hiện khi cĩ sự chuyển số đếm từ FFFFH xuống 0000H,sự kiện này sẽ set cờ tràn bằng 1và bộ định thời tiếp tục đếm. Cờ tràn là bit TFx trong thanh ghi điều khiển định thời TCON, bit này được đọc hoặc ghi bởi phần mềm.
Bit cĩ ý nghĩa lớn nhất ( MSB ) của giá trị trong các thanh ghi định thời là bit 7 của THx và bit cĩ ý nghãi thấp nhất ( LSB ) là bit 0 của TLx. Các thanh ghi định thời ( TLx/THx ) cĩ thể được đọc hoặc ghi ở một thời điểm bất kỳ bởi phần mềm. TLx (8 bits) (8 bits) THx TFx Timer clock Overflow flag TLx (5 bits) (8 bits) THx TFx Timer clock Overflow flag
Trang 29 MSSV: 06DT053
SVTH: Phùng Khắc Hy
Hình 2.5: Chế độ 1
c. Chế độ tự nạp lại 8 bit ( chế độ 2 ) :
Byte thấp của bộ định thời ( TLx ) hoạt động định thời 8 bit trong khi byte cao của bộ định thời lưu giữ giá trị nạp lại. Khi số đếm tràn từ FFH xuống 00H, khơng chỉ cờ tràn của bộ định thời được set lên 1 mà giá trị trong THx cịn đựơc nạp vào TLx và việc đếm được tiếp tục cho đến khi xảy ra 1 tràn kế tiếp.
Hình 2.6 : Chế độ 2
4) Nguồn xung clock định thời:
Cĩ hai khả năng tạo ra nguồn xung clock, việc lựa chọn khả năng nào do ta thiết lập bit C/T ( counter/ timer ) của thanh ghi TMOD bằng 0 hay bằng 1 khi bộ định thời được khởi động. Một nguồn xung clock được dùng để định thời một khoảng thời gian, nguồn xung clock cịn lại được dùng để đếm sự kiện.
Định thời một khoảng thời gian:
Nếu C/T = 0 hoạt động định thời được chọn và nguồn xung clock của bộ định thời do mạch dao động bên trong chip tạo ra. Một mạch chia 12 được thêm vào để giảm tần số xung clock đến một giá trị thích hợp với hầu hết các ứng dụng. Lúc này, bộ định thời được dùng để định thời một khoảng thời
TLx THx TFx Timer clock reload Overflow flag
gian. Các thanh ghi định thời đếm lên với tần số xung clock bằng 1/12 tần số của mạch dao động trên chip. Bộ định thời sẽ tràn sau một số xung clock cố định phụ thuộc vào giá trị ban đầu nạp cho các thanh ghi định thời.
Đếm sự kiện:
Nếu bit C/T = 1, bộ định thời được cung cấp xung clock từ một nguồn tạo xung bên ngồi. Trong đa số các ứng dụng, nguồn xung clock này cung cấp cho bộ định thời một xung dựa trên việc xảy ra một sự kiện. Số sự kiện được xác định trong phần mềm bằng cách đọc các thanh ghi định thời, giá trị trong các thanh ghi này tăng theo mỗi sự kiện. Hai chân của port3 là P3.4, P3.5 bây giờ trở thành ngõ vào xung clock cho bộ định thời.
Hình sau trình bày hai cách tạo nguồn xung clock cho bộ định thời:
Hình 2.6 :Nguồn xung clock
5) Khởi động, dừng và điều khiển các bộ định thời :
Để khởi động và dừng các bộ định thời ta sử dụng bit điều khiển hoạt động TRx trong thanh ghi TCON. TRx được xĩa khi thiết lập lại hệ thống; nghĩa là các bộ điïnh thời ngưng hoạt động.
TRx Xung nhịp timer
0 = lên: timer dừng 1 = xuống: timer chạy
Các thanh ghi timer
÷ 12 Bộ dao động trong C/T Thạch anh Chân T0 hoặc T1 Xung nhịp timer
Trang 31 MSSV: 06DT053
SVTH: Phùng Khắc Hy
Hình 2.7 : Bắt đầu và dừng các bộ định thời
Thơng thường các thanh ghi được khởi động một lần ở đầu chương trình để đặt chế độ làm việc đúng. Sau đĩ, trong thân chương trình, các timer được cho khởi động, dừng, các bit cờ được kiểm tra và xĩa, các thanh ghi timer được đọc và cập nhật v,v… theo địi hỏi của các ứng dụng.
TMOD là thanh ghi thứ nhất được khởi động vì nĩ đặt chế đợ hoạt động. Ví dụ các lệnh sau khởi động timer1 như bộ định thời 16 bit (chế độ 1) cĩ xung nhịp từ bộ dao động trên chip cho việc định khoảng thời gian:
MOV TMOD, #00010000B
Kết quả của lệnh này là thiết lập M1=0 và M0=1 để chọn chế độ 1, C/T= 0 và GATE = 0 để sử dụng xung clock trên chip, xĩa các bit chọn chế độ của bộ định thời 0. Đến đây, bộ định thời vẫn chưa thể hoạt động cho tới khi bit điều khiển Tr1 được SET lên 1
Nếu cần số đếm ban đầu, các thanh ghi timer TL1/TH1 cũng phải được khởi động. Cần nhớ là các timer đếm lên và thiết lặp cờ báo tràn bằng 1 khi cĩ tràn số đếm từ FFFFH sang 0000H. Khi bộ định thời tràn , ta cần dừng bộ định thời và xĩa cờ tràn bằng phần mềm.
Một phương pháp khác để điều khiển các bộ định thời là sử dụng bit
GATE trong thanh ghi TMOD và ngõ vào /INTX . Bằng cách SET bit GATE
lên 1 ta cho phép bộ định thời được điều khiển bởi /INTX . Phương pháp này
thường được dùng để đo độ rộng xung.
Giả sử /INT0 ở mức thấp rồi chuyển sang mức cao trong một khoảng thời gian và ta muốn đo khoảng thời gian này. Ta khởi động bộ định thời 0 ở chế độ 2 ( chế độ định thời 16 bit ) với TL0/TH0 = 0000H, GATE = 1 và TR0 = 1. Khi /INT0 chuyển lên mức cao, bộ định thời được mở cổng và nhận xung clock cĩ tần số 1Mhz. Khi /INT0 chuyển xuống mức thấp, bộ định thời bị khĩa cổng khơng nhận xung clock nữa và độ rộng xung tính bằng μs là số đếm trong TL0/TH0. /INT0 cĩ thể được lập trình để tạo ra ngắt khi chân này trở về mức thấp.
Hình sau minh họa bộ định thời 1 hoạt động ở chế độ 1. Cùng với thanh ghi TL1/TH1 và cờ tràn TF1, sơ đồ trình bày các khả năng cấp nguồn xung clock, khởi động, dừng và điều khiển bộ định thời 1.
÷12 Bộ dao động trênchip 0: lên 1: xuống TL1 TH1 TF1 T1 TR1 GATE INT 0: lên 1: xuống C/T
Hình 2.8 : Hoạt động ở chế độ 1 của bộ định thời 1