初级会员

- 积分
- 62
- 金钱
- 62
- 注册时间
- 2013-12-21
- 在线时间
- 0 小时
|
程序有点长 其实就是 EM4095的读卡程序 DEMOD_OUT输出信号 读卡时 DEMOD_OUT信号两个上升沿之间通过检测RDY_CLK管脚的信号脉冲个数来判断脉宽 从而得出信号是1或者是0 一般这个脉冲个数在64-128浮动 但是我程序运行出来 用定时器计数脉冲 数量远远超过这个值 如果有哪位做过 请帮忙看一下
void decode_125kCard()
{
unsigned char Corrflag=0;
unsigned char Errflag=0;
unsigned char i;
GPIO_ResetBits(GPIOA,GPIO_Pin_2);
while(1)
{
EXTI->IMR=0x0007ffff;
if(itflag==1)
{
itflag=0;
ClkCount=0;
EXTI->RTSR=0x0007ffff;
TIM_Cmd(TIM3,ENABLE);
for(i=0;i<9;i++)
{
while(1)
{
if(itflag==1)
{
itflag=0;
ClkCount=TIM_GetCounter(TIM3);
TIM_SetCounter(TIM3, 0)
if((ClkCount>RFT20)&&(ClkCount<RFT21))
{
Corrflag++;
}
else
{
Errflag=1;
}
}
break;
}
if(Errflag==1)
{
Errflag=0;
Corrflag=0;
TIM_Cmd(TIM3,DISABLE);
TIM_SetCounter(TIM3, 0);
break;
}
}
if(Corrflag==9)
{
Corrflag=0;
while(1)
{
if(itflag==1)
{
itflag=0;
ClkCount=TIM_GetCounter(TIM3);
TIM_SetCounter(TIM3, 0);
if((ClkCount>RFT20)&&(ClkCount<RFT21))
{
Buffer[RevNum++]=1;
if(RevNum==55)
{
TIM_Cmd(TIM3,DISABLE);
TIM_SetCounter(TIM3, 0);
RevNum=0;
RevOver=1;
break;
}
}
else if((ClkCount>RFT40)&&(ClkCount<RFT41))
{
Buffer[RevNum++]=0;
if(RevNum==55)
{
TIM_Cmd(TIM3,DISABLE);
TIM_SetCounter(TIM3, 0);
RevNum=0;
RevOver=1;
break;
}
Buffer[RevNum++]=1;
if(RevNum==55)
{
TIM_Cmd(TIM3,DISABLE);
TIM_SetCounter(TIM3, 0);
RevNum=0;
RevOver=1;
break;
}
}
else if((ClkCount>RFT30)&&(ClkCount<RFT31))
{
Buffer[RevNum++]=0;
if(RevNum==55)
{
TIM_Cmd(TIM3,DISABLE);
TIM_SetCounter(TIM3, 0);
RevNum=0;
RevOver=1;
break;
}
while(1)
{
if(itflag==1)
{
itflag=0;
ClkCount=TIM_GetCounter(TIM3);
TIM_SetCounter(TIM3, 0);
if((ClkCount>RFT30)&&(ClkCount<RFT31))
{
Buffer[RevNum++]=0;
if(RevNum==55)
{
TIM_Cmd(TIM3,DISABLE);
TIM_SetCounter(TIM3, 0);
RevNum=0;
RevOver=1;
break;
}
Buffer[RevNum++]=1;
if(RevNum==55)
{
TIM_Cmd(TIM3,DISABLE);
TIM_SetCounter(TIM3, 0);
RevNum=0;
RevOver=1;
break;
}
}
else if((ClkCount>RFT20)&&(ClkCount<RFT21))
{
Buffer[RevNum++]=0;
if(RevNum==55)
{
TIM_Cmd(TIM3,DISABLE);
TIM_SetCounter(TIM3, 0);
RevNum=0;
RevOver=1;
break;
}
}
}
}
if(RevOver)
{
break;
}
}
else
{
RevNum=0;
TIM_Cmd(TIM3,DISABLE);
TIM_SetCounter(TIM3, 0);
}
}
if(RevOver)
{
RevOver=0;
GPIO_ResetBits(GPIOA,GPIO_Pin_0);
}
}
}
}
}
}
void EXTI3_IRQHandler(void)
{
EXTI_ClearITPendingBit(EXTI_Line3);
itflag=1;
}
|
|