TMR0為8位寬,有一個可選的預分頻器,用于通用目的,可用于定時和計數。
TMR1為16位寬,附帶一個可編程的預分頻器和一個可選的低頻時基振蕩器,適合與CPP模塊配合使用來實現輸入捕扣或輸出比較功能,也可于定時和計數。
TMR2為8位寬,附帶一個配合使用來實現PWM脈沖寬度調制信號的產生,只能用于定時。
TMR0用作定時器時,定時器時鐘=系統時鐘/4;
寫TMR0時,會產生2個周期的的延時,如果不使用前置分頻器,可通過設置
初值進行補償。
例如 需要定時200個時鐘周期時,TMR0 = 256 -200 + 2= 58
OPTION_REG:
bit5 T0CS:TMR0 Clock Source Select bit
1 = TransiTIon on T0CKI pin
0 = Internal instrucTIon cycle clock(CLKO)
bit 4 T0SE:TMR0 Source Edge Select bit
1 = Increment on high-to-low transiTIon on T0CKI pin
0 = Increment on low-to-high transiTIon on T0CKI pin
bit 3 PSA:Prescaler Assignment bit
1 = Prescaler is assigned to the WDT
0 = Prescaler is assigned to the Timer0 module
bit2-0 PS2:PS0:Prescaler Rate Select bits
任何時候對TMR0寄存器進行一次寫操作后,其計數功能將被禁止2個指令周期。
給大家一個意見:如果想用TMR0實現精確的定時,一旦用了預分頻器后就不要對TMR0做任何寫操作。
注意:在中斷服務程序中查詢TMR0中斷時,既要查詢T0IE位,還要查詢T0IF位。
來源;21ic