
73
CHƯƠNG 5. KHẢO SÁT TIMER/COUNTER CỦA VI ĐIỀU
KHIỂN
Chương này giới thiệu về một chức năng mở rộng trong vi điều khiển đó là bộ định
thời (timer) và bộ đếm sự kiện (counter). Đây là một thành phần không thể thiếu trong mọi
vi điều khiển và được ứng dụng trong nhiều tình huống khác nhau.
Nội dung môn học bao gồm:
Giới thiệu về timer/counter.
Các thanh ghi liên quan.
Các chế độ hoạt động.
5.1. Giới thiệu
Timer/Counter là 1 bộ đếm nhị phân dùng để đếm sự kiện hoặc đo thời gian thông
qua việc đếm xung.
Nếu sử dụng bộ đếm để đếm các xung nhịp với tần số cố định bên trong chip gọi là
chế độ timer.
Nếu sử dụng để đếm các xung sự kiện từ bên ngoài thì được gọi là chế độ counter.
Trong thực tế các bộ đếm này làm việc ở chế độ timer nhiều hơn nên thường gọi
chung là timer.
Trong VĐK 89C51 có 2 timer/counter tên là timer 0 và timer 1.
Mỗi timer có 1 bộ đếm 16 bit được kết hợp bởi hai thanh ghi THi và TLi.
Các timer được điều khiển và thiết lập chế độ hoạt động bằng 2 thanh ghi TMOD
(Timer Mode) và TCON (Timer Control).
5.2. Các thanh ghi của timer
Thanh ghi Chức năng Địa chỉ Địa chỉ bit
TCON Điều khiển 88h Có
TMOD Chọn chế độ 89h Không
TL0 Byte thấp của timer 0 8Ah Không
TL1 Byte thấp của timer 1 8Bh Không
TH0 Byte cao của timer 0 8Ch Không
TH1 Byte cao của timer 1 8Dh Không
Hình 5-1: Bảng các thanh ghi của timer
5.2.1. Thanh ghi chọn chế độ hoạt động của timer (TMOD)
Thanh ghi TMOD nằm ở địa chỉ 89h và là thanh ghi không có khả năng truy xuất bit.

74
Thanh ghi TMOD gồm được chia làm hai nhóm 4 bit: 4 bit thấp dùng để cài đặt chế
độ hoạt động cho timer 0 và 4 bit cao dùng để cài đặt chế độ hoạt động cho timer 1.
Thanh ghi TMOD được tóm tắt như sau:
TMOD
7 6 5 4 3 2 1 0
GATE
C/T M1 M0 GATE
C/T M1 M0
TIMER 1 TIMER 0
5.2.2. Thanh ghi điều khiển timer (TCON)
Thanh ghi TCON nằm ở địa chỉ 88h và là thanh ghi có khả năng truy xuất bit.
Thanh ghi TCON bao gồm các bit trạng thái và các bit điều khiển cho timer 0 và
timer 1.
Hoạt động của từng bit trong thanh ghi TCON được tóm tắt như sau:
TCON
7 6 5 4 3 2 1 0
TF1 TR1
TF0 TR0
IE1 IT1 IE0 IT0
TIMER 1 TIMER 0 INTERRUPT
Trong TCON chỉ có 4 bit cao dùng để điều khiển hoạt động cho timer, 4 bit thấp
dùng để điều khiển ngắt ngoài. Chức năng của các bit như sau:
TF1 (Timer Flag): cờ tràn của timer 1. Khi bộ đếm của timer 1 đạt giá trị lớn nhất
thì bước đếm tiếp theo bộ đếm sẽ bị tràn và giá trị bộ đếm trở về 0. Lúc này cờ tràn
TF1 sẽ được tự động đặt lên 1. Cờ tràn có thể được xóa thủ công bằng lệnh “Clr TF1”
hoặc được xóa tự động khi dùng ngắt tràn timer.
TR1 (Timer Run): bit dùng để điều khiển timer 1 chạy hoặc dừng. Khi được cài
đặt chế độ phù hợp, khi đặt bit TR1=1 sẽ cho phép timer 1 bắt đầu chạy, khi xóa
TR1=0 sẽ khiến timer dừng lại.
TF0: cờ tràn của timer 0. Hoạt động tương tự TF1.
TR0: bit điều khiển timer 0. Hoạt động tương tự TR1.
IE1 (External Interrupt Flag): cờ ngắt ngoài 1.
IT1 (External Interrupt Type): dùng để lựa chọn chế độ ngắt ngoài 1 theo mức thấp
hoặc theo cạnh xuống.
IE0: cờ ngắt ngoài 0.
IT0: chọn chế độ ngắt ngoài 1 tương tự IT1.
5.2.3. Thanh ghi bộ đếm timer
Mỗi timer là 1 bộ đếm nhị phân 16 bit được ghép bởi 2 thanh ghi THi (Timer High
byte) và TLi (Timer Low byte). Các thanh ghi nằm trong vùng RAM chứa các thanh ghi
đặc biệt ở địa chỉ 8Ah đến 8Dh.
Hình dưới mô tả các thanh ghi của timer.

