标题: 小白请教C语言循环移位函数 [打印本页]

作者: 芙蓉焊料    时间: 2023-2-22 11:31
标题: 小白请教C语言循环移位函数
第一种:正常循环
void main()
{
   uhcar c=0xfe;
  while(1)
    {
        P0=c;
        c=_crol_(c,1);
        delay(200);
    }
}
第二种:只循环一位就停止了

void main()
{
   uhcar c=0xfe;
  while(1)
    {
        P0=_crol_(c,1);
        delay(200);
    }
}


作者: zhuls    时间: 2023-2-22 14:55
因为第二个你的C,永远是0xfe,所以P0看上去只“循环一位”就停了。第一个的C每移一次就变一次所以会“一直移”~~”
作者: zhuls    时间: 2023-2-22 14:59
_crol_的用法:
a=_crol_(b,n) =>>a是目标,b是源,n是要移多少位。
即源寄存器中的数据,带C左移n位后存入目标寄存器中。
作者: qsssuv    时间: 2023-2-22 15:21
void main()
{
    P0 = 0xFE;
    while(1)
    {
        P0 = P0<<1|P0>>7;
        delay(200);
    }
}
作者: 暖西夏    时间: 2023-2-22 17:28
因为第一个c会一直变化,但第二个程序,c是固定值
作者: yun~    时间: 2023-2-22 22:55
第二个把c位移了,要重新定义一下
作者: 188610329    时间: 2023-2-23 13:05
为什么要多个C 多此一举呢?
直接用P0不好么?

void main()
{
  P0=0xfe;
  while(1)
    {
        P0=_crol_(P0,1);
        delay(200);
    }
}

作者: zhuls    时间: 2023-2-23 14:18
188610329 发表于 2023-2-23 13:05
为什么要多个C 多此一举呢?
直接用P0不好么?

逻辑上有c没c是一样的,但除非万不得已,直接操作MCU的IO是有一定的风险的:有可能你读到的IO值并不是你之前输出的值--被外围硬件改变了。
作者: a399288395    时间: 2023-2-25 14:39
第二种:只循环一位就停止了

void main()
{
   uhcar c=0xfe;
  while(1)
    {
        P0=_crol_(c,1);  //在这个位置,C 一直都没有变化重新赋值,所以 C永远都是0xfe
        delay(200);
    }
}




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1