
中断是硬件入口的无须主程序调用,不同的单片机入口地址不同但地址固定,应该在头文件有定义。发生中断时硬件把当前地址入栈然后跳到中断地址去那里通常只是跳转指令,c编译时会把它指向中断子程序。返回时会返回到中断处继续执行。
中断系统有什么优点那?
有了中断系统,就解放了 CPU。
有中断系统:
CPU,可以和外部设备(如定时器、串行口),同步工作。
没有中断系统:
CPU 就必须,随时查询外部设备的状态。
多次的查询,这就耽误了 CPU 的时间。
当然:
预先设置、中断、返回,保护、恢复现场,也会耽误时间。
中断与中断嵌套,数据的穿插利用,也是滥得很。
你若考虑这些,那么,你也可以,干脆,不采用中断系统了。
别忘了采纳。
我现在也在迷惑这个问题,看单片机的程序里,中断程序明明没有被主程序调用,然而中断程序却可以运行……按照C语言的规则,子函数必须要被主函数调用才能发挥作用,然而在52单片机里,主函数并没有调用中断函数
…………然后我查到了这个:
程序中断和调用子程序有何区别:
1子程序调用是预先安排好的,程序中断是随机发生的;
2调用子程序,是为主程序服务的,而中断程序与主程序的程序毫无关系;
3子程序是由调用指令给出目标地址,中断是通过隐指令获得中断服务程序的入口地址
看到这个,大概意思应该是:
中断程序不同于子程序,不需要主函数main调用就能执行。
中断服务程序只需要满足一定条件即可执行,比如定时器/计数器(在写入定时器中断服务程序的前提下)只需要计数“计满”即可触发中断服务程序;外部中断(在写入外部中断的服务程序的前提下)只需要触发外部中断引脚即可自动执行,不需要主函数调用。
子程序完全为主程序服务的,两者属于主从关系,主程序需要子程序时就去调用子程序,并把调用结果带回主程序继续执行。而中断服务程序与主程序两者一般是无关的,不存在谁为谁服务的问题,两者是平行关系
这大概是单片机的特殊之处吧?正常的C语言程序没有这样的吧?我C语言也算新手,这是我的理解
你的理解没有错,中断是在你的主程序开始运行时同时进行的,并且定时器、计数器或者是外部中断都是独立工作的,当定时器溢出时,TF由硬件自动置1,并且向cpu发送中断请求,当cpu响应中断时,TF又由硬件自动清0。并且不管定时器溢不溢出,它都会不断计数,因此在响应完中断程序时,需要对定时器重新装初值。
定时器的计数脉冲有二个来源,一个是通过INT0或INT1引脚输入的外部脉冲源;另一个是系统时钟振荡器的十二分频后送来的即一个机器周期。因此不会影响计时器的精度。。。
有几种可能:
1、你的外部中断是电平触发,当你中断执行完毕后,电平还是没有变,就等于又中断了,建议你改为边沿触发
2、你在进入中断后,没有保存现场,内存的数据乱了,结果中断完成后就回不去了
3、中断程序有问题,这要对照具体的程序才知道
以上就是关于单片机使用C语言时,中断子程序在主程序中是怎样被调用的各位helpme!全部的内容,包括:单片机使用C语言时,中断子程序在主程序中是怎样被调用的各位helpme!、单片机中断系统是先去执行中断程序,然后再返回执行主程序,也不是同时执行啊,那中断系统有什么优点那、主函数中,没有调用中断子程序,中断子程序为什么能被执行何时执行等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)