#include "rfid.h"
#include <string.h>
static uint16_t temp = 0;
struct dat_buf
{
unsigned d0 :1;
unsigned d1 :1;
unsigned d2 :1;
unsigned d3 :1;
unsigned c :1;
unsigned reserved :3;
};
struct dat_buf d_buf[11];
//uint8_t mcst_f = 0;
static uint8_t mcst_f = 0;
//uint8_t bit[256] = {1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,0,1,0,1,1,0,0,1,0,1,0,1,1,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,1,0,1,0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,0,1,0,1,0,0,1,0,1,0,1,0,1,0,1,1,0,1,0,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,0,1,0,1,1,0,0,1,0,1};
uint8_t bit[256] = {0};
void rfid_inint(void)
{
TIM1_DeInit();
// TIM1_TimeBaseInit(2, TIM1_COUNTERMODE_CENTERALIGNED2,
//0, 0);
// TIM1_PrescalerConfig(128,TIM1_PSCRELOADMODE_IMMEDIATE);
TIM1_ICInit( TIM1_CHANNEL_2, TIM1_ICPOLARITY_FALLING, TIM1_ICSELECTION_DIRECTTI , TIM1_ICPSC_DIV1, 0x00);
//输入捕获CH2 , 下降沿捕获 , 输入捕捉源为直接中断方式 , 输入捕捉预分频 , 输入捕
TIM1_ClearFlag(TIM1_FLAG_CC2);
TIM1_ClearITPendingBit(TIM1_IT_CC2 );
#if 1
TIM1_ITConfig( TIM1_IT_CC2 , ENABLE);
TIM1_Cmd(ENABLE);
#else
TIM1_ITConfig( TIM1_IT_CC2 , DISABLE);
TIM1_Cmd(DISABLE);
#endif
}
static uint8_t num_i =0;
static uint8_t tr =1;
static uint16_t temp2 = 0;
static uint16_t temp1 = 0;
static uint8_t * t;
@far @interrupt void TIM1_CAP_COM_IRQHandler(void)
{
temp1 = TIM1_GetCapture2(); // 获得捕获时间
//GPIO_WriteReverse(LED_BLUE_PORT, LED_BLUE_PIN);
if(temp2>temp1)
{
temp =0xffff-temp2;
temp +=temp1;
}else
temp = temp1-temp2;
temp2 =temp1;
TIM1_ClearITPendingBit(TIM1_IT_CC2 );
TIM1_ClearFlag(TIM1_FLAG_CC2); // 清标志位
// flag = 1;
TIM1_ITConfig(TIM1_IT_CC2, DISABLE);
// TIM1_SetCompare2(0);
#if 1
//USART_Printf("%u ",temp);
if(temp>10000)
{
num_i=0;
memset(bit,0,sizeof(bit));
TIM1_ICInit( TIM1_CHANNEL_2, TIM1_ICPOLARITY_FALLING, TIM1_ICSELECTION_DIRECTTI , TIM1_ICPSC_DIV1, 0x00);
//TIM1_SetCompare2(0);
tr =1;
TIM1_ITConfig(TIM1_IT_CC2, ENABLE);
return ;
//输入捕获CH2 , 下降沿捕获 , 输入捕捉源为直接中断方式 , 输入捕捉预分频 , 输入捕
}
bit[num_i] = tr;
num_i++;
if(num_i == 0)
{
mcst_f = 1;
return;
}
if(temp>6000 && temp<10000)
{
bit[num_i] = tr;
num_i++;
if(num_i == 0)
{
mcst_f = 1;
return;
}
}
#endif
if(tr)
{
TIM1_ICInit( TIM1_CHANNEL_2, TIM1_ICPOLARITY_RISING, TIM1_ICSELECTION_DIRECTTI , TIM1_ICPSC_DIV1, 0x00);
tr =0;
}else
{
TIM1_ICInit( TIM1_CHANNEL_2, TIM1_ICPOLARITY_FALLING, TIM1_ICSELECTION_DIRECTTI , TIM1_ICPSC_DIV1, 0x00);
tr =1;
}
TIM1_ITConfig(TIM1_IT_CC2, ENABLE);
}
uint8_t read_rfid(uint8_t *message,uint8_t len)
{
uint16_t j;
uint8_t n,k;
uint8_t jm_flag=0;
uint8_t count1= 0;
uint8_t bit_temp,p,error;
uint8_t ret=0;
// if(mcst_f ==0)
// return ret;
#if 0
for(j=0;j<=0xff;j++)
USART_SendByte(bit[j]+'0');
USART_SendByte(bit[j]+'0');
#else
for(j=0;j<=0xff;j+=2)
{
switch(jm_flag)
{
case 0:
{
if(bit[j]==1 && bit[j+1]==0)
{
count1++;
if(count1 == 9)
{
count1=0;
n = 0;
jm_flag = 1;//数据开始
ret =1 ;
}
}
else if(bit[j]==0 && bit[j+1]==1)
{
count1=0;
}
break;
}
case 1:
{
if(bit[j]==0 && bit[j+1]==1)
{
bit_temp = 0;
}
else if(bit[j]==1 && bit[j+1]==0)
{
bit_temp = 1;
}
switch(n%5)
{
case 0:
{
p= n/5;
d_buf[p].d3=bit_temp;
if(p==10)
{
bit_temp = 0;
for(k=0;k<10;k++)
{
bit_temp +=d_buf[k].d3;
}
if(d_buf[p].d3 != (bit_temp&0x01))
{
error = 1;
goto end;
}
}
}
break;
case 1:
{ d_buf[p].d2=bit_temp;
if(p==10)
{
bit_temp = 0;
for(k=0;k<10;k++)
{
bit_temp +=d_buf[k].d2;
}
if(d_buf[p].d2 != (bit_temp&0x01))
{
error = 1;
goto end;
}
}
}
break;
case 2:
{ d_buf[p].d1=bit_temp;
if(p==10)
{
bit_temp = 0;
for(k=0;k<10;k++)
{
bit_temp +=d_buf[k].d1;
}
if(d_buf[p].d1 != (bit_temp&0x01))
{
error=1;
goto end;
}
}
}
break;
case 3:
{ d_buf[p].d0=bit_temp;
if(p==10)
{
bit_temp = 0;
for(k=0;k<10;k++)
{
bit_temp +=d_buf[k].d0;
}
if(d_buf[p].d0 != (bit_temp&0x01))
{
error =1;
goto end;
}
}
}
break;
case 4:
{ if(p==10)
{
d_buf[p].c=bit_temp;
if(bit_temp == 0 )
{
t=(uint8_t *)d_buf;
for(k=0;k<5;k++)
{
message[k]=*(t+2*k);
message[k]<<=4;
message[k]&=0xf0;
message[k]+=((*(t+2*k+1))&0x0f);
}
// message[1]=((uint8_t)d_buf[2]&0xf0)+(((uint8_t)d_buf[3])>>4)&0x0f;
// message[2]=((uint8_t)d_buf[4]&0xf0)+(((uint8_t)d_buf[5])>>4)&0x0f;
// message[3]=((uint8_t)d_buf[6]&0xf0)+(((uint8_t)d_buf[7])>>4)&0x0f;
// message[4]=((uint8_t)d_buf[8]&0xf0)+(((uint8_t)d_buf[9])>>4)&0x0f;
}
goto end;
}
if(bit_temp != ((d_buf[p].d3 +d_buf[p].d2+d_buf[p].d1+d_buf[p].d0)&0x01))
{
error = 1;
goto end;
}else
{
}
}
break;
default:
break;
}
n++;
break;
}
default:
break;
}
}
#endif
end:
// if(error)
// {
// for(k=0;k<5;k++)
// message[k] = 0;
// }
mcst_f = 0;
TIM1_ITConfig(TIM1_IT_CC2, ENABLE);
return ret;
}
rfid.rar_125K rfid电路_RFID ID_STM8 125K RF_stm8 125K_stm8 125K R
版权申诉
5星 · 超过95%的资源 188 浏览量
2022-07-15
10:13:25
上传
评论 3
收藏 2KB RAR 举报
邓凌佳
- 粉丝: 65
- 资源: 1万+
评论7