chujinming2013 发表于 2013-5-4 21:09

关于曼彻斯特解码程序

我这前写过一个编码程序是把单片机8位数据转换成16位曼彻斯特编码,程序如下:
unsigned int CharToManchester(unsigned char DataIn)
{
unsigned char i=0;
for(i= 0;i < 7;i++)
{
    if((DataIn & 0x80) == 0x80)//1->10
    {
      ManchesterOut += 1;//写1
      ManchesterOut <<= 1;//移位不写1相当于写0
      ManchesterOut <<= 1;//移位准备编码下一位
    }
    if((DataIn & 0x80) == 0)//0->01
    {
      ManchesterOut <<= 1;//不写1移位相当于写0
      ManchesterOut += 1;//写1
      ManchesterOut <<= 1;//移位准备编码下一位
    }
    DataIn <<= 1;
}
//编码第八位数据
if((DataIn & 0x80) == 0x80)//1->10
{
    ManchesterOut += 1;
    ManchesterOut <<= 1;
}
if((DataIn & 0x80) == 0)//0->01
{
    ManchesterOut <<= 1;
    ManchesterOut |= 1;
}

   return ManchesterOut;//返回编码后的16位值

}

现在是想把16位的曼彻斯特编码解码成8位数据,想请楼主帮忙写写,我不知道怎么写,诡求!非常感谢!!
我的邮箱:cjmnbu@163.com

qin552011373 发表于 2013-5-5 13:05

赤裸裸的伸手党你不会自己先写一下么

huangxz 发表于 2013-5-5 16:39

曼码就是0->1表示0,1->0表示1,这个解码超级简单的

chujinming2013 发表于 2013-5-5 19:00

兄弟啊,怎么解啊,你说很简单的啊

chujinming2013 发表于 2013-5-5 19:03

huangxz 发表于 2013-5-5 16:39 static/image/common/back.gif
曼码就是0->1表示0,1->0表示1,这个解码超级简单的

怎么解啊,超级简单??

huangxz 发表于 2013-5-5 22:35

chujinming2013 发表于 2013-5-5 19:03 static/image/common/back.gif
怎么解啊,超级简单??

就是你编码的逆啊,比如01解成0,10解成1,就行了啊,你都编了码,解码还有啥呀

chujinming2013 发表于 2013-5-5 22:52

huangxz 发表于 2013-5-5 22:35 static/image/common/back.gif
就是你编码的逆啊,比如01解成0,10解成1,就行了啊,你都编了码,解码还有啥呀
...

怎么写,我是菜鸟,写出来看看,兄弟。

huangxz 发表于 2013-5-5 23:02

本帖最后由 huangxz 于 2013-5-5 23:03 编辑

chujinming2013 发表于 2013-5-5 22:52 static/image/common/back.gif
怎么写,我是菜鸟,写出来看看,兄弟。
void machester_decode(char *input, char *output, int len)
{
                int i;
                char *p_src = input;
                char *p_tar = output;
                for(i=0;i<len;i++)
                {
                              *p_src <<= 2;
                              *p_tar <<= 1;
                              if((p_src & 0xc0) == 0x10)p_tar |= 0x01;
                              if((i % 4) == 3)p_src++;
                              if((i % 8) == 7)p_tar++;
                }
}
以此类似,不知道我写的楼主看不看的明白,呵呵

*p_src <<= 2;这个应该放下面

chujinming2013 发表于 2013-5-5 23:17

huangxz 发表于 2013-5-5 23:02 static/image/common/back.gif
以此类似,不知道我写的楼主看不看的明白,呵呵

*p_src

   *p_src <<= 2;放在哪个下面,
这个程序不太明白,能解释下吗??非常感谢!!

huangxz 发表于 2013-5-5 23:21

chujinming2013 发表于 2013-5-5 23:17 static/image/common/back.gif
*p_src

就是先取出解码两个,再移位两个,就下面的,我先写的先移位了,会漏掉两个

chujinming2013 发表于 2013-5-5 23:29

huangxz 发表于 2013-5-5 23:21 static/image/common/back.gif
就是先取出解码两个,再移位两个,就下面的,我先写的先移位了,会漏掉两个

好像不对啊
我是输入16位的二进制代码啊,输出是8位啊,定义不应该是char *input ,兄弟,你有QQ吗,能加我下吗
我们聊聊好吗,我的QQ 422052755,谢谢

chujinming2013 发表于 2013-5-5 23:50

chujinming2013 发表于 2013-5-5 23:29 static/image/common/back.gif
好像不对啊
我是输入16位的二进制代码啊,输出是8位啊,定义不应该是char *input ,兄弟,你有QQ吗,能加 ...

我编译器里仿真出来的结果也是不对的,子函数写成带一个形参,带返回的好
如,unsigned charmachester_decode(unsigned int input)
{

}

chujinming2013 发表于 2013-5-6 00:00

chujinming2013 发表于 2013-5-5 23:50 static/image/common/back.gif
我编译器里仿真出来的结果也是不对的,子函数写成带一个形参,带返回的好
如,unsigned charmachester_ ...

非常感谢兄弟的解答,能不能再写一个子函数,能不能再加点注释,谢谢!!:handshake

huangxz 发表于 2013-5-6 09:59

chujinming2013 发表于 2013-5-6 00:00 static/image/common/back.gif
非常感谢兄弟的解答,能不能再写一个子函数,能不能再加点注释,谢谢!! ...

你用int类型输入,要考虑大小端的问题哦,因为曼码是有顺序的

huangxz 发表于 2013-5-6 10:22

在压缩包里面,楼主可以看看



chujinming2013 发表于 2013-5-6 20:38

huangxz 发表于 2013-5-6 10:22 static/image/common/back.gif
在压缩包里面,楼主可以看看

非常感谢兄弟热情的解答!!
我想跟你交个朋友,
你的QQ号多少 或者邮箱地址多少??

huangxz 发表于 2013-5-6 21:51

chujinming2013 发表于 2013-5-6 20:38 static/image/common/back.gif
非常感谢兄弟热情的解答!!
我想跟你交个朋友,
你的QQ号多少 或者邮箱地址多少?? ...

别客气,有什么问题就上论坛吧
上面的所有都是朋友

qin552011373 发表于 2013-5-7 09:56

huangxz 发表于 2013-5-6 21:51 static/image/common/back.gif
别客气,有什么问题就上论坛吧
上面的所有都是朋友

这句话我爱听

henglin 发表于 2020-12-1 12:42

最近在研究关注一下

henglin 发表于 2020-12-4 19:10

今天终于把曼彻斯特解码 写出来了

接收非常好
页: [1] 2
查看完整版本: 关于曼彻斯特解码程序