51单片机曼彻斯特码译码源程序

  • 格式:doc
  • 大小:64.50 KB
  • 文档页数:14

下载文档原格式

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

C51 Manchester译码源程序C51曼彻斯特码译码源程序

2009-04-30 11:14

/*

manchester编码方式:0为10 1为01,如果与其相反则需要做相应的修改。

适用于125KHz非接触式ID卡,EM4100兼容格式ID卡(64bits, Manchester编码)

MCU:stc12c54xx

crystal:11.0592M

使用资源:外部中断0(INT0)+PCA0

*/

#include

#include

#include

#define Channe256uS_H 0x00 //模块60mS 定时常数高位

#define Channe256uS_L 0xEC //模块60mS 定时常数低位

#define uint8 unsigned char

sbit RFID_DATA = P3^2; //外部中断口接收数据

/*/函数申明 */

void start_Read() ;

void Data_reveice() ;

void Lmove_bite() ;

uint8 find_head() ;

uint8 Data_L_check() ;

uint8 Data_R_check() ;

void get_data();

uint8 Data_Sever() ;

void Get_EffectData(uint8 edata) ;

void Init_PCA0();

void DAT_Change(uint8 dat[]);

void init_dev(void);

uint8 tcount ;// 定时中断计数

uint8 count ;//接收数据位数计数

uint8 t_count ;//获得数据及校验变量。

uint8 temp ;// 临时变量

uint8 temp_buf[16] ;//128个Machester位 55个数据位缓冲区。

uint8 effectdata[5] ;//5个数据缓冲区。相当于模块串行读的10 Bytes 数据。

bit error_bit;//数据出错时为0,初始值为1

bit rev_state;//初始值为0;数据正确接收后为1. //当此位变为1时,说明数据接收正确并且正确处理,可以使用此ID数据。

/*********************************************

函数名:main()

功能:主函数

参数:无

*********************************************/

void main(void)

{

uint8 i;

error_bit=1;

rev_state=0;

init_dev();//初始化各模块

//添加自己的程序

}

}

void init_dev(void)

{

CMOD = 0x80; //PCA 在空闲模式下停止 PCA 计数器工作

CCON = 0x00; //;CF = 0,清0 PCA 计数器溢出中断请求标志位

CCAP0L=Channe256uS_L;//给 PCA 模块0 的 CCAP0L 置初值

CCAP0H=Channe256uS_H;

CCAPM0=0X49;

SCON=0x50;//串口工作在方式1,允许接收。

TMOD = 0x20 ; //定时器1工作在方式2 for generator baud rate

TH1=0xFD;//11.0592M baud rate//串口用于调试方便,波特率9600

TL1=0xFD;

TR1=1;

IT0=1;

EA = 1 ;// 开总中断

TI=1;

}

/********************************************* 函数名:BCD_Change

功能:初始化RFID模块

参数:无

*********************************************/ void DAT_Change(uint8 *dat)

{

uint8 i,count,c;

for(count=0;count<5;count++)

{

for(i=0;i<2;i++)

{

if(i==0)

{

c = dat[count]>>4;

c &= 0x0f;

if( c>=0 && c<=9 )

temp_buf[2*count+1] = '0' + c;

else

temp_buf[2*count+1] = 'A' + c - 10;

}

else

{

c = dat[count];

c &= 0x0f;

if( c>=0 && c<=9 )

temp_buf[2*count] = '0' + c;

else

temp_buf[2*count] = 'A' + c - 10;

}