‘壹’ 单片机中断处理流程
当某中断产生而且被CPU响应,主程序被中断,接下来将执行如下操作:
1. 当前正被执行的指令全部执行完毕;
2. PC值被压入栈;
3. 现场保护;
4. 阻止同级别其他中断;
5. 将中断向量地址装载到程序计数器PC;
6. 执行相应的中断服务程序。
中断服务程序ISR完成和该中断相应的一些操作。ISR以RETI(中断返回)指令结束,将PC值
从栈中取回,并恢复原来的中断设置,之后从主程序的断点处继续执行。
‘贰’ 怎么解决单片机中中断的冲突
1、不知道你所使用的是什么样的单片机。如果有中断优先级寄存器的话,那么将重要中断的优先级设置成高,这样低优先级的中断就不能干扰到这个中断的执行。
2、如果没有中断优先级设置的话,这样的方法也是可行的:当程序进入重要的中断服务程序之后,先将总中断关闭,等到中断程序执行完毕之后再打开总中断,这样其它中断也可以得到响应,而且也不会影响到你所要保护的中断的程序的执行。
‘叁’ 鍗旷墖链轰腑鏂阃鍑洪梾棰
鍙瑕佸畾镞朵腑鏂閲屾病链夋诲惊鐜杩欐牱镄勭▼搴忥纴鍦ㄥ畬鍏ㄦ墽琛屽ソ涓鏂绋嫔簭钖庡氨鍙浠ヤ娇鐢≧ETI阃鍑猴纸濡傛灉鏄疌璇瑷锛岃繖𨱒¤鍙ヤ篃鐪佹帀浜嗭级銆
浣嗕笉鑳介锲炲埌涓荤▼搴忓紑濮嬫椂锛岃屾槸阃锲炲埌浣犱腑鏂鍓岖灛闂村湪镓ц岀殑绋嫔簭闄勮繎銆
濡傛灉浣犺佽繘琛屽埯濮嫔寲浠涔堢殑锛屽氨鎶婂埯濮嫔寲淇℃伅锷犲湪涓鏂链嶅姟绋嫔簭涓銆傚湪涓鏂镞跺欙纴鎶婂畾镞跺埯鍊间箣绫荤殑淇℃伅鐩存帴閲嶈呬简銆
‘肆’ 单片机中断程序
结构很规矩,这个程序。
首先单片机上电复位,运行死循环前面的程序(,你这里就是init_timer(); // 应该叫初始化定时器,才合适,让定时器按照你需要的定时长度工作,或叫产生中断 )
接下来单片机主程序就是一直在死循环了。我们的主要任务一般在这里处理。
中断,就是在处理一些特殊任务,比如按键,或定时处理的程序,或外部一个不知道什么时间发生的任务,或通信任务等等。你在主循环的时候,无论在什么时候,中断请求来了(可以理解为需要处理比较紧急任务,优先处理的任务),就会暂停主循环,进入对应中断服务程序。运行完,在回主循环的暂停地方,继续执行死循环的任务。
定时器中断,就是每过一定时间,运行一下中断服务程序。常用来计时和产生脉冲信号。
初始化定时器,就是给定时器的寄存器,设置工作模式,时钟源,溢出的计数值。设置好了,定时器就能根据每个时钟源的频率,进行计数,直至溢出,然后产生一个中断请求。如果不饿能自动加载计数初值的定时器,在中断处理函数(服务函数)必须手动加载初值。
‘伍’ 求一个单片机外部中断程序,要求用按键模拟单片机外部中断输入源,当按键按下时产生中断,进行中断处理
1、打开Keil μVision编译器,新建一个工程,然后保存在硬盘上的位置,然后选择Atmel-AT89C51单片机为模型,并添加STARTUP.A51文件,然后在当前目录下新建一个C文件,并将其添加入工作路径。