写了个LED循环灯,程序不执行!求大神
#include<reg52.h>
#include<intrins.h>
void init();
int a;
void main()
{
init();
P1=0xfe;
while(1)
{
if(a==20)
{
a=0;
P1=_crol_(P1,1);
}
}
}
void init()
{
TMOD=0x01;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void timer0() interrupt 1
{
a++;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
}
a没有初始化
void init()里面加一条a = 0;
void init();
int a;
这两条最好换下位置
int a;
void init();
if(a==20)
{
a=0;
P1=_crol_(P1,1);
}
改为if(a >= 20)
你没有定义接口吧!?就是sbit L1=p1^0,sbit L2=p1^1,sbit L3=p1^2
能把你的计算都人工算好了再用来复制吗
同意二楼的方法 把if(a==20)
改为 if(a>=20)
可能a==20的时候程序还在执行中断函数而不是在while循环中,这样LED循环灯就不动弹了
没明白你什么意思!
可以直接对八位com口直接操作的,我上面有赋值给P1口……
好的,这些细节我会注意的!等会试试……谢谢啊
是啊,我也同意……
加上这些,还是不运作啊!我该觉着程序写的应该没什么问题的,我在试着调调硬件吧,调试真麻烦
while里加个temp=p1,然后p1=-crol(temp)
你这程序在我板子上运行很正常
你的程序只有在a=20的时候才进去执行了一次,而且进去后a清0 了,P1也就只有输出0 了
那就是1秒执行一次了,
是啊,我的运行也很正常。估计是他的电路问题。
你的程序我试了 可以 下面是我在改的其实也一样 你看一下 #include<reg52.h> #include<intrins.h> int a,temp; void init() { TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; EA=1; ET0=1; TR0=1; } void timer0() interrupt 1 { TH0=(65535-50000)/256; TL0=(65535-50000)%256; a++; } void main() { init(); temp=0xfe; while(1) { if(a==20) { a=0; P1=temp; temp=_crol_(temp,1); } } }
init();
temp=0xfe;
while(1)
{
if(a==20)
{
a=0;
temp=_crol_(1,temp);
}
P1=temp
P1=temp;temp=_crol_(temp,1); 这样写就正常运行了,但是直接写上P1=_crol_(P1,1)的话,亮的灯就不熄灭了,只是一个一个的点亮而已!这是为什么啊P1的值应该已经被替换了啊,为什么不执行啊,很迷茫
temp=_crol_(1,temp);这个应该错了……
P1=temp;temp=_crol_(temp,1); 这样写就正常运行了,但是直接写上P1=_crol_(P1,1)就不行了啊,能帮忙分析一下吗
直接写P1=_crol_(P1,1)为什么不行啊……