用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;
}
}
引用: swustlx86 发表于 2020-4-11 12:14 delayms() 里面加whie(1); 还能干啥
delayms()里面加while(1),是等中断的。现在是中断好像并没有起到作用
中断完了又如何啊,你这个程序还是在delayms()里面死循环啊。。。。而且中断函数里面啥也不干。。。
你这是把中断和延时写在一起混用了,而且。中断或者延时里面不能出现while(1),等于你程序走到卡死了。不要后边delayms和中断(事实上你的中断也没有运行起来,后边两个函数没用),直接写一个延时1S的delay()函数,