发布时间 : 星期一 文章125kHzRFID读卡器研究报告更新完毕开始阅读
//-------------------EM4095天线初始化---------------------// void Em4095_init() {
SHD=1; delay_ms(35); SHD=0; delay_ms(35); }
//--------------------脉宽计算子函数-------------------------// void Pluse_calculate() {
if(Input_Num%2==0) //Input_Num=0记录进入中断次数,偶数次记录上升沿时间
//奇数次记录下降沿,自动清零 {
Last_risingedge_time=Now_risingedge_time; //记录此次上升沿时间
Now_risingedge_time=TC7; //将检测到上升沿的时间赋值
33
} else {
Last_fallingedge_time=Now_fallingedge_time; //记录此次下降沿时间
Now_fallingedge_time=TC7; //将检测到下降沿的时间赋值
Pluse_width=Now_fallingedge_time-Now_risingedge_time;//此次高电平的脉宽
Last_L_width=Now_fallingedge_time-Last_fallingedge_time;//此次下降沿与上一次下降沿的宽度 } }
//------------------------数据头检测函数-------------------------------// void Head_check() {
if(Head_start)
Check_over=1; //当数据头检测完成后要等到下一个脉冲来到才能执行解码函数 else {
34
if(Pluse_width>=Min_halfbit&&Pluse_width<=Max_halfbit)//连续出现9个1/2bit的高脉冲
//则认为是数据头 { i++; if(i==9) {
Head_start=1; i=0; } }
else i=0; } }
//---------------------M码解码子函数-------------------------// void M_decode() {
if(Check_over) //数据头检测完成 并等到下一个脉冲到来 {
if(Decode_cnt 35 { if(Pluse_width>=Min_halfbit&&Pluse_width<=Max_halfbit) //检测脉冲宽度是否为1/2bit { if(Last_L_width>=Min_1bit&&Last_L_width<=Max_1bit)//此次上升沿与上一次的下降沿 //是否为1/2bit { if(Decode_cnt==0) { Decode_data[0]=1;//如果是第一位数据, 直接解码为\ Decode_cnt++; } else { Decode_data[Decode_cnt]=Decode_data[Decode_cnt-1];//否则等于上一次的数据 36