搜索
bottom↓
回复: 6

请教大神AVR M8如何实现数字IC4557那样的移位功能

[复制链接]

出0入0汤圆

发表于 2016-12-21 15:21:01 | 显示全部楼层 |阅读模式
最近要用到一个移位的功能,就像数字IC4557那样的功能。所移的位数要36位。

这个问题想了很久没有很好的办法
我想的办法就是用一个长整型变量,但它只有32位,而且我要用的有6路(相当于6个4557)怕运算起来影响速度。

然后还有一个想法就是用指针,但是我对指针不太了解,不知道指针能不对位进行操作。

以上是我的两个想法不知道有没有更好的方法,谢谢。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2016-12-21 18:38:52 | 显示全部楼层
自己设计一个long long

出0入0汤圆

发表于 2016-12-21 20:58:15 | 显示全部楼层
用汇编。

出0入0汤圆

发表于 2016-12-21 21:40:47 | 显示全部楼层
用数组呗,要求描述的太少

出0入0汤圆

 楼主| 发表于 2016-12-23 00:17:45 | 显示全部楼层
jlhgold 发表于 2016-12-21 18:38
自己设计一个long long

unchar shift(unchar sonsor, unchar blow)
{
        blow_2 = blow_1;
        blow_1 = blow;

        for (z=1;z<9; z++)                        //将进位标记推迟一个时钟         
        {
                n[z]=tick_bit[z];
        }

        for (z=1;z<9; z++)                          //移位始终执行
        {
                mov[z]=mov[z]<<1;
                i=mov[z]&0x80;                          //当第7位为1,设置进位标志
                if (i==0x80)
                        tick_bit[z]=1;
                else
                        tick_bit[z]=0;
        }

        if ((sonsor == 0x04) && (blow_2 == 0x02))        //输入高电平,第0位置1。
                mov[1]=mov[1]|0x01;
        else
                mov[1]=mov[1]&0xfe;
                         
        for (z=1;z<9; z++)                          //检查前一位是否有进位,有侧置第0位为1
        {
                if (n[z]==1)
                        mov[z+1]=mov[z+1]|0x01;
                else                                                                   
                        if (n[z]==0)
                                mov[z+1]=mov[z+1]&0xfe;                                       
        }

        y=mov[6]&0x80;                                   //输出

        if (y == 0x80)
                return 1;        //排出异常
        else
                return 0;  //排出正常
}                                               


这是我之前用的方法,就是用数组。因为我的结果只有0和1,所以一个变量可以移八个位,这个程序最长可以移8X8 = 64位和4557是一样的。如果一个程序里有多个要进行移位的的比较麻烦了。

出0入0汤圆

 楼主| 发表于 2016-12-23 00:24:22 | 显示全部楼层
nicksean 发表于 2016-12-21 21:40
用数组呗,要求描述的太少

谢谢您的建议,我大概明白了。如果我要移64位就一个数组有64个元素,然后把结果就放在这些元素里,然后一个个的赋值给下一个元素

for (a=0; a<62;a++)
{
        bin[a+1] = bin[a];
}

是不是这样的呢,因为有64个,即从0-63,所以a是小于62.这样对吗?

出0入0汤圆

 楼主| 发表于 2016-12-23 00:25:09 | 显示全部楼层

汇编不会
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 21:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表