打印

C51移位问题

[复制链接]
4158|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tchwwf|  楼主 | 2007-1-15 09:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我要用C语言实现两个内存变量(如a,b)通过移位将a中的值一位一位移入b中,我用C语言 a=a<<1; b=b<<1;本意是a的值先移入进位C,然后由C再移入b中。但用KEIL编译后发现汇编是加法指令而不是移位指令,所以无法实现功能,请问各位大虾要如何写程序?

相关帖子

沙发
xwj| | 2007-1-15 10:06 | 只看该作者

你到底要干什么?

就算不是加法你那写法也会不对的

使用特权

评论回复
板凳
tchwwf|  楼主 | 2007-1-15 10:16 | 只看该作者

C51移位问题

就是a向左移一位,高位到进位C,然后b再带进位左移,这样循环8次将a的值移入b中。

使用特权

评论回复
地板
tchwwf|  楼主 | 2007-1-15 12:09 | 只看该作者

C51移位问题

那如何实现两个地址不相邻的变量通过移位赋值呢?我要实现的是LED屏的向左滚动显示。

使用特权

评论回复
5
xwj| | 2007-1-15 12:21 | 只看该作者

建议用汇编操作

使用特权

评论回复
6
tchwwf|  楼主 | 2007-1-15 13:12 | 只看该作者

多谢 xwj的回复

用C无法实现吗?实在不行就只能用汇编了,我以前一直用汇编写程序,才转到C,所以遇到了很多问题,再次谢谢象xwj这样的热心大侠!!

使用特权

评论回复
7
无格| | 2007-1-15 13:23 | 只看该作者

跟我原先遇到一样的问题用C也是可以解决的

使用特权

评论回复
8
tchwwf|  楼主 | 2007-1-15 13:42 | 只看该作者

请问 无格 能否说一下怎样解决?多谢!

使用特权

评论回复
9
无格| | 2007-1-15 14:34 | 只看该作者

有些时间了我大概当时

是移动一个数组9字节(我点阵是16*64),先判断低字节高位是0还是1,然后再移动高字节再将高字节的低位置1或0;直至9字节全部移动移位一位;
应该感觉是比较苯的办法但我没发现更好的办法,最终效果跟采用硬件移位也差不多(不过比较花费RAM,我用到STC系列的外部RAM).

使用特权

评论回复
10
lixuanbing| | 2007-1-15 14:38 | 只看该作者

试试这个

  for(i=0;i<8;i++)
  {
    if((a<<i)&0x80) b+=1;
    else  b+=0;
    b<<1;
  }

使用特权

评论回复
11
tchwwf|  楼主 | 2007-1-15 14:39 | 只看该作者

多谢 无格

我的点阵是16*128的,我试试吧!

使用特权

评论回复
12
fushaobing| | 2007-1-15 16:57 | 只看该作者

同意“无格”

我也遇到过这个问题,解码的场合(48 bits)。
解决的办法是先判断"a"的高位是0还是1,再移位。如果是0,移位后不用管;如果是1,移位后"b"的低位要置1。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

39

帖子

1

粉丝