[STM32F1] 多字节的移位

[复制链接]
 楼主| dingy 发表于 2021-6-16 21:58 | 显示全部楼层 |阅读模式
原来用汇编编程很容易的就进行多字节的移位,现在刚开始学用Keil  C编程,就搞不懂从哪下手
pengf 发表于 2021-6-16 22:02 | 显示全部楼层
就是比如一次性移位11个字节,比如左移,将最高字节的最高位移出丢失,并将下一字节的最高位移进前一字节的最低位
renyaq 发表于 2021-6-16 22:05 | 显示全部楼层
RRC就搞定了,C怎么弄啊?
supernan 发表于 2021-6-16 22:07 | 显示全部楼层
后10个字节的最高位分别移进其前一字节的最低位?
xxrs 发表于 2021-6-16 22:09 | 显示全部楼层
比如有这些字节要参与移位:unsigned char  a[]={0xfe,0x25,0x32,0x56,0x4e,0x56,0xab,0xef,0xf3}:

   a[i]=a[i]<<1|((a[i+1]&0x80)? 1:0);      //    i 由0到7 。

   a[8]=a[8]<<1;
houcs 发表于 2021-6-16 22:13 | 显示全部楼层
如果字节数是2,3,4时可以将数据类型定义为int或是long,
unsigned int dat;
dat<<11;
liuzaiy 发表于 2021-6-16 22:15 | 显示全部楼层
void delay()
{
uint16_t i;
for(i=0; i<20000; i++);
}


void led_8()
{
uint8_t i;
uint8_t tmp = 0x01;
for(i=0; i<8; i++)
{
  PORT =  ~(tmp<<i);//左移
  delay();
}
tmp = 0x80;
for(i=0; i<8; i++)
{
  PORT =  ~(tmp>>i);//右移
  delay();
}
}

void main()
{
while(1)
{
  led_8();
}
}
juventus9554 发表于 2021-6-16 22:17 | 显示全部楼层
楼上讲的蛮好的,C里面比汇编的还好理解的
supernan 发表于 2021-6-16 22:20 | 显示全部楼层

这样子就可以同时将9个字节顺次向前移一位,如果要连续移多位,再加个循环控制就行了。
jiajs 发表于 2021-6-16 22:23 | 显示全部楼层
这个挺好下手的啊
yszong 发表于 2021-6-16 22:26 | 显示全部楼层
多看看别人的代码就知道了
juventus9554 发表于 2021-6-16 22:28 | 显示全部楼层
应该多看看原生态的C语言
 楼主| dingy 发表于 2021-6-16 22:32 | 显示全部楼层
其实还是不大明白,我再琢磨琢磨吧,多谢了哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则

745

主题

10920

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部

745

主题

10920

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部