第一次读取ID卡,费了不少周折 !本程序采用U2270B来读取卡号,所用单片机为新华龙的C8051F340,并采用串口1(P0.6和P0.7)的方式发送到PC机,通过串口调试助手观察所读到的数据,本程序不足之处就是所得到的校验位有些不正确,还请高手不吝赐教。
ID卡的工作原理:当读写器正常工作时,不断地向外辐射一组固定频率的电磁波,典型频率为125KHZ,当有卡靠近时,卡片内的一个LG串连谐振电路,其频率与读卡器的频率相同,这样在电磁波的激励下,LG谐振电路产生共振,从而使电容充电,在这个电容的另一端,接有一个单向导电的电子泵,将将电容内的电荷送到另一个电容内存储,当电容器充电达到2V时,电容就作为电源为卡片上的其他电路提供电压,将卡片的数据发射出去或接收读取。
/*****************************************************************************
新卡检测方法:检测上次接收数据的结束位与下次接收数据的起始位(半个周期的低电平
与一个周期的高电平),但是,此时INPORT输入脚电平已变为低电平信号。
之后再连续检测16个半周期电平翻转,到达第9个1的前半周期(高电平),
之后INPORT变为低电平,再通过定时器0来模拟同步时钟,对曼彻斯特码进行解码。
注意:卡号发送顺序:先发校验位,紧接着是最高位、次高位····连发5位数据。
如本卡的卡号是11100 00110 00000 00000 11100 10101 10100 00010 01011 01010 10010
最先接收到是第一个五位的校验位0,然后才是1110,依次类推。
下降沿为 1
上升沿为 0
整个程序的思想:每次采样完成,判断一次所采到的数据是否为1 ,若为1,继续采样,直到采完9个1,
若为0,丢掉数据,重新采样。从而实现是否有卡的判断。
***********************************************************************************/
#include
#include
#include
//增加部分:由于改版,读卡输入和蜂鸣器输入的io口有所更改
//-----------------------------------------------------------------------------
// 16-bit SFR Definitions for 'F34x
sfr16 SBRL1 = 0xB4;
// Global CONSTANTS
#define SYSCLK 12000000 // SYSCLK frequency in Hz
#define BAUDRATE0 115200 // Baud rate of UART0 in bps
#define BAUDRATE1 115200 // Baud rate of UART1 in bps
#define BIT5 0x20
sbit SPK= P3^5