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

[复制链接]
3002|9
 楼主| 消逝记忆 发表于 2016-11-1 15:00 | 显示全部楼层 |阅读模式
今天做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

mcu5i51 发表于 2016-11-5 15:47 | 显示全部楼层
51中不是有这个指令吗
mcu5i51 发表于 2016-11-5 15:52 | 显示全部楼层
SWAP A 累加器高、低4 位交换
增加一个字节和一个周期,应该可以

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大小复杂度就不说了,要忙了,写到这里。
linqing171 发表于 2016-11-6 09:22 | 显示全部楼层




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
linqing171 发表于 2016-11-6 09:24 | 显示全部楼层
从map看,你的算法又大,运算又慢。
xydzx 发表于 2016-11-6 15:42 | 显示全部楼层
辛苦,我是嵌入式的一个菜鸟,路过留痕3026827905
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

7

帖子

0

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