我这是用指针做了一个流水灯 用的定时器进行延时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条回答
a690700752
1楼-- · 2019-07-15 05:40
  *p = *p <<1;  楼主你查过优先级吗?
a690700752
2楼-- · 2019-07-15 05:56
break; 是干什么用的?
Ghost#
3楼-- · 2019-07-15 08:57
a690700752 发表于 2016-1-22 10:13
break; 是干什么用的?

跳出这个while循环
Ghost#
4楼-- · 2019-07-15 09:44
 精彩回答 2  元偷偷看……
Ghost#
5楼-- · 2019-07-15 15:09
柠檬守护 发表于 2016-1-22 09:52
延时用中断写的, 直接用for 循环的方式延时,楼主试过吗? 结果怎么样? 个人觉得是这里中断延时的写法有错误。

在这里我将定时器写在循环里面 每次都去判断间隔1s    这个原来的写法就是用的for非精确延时  结果是没有问题的   在这里我的思路是将原来的for非精确延时改写成精确延时   这样我就理不清楚了   求指教啊  刚开始学习单片机 c语言学的也不扎实   问题很多
阿信509
6楼-- · 2019-07-15 18:37
break后面的语句执行不到啊?这个是你要的结果吗?

一周热门 更多>