当前位置:文档之家› 简单的曼彻斯特编码的C语言实现

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

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

用C语言实现如下:
#include <stdio.h>
#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<length;i++)
printf(" %2.2x",indata[i]);
printf("\n");
printf("mid:");
for(i=0;i<length*2;i++)
printf(" %2.2x",middata[i]);
printf("\n");
printf("out:");
for(i=0;i<length;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<inlength;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)<<j*2;
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<inlength/2;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<<j;
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<<j;
else
{
printf("at i=%d j=%d\n",i,j);
return FALSE;
}
}
}
}
return TRUE;
}。

相关主题