曼切斯特编解码51程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include "Manchester.h"
/*******************************************************************************
程序说明
基于单片机的曼彻斯特编码程序,功能是将一个8位的数据(一个字节)进行曼彻斯特编码
曼彻斯特编码的原则是:电平从高到低跳变表示'1',电平从低到高跳变表示'0'
*******************************************************************************/
/*******************************************************************************
曼彻斯特编码函数
参数DataIn:将要进行编码的单字节数据
返回值manchesterOut:编码后返回的与参数对应的曼彻斯特编码值
*******************************************************************************/
unsigned int CharToManchester(unsigned char Encode_Data)
{
uint ManchesterOut = 0;
uchar i = 0;
for(i=0;i<8;i++)
{
if(( Encode_Data&0x80)==0x80) //说明该位为1
{
ManchesterOut = ManchesterOut + 1; //写1
ManchesterOut = ManchesterOut << 1;//左移一位,相当于在最低位写0
if(i<7)
{
ManchesterOut <<= 1;//移位准备编码下一位
Encode_Data <<= 1; //待编码数据左移1位,为下一位数据编码做准备}
}
else if(( Encode_Data&0x80)==0)//说明该位为0
{
ManchesterOut <<= 1;//不写1移位相当于写0
ManchesterOut += 1;//写1
if(i<7)
{
ManchesterOut <<= 1;//移位准备编码下一位
Encode_Data <<= 1; //待编码数据左移1位,为下一位数据编码做准备}
}
}
return ManchesterOut;//返回编码后的16位值
}
/*******************************************************************************
曼彻斯特译码函数
参数Manchester_In:将要进行编码的单字节数据
返回值Decode_Data:译码后返回的与参数对应的值
*******************************************************************************/
uchar ManchesterToChar(uint Manchester_In)
{
uchar Decode_Data = 0;
uchar j = 0;
uchar error=0;
for(j=0;j<8;j++)
{
if((Manchester_In&0xc000)==0x8000) //说明该位为10
{
Decode_Data = Decode_Data+1;
if(j<7)
{
Decode_Data <<= 1;//移位准备译码下一位
Manchester_In<<= 2; //待译码数据左移2位,为下一位数据译码做准备}
}
else if((Manchester_In&0xc000)==0x4000) //说明该位为01
{
//Decode_Data = Decode_Data<<1; //直接左移1位代表写0
if(j<7)
{
Decode_Data <<= 1;//移位准备译码下一位
Manchester_In<<= 2; //待译码数据左移2位,为下一位数据译码做准备}
}
else
{
error=1;
break;
}
}