TIMER 0 là bộ đếm lên,tức là nó sẽ đếm từ giá trị mình đặt vào TMR0(0x01)
Timer 0 hoạt động ở 2 chế độ như sau:
TIMER:
Muốn Timer0 hoạt động ở chế độ Timer ta clear bit TOSC
(OPTION_REG<5>), khi đó giá trị thanh ghi TMR0 sẽ tăng theo từng chu kỳ xung
đồng hồ (tần số vào Timer0 bằng ¼ tần số Oscillator).Khi giá trị thanh ghi TMR0 từ
FFh trở về 00h, ngắt Timer0 sẽ xuất hiện.Thanh ghi TMR0 cho phép ghi và xoá
được giúp ta ấn định được thời điểm ngắt của Timer0 xuất hiện một cách linh động.
COUNTER:
Muốn Timer 0 hoạt động ở chế độ counter ta set bit TOSC
(OPTION_REG<5>).Khi đó xung tác động lên bộ đếm được lấy từ chân
RA4/TOCK1.Bit TOSE (OPTION_REG<4>) cho phép lựa chọn cạnh tác động vào
bộ đếm.Cạnh tác động sẽ là cạnh lên nếu TOSE =0 và ngược lại là TOSE =1.
Khi thanh ghi TMR0 bị tràn, bit TMR0IF (INTCON <2>) sẽ được set.Đây
chính là cờ ngắt của Timer0.Cờ ngắt này phải được xoá bằng chương trình trước khi
bộ đếm bắt đầu thực hiện lại quá trình đếm.
Bộ chia tần số (prescaler):
Prescaler được điều khiển bởi
thanh ghi OPTION_REG.Bit PSA (OPTION_REG <3>) xác định đối tượng tác
động của prescaler.Các bit PS2:PS0 (OPTION_REG <2:0>) xác định tỉ số chia tần
số của prescaler.
cụ thể như sau:
để viết 1 chương trình delay dùng TMR0
+chọn chia tần option_reg<2><1><0>;
+đặt giá trị vào TMR0
+cho phép TMR0 hoạt động option_reg<5>=0 //chọn TMR0 ở chế độ timer
+kiểm tra cờ tràn intcon<2>
để viết 1 chương trình counter dùng TMR0:làm tương tự như trên nhưng thay option_reg<5>=1.
Chỉ cần hiểu được nhiêu đây là bạn có thể sử dụng TMR0 1 cách ngon lành rồi..có gì ko hiểu liên hệ với mình gmail:
dungdt08b@gmail.com .Thân.