75
TIMER 0
15
14
13
12
11
10
9 8 7 6 5 4 3 2 1 0
TH0 (8Ch) TL0 (8Ah)
TIMER 1
15
14
13
12
11
10
9 8 7 6 5 4 3 2 1 0
TH1 (8Dh) TL1 (8Bh)
5.3. Các chế độ hoạt động của timer
Hai bit M0 và M1 cho mỗi timer trong thanh ghi TMOD để chọn chế độ hoạt động
cho timer 0 và timer 1. Mỗi timer có 4 chế độ hoạt động được cài đặt theo bảng sau:
M1 M0 MODE Mô tả
0 0 0 Bộ đếm 13 bit
0 1 1 Bộ đếm 16 bit
1 0 2 Bộ đếm 8 bit tự nạp
1 1 3 Tách thành 2 timer 8 bit
5.3.1. Timer hoạt động ở mode 0
Ở mode 0, timer chỉ sử dụng 13 bit cho bộ đếm bao gồm 8 bit trong THi và 5 bit thấp
trong TLi. Như vậy giá trị có thể đếm của mode 0 trong khoảng từ 0 đến 2
13
- 1 = 8191.
Hình minh họa timer 0 ở mode 0 như sau:
5.3.2. Timer hoạt động ở mode 1
Mode 1 là chế độ timer sử dụng hết 16 bit cho bộ đếm bao gồm 8 bit trong THi và 8
bit trong TLi. Như vậy giá trị có thể đếm của mode 1 trong khoảng từ 0 đến 2
16
- 1 = 65535.
Đây là chế độ sử dụng khá thường xuyên trên chip 8051.
Hình 5-2: Minh họa timer ở mode 0

76
Hình minh họa timer 0 ở mode 1 như sau:
5.3.3. Timer hoạt động ở mode 2
Ở mode 2, timer chỉ sử dụng 8 bit trong TLi làm bộ đếm. Như vậy giá trị có thể đếm
của mode 2 trong khoảng từ 0 đến 2
8
- 1 = 255. Thanh ghi THi đóng vai trò lưu trữ giá trị
nạp lại ban đầu. Mỗi khi timer tràn, giá trị lưu trong THi sẽ được nạp (copy) qua thanh ghi
TLi và bộ đếm sẽ bắt bầu từ giá trị này mà không phải là từ 0. Mode này thường dùng để
tạo tốc độ baud khi truyền dữ liệu nối tiếp bất đồng bộ.
Hình minh họa timer 0 ở mode 2 như sau:
Hình 5-3: Minh họa timer ở mode 1
Hình 5-4: Minh họa timer0 ở mode 2

77
5.3.4. Timer hoạt động ở mode 3
Mode 3 chỉ dùng cho timer 0. Ở mode này, timer 0 tách thành 2 timer 8 bit. TL0 dùng
TR0 làm bit điều khiển và TF0 làm cờ tràn. TH0 dùng TR1 làm bit điều khiển và TF1 làm
cờ tràn. Khi timer 0 ở mode 3 thì timer 1 chỉ có thể hoạt động ở mode 0, 1 và 2.
Hình minh họa timer 0 ở mode 3 như sau:
5.4. Nguồn xung clock cho timer
Timer có thể lấy nguồn xung từ bộ dao động trên chip khi dùng chức năng định thời
hoặc từ nguồn xung kích bên ngoài khi dùng chức năng đếm sự kiện.
Hình 5-5: Minh họa timer 0 ở mode 3
Hình 5-6: Minh họa chọn nguồn xung cho timer
Timer clock

