125KHz读取ID卡卡号

项目需要,自己设计了125khz模块,发现了一些不难但是较为耗时的点,需要注意的地方有两个:

1.脉冲宽度的区分,需要根据板载主芯片决定,根据机器周期得出定时器每加一次的时间长短,然后根据半个周期和一个周期的时间长度来确定参数,注意要囊括半个周期最短时间及最长时间,一个周期的最短时间及最长时间。参数的确定尤为重要,差一点可能导致读取数据错误,下面是普通12个机器周期51单片机使用11.0592MHz晶振时的参数设定:

   11.0592MHz
#define TIME00	50        //54us
#define TIME05	260       //282us
#define TIME10	550       //597us

2.电压影响,常用的3.3V和5V电压在读卡的时候也会有影响,导致数据错误,在使用5V电压的时候,上升沿或下降沿的坡度变化时间长,当第二次时读取时,电压还没有完全变化,所以可能导致半个周期波形读取失败,一个周期因为时间较长,不会出现错误,但是读到的是稳定的错数据,无法通过后续的奇偶校验。当使用3.3V供电时,斜坡变化比较快,第二次读取的时候,电压已经变化了,所以3.3V的半周期读取时按照读取规则可以正常读取到。

unsigned char readdata()
{
	switch(readbit())
	{
		case 1:		//一个周期
			return !bitin;
		case 2:		//半个周期
			if(readbit()!=2) return 2;	//再读一次半个周期
			return !bitin;  //3.3V使用
            //return bitin;  //5V使用
		default:
			return 2;
	}
}

 

你可能感兴趣的:(嵌入式)