曼切斯特编解码51程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

}

}

相关文档
最新文档