《身份证卡读写原理》是一本详细介绍身份证等IC卡读写技术的专业书籍,内容涵盖卡片结构、数据存储及通信协议等方面的知识。
新卡检测方法:通过检查上次接收数据的结束位与下次接收数据的起始位(半个周期低电平加上一个周期高电平)来实现,此时INPORT输入脚已经变为低电平信号。接下来连续检测16个半周期内电平翻转的情况,在到达第9个“1”的前半周期(即高电平时),INPORT将变回低电平,并通过定时器0模拟同步时钟对曼彻斯特码进行解码。
卡号发送顺序如下:首先发送校验位,随后依次是最高位、次高位等连续五位数据。例如,如果本卡的卡号为11100 00110 00000 00000 11100 10101 10100 00010 01253 98765,最先接收到的是第一个五位的校验位“零”,然后是“一”、“一一”等。下降沿表示逻辑值为“一”,上升沿则代表逻辑值为“零”。
程序的主要思想是在每次采样完成后判断所采集的数据是否为1:如果数据是1,则继续进行采样直到完成对9个连续的1的检测;若不是,丢弃该数据并重新开始采样。这种方法用于实现是否有卡插入设备的情况判断。
此外,由于硬件版本更新,读卡和蜂鸣器控制所需的I/O端口已经进行了更改:
```c
// 增加部分:由于改版,读卡输入和蜂鸣器输入的io口有所更改
//-----------------------------------------------------------------------------
// 16位SFR定义用于F34x系列设备
sfr16 SBRL1 = 0xB4;
// 全局常量定义:
#define SYSCLK 12000000 // 系统时钟频率,单位为Hz
#define BAUDRATE0 115200 // UART通道零的波特率,单位bps
#define BAUDRATE1 115200 // UART通道一的波特率,单位bps
#define BIT5 0x20
// 定义端口和引脚:
sbit SPK = P3^5; // 蜂鸣器控制位定义为P3.5
sbit INPORT = P0^3; // 解码输入信号的采集点定义在P0.3
```