根据曼彻斯***的编码原则(参见本刊2001年第一期《一种采用曼码调制的非接触IC卡读写程序编制》),非接触ID卡采用上升沿对应着位数据“0”,下降沿对应着位数据“1”,微控制器通过检测U2270B输出数据位的跳变来实现对曼彻斯***的译码。在现实工作中,数据信号会受到调制、解调、噪声各种效应的影响,其上升沿和下降沿存在抖动,可采用键盘消抖的办法来消除抖动的影响。根据非接触ID卡64位数据循环发送以及其数据绪构特点,即数据流中第64位为“0”,第1位至第9位为“1”。据此,将“0111111111”作为读数据的起始标识,如图2所示。在确定了数据起始标识后,采用延时大于0.5T采样数据位的方法,如图3所示,来避开曼彻斯***编码中的空跳对数据译码造成的影响,简化了译码程序。 通过实验得到:480μs≤1T≤520μs,220μs≤0.5T≤280μs,由此取Tnext=300μs。为了便于对读出数据进行奇校验,读出数据每5位作为一个字节。因此确定起始标识和读取数据对时钟有严格要求,所以寻找起始标识和读取数据部分程序采用汇编语言编写。数据读以后,根据前面所提到的非接触ID卡的数据结构,通过比较奇校验算法与读出数据中的奇校验位来验证出数据的正确性。