[求助] 用T0定时器写来回流水灯,但为何只持续点亮一盏灯

evanleung   2020-4-11 09:07 楼主

用T0定时器写来回流水灯,但却只亮了一盏灯,不会流水,不知道是什么问题,帮忙分析下,看看哪个地方出错了。

#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
	uint x;
	char tmp;
void delayms();
void main()
{
	uint i;
	tmp=0x7f;
	P2=tmp;
	delayms();
	while(1)
	{
		for(i=0;i<7;i++)
		{
			tmp=_cror_(tmp,1);
			P2=tmp;
			delayms();
		}
		for(i=7;i>0;i--)
		{
			tmp=_crol_(tmp,1);
			P2=tmp;
			delayms();
		}
	}
}

void delayms()
{
	TMOD=0x01;
	TH0=(65536-45872)/256;
	TL0=(65536-45872)%256;
	EA=1;
	ET0=1;
	TR0=1;
	while(1);
}

void time() interrupt 1
{
	TH0=(65536-45872)/256;
	TL0=(65536-45872)%256;
	x++;
	if(x==20)
	{
		x=0;
	}
}

 

回复评论 (5)

delayms()  里面加whie(1); 还能干啥

我从不担心我努力了不优秀,只担心优秀的人都比我更努力。如果你无法忍受孤独,就不要追逐梦想。每一个优秀的人,都有一段沉默的时光。在那一段时光,你付出了很多努力,忍受孤独和寂寞,不抱怨不诉苦,最后渡过了这
点赞  2020-4-11 12:14
引用: swustlx86 发表于 2020-4-11 12:14 delayms()  里面加whie(1); 还能干啥

delayms()里面加while(1),是等中断的。现在是中断好像并没有起到作用

点赞  2020-4-11 13:59

中断完了又如何啊,你这个程序还是在delayms()里面死循环啊。。。。而且中断函数里面啥也不干。。。

  • uint i;
  • tmp=0x7f;
  • P2=tmp;
  • delayms();
  • 执行了1个P2输出,后面就进入delayms的死循环了,好歹你在while里面整个条件判断,满足几时要求了就跳出循环
点赞  2020-5-24 20:40

你这是把中断和延时写在一起混用了,而且。中断或者延时里面不能出现while(1),等于你程序走到卡死了。不要后边delayms和中断(事实上你的中断也没有运行起来,后边两个函数没用),直接写一个延时1S的delay()函数,

点赞  2020-7-15 08:29

中不中断都跳不出去啊,当然后面不执行了。

默认摸鱼,再摸鱼。2022、9、28
点赞  2020-7-15 15:41
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复