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