
纯手打,望采纳
我直接从原理上说吧
以12M晶振为例:
①每一个机器周期(1微秒)我们分为6部分,S1~S6。每一个机器周期,按顺序检测中断源(是否有中断),在S6时将(待响应的中断)排好顺序,在下一个S1时先响应高级中断。(可以看出,检测中断与程序运行是同步的,且检测中断所需时间很短——不足1个机器周期)
②运行主程序时,当突然来了一个中断,则PC(程序计数器)指向的地址存入堆栈(即在主程序做个标记,执行完中断后回来),PC指向中断子程序,此时单片机执行中断子程序。总结来说,PC是指挥棒,只有一根指挥棒,所以执行中断时,主程序是不运行的。
③中断运行时间长短看你写的中断子程序的长短咯。
④有兴趣的话建议你学学汇编,汇编编程,就是指挥着PC一步一步走,你可以清楚的看见你的程序一步一步怎么运行,你想啊,你挥动着指挥棒,那程序不是想怎么走就怎么走?
跟我之前一样,对中断,定时器了解的不够透彻,被老师训了之后查资料搞实验后终于搞清楚了,下面说说我的看法:千万不要在中断函数中做多余的事!!!只能做最基本的 *** 作,比如置标志位,让一个数加一等,与延时有关的 *** 作千万不要做!你10ms进一次中断,在里面又扫描按键,又显示液晶,这里面花的时间远远地超过10ms,它肯定死在中断里出不来啊,因为你不关闭中断的话它一直10ms进去,最好在中断里设置几个标志位,进中断就让标志位置1,然后出中断,在主循环里判断标志位,如果标志位置1了,就清零标志位,然后做其他的动作。好好想一想,思路一定要清晰!
中断程序的用处是:当中央处理器正在处理内部数据时,外界发生了紧急情况,要求CPU暂停当前的工作转去处理这个紧急事件,处理完毕后,再回到原来被中断的地址,继续原来的工作。
实现这一功能的部件称为中断系统,申请CPU中断的请求源称为中断源,单片机的中断系统一般允许多个中断源,当多个中断源同时向CPU请求中断时,就存在一个中断优先权的问题。通常根据中断源的优先级别,优先处理最紧急事件的中断请求源,即最先响应级别最高的中断请求。
当然会发生这种事。一般用硬件看门狗+软件喂狗来实现跑飞控制,然后在程序初始化里面进行是冷启动还是热启动判断,如果是热启动,则仅对一些寄存器进行初始化,否则全面初始化。我一般将一个定时器的中断优先级设置为最高,利用该定时器定时查看程序运行位置变量,如果发现该变量异常,则直接将返回地址指向0000,也即重启。
中断是为了使时间更精确。使用中断一般要先设置使用哪个定时/计数器的模式几,之后再设置定时器的使能为,再打开总中断使能位,启动定时器。外部中断比定时器的优先级高,如果有更重要的事等着去处理则交给外部中断,当检测到有外部中断时,会去执行外部中断服务,执行完后回到之前未执行的地方接着继续执行;串口用到定时器,因为在串口的模式1和模式3中需要用定时器的溢出率来设置波特率。我说得不怎么详细,这个几句话说不清。这个你可以先把概念搞懂,之后用列子去理解概念会比较好,不懂的就多问问。
这是我在网上看到的一点资料
以上就是关于单片机外部中断程序从启动到结束的运行顺序。全部的内容,包括:单片机外部中断程序从启动到结束的运行顺序。、51单片机写个程序,好像在中断里面出不来了,主程序只运行了一部分,之后一直在中断里面运行、中断程序有什么用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)