PIC單片機(jī)之中斷程序
void init_timer0(void)
{
OPTION_REG=0x87;
}
void interrupt isr(void)//中斷程序,interrupt是個(gè)關(guān)鍵字說(shuō)明該函數(shù),是中斷函數(shù)。
{
LED = ~LED;//改變LED的狀態(tài)
INTCONbits.TMR0IF=0;//清零中斷標(biāo)志位 如果在離開(kāi)中斷程序前沒(méi)有清零,程序?qū)⒉煌5闹袛唷?P>TMR0=61;//給TMR0付初始值61 ,開(kāi)始下一個(gè)50ms計(jì)時(shí)做準(zhǔn)備。
//中斷函數(shù)結(jié)束 返回主函數(shù)。哪里來(lái)回 回那里去,也就是回到主函數(shù)的while(1);處
}
int main(int argc, char** argv)
{
init_fosc();
init_gpio();
init_timer0();
INTCONbits.GIE=1; //開(kāi)啟總中斷
INTCONbits.TMR0IF=0;//清零TMR0溢出中斷標(biāo)志位
INTCONbits.TMR0IE=1;//開(kāi)啟TMR0溢出中斷
TMR0=61;
while(1);//主函數(shù) 在此什么都沒(méi)做一直在死循環(huán)。但等到50ms時(shí)間到了TMR0將會(huì)溢出,程序就會(huì)跳到void interrupt isr(void)處執(zhí)行。
}
我?guī)痛蠹依砬逑轮袛喑跏荚O(shè)置大致的步驟
1 ,開(kāi)啟總中斷,開(kāi)啟外設(shè)中斷。INTCONbits.GIE=1; INTCONbits.PEIE=1;其實(shí)即使沒(méi)用到外設(shè)開(kāi)啟也無(wú)妨。
2 ,清楚相應(yīng)中斷的標(biāo)志位。如INTCONbits.TMR0IF=0;
3 ,開(kāi)啟相應(yīng)中斷。如INTCONbits.TMR0IE=1;
中斷函數(shù)/程序 中要注意的就是 清零相應(yīng)的中斷標(biāo)志位 如INTCONbits.TMR0IF=0; 否則單片機(jī)會(huì)認(rèn)為中斷未被執(zhí)行 則一直中斷。
評(píng)論