PIC16位單片機CAN(7)定時器
每個定時器模塊都是 16 位定時器 / 計數器,由以下可讀 / 寫寄存器組成:
? TMRx:16 位定時器計數寄存器
? PRx:與定時器相關的 16 位定時器周期寄存器
? TxCON:與定時器相關的 16 位定時器控制寄存器
需要注意的是:
1:定時器是16位了,也可以配置為32位的,具體看文檔,這里使用16位的定時器。
2:PRx:與定時器相關的 16 位定時器周期寄存器。也就是TMRx的值和PRx值相等時產生中斷?!?/div>
下面看程序:
/******************************************************************
初始化Time1為定時器模式
參數:
無
******************************************************************/
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秒產生一次中斷
T1CONbits.TON = 1; // Enable Timer
}
中斷處理函數為
/******************************************************************
定時器1中斷 1s中斷一次 發送一次CAN數據
參數:
無
******************************************************************/
void __attribute__((__interrupt__, no_auto_psv)) _T1Interrupt(void)
{
IFS0bits.T1IF = 0; //Clear Timer1 interrupt flag
Ecan1_WriteMessage(AD_Data);//CAN發送數據
}
關鍵詞:
PIC16位單片機定時
評論