PIC单片机之中断程序
void init_timer0(void)
{
OPTION_REG=0x87;
}
void interrupt isr(void)//中断程序,interrupt是个关键字说明该函数,是中断函数。
{
LED = ~LED;//改变LED的状态
INTCONbits.TMR0IF=0;//清零中断标志位 如果在离开中断程序前没有清零,程序将不停的中断。
TMR0=61;//给TMR0付初始值61 ,开始下一个50ms计时做准备。
//中断函数结束 返回主函数。哪里来回 回那里去,也就是回到主函数的while(1);处
}
int main(int argc, char** argv)
{
init_fosc();
init_gpio();
init_timer0();
INTCONbits.GIE=1; //开启总中断
INTCONbits.TMR0IF=0;//清零TMR0溢出中断标志位
INTCONbits.TMR0IE=1;//开启TMR0溢出中断
TMR0=61;
while(1);//主函数 在此什么都没做一直在死循环。但等到50ms时间到了TMR0将会溢出,程序就会跳到void interrupt isr(void)处执行。
}
我帮大家理清下中断初始设置大致的步骤
1 ,开启总中断,开启外设中断。INTCONbits.GIE=1; INTCONbits.PEIE=1;其实即使没用到外设开启也无妨。
2 ,清楚相应中断的标志位。如INTCONbits.TMR0IF=0;
3 ,开启相应中断。如INTCONbits.TMR0IE=1;
中断函数/程序 中要注意的就是 清零相应的中断标志位 如INTCONbits.TMR0IF=0; 否则单片机会认为中断未被执行 则一直中断。
评论