单片机C语言右移指令怎么用?

想用右移指令实现流水灯,用for语句循环8次以下语句
unsigned char x,y;
x=0x01;
for(y=0,y<8;y++)
{
x=(x>>1);
P0=x;
}
为什么结果显示的是 先点亮2个,然后3个,4个,5个。。 请望高人指点。。。

用这种移位语句,就是这种结果。

你试试:_crol_()和_cror_()移位函数。

需要先加上头文件:
#include<intrins.h>
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-09-04
因为P0一开始没有赋予初值,那个X就已经移位了,所以就到第二个了
第2个回答  2020-01-19
赋初始值后没有延迟 人眼看不到
第3个回答  2010-04-05
是不是没有延时啊,加一个延时看看,太快了人眼分辨不出来。
第二种肯能是:你的>> 是不是循环右移啊。
第4个回答  2021-07-03
#include<reg52.h>
unsigned int i,j,z;
void main()
{
while(1)
{
P0=~(0x80>>j++);
if(8==j)
{
j=0;
}
for(i=0;i<500;i++)
{
for(z=0;z<1000;z++);
}
}
}

51单片机的c语言 左移右移怎么用?想用来控制流水灯,请帮忙写个完整的c...
delay02s( ); \/\/ 延时0.2s j= j<<1; \/\/ 左移1位 } j=0x80; \/\/ 设置右移初始值j为0x80 for (i=0;i<8;i++){ P1= ~ j;delay02s( );j= j>>1; \/\/ 右移1位 } } }

单片机程序中数组中的值怎么实现位左(右)移?(C语言)
data = nBitmapDot[i] >> 1; \/\/ nBitmap[i]右移一个二进制位,与 data = nBitmapDot[i] \/ 2; 同效。data = nBitmapDot[i] << 1; \/\/ nBitmap[i]左移一个二进制位,与 data = nBitmapDot[i] * 2; 同效。要说明的是移位操作(<< 或 >>)效率更高。

单片机编程,c语言中P0=_cror_(0x7f,bi)是什么意思
_cror_是一个右移指令,意思就是把0x7f右移bi位后付给P0,例如:P0=_cror_(a,1);就是把a右移一位的值付给P0口。

单片机c语言编程中 怎么几行语句整体移动
通常情况下,可以尝试快捷键:在选择了期望移动的行之后,按下键盘上的Tab键,会将选中的行整体右移一个缩进距离,而按下“Shift+Tab”后,会左移一个缩进距离。其它编辑环境下可以在编辑菜单中搜索一下,看是否有类似的菜单项可用。

单片机中C语言如何取数据高位
现把这个数赋值给八位的寄存器,就是类型自动转换,得到了低八位,然后把这个数右移8位 在赋值即可

...跟RRC(右移包括CY位)指令用c语言分别怎么表达吗?能举个例子吗?先...
0x1<<2 得到 0x4 0xf>>3 得到 0x2 (C语言中0x开头表示十六进制)可见左操作数是被操作的对象,右操作数是位移的位数。一般来说我们在C51中都是对unsigned char类型进行位操作,所以移出的位都是补0(如果是对有符号整数>>,最高位也即符号位会保持不变),因此C语言在这方面能够实现的不如...

单片机C语言编程
P1>>4是往右移4位,temp=P1>>4;就是说把P1的值右移4位并赋给temp temp | 0xf0中 | 是表示或的意思,就是temp或0xf0 temp=temp | 0xf0;整句就是说如果上面P1右移后temp得到是0xf0那么此时temp就是0xf0,如果上面P1右移后不是0xf0那么此时temp为oxf0 ...

请问在单片机中,怎样用左移(右移)与简单逻辑运算实现循环左移(右移)
设有数据说明:unsigned char a,b;现要把a循环左移2位,可以用如下语句段完成:b=a>>(8-2);\/\/ 用来得到正常左移丢失的位和循环移位后其正确位置 a=a<<2; \/\/ 左移 a=a|b;=> a=(a<<2)|(a>>(8-2));...

单片机8个灯右移的指令
用循环右移指令RR就可以达到 MOV A,#01H LOOP:MOV P0,A RR A SJMP LOOP END

P1=~(0x80>>j++)在单片机的c语言里是表示什么意思啊
把十六进制数0x80右移j位后按位取反,再将结果赋给变量p1,最后给j增1。其中>>右移操作符,~是按位取反操作符,++是自增1操作符(由于是所谓后++,所以要在整个运算结束后才生效)。比如当前j=2,则10000000>>2→00100000;~00100000→11011111。结果p1=11011111。然后再执行j++使j增1为3。

相似回答