简单的曼彻斯特编码的C语言实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

简单的曼彻斯特编码的C语言实现

曼彻斯特编码是减小信号交流分量,实现固定信号占空比的基本方法。

用C语言实现如下:

#include

#define uint8_t unsigned char

#define uint16_t int

#define BOOL int

#define TRUE 1

#define FALSE 0

BOOL app_ManchesterEncode(uint8_t *indata,uint8_t *outdata,uint16_t inlength);

BOOL app_ManchesterDecode(uint8_t *indata,uint8_t *outdata,uint16_t inlength);

uint8_t indata[10]={0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef,0x43,0xb8};

uint8_t middata[20];

uint8_t outdata[10];

uint16_t inlength;

int main()

{

int length=10;

int i=0;

app_ManchesterEncode(indata,middata,length);

if(app_ManchesterDecode(middata,outdata,length*2)==FALSE)

printf("decode failed!\n");

printf("in:");

for(i=0;i

printf(" %2.2x",indata[i]);

printf("\n");

printf("mid:");

for(i=0;i

printf(" %2.2x",middata[i]);

printf("\n");

printf("out:");

for(i=0;i

printf(" %2.2x",outdata[i]);

printf("\n");

}

BOOL app_ManchesterEncode(uint8_t *indata,uint8_t *outdata,uint16_t inlength) {

uint16_t i=0;

uint8_t j=0;

for(i=0;i

{

outdata[2*i]=0;

outdata[2*i+1]=0;

for(j=0;j<8;j++)

if(j<4)

outdata[2*i+1]|=(((indata[i]>>j)&0x01)?2:1)<

else

outdata[2*i]|=(((indata[i]>>j)&0x01)?2:1)<<(j*2-8);

}

return TRUE;

}

BOOL app_ManchesterDecode(uint8_t *indata,uint8_t *outdata,uint16_t inlength) {

uint16_t i=0;

uint8_t j=0;

for(i=0;i

{

outdata[i]=0;

for(j=0;j<8;j++)

{

if(j<4)

{

if((indata[2*i+1]>>(j*2)&0x03)==0x01)

;

else if((indata[2*i+1]>>(j*2)&0x03)==0x02)

outdata[i]|=0x01<

else

{

printf("at i=%d j=%d data:%2.2x ",i,j,indata[2*i+1]&0x03);

return FALSE;

}

}

else

{

if((indata[2*i]>>(j*2-8)&0x03)==0x01)

;

else if((indata[2*i]>>(j*2-8)&0x03)==0x02)

outdata[i]|=0x01<

else

{

printf("at i=%d j=%d\n",i,j);

return FALSE;

}

}

}

}

return TRUE;

}

相关文档
最新文档