Trong bài viết này, chúng ta tập trung vào Bộ định thời / Bộ đếm của vi điều khiển 8051. 8051 có hai bộ đếm / bộ định thời có thể được sử dụng làm bộ định thời để tạo độ trễ thời gian hoặc làm bộ đếm để đếm các sự kiện xảy ra bên ngoài vi điều khiển.
Bộ định thời và bộ đếm của vi điều khiển 8051
Trong bài viết này, chúng ta tập trung vào Bộ định thời / Bộ đếm của vi điều khiển 8051. 8051 có hai bộ đếm / bộ định thời có thể được sử dụng làm bộ định thời để tạo độ trễ thời gian hoặc làm bộ đếm để đếm các sự kiện xảy ra bên ngoài vi điều khiển.
8051 có hai bộ định thời: timer0 và timer1. Chúng có thể được sử dụng như là bộ tính giờ hoặc làm bộ đếm. Cả hai bộ định thời đều 16 bit. Do 8051 có cấu trúc 8 bit, mỗi 16 bit được truy cập dưới dạng hai thanh ghi riêng biệt của byte thấp và byte cao. Đầu tiên chúng ta sẽ thảo luận về các thanh ghi Timer0.
Thanh ghi Timer0 là một thanh ghi 16 bit và được truy cập dưới dạng byte thấp và byte cao. Byte thấp được gọi là TL0 và byte cao được gọi là TH0. Các thanh ghi này có thể được truy cập như bất kỳ thanh ghi khác.
Thanh ghi Timer1 cũng là một thanh ghi 16 bit và được chia thành hai byte, được gọi là TL1 (byte thấp) và TH1 (byte cao).
Thanh ghi TMOD (chế độ định thời): Đây là thanh ghi 8 bit sử dụng cả hai bộ định thời Timer0 và Timer1 để thiết lập các chế độ định thời khác nhau. Trong thanh ghi TMOD này, 4 bit thấp được đặt cho timer0 và 4 bit cao hơn được đặt cho timer1. Trong mỗi trường hợp, 2 bit thấp được sử dụng để đặt chế độ định thời và 2 bit cao hơn để chỉ định làm việc.
M0 |
M1 |
Chế độ |
Chế độ hoạt động |
0 |
0 |
0 |
Chế độ định thời 13 bit: bộ định thời / bộ đếm 8 bit THx và bộ chia trước tần số 5 bit TLx. |
0 |
1 |
1 |
Chế độ đinh thời 16 bit: bộ đếm định thời / bộ đếm 16 bit THx và TLx được xếp tầng; Không có bộ chia trước tần số. |
1 |
0 |
2 |
Chế độ định thời 8 bit: bộ định thời / bộ đếm tự động tải lại 8 bit; THx giữ một giá trị sẽ được tải lại vào TLx mỗi khi nó tràn ra. |
1 |
1 |
3 |
Chế độ định thời chia tách. |
Chế độ 1 - Đó là bộ định thời 16 bit; do đó, nó cho phép các giá trị từ 0000 đến FFFFH được tải vào các thanh ghi của bộ định thời TL và TH. Sau khi TH và TL được tải với giá trị ban đầu 16 bit, bộ định thời được bắt đầu. Chúng ta có thể làm điều đó bằng SETB TR0 cho timer0 và SETB TR1 cho timer1. Sau khi định thời được bắt đầu, nó bắt đầu đếm ngược cho đến khi đạt đến giới hạn FFFFH. Khi từ FFFFH quay trở về 0000H, cờ báo tràn sẽ lên mức 1 gọi là TF (Timer Flag) và nó có thể được theo dõi. Khi cờ báo tràn được nâng lên mức 1, bộ định thời sẽ dừng lại để 1 công việc khác xảy ra là CLR TR0 hoặc CLR TR1 cho timer0 và timer1. Phải lưu ý rằng cờ báo tràn TF0 dành riêng cho timer0 và TF1 dành riêng cho timer1. Sau khi bộ định thời đạt đến giới hạn của nó và quay lại giá trị đầu để lặp lại quy trình, các thanh ghi TH và TL phải được đăt lại với giá trị ban đầu và TF phải được đặt lại về 0.
Chế độ 0 - Chế độ 0 hoàn toàn giống với chế độ 1 ngoại trừ đó là bộ đếm thời gian 13 bit thay vì 16 bit. Bộ đếm 13 bit có thể giữ các giá trị trong khoảng từ 0000 đến 1FFFH trong TH-TL. Do đó, khi bộ định thời đạt đến mức tối đa 1FFH, nó sẽ quay trời lại 0000 và TF được nâng lên mức 1.
Chế độ 2- Đây là bộ định thời 8 bit, chỉ cho phép các giá trị từ 00 đến FFH được tải vào thanh ghi bộ định thời TH. Sau khi TH được tải với giá trị 8 bit, 8051 cung cấp một bản sao của nó cho TL. Sau đó, bộ định thời được bắt đầu, được thực hiện bởi lệnh SETB TR0 cho timer0 và SETB TR1 cho timer1. Sau khi được bắt đầu, bộ định thời bắt đầu đếm lên bằng cách tăng thanh ghi TL. Đếm cho đến khi đạt đến giới hạn FFH, khi đó nó sẽ quay trởi lại 00H. lúc này TF sẽ được đặt lên mức cao (cờ báo tràn). Nếu chúng ta đang sử dụng bộ timer0, TF0 sẽ lên mức cao; nếu sử dụng TF1 thì TF1 sẽ được lên mức cao. Khi thanh ghi TL từ FFH quay về 00H và TF được đặt thành 1, TL được tải lại tự động với giá trị ban đầu được giữ bởi thanh ghi TH. Để lặp lại quá trình, chúng ta chỉ cần xóa TF để không tải lại giá trị ban đầu. Điều này làm cho chế độ 2 tự động tải lại, ngược lại ở chế độ 1 trong đó người dùng phải đặt lại TH và TL.
Chế độ 3 - Chế độ 3 còn được gọi là chế độ định thời chia tách. Timer0 và timer1 có thể được lập trình độc lập với nhau khi ở chế độ 0, 1 và 2. Nhưng điều này xảy ra với chế độ 3; bộ định thời sẽ không hoạt động độc lập nếu chế độ 3 được chọn cho timer0. Đặt timer1 ở chế độ 3 khiến nó dừng đếm; bit điều khiển TR1 và cờ báo tràn TF1 sau đó được sử dụng bởi timer0.
Thanh ghi TCON - Các bit và chức năng của từng bit:
Bit |
Tên |
Chức năng |
7 |
TF1 |
Cờ báo tràn của timer1, lên mức 1 khi đêm lên tới giá trị giới hạn và quay trở về ban đầu. Bình thường ở mức 0. Có địa chỉ 001BH |
6 |
TR1 |
Bit điều khiển Timer1 1 = Timer1 hoạt động 0 = Timer1 ngừng hoạt động |
5 |
TF0 |
Cờ báo tràn của timer0, lên mức 1 khi đêm lên tới giá trị giới hạn và quay trở về ban đầu. Bình thường ở mức 0. Có địa chỉ 001BH |
4 |
TR0 |
Bit điều khiển Timer0 1 = Timer1 hoạt động 0 = Timer1 ngừng hoạt động |
3 |
IE1 |
Cờ báo ngắt bên ngoài của timer1 |
2 |
IT1 |
Bit cho phép ngắt bên ngoài của timer1 1 = chép phép ngắt ngoài được kích hoạt bằng tín hiệu cạnh xuống 0 = chép phép ngắt ngoài khi có tín hiệu ở mức thấp |
1 |
IE0 |
Cờ báo ngắt bên ngoài của timer0 |
0 |
IT0 |
Bit cho phép ngắt bên ngoài cảu timer0 1 = chép phép ngắt ngoài được kích hoạt bằng tín hiệu cạnh xuống 0 = chép phép ngắt ngoài khi có tín hiệu ở mức thấp |
Hotline: 0979 466 469