编程才可以实现系统预期的功能。
在本系统中,软件的设计主要包括:数据采集模块、存储模块、显示模块、门控模块、报警模块、键盘模块和上位机软件的设计几个方面。本系统的软件结构框图如图9所示。
1. 数据采集模块:读卡器ISO/IEC15693通过天线读取RFID卡的数据,然后将数据传送出去。
2. 存储模块:AT89C51接收到数据后,将数据传送给AT24C04进行存储。 3. 显示模块:AT89C51接收到数据后,将数据与AT24C04里存储的数据进行对比,若两者完全相同,则液晶显示正确的信息;若不相同,则液晶显示错误的信息。
4. 门控模块:AT89C51接收到数据后,将数据与AT24C04里存储的数据进行对比,若两者完全相同,则进行开门操作;若不相同,则不开门。
5. 报警模块:AT89C51接收到数据后,将数据与AT24C04里存储的数据进行对比,若不相同则报警。
6. 键盘模块:通过键盘输入密码,并根据输入密码的有效性做相应的操作。
基于RFID的门禁系统 块
数据采集模存储模块显示模块门控模块报显警结示模束模块块键盘模块
图9 软件结构框图
串口发送/接收部分的调试:将电路板与计算机连接以后,用一段简单的程序进行调试。发现在调试的过程中,串口不能正常通信,经过查证后发现是电容正负极接反了,修正以后,便能正常通信了。注:电容的选择要注意,应选择0.1μF/1μF/10μF的电容。存储部分的调试:将AT24C04与单片机连接好后,编写一段简单的存储程序,将字符存入到24C04里,并取出查看存储数据的正确性。通过调试后,并未发现问题。存储电路调试成功。读卡器部分的调试:将读卡器
接口与单片机相连后,用串口调试助手检测读卡器。在用串口助手向读卡器发送读卡命令时,当有卡(MIFIRE S50、S70卡)进入读卡器读卡范围内时,会向串口助手返回卡序列号,以此证明读卡器可用。
4.3 系统功能的具体实现
4.3.1 系统软件调试
在进行软件调试之前要先进行人工检查代码,要仔细认真的检查,在程序中要多添加注释,以便检查方便。在人工检查无误后,才可以进行动态检查,也就是上机调试。通过编译可以得到语法错误的信息,根据提示信息找出程序中出错之处并改正。有时提示的出错信息并不是真正出错的行,这就要求我们善于分析,找出真正的错误,而不要单纯从字面意义上找出错信息,要懂得变通的理解并解决问题。软件调试时,也要模块式进行。调试时可用单步运行和断点运行方式,通过检查系统的CPU现场情况、RAM的内容和I/O口的状态,检测程序执行结果是否符合设计要求。同时,还可以发现系统中存在的硬件设计错误和软件算法错误。待各个模块调好后再进行系统程序联调。这个阶段若出现故障,可以检查算法上是否有冲突、参数传递是否正确等。
在使用WAVE软件时,调试的方法和技巧最为重要,不同的情况采用不同的调试方法,有助于程序的实现。在设计过程中显示运行结果一般用全速调试,调试时主要使用了跟踪调试、断点调试。
1.跟踪调试:跟踪应用程序用户能够在运行应用程序时,看到PC指针在应用源代码程序中的确切位置。
跟踪型:单步执行一条语句程序,有利于观察变量。但是,如果调用一个函数,则进入函数中,在函数中单步执行每一条语句。跟踪使用热键F7。
单步型:单步执行每条语句程序,如果调用一个函数,则不进入函数中。单步使用热键F8。
2.断点调试
如果已知程序中某块代码实际运行正常的情况下,仍用跟踪调试,将大大浪费时间,而且很枯燥,因此调试中第二个重要工具是在源代码中某一处设置断点,大多数调试程序通过使用断点中止程序执行。在程序调试中用到使用断点调试,即在指定行上设置断点后,全速执行程序,看是否能进行到设置断点所在行。如
果用断点调试,由比较容易观察出程序变量的改变及程序运行的结果。设置断点热键Ctrl+F8。
3.查看变量
WAVE软件可以通Watch窗口进行查看变量。通过添加观察项菜单可以将用户希望观察的变量添加到观察窗口及数据窗口观察。在设计过程中常用观察窗口观察程序中的变量,修改程序中的错误。 4.3.2 系统整体调试
将各个部分的硬件模块合并成一个整体,把软件各个部分程序合并到一个主程序中。通过伟福访真器和伟福调试软件WAVE6000开始整体调试,硬件部分用万用表来测试硬件每部分的接通性。软件部分的测试主要方法是通过设置断点、单步执行等方法来测试程序的正确性。在确定软硬件无问题后,将程序通过烧写器把程序烧到单片机中。
将程序烧写到控制芯片AT89C52,打开电源,电源指示灯亮,整个系统启动。运行上位机,向下位机发送读卡命令,下位机接收到读卡命令后,当有RFID卡进入到读卡器的读卡范围内时,若RFID卡为有效卡便会在执行开门操作的同时在液晶上显示正确信息;若不是有效卡则在报警的同时在液晶上显示错误信息。当通过键盘输入密码后,系统会判断密码的有效性,若是有效密码则开门并在液晶上显示正确信息;若无效则报警并显示错误信息。整个系统完成。
本系统能在打开电源并运行上位机后,能自动向下位机发送读卡命令,当有RFID卡进入到读卡器的读卡范围内时,则会自动读取卡序列号,并将卡序列号传送给上位机,上位机判断卡的有效性。若该卡是有效卡,系统会执行开门并在液晶上显示正确的信息;若该卡是非法卡,则会报警并显示错误的信息。本系统能够有效、方便、安全地控制重要场所的出入访问,具有可靠性高、保密性强、方便快捷等特点。
整个系统中数据传输的过程:发送到SDA线上的每个字节必须为8位。每次传输可以发送的字节数量不受限制,每个字节的后面必须跟一个响应位。首先传输的是数据的最高位(MSB)。如果从机要完成一些其他功能后(例如一个内部中断服务程序)才能接收或发送下一个完整的数据字节。可以使用时钟线SCL保持低电平迫使主机进入等待状态。当从机准备好接收下一个数据字节释放时钟线
SCL后,数据传输继续。
在一些情况下,可以用与I2C总线格式不一样的格式(例如兼容CBUS的器件)。甚至在传输一个字节时,用这样的地址起始的报文可以通过产生停止条件来终止,此时不会产生响应。
数据传输必须带响应,相应的响应时钟脉冲由主机产生。在响应时钟脉冲期间,发送器释放SDA线(高)。
在响应的时钟脉冲期间,接收器必须将SDA线拉低,使它在这个时钟脉冲的高电平期间保持稳定的低电平。当然,必须考虑建立和保持时间。
当从机不能响应从机地址时(例如它这在执行一些实时函数不能接收或发送),从机必须使数据保持高电平。主机然后产生一个停止条件终止传输或者产生重复起始条件开始新的传输。
如果从机—接收器响应了从机地址但是在传输了一段时间后不能接收更多数据字节,主机必须再一次终止传输。这个情况用从机在第一个字节后没有产生响应来表示。从机使数据线保持高电平,主机产生一个停止或重复起始条件。
如果传输中有主机接收器,它必须通过在从机产生时钟的最后一个字节不产生一个响应,向从机—发送器通知数据结束。从机—发送器必须释放数据线,允许主机产生一个停止或重复起始条件。所有的主机在SCL线上产生它们自己的时钟来传输I2C总线上的报文。数据只有在时钟的高电平周期有效。因此,需要一个确定的时钟进行逐位仲裁。
同步时钟通过线与连接I2C接口到SCL线来执行。这就是说:SCL线的高到低切换会使器件开始数它们的低电平周期,而且一旦器件的时钟变低电平,它会使SCL线保持这种状态直到到达时钟的高电平。但是,如果另一个时钟仍处于低电平周期。这个时钟的低到高切换不会改变SCL线的状态。因此,SCL线被有最长低电平周期的器件保持低电平。因此,低电平周期短的器件会进入高电平的等待状态。
当所有有关的器件数完了它们的低电平周期后,时钟线被释放并变成高电平。之后,器件时钟和SCL线的状态没有差别。而且所有器件会开始数它们的高电平周期。首先完成高电平周期的器件会再次将SCL线拉低。这样,产生的同步SCL时钟的低电平周期由低电平周期长的器件决定,而高电平周期由高电平周期

