小弟求解啊,为什么<<左移可以,>>右移为什么不行了!

2020-02-04 09:11发布

#include<reg52.h>
char a;
unsigned int b,c,flag;
sbit F1 = P2^6;
void main()
{
    a = 0xff;
        while(1)
        {   
            b = 50000;
            c = 50000;
            a = a<<1;
                P1 = a;
                while(b--);
                if(a == 0x00)
                {
                   a = 0xfe;
                   flag = 1;
                   while(c--);  
        }
                while( flag == 1)
                {   
                    a = 0x7f;
                    b = 1000;
                c = 1000;
                        a >>= 1;
                        P1 = a;
                        while(b--);
                        if(a == 0x00)
                        {   
                           P1 = 0xfe;
                           flag = 0;
                           while(c--);
                }
           }
        }
}

这个是低电平点亮,为什么左移可以,右移不行啊,朋友帮我看看啊!!谢谢了
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
徐照林
1楼-- · 2020-02-05 06:19
本帖最后由 徐照林 于 2012-4-17 22:04 编辑
  1. #include<reg52.h>
  2. unsigned char a;
  3. unsigned int b,c,flag;  //声明变量
  4. sbit F1 = P2^6;
  5. void main()
  6. {
  7.     a = 0xff;         //给a赋值
  8.         while(1)
  9.         {   
  10.             b = 50000;
  11.             c = 50000;
  12.             a = a<<1;     //左移一位
  13.                 P1 = a;       //把左移后面数赋值给P1;
  14.         while(b--);       //延时一段时间
  15.         if(a == 0x00)     //判断是循环完毕
  16.         {
  17.            a = 0xfe;      //再重新赋值
  18.            flag = 1;      //标志位赋值1
  19.            while(c--);    //延时一段时间
  20.     }
  21.     while( flag == 1) //判断标志位是否为1
  22.         {   
  23.             a = 0x7f;     //赋值
  24.             b = 1000;
  25.         c = 1000;
  26.                 a >>= 1;      //右移一位
  27.                 P1 = a;       //赋值给P1
  28.                 while(b--);
  29.                 if(a == 0x00)  //判断是否循环完毕
  30.                 {   
  31.                    P1 = 0xfe;  //P1口重新赋值
  32.                    flag = 0;   //标志位置0
  33.                    while(c--); //延时一段时间
  34.         }
  35.    }

  36.    }
  37. }
复制代码
y574924080
2楼-- · 2020-02-05 07:50
23行每次执行都赋值0x7f
26行移位一次,所以现象一样 啊
徐照林
3楼-- · 2020-02-05 12:04
 精彩回答 2  元偷偷看……
y574924080
4楼-- · 2020-02-05 13:10
徐照林 发表于 2012-4-17 22:10
那我不要P1=0X7F,应该就正常的吗???,我这种写法有错误吗!!

当右移位到a=0x00时,

退出循环,然后左移位a还是等于0x00

继续进入右移循环
millwood0
5楼-- · 2020-02-05 16:35
我这种写法有错误吗!!


get a decent C book and read about type promotion.
millwood0
6楼-- · 2020-02-05 19:04
I think what this discussion highlights is the shocking but general lack of understanding of C the language.

一周热门 更多>