
纯手打,望采纳
我直接从原理上说吧
以12M晶振为例:
①每一个机器周期(1微秒)我们分为6部分,S1~S6。每一个机器周期,按顺序检测中断源(是否有中断),在S6时将(待响应的中断)排好顺序,在下一个S1时先响应高级中断。(可以看出,检测中断与程序运行是同步的,且检测中断所需时间很短——不足1个机器周期)
②运行主程序时,当突然来了一个中断,则PC(程序计数器)指向的地址存入堆栈(即在主程序做个标记,执行完中断后回来),PC指向中断子程序,此时单片机执行中断子程序。总结来说,PC是指挥棒,只有一根指挥棒,所以执行中断时,主程序是不运行的。
③中断运行时间长短看你写的中断子程序的长短咯。
④有兴趣的话建议你学学汇编,汇编编程,就是指挥着PC一步一步走,你可以清楚的看见你的程序一步一步怎么运行,你想啊,你挥动着指挥棒,那程序不是想怎么走就怎么走?
建议你还是用C写中断,如果没有一定的能力,很容易就会造成内存冲突。
如果用汇编写的话,在STARTUPA51中,还需要修改中断函数的入口,将其指向你写的函数,而你的函数要PUBLIC申明一下。
其他的写法就跟一般汇编程序一样了,不过要记得做好现场保护,因为不是C,所以这个保护要你手工做了。
这段函数你可以单独写个ASM文件,不要写主程序里。
主程序在运行中收到中断信号,转向处理中断
void exter0() interrupt 0//这个就是中断程序
{
D1=0;
delay_ms(0);
}
中断执行完后,就回主程序了
只是运行速度慢了?
严格来就不叫运行慢了,只是主程序在运行中产生中断(去执行中断程序了)!
你还没有理解中断的意义!中断产生了,单片机就停止执行主函数,进入中断执行中断(中断得打开),当执行完中断后,单片机又回到主函数执行。就像我现在在看别人提出的问题,当我看到你的问题时(中断产生),我就进来回答(执行中断),回答完后我得继续看别人提出的问题(返回主函数),我回去看别人提出的问题时既不会从头看起,也不会往后看很多,而是从你问题后的问题继续看!
以上就是关于单片机外部中断程序从启动到结束的运行顺序。全部的内容,包括:单片机外部中断程序从启动到结束的运行顺序。、51单片机写 程序 主程序是用C 写的,中断打算用汇编写,嵌套的汇编 中断 程序 是该写在主程序还是 、为什么进入了中断程序之后,主程序还在运行等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)