单片机程序解疑,题目:使第一个发光二极管以200ms间隔闪烁!

#include<reg52.h>unsigned int num;sbit d1=P1^0;void main(){ EA=1; TMOD=0X01; ET0=1; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1; while(1); }void to() interrupt 1{ TH0=(65536-50000)/256; TL0=(65536-50000)%256; num++; if(num==4) { num=0; d1=~d1; } }这个是我编的程序,是对的!!可是当我把while(1);这句去掉后,程序就不运行了,二极管也没有闪烁,一直暗着。请问while(1);这句话意思是什么??我之前一直以为这句话的意思是,程序运行到这句话时,就一直在这句话上死循环了,难道我理解错了??

你没有理解错。
while(1);的确是个死循环,你的程序在main中运行时先进行了定时器的初始化操作,并在初始化完成后进入死循环,此时单片机只能执行中断程序了,因此你能看到灯闪烁,这是中断程序在起作用。
但你把这个死循环去掉后,就出问题了,因为main本身就是个大循环。如果你去掉了while(1);程序在刚配置完定时器,又重新返回第一句,即不断地配置定时器,不断给定时器赋初值,这样定时器永远不会溢出,也就永远不会进入中断程序,你看到的灯也就不闪了
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-05
是死循环。
等着。
等着中断发生。
执行了中断函数后,再返回到这里继续等待。
-----
把它去掉,就直接执行到 void to() interrupt 1 函数之中了。
在这个函数中,稍稍的干了一点什么,就返回了。

返回到什么地方?
天知道!!!
第2个回答  2013-04-06
加上while(1)表示程序一直在运行,去掉以后,只运行了一次,不是没有运行,你想一下运行一次的时间,你眼睛能观察到吗?
相似回答