打印

51单片机中位数据高低位互换

[复制链接]
2654|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
今天做51的led点阵,发现P1口的顺序反了,也就是高低位顺序反了,PCB板焊好了不能动,我是采用取字模软件的,不想进行换算,就开始想用什么算法把8位2进制数高低位互换一下

下面贴出我自己的代码,就是有点麻烦,谁能想出一个更简单点的
yiwei  (uchar data)
{
    data=((_crol_(data,1)&0x88)|(_crol_(data,3)&0x44)|(_crol_(data,5)&0x22)|(_crol_(data,7)&0x11));
    return(data);
}

就是感觉有点麻烦了,哪位大神还能找出一种简单的方法??????

相关帖子

沙发
cjseng| | 2016-11-1 17:02 | 只看该作者
查表

使用特权

评论回复
板凳
消逝记忆|  楼主 | 2016-11-1 17:35 | 只看该作者

查表是个什么鬼

使用特权

评论回复
地板
fzyuan| | 2016-11-5 14:40 | 只看该作者
本帖最后由 fzyuan 于 2016-11-5 14:47 编辑

unsigned char bdata RS_Byte;        //可以位操作的字节变量,用于存放倒序后的
sbit RSB0 = RS_Byte^0;
sbit RSB1 = RS_Byte^1;
sbit RSB2 = RS_Byte^2;
sbit RSB3 = RS_Byte^3;
sbit RSB4 = RS_Byte^4;
sbit RSB5 = RS_Byte^5;
sbit RSB6 = RS_Byte^6;
sbit RSB7 = RS_Byte^7;
unsigned char bdata PS_Byte;        //可以位操作的字节变量,用作存放正序数据
sbit PSB0 = PS_Byte^0;
sbit PSB1 = PS_Byte^1;
sbit PSB2 = PS_Byte^2;
sbit PSB3 = PS_Byte^3;
sbit PSB4 = PS_Byte^4;
sbit PSB5 = PS_Byte^5;
sbit PSB6 = PS_Byte^6;
sbit PSB7 = PS_Byte^7;

unsigned char BitReversed(unsigned char ps)              //位倒序,一位一位地翻

{
        PS_Byte = ps;

        RSB0 = PSB7;
        RSB1 = PSB6;
        RSB2 = PSB5;
        RSB3 = PSB4;
        RSB4 = PSB3;
        RSB5 = PSB2;
        RSB6 = PSB1;
        RSB7 = PSB0;
        return RS_Byte;
}

a = BitReversed(b);
//输入b为0xaa,输出a为0x55

使用特权

评论回复
5
mcu5i51| | 2016-11-5 15:47 | 只看该作者
51中不是有这个指令吗

使用特权

评论回复
6
mcu5i51| | 2016-11-5 15:52 | 只看该作者
SWAP A 累加器高、低4 位交换
增加一个字节和一个周期,应该可以

使用特权

评论回复
7
linqing171| | 2016-11-6 09:22 | 只看该作者
1 有些带crc的mcu,额外有个flip寄存器可以做这个。
2 你自己做个软件把高低位反一下。
3 data=((_crol_(data,1)&0x88)|(_crol_(data,3)&0x44)|(_crol_(data,5)&0x22)|(_crol_(data,7)&0x11)); 这个写法看来楼主也是费心了,但是怎么感觉不怎么对啊。

时间复杂度和hex大小复杂度就不说了,要忙了,写到这里。

使用特权

评论回复
8
linqing171| | 2016-11-6 09:22 | 只看该作者




使用特权

评论回复
9
linqing171| | 2016-11-6 09:24 | 只看该作者
从map看,你的算法又大,运算又慢。

使用特权

评论回复
10
xydzx| | 2016-11-6 15:42 | 只看该作者
辛苦,我是嵌入式的一个菜鸟,路过留痕3026827905

使用特权

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

本版积分规则

1

主题

7

帖子

0

粉丝