從圖可以看出:
l 定時器的輸入時鐘是PCLK;
l T0和T1為一組,T0、T1共用一個8bit分頻器
l T2、T3、T4為一組,共用一個8bit分頻器,T4沒有輸出引腳只能做內部時鐘使用。
l 8bit分頻後還有一個1/2 1/4 1/8 1/16 的clock divider。
l 定時器輸入時鐘頻率計算如下:
[ /(prescaler+1)]/分頻器的分頻值
prescaler value = 119
divider value = 1/16
PCLK= 50700000
Timer input clock Frequency =50700000/ (119+1)/(16)=26406
就是輸入的時鐘,prescaler就是分頻值(2,4,8,16),其中TCFG0控制著prescaler的分頻值;TCFG1控制著分頻器的值(2,4,8,16)。
l 定時器減法緩沖寄存器TCNTBn和比較緩沖寄存器TCMPBn
TCNTBn存放計數值,TCMPBn存放比較值,當定時器開啟後TCNTBn和TCMPBn將被下載到TCNTn和TCMPn中,TCNTn和TCMPn不會理會硬件自動操作。當TCNTn和TCMPn值相等時電平反轉,當TCNTn為零時CU產生中斷。其實如果只是定時作用的話是不用去操作TCMPBn的,TCMPBn用於產生PWM波。
l 定時器控制寄存器TCON和定時器觀察寄存器TCNTOn
定時器0的初始化
void Timer0_Init()
{
//設置TOUT0為輸出引腳
TCFG0 = 99;//預分頻器值
TCFG1 = 0x03;//16分頻
TCNTB0 = 31250;//the time interal is 1s=(50M/(99+1)/16)
TCON = 0xa;//手動更新
TCON = 0x9;//自動更新
INTMASK &= (~(1<<10));//允許定時器0中斷。
}