我这是用指针做了一个流水灯 用的定时器进行延时1S 可是没调试成功

2019-07-14 21:18发布

#include<reg52.h>
sbit ENLED = P1^4;
sbit ADDR3 = P1^3;
sbit ADDR2 = P1^2;
sbit ADDR1 = P1^1;
sbit ADDR0 = P1^0;
void shiftleft(unsigned char *p);         
void main()
{
unsigned int  i=0;
unsigned char buf=0x01;
  TMOD = 0X01;
  TH0 = 0XFC;
  TL0 = 0X67;
  TR0 = 1;

  ENLED = 0;
  ADDR3 = 1;
  ADDR0 = 0;
  ADDR1 = 1;
  ADDR2 = 1;


  while(1)
  {
      P0=~buf;
         for(i=0;i<40000;i++);
          

         while(1)
        {
            if(TF0 ==1)
                {
                   TF0 = 0;
                   TH0 = 0XFC;
                   TL0 = 0X67;
                   i++;
                   if(i==1000)
                   {
                       i=0;
                   }
                   break;
                  shiftleft(&buf);
                 
                }
        }
    if(buf == 0)
         {                                  
            buf= 0x01;
         }
         
           
  }

}
void shiftleft(unsigned char *p)
         {
         *p = *p <<1;

         }  

                      


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
11条回答
Ghost#
2019-07-15 15:09
柠檬守护 发表于 2016-1-22 09:52
延时用中断写的, 直接用for 循环的方式延时,楼主试过吗? 结果怎么样? 个人觉得是这里中断延时的写法有错误。

在这里我将定时器写在循环里面 每次都去判断间隔1s    这个原来的写法就是用的for非精确延时  结果是没有问题的   在这里我的思路是将原来的for非精确延时改写成精确延时   这样我就理不清楚了   求指教啊  刚开始学习单片机 c语言学的也不扎实   问题很多

一周热门 更多>