请教C51定时中断问题

2019-03-24 19:03发布

初学单片机,部分程序如下:
void timer0() interrupt 1
{
TMOD=0x01;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
EA=1;
ET0=1;
TR0=1;
tt1++;
if(tt1==20)
{
  LIGHT=~ LIGHT;
  tt1=0;
}
}

void main()
{
TMOD=0x01;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
  Measure();   //测量
  Key();    //按键
  ADout();     //模数转换输出
}
}

存在问题:
1.采用定时中断来控制灯的闪烁,程序实现功能应该是上电后,灯即以1s周期闪烁,但此程序烧写后,上电要延时一段时间才实现闪烁,请教高手,是什么原因?
2.另外,请教,若要实现多个任务独立运行,互不影响,且要保证循环扫描,即都要在while循环中, 程序如何实现,采用定时中断可以解决吗?如何解决?

其中存在子函数中有延时函数,因此顺序执行收到较大影响,初学,还请各位大侠不吝赐教! 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
naga568
1楼-- · 2019-03-25 05:33

第一个问题比较单纯 你程序 在定义tt1时,有给初始值吗?

如unsigned char   tt1=0;  这样tt1在程序一开始就会从0开始

另外 if(tt1==20)  最好改成 if(tt1>=20)   呵呵 希望对你有帮助

shmilyly1985
2楼-- · 2019-03-25 10:14
多谢!~
改成if(tt1>=20),问题解决了,原因是什么呢?如果有时间能帮忙解释一下吗?
谢谢!~
naga568
3楼-- · 2019-03-25 11:15
"上电要延时一段时间才实现闪烁"  ,因为上电时tt1有可能大于20,所以要等到tt1会从21...255 ..0...20
shmilyly1985
4楼-- · 2019-03-25 11:58
哦~多谢解答!~初学,还有太多一知半解的,多谢多谢!~
zhq468
5楼-- · 2019-03-25 12:58
 精彩回答 2  元偷偷看……

一周热门 更多>