[AVR单片机]

关于曼彻斯特解码程序

[复制链接]
7552|22
手机看帖
扫描二维码
随时随地手机跟帖
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,这个解码超级简单的

使用特权

评论回复
评分
参与人数 1威望 +4 收起 理由
qin552011373 + 4 很给力!
chujinming2013|  楼主 | 2013-5-5 19:00 | 显示全部楼层
兄弟啊,怎么解啊,你说很简单的啊

使用特权

评论回复
chujinming2013|  楼主 | 2013-5-5 19:03 | 显示全部楼层
huangxz 发表于 2013-5-5 16:39
曼码就是0->1表示0,1->0表示1,这个解码超级简单的

怎么解啊,超级简单??

使用特权

评论回复
huangxz| | 2013-5-5 22:35 | 显示全部楼层
chujinming2013 发表于 2013-5-5 19:03
怎么解啊,超级简单??

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

使用特权

评论回复
chujinming2013|  楼主 | 2013-5-5 22:52 | 显示全部楼层
huangxz 发表于 2013-5-5 22:35
就是你编码的逆啊,比如01解成0,10解成1,就行了啊,你都编了码,解码还有啥呀
...

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

使用特权

评论回复
huangxz| | 2013-5-5 23:02 | 显示全部楼层
本帖最后由 huangxz 于 2013-5-5 23:03 编辑
chujinming2013 发表于 2013-5-5 22:52
怎么写,我是菜鸟,写出来看看,兄弟。
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
以此类似,不知道我写的楼主看不看的明白,呵呵

*p_src

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

使用特权

评论回复
huangxz| | 2013-5-5 23:21 | 显示全部楼层
chujinming2013 发表于 2013-5-5 23:17
*p_src

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

使用特权

评论回复
chujinming2013|  楼主 | 2013-5-5 23:29 | 显示全部楼层
huangxz 发表于 2013-5-5 23:21
就是先取出解码两个,再移位两个,就下面的,我先写的先移位了,会漏掉两个

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

使用特权

评论回复
chujinming2013|  楼主 | 2013-5-5 23:50 | 显示全部楼层
chujinming2013 发表于 2013-5-5 23:29
好像不对啊
我是输入16位的二进制代码啊,输出是8位啊,定义不应该是char *input ,兄弟,你有QQ吗,能加 ...

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

}

使用特权

评论回复
chujinming2013|  楼主 | 2013-5-6 00:00 | 显示全部楼层
chujinming2013 发表于 2013-5-5 23:50
我编译器里仿真出来的结果也是不对的,子函数写成带一个形参,带返回的好
如,unsigned char  machester_ ...

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

使用特权

评论回复
huangxz| | 2013-5-6 09:59 | 显示全部楼层
chujinming2013 发表于 2013-5-6 00:00
非常感谢兄弟的解答,能不能再写一个子函数,能不能再加点注释,谢谢!! ...

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

使用特权

评论回复
huangxz| | 2013-5-6 10:22 | 显示全部楼层
在压缩包里面,楼主可以看看
c_test.rar (770 Bytes)

使用特权

评论回复
chujinming2013|  楼主 | 2013-5-6 20:38 | 显示全部楼层
huangxz 发表于 2013-5-6 10:22
在压缩包里面,楼主可以看看

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

使用特权

评论回复
huangxz| | 2013-5-6 21:51 | 显示全部楼层
chujinming2013 发表于 2013-5-6 20:38
非常感谢兄弟热情的解答!!
我想跟你交个朋友,
你的QQ号多少 或者邮箱地址多少?? ...

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

使用特权

评论回复
评分
参与人数 1威望 +6 收起 理由
qin552011373 + 6 很给力!
qin552011373| | 2013-5-7 09:56 | 显示全部楼层
huangxz 发表于 2013-5-6 21:51
别客气,有什么问题就上论坛吧
上面的所有都是朋友

这句话我爱听

使用特权

评论回复
henglin| | 2020-12-1 12:42 | 显示全部楼层
最近在研究  关注一下

使用特权

评论回复
henglin| | 2020-12-4 19:10 | 显示全部楼层
今天终于把曼彻斯特解码 写出来了

接收非常好

使用特权

评论回复
评论
wm1006 2021-5-18 17:02 回复TA
你好,,曼彻斯特解码解出来是几个字节的数据 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

10

帖子

0

粉丝