PIC16位單片機CAN(7)定時器
每個定時器模塊都是 16 位定時器 / 計數(shù)器,由以下可讀 / 寫寄存器組成:
? TMRx:16 位定時器計數(shù)寄存器
? PRx:與定時器相關(guān)的 16 位定時器周期寄存器
? TxCON:與定時器相關(guān)的 16 位定時器控制寄存器
需要注意的是:
1:定時器是16位了,也可以配置為32位的,具體看文檔,這里使用16位的定時器。
2:PRx:與定時器相關(guān)的 16 位定時器周期寄存器。也就是TMRx的值和PRx值相等時產(chǎn)生中斷。】
下面看程序:
/******************************************************************
初始化Time1為定時器模式
參數(shù):
無
******************************************************************/
void Time1Init(void)
{
T1CONbits.TON = 0; // Disable Timer
T1CONbits.TCS = 0; // Select internal instruction cycle clock
T1CONbits.TGATE = 0; // Disable Gated Timer mode
T1CONbits.TCKPS = 0b11; // Select 1:256 Prescaler
TMR1 = 0x00; // Clear timer register
PR1 =46875; // Load the period value 相當于1秒產(chǎn)生一次中斷
T1CONbits.TON = 1; // Enable Timer
}
中斷處理函數(shù)為
/******************************************************************
定時器1中斷 1s中斷一次 發(fā)送一次CAN數(shù)據(jù)
參數(shù):
無
******************************************************************/
void __attribute__((__interrupt__, no_auto_psv)) _T1Interrupt(void)
{
IFS0bits.T1IF = 0; //Clear Timer1 interrupt flag
Ecan1_WriteMessage(AD_Data);//CAN發(fā)送數(shù)據(jù)
}
評論