CHƯƠNG 5. BỘ ĐỊNH THỜI – BỘ ĐẾM
5.2 Cấu hình cài đặt các thanh ghi điều khiển, trạng thái cho bộ định thời
- Thanh ghi chứa giá trị đếm là TMR0 có độ dài 8 bit (số đếm tối đa là 255).
- Nội dung của thanh ghi TMR0 có thể đọc và ghi đƣợc - Hoạt động ở 2 chế độ: bộ định thời và bộ đếm
- Trong chế độ bộ đếm: dạng xung đầu vào có thể lựa chọn (sườn dương hoặc sườn âm)
- Có bộ chia tần số có thể thay đổi tỉ lệ chia bằng chương trình 5.2.2 Các bit điều khiển
a. Bit chọn chế độ
Timer0 hoạt động ở 2 chế độ: bộ định thời và bộ đếm
Để lựa chọn chế độ làm việc, ta gán giá trị cho bit T0CS (Timer0 Clock Select bit- Bit lựa chọn nguồn xung cho Timer), vị trí của bit này là bit 5 của thanh ghi OPTION_REG:
T0CS=1: Timer0 hoạt động ở chế độ bộ đếm (nguồn xung là xung đầu đi vào chân RA4) T0CS=0: Timer0 hoạt động ở chế độ định thời (nguồn xung là dao động thạch anh, tần số=Fosc/4)
b. Bit chọn dạng xung đầu vào
Khi hoạt động ở chế độ bộ đếm, thanh ghi TMR0=TMR0+1 mỗi lần có 1 xung đi vào chân RA4
Vấn đề là dạng xung là xung sườn lên hay sườn xuống
91
Để cài đặt dạng xung ta gán giá trị cho bit T0SE (Timer0 Edge Select Bit- Bít chọn dạng sườn xung), vị trí của bit là bít 4 của thanh ghi OPTION_REG:
T0SE=1: TMR0=TMR0+1 Khi có đổi trạng thái từ cao xuống thấp trên chân RA4 (sườn âm)
T0SE=0: TMR0=TMR0+1 Khi có đổi trạng thái từ thấp lên cao trên chân RA4 (sườn dương)
c. Các bít cài đặt tỉ lệ chia tần số
Nhƣ trong phần a đã khảo sát, nguồn xung tác động có thể xung đi vào chân RA4 (trong chế độ bộ đếm)
Hoặc nguồn xung từ dao động thạch anh (đã đƣợc chia 4- trong chế độ bộ định thời) Trong thực tế, dao động từ nguồn xung trên phải đi qua bộ chia tần số trước khi đi vào tác động đến
Timer0.
Bộ chia tần số này có thể cài đặt tỉ lệ chia tần số Cụ thể ta hiểu đơn giản nhƣ sau:
Trong chế độ bộ đếm, TMR0=TMR0+1 sau mỗi xung của tín hiệu đi vào chân RA4 Vậy tần số cập nhật của TMR0 là bằng tần số xung
Bây giờ do tín hiệu xung từ chân RA4 đi qua bộ chia tần số trước khi tác động thay đổi TMR0
Giả sử tỉ lệ chia là 1:2 nghĩa là tần số của xung đầu ra của bộ chia bằng ẵ tần số của xung vào RA4
Mỗi xung đầu ra của bộ chia làm cho TMR0=TMR0+1 Vậy tần số xung của RA4=2 tần số cập nhật TMR0
Do đó, sau khi có 2 tác động vào RA4 thì TMR0=TMR0+1 Tương tự, đối với chế độ bộ định thời
Sau 2 chu kì lệnh, TMR0=TMR0+1
Điều đặc biệt là tỉ lệ chia này có thể thay đổi đƣợc bằng cách gán giá trị cho các bit PS2,PS1,PS0- Vị trí các bít là bit 2,1,0 của thanh ghi OPTION_REG
Cụ thể tỉ lệ chia tương ứng với giá trị của PS2,PS1,PS0 như sau:
92
PS2 PS1 PS0
Tỉ lệ chia
000 1:2
001 1:4
010 1:8
011 1:16
100 1:32
101 1:64
110 1:128
111 1:256
Bảng 5.1: Chọn tỉ lệ chia tần số cho timer0 d. Bít chọn bộ chia tần số cho TIMER0
Thực ra bộ chia tần số có thể đƣợc lựa chọn làm bộ chia cho Timer0 hoặc Watch Dog Timer
Vì vậy, để cài đặt bộ chia tần số làm việc với Timer0 ta có gán giá trị cho bít PSA , vị trí bit là bít số 3 của thanh ghi OPTION_REG.
PSA=0, bộ chia làm việc cho TIMER0
PSA=1, bộ chia làm việc cho Watch Dog Timer e. Bít cờ trạng thái
Do độ dài của thanh ghi TMR0 là 8 bit, nhƣ vậy tốt đa viết đƣợc 255
Nếu nhƣ TMR0=255, nếu tiếp tục có xung vào (từ nguồn dao động thạch anh trong chế độ định thời hoặc từ chân RA4 trong chế độ bộ đếm), TMR0 = 255+1 = 256 bị tràn và TMR0=0
Mỗi lần TMR0 bị tràn, bit cờ trạng thái sẽ tự động set lên 1 để báo trạng thái tràn đó Bit cờ này có tên là TMR0IF (Timer0 Interrupt Flag- Bít cờ ngắt), vị trí bit là bít 2 của thanh ghi INTCON.
Chú ý là khi có tràn giá trị của thanh ghi TMR0, TMR0IF=1, TMR0=0 Ta phải xóa TMR0IF bằng chương trình.
93
Toàn bộ hoạt động của timer0 có thể tổng kết theo sơ đồ sau:
Hình 5.1: Nguyên lý hoạt động của Timer0 5.2.3 Các thanh ghi liên quan
Thanh ghi TMR0 (Địa chỉ 01h) Chứa giá trị đếm hiện tại của Timer 0 Thanh ghi Option_Reg (Địa chỉ 81h)
T0CS: Bit chọn chế độ
= 0: TMR0 hoạt động chế độ định thời
= 1: TMR0 hoạt động chế độ bộ đếm T0SE: Bit chọn dạng xung cho chế độ bộ đếm
= 0: Xung sườn lên
= 1: Xung sườn xuống
PSA: Bit chọn chế độ cho bộ chia tần số PresCale là WatchDog_Timer hay Timer 0.
= 0: Bộ chia tần số dành cho Timer 0
= 1: Bộ chia tần số dành cho Watch_Dog Timer
PS2-PS0: 3 bit chọn tỉ lệ chia tần số nhƣ đã giới thiệu ở phần trên Thanh ghi INTCON (0Bh):
94
Bit TMR0IE: Bit này bằng 1 cho phép ngắt Timer 0. Sự kiện ngắt xảy ra khi có sự tràn TMR0 từ 255 xuống 0.