十年專注單片機方案開發的方案公司英銳恩,分享microchip單片機DSPIC33F例程之TIMER1例程。英銳恩現提供服務產品涉及主控芯片:8位單片機、16位單片機、32位單片機及各類運算放大器等。
//母體為DSPIC33FJ64GP206,編譯器為C30測試版,在微芯網站上有免費下載
//晶體為16M,PLL4,那么系統頻率應該是16*4/2=32M,本例程可以產生1KHZ頻率的中斷,中斷服務程序可自行添加,如果改定時時間可以修改預分頻比和PR1
#include
void timer1_init(void)
{
T1CON = 0; //確保T1關閉,再進行初始化
IFS0bits.T1IF = 0; //清T1復位標志,使T1復位
IPC0bits.T1IP = 5; //3個BIT,設置T1的中斷優先級,0~7,7是做高優先級
IEC0bits.T1IE = 1; //開T1中斷
T1CONbits.TCKPS = 1; //設置T1的預分頻比是8,即T1加一次需要的時間為1/(32M/8)秒,即0.25uS
//2個bit,00--1:1,01--1:8,10--1:64,11--1:256
PR1 = 4000; //根據計算應該是從0開始計數,加到PR1時產生中斷,跟以往的MCU溢出中斷不同
//這個寄存器的值計算結果為,400~40000分別對應10KHz到100Hz
T1CONbits.TON = 1; //打開T1并開始計數
}
//====================定時中斷服務程序======================
void __attribute__((__interrupt__,no_auto_psv)) _T1Interrupt(void)
{ PR1=40320/Ftimer1; //計算定時器的溢出值
IFS0bits.T1IF = 0; //在軟件里清中斷標志
// your ISR code
}
(文源網絡,侵刪)