>>定時器比較值、計數(shù)值比較緩存寄存器TCMPBn、TCNTBn,這兩個寄存器用于存儲定時器的比較值和計數(shù)初始值。
>>定時器比較值、計數(shù)值比較寄存器TCMPn、TCNTn,這兩個寄存器是定時器的內(nèi)部寄存器,用戶無需進(jìn)行操作。
1. 需要配置成定時器模式時使用以下的初始化函數(shù),并且計數(shù)值到0時產(chǎn)生中斷。
//****************定時器中斷服務(wù)函數(shù)*****************
void __irq Timer0_isr()
{
//send_str((unsigned char *)"Timer0 interrupt is started!rn");
Led_on(0);Led_off(1);Led_off(2);Led_off(3);
dely(350);
Led_off(0);Led_on(1);Led_off(2);Led_off(3);
dely(350);
Led_off(0);Led_off(1);Led_on(2);Led_off(3);
dely(350);
Led_off(0);Led_off(1);Led_off(2);Led_on(3);
dely(350);
rSRCPND |= 1<<10;
rINTPND |= 1<<10;
//send_str((unsigned char *)"Timer0 interrupt is end!rn");
}
void Init_timer0()
{
rTCFG0 &= ~(0xff);
rTCFG0 |= 99;
rTCFG1 &= ~(0xf);
rTCFG1 |= 0x02;
rTCNTB0 =62500;//1s中斷一次
rTCON |= 1<<1;
rTCON = 0x09;
//使能定時器中斷
rINTMSK = ~(1<<10);
pISR_TIMER0= (unsigned int)Timer0_isr;
}
2. 若需要配置成PWM使用如下的初始化函數(shù),不需要中斷處理函數(shù),并且有外部引腳提供輸出。此情況下,輸出電平變化兩次,一次是比較值相等時,另一次是計數(shù)器減到0時,所以一下初始化程序產(chǎn)生的PWM方波的頻率是62500Hz。
void Init_PWM0()
{
rGPBCON &= ~(0x03); //GPB0進(jìn)行清零
rGPBCON |= 1<<1; //設(shè)置為TOUT0輸出
rTCFG0 &= ~(0xff);
rTCFG0 |= 99; //第一級分頻器的分頻系數(shù)是100
rTCFG1 &= ~(0xf);
rTCFG1 |= 0x02;//第二級分頻器的分頻系數(shù)是8
rTCNTB0 =62;//0.001s中斷一次
rTCMPB0 = rTCNTB0/2; //占空比為50%
rTCON |= 1<<1; //加載計數(shù)值和比較值分別到各自的緩存寄存器
rTCON = 0x0d;//0位開啟定時器,2位當(dāng)TCNT0和TCMP0相等時翻轉(zhuǎn)電平,3位當(dāng)TCNT0中的值減到0時,TCNTB0的值自動加載到TCNT0中計數(shù)。
}