微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 写了个LED循环灯,程序不执行!求大神

写了个LED循环灯,程序不执行!求大神

时间:10-02 整理:3721RD 点击:
看不出什么毛病啊,程序也很简单,怎么就是不行啊!已经验证板子没有问题。
#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)为什么不行啊……

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top