
首先单片机上电复位,运行死循环前面的程序(,你这里就是init_timer() // 应该叫初始化定时器,才合适,让定时器按照你需要的定时长度工作,或叫产生中断 )
接下来单片机主程序就是一直在死循环了。我们的主要任务一般在这里处理。
中断,就是在处理一些特殊任务,比如按键,或定时处理的程序,或外部一个不知道什么时间发生的任务,或通信任务等等。你在主循环的时候,无论在什么时候,中断请求来了(可以理解为需要处理比较紧急任务,优先处理的任务),就会暂停主循环,进入对应中断服务程序。运行完,在回主循环的暂停地方,继续执行死循环的任务。
定时器中断,就是每过一定时间,运行一下中断服务程序。常用来计时和产生脉冲信号。
初始化定时器,就是给定时器的寄存器,设置工作模式,时钟源,溢出的计数值。设置好了,定时器就能根据每个时钟源的频率,进行计数,直至溢出,然后产生一个中断请求。如果不饿能自动加载计数初值的定时器,在中断处理函数(服务函数)必须手动加载初值。
将按键接到P3.2(INT0)或P3.3(INT1)
main(){EA=1 //EA总中断控制,EA=0关,EA=1开
EX0=1//INT0中断控制。0关1开,按键接P3.2用这个
EX1=1//INT1中断控制。0关1开,按键接P3.3用这个
//默认情况下,直接使EX0=1或EX1=1来打开中断,INT0、INT1中断是电平触发的
while(1){
//主程序写这里
}
}
/** 外部中断0服务程序,按下接P3.2的开关k=0下面程序被执行 **/
int0()interrupt 0
{
//程序代码写这里面
}
/** 外部中断1服务程序,按下接P3.3的开关k=0下面程序被执行 **/
int1()interrupt 2
{
//程序代码写这里面
}
注意,上面的中断程序,如果执行完后,按键k还没有放开,则中断程序会再次被执行。为了防止这种情况发生,有以下几种处理办法以:
(1)可以在中断程序中进行判断,只有放开了按钮k=1了中断函数才返回。
(2)可以在进入中断后关闭中断,让EX0或EX1=0。然后在主程序中,需要的时候再开起。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)