在c51单片机 void main () { 中断初始化} while; void a() in

在c51单片机
void main ()
{ 中断初始化}
while;
void a() interrupt 1
{ }
请问中断系统是在执行中断初始化里的计数或条件后。就跳到中断程序里执行完后。又跳到初始化里等待条件满足。如不是哪是怎样的执行过程?谢!

第1个回答  2014-10-31
由于“interrupt 1”的标识,编译器会将“a()”编译为对应中断1的中断入口地址,也就是在中断1的中断向量入口处放置类似“jump a”的汇编指令,并在flash其他合适的地方链接“a()”的执行代码。
中断初始化中的中断势能打开后,外设开始工作,当中断条件满足后,“硬件”使PC自动跳转到中断1的入口,并跳转到a执行。在进出中断的时候,会有现场的保护和恢复,这部分代码会有编译器生成。
第2个回答  推荐于2016-02-07
在c51单片机
void main ()
{ 中断初始化}
while; --在这里等待中断发生。中断结束就又回到这里。
void a() interrupt 1
{ }追问

中断来了,就打破了while死循环,没有while(); 这句是不行的。

追答

对。

主程序,必须是一个死循环结构,才能支持:中断的等待、发生和返回。

while(); 就是一个循环,是一个最小的循环。

追问

在哪里等待中断程序执行。完后应该跳到th0=(65536-500000)/256处等益出就开始中断程序,此时主程序在while处等待。是吗?

追答

对。
在循环中,等待中断的发生,
在循环中,等待中断的返回。

追问

谢谢!大师。

在c51单片机
void main ()
while(1)
{ 中断初始化}

void a() interrupt 1
{ }与
在c51单片机
void main ()
{ 中断初始化}
while;
void a() interrupt 1
{ }执行程序有区别吗?谢!

avoid main()
while(1)
{ }与
avoid main()
{ }
while(1);
有什么区别?谢!

追答

你讨论的这些,有些空洞。

看看我的百度空间吧,有很多具体的实例。

本回答被提问者采纳
相似回答