#include <reg51.h>
sbit led1=P0^1;
sbit led2=P0^2;
sbit led3=P0^3;
void main()
{
TMOD=0X01;
TH0=(65536-50000) /256;
TL0=(65536-50000)%256;
EA=1;//中断开关
ET0=1;//定时0
TR0=1;
led1=0;
led2=1;
led3=0;
while(1) ;/*为什么要有这条语句?猜想:
TH0+TL0共用50ms>led1~led3这三条语句执行的时间 ,
所以主函数执行完了,而TR0未来得及跳转到中断函数去执行。*/
}
void T0_
time() interrupt 1
{
TH0=(65536-50000) /256;
TL0=(65536-50000)%256;
a++; //为什么有这样一条if语句?
if(a==20)
{
a=0;
led1=~led1;
led2=~led2;
led3=~led3;
}
}
让程序一直运行,否则程序就会跳出main函数,程序就会退出,之后就与中断没有关系了。
a++;
如果变量a不自增的话(a的值一直为0),那么led1 led2 led3的值在哪里改变。
评分
查看全部评分
喔喔,谢谢,但后面那个我还不明白,中断函数里面没循环语句,怎么可以使 a++; 再执行呢?
非常感谢,嘿嘿
这里你是用的是T0定时器/计数器的中断,一旦开启定时器,定时器便开始计数,当计数溢出时,自动进入中断服务程序执行代码(TH0,TL0又被重新赋值),执行完中断服务程序后再回到原来处继续执行(while(1))。至于定时器为什么会自增,咱也不明白,这都是芯片层次的了。
谢啦,哈哈。。。。。
谢谢,你的好意,,嗯嗯
一周热门 更多>