毕业论文公交车射频卡刷卡机的设计与实现_第1页
毕业论文公交车射频卡刷卡机的设计与实现_第2页
毕业论文公交车射频卡刷卡机的设计与实现_第3页
毕业论文公交车射频卡刷卡机的设计与实现_第4页
毕业论文公交车射频卡刷卡机的设计与实现_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目 录摘要1Abstract1第1章 绪论21.1 研究背景21.2 设计的意义和目的21.3系统设计总体要求31.4系统设计的方案选择31.4.1 IC卡的选择3用户信息的存储3程序编写4第2章 软件的总体设计42.1系统软件设计思想42.2系统软件逻辑组成42.3系统流程图5第三章 软件各个模块的设计53.1 主程序53.2 rc522.c程序63.2.1 SPI相关操作:6读RC632寄存器 ReadRaw(add)83.2.3 写RC632寄存器 Write(add,data)9清除RC632寄存器 ClearBitMask(reg,mask)93.2.5 设置RC632寄存器 Set

2、BitMask(reg,mask)9通讯PcdComMF522()9寻卡PcdRuquest(reg,*pTagType)9放冲撞PcdAnticoll(*psnr)93.2.9 Mc522复位 PcdReset()10开启天线PcdAntennaOn()10关闭天线PcdAntennaOff()103.2.12 端口的初始化init_port_rc522()103.3LCD.c113.3.1 LCD12864写数据(write_com(cmd)113.3.2 LCD12864写数据(write_data(dat))113.3.3 LCD12864定位显示数据write_lcd(line,ro

3、w,* str, len)113.3.4 LCD12863定位显示数据以l6进制形式显示主要用于显示卡号write_lcd_hex( line,row,*Buf,Len )123.3.5 清屏LCD12864(clr_screen())123.3.6 LCD12864初始化(init_lcd)123.4 bell.c(蜂鸣器)12初始化蜂鸣器(init_bell()133.4.2 蜂鸣器响(bell_poll()133.5 usart.c (串口通信)133.5.1 USART数据寄存器UDR143.5.2 USART控制和状态寄存器-UCSRA153.5.3 USART控制和状态寄存器-UC

4、SRB153.5.4 USART控制和状态寄存器-UCSRC163.5.5 波特率寄存器UBRRL和UBRRH17初始化串口(init_usart()17发送数据(send_data(data)17接受数据receive_data173.6连接数据库以及PC的串口程序183.6.1 连接数据库183.6.2 PC串口程序193.7 Mifare 1 非接触式卡说明213.7.1 Mifare 1非接触式卡包含两个部分:RF射频接口电路和数字电路。213.7.2 Mifare 1卡的存储结构22第四章 软件测试234.1数据库单元测试234.1.1 插入元素测试23更新数据测试244.2串口发送

5、卡号单元测试254.3集成测试25结论27致谢28参考文献29摘 要随着城市规模的扩大,交通已经成为城市发展的一个重要因素。公交车射频卡可以提供更为方便、快捷的服务。面向开放式公交系统的乘客下车站台刷卡系统及数据传输技术的改善,充分运用了交通,电路即传输等专业的知识。本文对公交射频刷卡器的系统设计进行了研究。采用美国ATMEL公司的ATmega16单片机位控制核心,应用PHILIPS公司的MIFARE射频技术实现设计。本设计主要是系统软件设计。这部分描述了所应用的各部分的程序原理和代码,运用模块化结构,使程序设计的逻辑关系更加简洁明了;采用软件AVR studio4 软件进行编程,sscom串

6、口调试助手以及AVR fighter 程序烧录软件进行烧录。AbstractAlong with the extension of the city scale, the transportation has already become an important factor of the city development.The bus radio frequency card can provide more convenience and faster servance.Passengers to get off the site credit card system for open

7、 bus system development is the improvement of existing public transport circuit and transmission technology .This text carry on a research to the system design of the bus radio frequency card machine,It adopted single chip microcomputer of the ATmega16 of the American ATMEL company as the control co

8、re and applied the MIFARE radio frequency technique of the PHILIPS company to realize the design,This design of the system include two parts:the hardware design and the software design.The hardware design part described the hardware circuits and the principle of each part,mainly include:display circ

9、uits, The watchdog circuit,the 93C46 serial EEPROM,the buffer circuit and read card machine.Also,it gave the system hardware of the integral design principle diagram.A adopting assemble language to edit the software,using blocking structure and giving the flow chart of each block make the logical Re

10、lation of the program design more simply and directly to understand.It adopted AVR studio4 to debug the program.Moreover,this text also gave detailed program list.第1章 绪论1.1 研究背景随着我国经济的快速发展,各个大中小型城市的发展日新月异,人民生活水平逐渐提高,我国的汽车保有量也在持续的快速的增长,许多国家公共交通部门开始应用先进的信息与通信技术进行公交车定位、车辆监控、自动驾驶、计算机辅助调度及提供各种公共交通信息以提高公共

11、服务水平。其中如美国,日本,加拿大,英国,法国,韩国等国家都投入了较大的人力和物力从事智能公交系统的研究,在国际处于领先地位,并已取得显著的成果。美国城市公共交通管理局(UMTA)已经启动了智能公交系统项目“Advanced Public Transportation Systems(APTS)”,经过现场实验,UMTA关于APTS的评价是:”APTS可以显著提高公交交通服务水平,吸引更多乘客采用公交和合伙乘车的出行模式,从而带来了减少交通拥挤,空气污染和能源消耗等一系列社会效益”。根据1998年美国运输部的联邦公交交通信息的实时信息发布理论,以及使用先进的电子,通讯技术提高公交效率和服务水平

12、的实施技术。具体包括车队管理,出行者信息,电子收费和交通需求管理等几个方面的研究。其中车队管理主要研究通信系统,地理信息系统,自动车辆定位系统,自动乘客计数,公交运营软件和交通信号优先。日本城市公交交通智能化的发展经历了三个阶段:二十世纪70年代末开始应用公交汽车定位系统公交汽车接近显示系统;80年代初开始应用公交交通运行管理系统,其中包括乘客自动统计,运行监视和运行控制;进入90年代,由于机动车数量的增长和严重交通拥挤的影响,要保持正常的行车速度是十分困难的,由此引起的公交交通的不便性和不可靠性导致乘客数量的急剧减少。东京都交通局开发了城市公共交通运输控制系统(CTCS),旨在改进公共汽车服

13、务,重新赢得乘客。在CTCS中,公共交通运营管理系统的一个基本的框架,其目的是通过掌握运行情况以及乘客数据实现精确平稳的公共交通运营服务。它将运营中的公共汽车和控制室之间建立信息交换,并利用诱导和双向通讯的方法,将服务信息提供给服务人员和驾驶人员,同时这些信息也通过进站汽车指示系统和公交与铁路接驳信息系统提供给乘客。公共交通综合管理系统包括运营数据,乘客计数,监视和控制公共汽车运营和乘客服务等功能,其中乘客服务功能中包括进站汽车指示,信息查询和公共交通与铁路接驳信息提示。公共交通综合管理系统的硬件包括公交主控中心,区域中心以及路边,车库和车载设备等。1.2 设计的意义和目的 设计意义:公交卡的

14、广泛推广,将使公交管理迈上一个新台阶。公交射频卡不仅避免了因找零引起的尴尬;此外,射频卡的小巧、轻便、美观,便于乘客携带;同时,使用公交射频卡,可减少现金流通量,也减少了疾病传播的途径;减少了乘客上车付费的时间,缩短了公交车到站停靠的时间,一定程度上缓解了城市的交通压力。 设计的目的:通过此次的系统设计,了解射频卡以及GPS模块的使用原理;掌握单片机原理和接口设计;掌握实用电子信息系统设计与实现的方法。1.3系统设计总体要求总体要求: (一)打开刷卡机,连接上数据库,当读卡器寻到卡时,读卡器会通过串口给PC机发送卡号,然后PC通过接受的卡号,查询数据库,把对应的卡号金额减1,然后通过数据库把计

15、算后的金额发送给单片机,在LCD12864上显示对应的卡号和卡内剩余金额。 (二)卡内金额的充值,打开串口,数据库,读卡器寻到卡时,会将卡号发送给PC机,PC根据数据库中的数据匹配卡号,然后输入充值金额,完成充值。 (三)卡的注册,打开串口,数据库,读卡器寻到卡时,会将卡号发送给PC机,输入身份证号码,PC将卡号和身份证号码插入数据库。(四)卡的挂失,打开串口,数据库,读卡器寻到卡时,会将卡号发送给PC机,删除数据库中相应的卡号和卡的信息。1.4系统设计的方案选择 IC卡的选择方案一:采用接触式IC卡实现设计方案二:采用非接触式IC卡实现设计分析:接触式的IC卡通过机械触电从读卡器获取能量和交

16、换数据;非接触式IC卡通过线圈射频感应从读卡器获取能量和交换数据,所以又称射频卡。与接触式IC卡相比非接触式卡更有优势:可靠性高,非接触式IC卡与读卡器之间无机械接触,避免了由于接触读写而产生的各种故障;由于非接触通讯,读卡器在10cm范围内就可以对卡片操作,所以不必插拔卡,非常方便用户使用;加密性好,非接触式IC卡有IC芯片,感应天线组成,并完全密封在一个标准PVC卡片中,无外漏部分。显然,射频卡在实际应用中更有优势。因此,在设计过程中,选择第二中方案。用户信息的存储方案一:存储在公交卡内方案二:存储在数据库中分析:公交刷卡机是应用于公交车上的,各车上的用户数据难以保持同步,除非无线通信,考

17、虑当用户的公交卡丢失时,采用方案一卡中的信息可能造成泄漏,并且挂失的时候由于没有存储用户信息而造成很多困难,可靠性安全性能低。而方案二实现了对公交卡的统一管理,操作方便,可靠性高,易于管理维护。所以选择方案二。程序编写方案一:用汇编编程实现编码程序方案二:用C语言实现程序的编写分析:单片机可以采用汇编语言和C语言进行编程。汇编语言是机器语言,指令的执行速度快,节省存储空间。在本次设计中,C语言比较好理解,易于编程人员和其他人员看懂,基于C语言的通俗易懂符合人的正常逻辑,所以选择用C语言来编写程序。第2章 软件的总体设计2.1系统软件设计思想系统软件按各电路分模块编写,形成各具独立功能的子程序。

18、主程序则对这些子程序进行调用,以实现功能。当读卡器调用PcdRequest()函数来寻进入天线内的卡片,寻到卡后,调用PcdAnticoll()函数来防冲撞,防完冲撞后,会把卡的序列号(卡的唯一标识)放入数组CardRevBuf中,四个字节。然后调用函数send_data()函数通过串口把卡的序列号发送给PC,PC的串口接收程序是用JAVA来实现,通过调用函数readPort()来接收卡的序列号实现对数据库的相关操作(增,删,改,查)。通过调用writePort()函数来把更新后的卡中的金额写回卡中,并且通过调用lcd_show_val()函数来把卡的卡号,金额显示在LCD12864上,随之蜂

19、鸣器响来表示操作成功。2.2系统软件逻辑组成主要分为RFID程序;RC522程序; LCD程序; USART程序; BELL程序。 分析: RFID程序为主程序,系统执行的入口,通过调用其它模块的函数实现功能。RC522程序为读卡器程序,来寻到进入天线内的卡,获得卡号。LCD程序为液晶显示程序,来显示主界面和卡的相关信息。USART程序为串口通信程序,来实现单片机与PC中数据库的交互。BELL程序为蜂鸣器程序,来实现提示相关操作成功。2.3系统流程图图1 主程序流程图第三章 软件各个模块的设计3.1 主程序分析:包含对读卡器,LCD12864, 串口的初始化函数。显示界面,以及调用寻卡,防冲撞

20、函数,发送卡的序列号,接受返回的金额数据,蜂鸣器的响来知识操作成功。3.2 rc522.c程序分析:读卡器是通过SPI总线来与单片机通信 读SPI数据,写SPI数据,读RC632寄存器,写RC532寄存器,清除RC532寄存器,设置RC532寄存器,计算CRC16,通过RC522和ISO14443卡通讯,寻卡,防冲撞,选定卡片,复位RC522,设置RC522的工作方式,开启天线,关闭天线,初始化RC522端口,初始化RC522模块。3.2.1 SPI相关操作: SPI(Serial Peripheral Interface-串行外设接口)总线系统是一种同步串行外设接口,它可以使MCU与各种外围

21、设备以串行方式进行通信以交换信息。SPI有三个寄存器分别为:控制寄存器SPCR,状态寄存器SPSR,数据寄存器SPDR。 SPI包含4条线 MOSI输出数据,MISO输入数据,SCK时钟,SS使能 主要特征: (一)全双工,3线同步数据传输 (二)可选择的主/从操作模式 (三)数据传送时,可选择LSB(低位在前)方式或MSB(高位在前)方式 (四)7种可编程的位传送速率 (五)数据传送结束中断标志 (六)写冲突标志位保护 (七)从闲置模式下被唤醒 (八)倍速(CK/2)SPI传送(主机模式下)(1)数据寄存器SPDR图2 SPDR SPI数据寄存器为可读/写的寄存器,用于在通用寄存器组与SPI

22、移位寄存器之间传送数据。写数据到该寄存器时,将启动或准备数据传送;读该寄存器时,读到的是移位寄存器配备的接受缓冲区中的值(2)控制寄存器SPCR图 3 SPCR 位7-SPIE:SPI中断允许。当全局中断触发允许标志位I位1,且SPIE为1时,如果SPCR寄存器的中断标志SPIF位为1,则系统响应SPI中断。 位6-SPE:SPI允许。当该位写入1时,允许SPI接口。在进行SPI的任何操作时,必须将该位置位。 位5-DORD:数据溢出顺序。当DORD=1时,数据传送为LSB方式,即低位在先;当DORD=0时,数据传送为MSB方式,即高位在先。 位4-MSTR:主/从机选择方式。如果SS端口设置

23、为输入,且在MSTR为1时被外部拉低,则MSTR将清除,同时SPSR中的SPIF位置为1,此时SPI由主机模式转换为从机模式。此后用户需要重新设置位MSTR,才能再次将SPI设置为主机方式。位3-CPOL:SCK时钟极性选择。当该位被设置为1时,SCK在闲置时是高电平;为0时,SCK在闲置时是低电平。 CPOL起始沿结束沿0上升沿下降沿1下降沿上升沿位2-CPHA:SCK时钟相位选择。CPHA位的设置决定了串行数据的锁存采样是在SCK时钟的前沿还是后沿。CPOL和CPHA决定了SPI的工作模式。CPHA起始沿结束沿0采样设置1设置采样位1:0-SPR1和SPR0:SPI时钟速率选择。这两个标志

24、位与寄存器SPSR中的SPI2X位一起,用于设置主机模式下产生的串行时钟SCK速率。SPR1和SPR0对于从机模式无影响。SPI2XSPR1SPR0SCK频率000fosc/4001fosc/16010fosc/64011fosc/128100fosc/2101fosc/8110fosc/32111fosc/64(3)SPI的状态寄存器SPSR图4 SPSR 位7-SPIF:SPI中断标志。当串行传送完成时,SPIF位置1.如果SPSR中的SPIF位为1,且全局中断允许位I位1,则产生中断。如果SS设置位输入,且在SPI为主机模式时被外部拉低,则也会置位SPIF标志。SPIF标志位的属性为只读

25、。清0 SPIF有以下两种方式: -硬件方式。MCU响应SPI中断,转入SPI中断向量的同时,SPIF位由硬件自动清除。 -软件方式。先读取SPI状态寄存器SPSR,然后再进行一次对SPI数据寄存器SPDR的操作。 位6-WCOL:写冲突标志。如果在SPI接口的数据传送过程中向SPI的数据寄存器SPDR写入数据,则会置位WCOL。清0 WCOL标志只能通过以下软件方式:先读取SPI状态寄存器SPCR,然后再实行一次对SPI数据寄存器SPDR的操作。 位5:1-保留位: 位0-SPI2X:倍速SPI选择。在主机SPI模式下,当该位写为逻辑“1”时,SPI的速度将加倍,这就意味着产生最小的SCK周

26、期为MCU时钟周期的2倍。当SPI设置为从机模式时,SCK必须低于fosc/4,才能确保有效数据传送。(4)SPI读时序 SPIReadByte()图6 SPI读时序 可以看出先使能SS,然后把时钟线SCK拉低,在输入线上MISO读0或1一个bit,然后把SCK拉高,即可,一次读一个字节。(5)SPI写时序 SPIWriteByte(data)图7 SPI写时序 写的时候先使能SS,然后把时钟线SCK拉低,在输出线上MOSI写0或1一个bit,然后把SCK拉高,即可,一次写一个字节。读RC632寄存器 ReadRaw(add) 即从寄存器中相应的地址读取数据,地址格式:1-6位是地址位,7位为

27、1是读,8位是0。然后调用SPIWriteByte(address)把地址写到总线上。然后调用SPIReadByte()函数读取相应寄存器里面的数据。 写RC632寄存器 Write(add,data) 即把数据写到相应的寄存器中,地址格式:1-6位是地址位,7位为0是写,8位是0,然后调用SPIWriteByte(address)先写入寄存器地址。 然后再调用SPIWriteByte(data)函数把数据写入寄存器。3.2.4清除RC632寄存器 ClearBitMask(reg,mask) 先调用ReadRaw(reg) = tmp读取相应寄存器中的数据,然后调用WriteRaw(reg,

28、tmp & mask)函数把相应寄存器中的值设定为与完后的值。3.2.5 设置RC632寄存器 SetBitMask(reg,mask)先调用ReadRaw(reg) = tmp读取相应寄存器中的数据,然后调用WriteRaw(reg,tmp | mask)函数把相应寄存器中的值设定为或完后的值。3.2.6通讯PcdComMF522() 先判断命令com是PCD_AUTHENT(验证秘钥)还是PCD_TRANSCEIVE(发送并接受数据),然后经过相应的写RC632寄存器(往寄存器comienreg中断请求传递的使能和禁能控制位),清除RC632相应的位,写RC632寄存器(往寄存器c

29、ommandreg启动和停止命令的执行)PCD_IDLE(取消当前命令),初始化工作。然后把数据写入数据寄存器FIFODataReg,把BitFramingReg第一位值位1(启动数据发送)。调整时钟频率,获取完输出的数据后,把ControlReg寄存器的最高位置1,关闭时钟。3.2.7寻卡PcdRuquest(reg,*pTagType) 先清除Status2Reg(包含接收器,发送器和数据模式检测)的最高位(内部温度开启),写RC632寄存器(BitFramingReg),把TxControlReg的最后两位置位(TX1和TX2管脚的输出信号将传递发送数据调制的13.56HZ的能量载波信号

30、),初始化工作。调用PcdComMF522函数,最后把卡的类型(2字节)复制给pTagType指针所指的地址中。3.2.8放冲撞PcdAnticoll(*psnr) 先清除Status2Reg(包含接收器,发送器和数据模式检测)的最高位(内部温度开启),写RC632寄存器(BitFramingReg),把TxControlReg的最后两位清0,清除寄存器CollReg寄存器的最高位(所有接受的位在在冲突后将被清除)。调用PcdcomMF522函数,最后后的卡的序列号(卡的唯一标识)4字节写入指针psnr指针所指的内存地址。3.2.9 Mc522复位 PcdReset() 先使能复位线PC5,写

31、寄存器CommandReg(启动和停止命令寄存器)的值为PCD_RESETPHASE(0x0f复位)。写寄存器ModeReg(定义接受和发送常模式),写寄存器TReloadReg(描述16位长的定时器重装值),写寄存器TModeReg(定义内部定时器设置),写TPrescalerReg寄存器(访问权限),开启天线。3.2.10开启天线PcdAntennaOn()读寄存器TxControlReg(控制天线驱动Tx1和Tx2管脚的逻辑操作);如果TxControlReg的Tx1和Tx2管脚为开启,则设置位(最后两位)。3.2.11关闭天线PcdAntennaOff() 即清除寄存器TxContro

32、lReg的最后两位。3.2.12 端口的初始化init_port_rc522() MOSI对应PC2, MISO 对应PC3, SCK对应PC1,SS对应PC0复位对应 PC5原理图:图8 RFID原理图3.3LCD.c 分析LCD12864主要是把卡的相关信息显示出来,用户可以找到自己的卡号和卡内剩余金额。 lCD显示用到PA0到PA7用于接收要显示的数据。PC5控制使能,PC6控制读写,PC7控制操作数据寄存器还是状态(命令)寄存器。原理图:图9 LCD原理图3.3.1 LCD12864写数据(write_com(cmd) 分析:先设置PC6为0即写,在设置PC7为0即写的是命令寄存器,在

33、设置PC5为1即使能,然后把数据写给PORTA,完成。3.3.2 LCD12864写数据(write_data(dat)) 分析:先设置PC6为0即写,在设置PC7为1即写的是数据寄存器,在设置PC5为1即使能,然后把数据写给PORTA,完成。3.3.3 LCD12864定位显示数据write_lcd(line,row,* str, len) 分析:LCD12864有4行(0行开始),有8列(0列开始)。先写命令write_com(cmd)即告诉LCD12864要在第几行几列显示。再写数据write_data(*str)LCD12864在指定位值显示相应数据。3.3.4 LCD12863定位显

34、示数据以l6进制形式显示主要用于显示卡号write_lcd_hex( line,row,*Buf,Len ) 分析:就是把接受到的字节转化成对应的字符 对应关系 :字节0123456789101112131415字符0123456789ABCDEF3.3.5 清屏LCD12864(clr_screen()) 分析:当LCD12864要显示不同的内容的时候,先清屏,再显示。 调用写命令write_con(0x01)(0x01即清屏命令)3.3.6 LCD12864初始化(init_lcd)写命令 write_com(0x30);选择8bit数据流 ;写命令 write_com(0x0c);开显示

35、(无游标、不反白) ;写命令 write_com(0x01);清除显示,并且设定地址指针为00H; 写命令 write_com(0x06); 指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位 。3.4 bell.c(蜂鸣器) 分析:蜂鸣器响意味着操作成功。PB1输出控制着蜂鸣器。 原理图:图 10 蜂鸣器原理图3.4.1初始化蜂鸣器(init_bell() 分析:即把PB1设为输出。3.4.2 蜂鸣器响(bell_poll() 分析:PORTB =_BV(PB1);PB1 1 0 1 0循环 蜂鸣器响。_delay_ms(100); 3.5 usart.c (串口通信) 分析:RX

36、发送口PD0,TX接受口PD1.用于向电脑发送数据(即卡的序列号)。 原理图:图 11 串口原理图AVR的异步传输接口USART功能(1) 全双工通信(相互独立的接受数据寄存器和发送数据寄存器)(2) 支持同步或异步传输操作。(3) 同步传输操作时,可采用主机时钟同步,也可采用从机时钟同步。(4) 独立的高精度波特率发生器,不占用定时/计数器(5) 扩展的,支持5-9为数据位和1位或2位停止位的串行数据帧结构。(6) 有硬件支持的奇偶校验位和数据校验。(7) 硬件实现的数据溢出检测。(8) 硬件实现的帧错误检测。(9) 包括错误起始位检测的噪声滤波器和数字低通滤波器。(10) 配备3个完全独立

37、的中断源:TX发送完成,TX发送数据寄存器和RX接收完成(11) 支持多机通信模式(12) 支持倍速异步通信模式3.5.1 USART数据寄存器UDR UDR寄存器有2个物理上分离的寄存器RXB,TXB构成,他们使用相同的I/O地址。写UDR的操作,是将发送的数据写入到寄存器TXB中;读UDR的操作,读取的是接受寄存器RXB的内容。当设定使用5,6的数据帧时,高位未用到的位在发送时被忽略,在接受时有硬件自动清0. 只有在USART寄存器中的UDRE位置1时(数据寄存器位空),UDR才能被写入;否则写入的数据将被USART忽略。在发送使能的情况下,写入UDR的数据将进入发送器的移位寄存器,由引脚

38、TXD串行移出。3.5.2 USART控制和状态寄存器-UCSRA图 12 UCSRA 位7-RXC:USART接受完成。当收到的字符从接受移位寄存器传到UDR中(RXB)且未被读取时,该位置1.不论是否有接受错误,该位都设置。当设置禁止接受时,UDR中的数据就会刷新,同时清0 RXC标志。RXC的置位会产生完成的中断请求。RXC在读UDR时自动清0. 位6-TXC:USART发送完成。当发送移位寄存器的全部数据移出后,且在数据寄存器UDR中(TXB)没有待发送的数据时,该位置1.TXC由硬件自动清0.TXC位也可以通过向该位写一个逻辑“1”而清“0”。 位5-UDRE:USART数据寄存器空

39、,当写入UDR(TXB)的字符被传送到发送移位寄存器中时,该位置1,表示UDR可以写入新的发送数据。UDRE的置1会产生发送数据寄存器空的中断请求。系统复位时,UDRE置1,表示USART数据寄存器为空,数据发送已准备好。 位4-FE:接受帧出错。如果在接受缓冲器中刚收到的数据帧被检测到帧出错,则该位置1.FE在收到数据帧的停止位“1”时被清除,此外,重写寄存器USART的操作总是设置FE标志位为“1”。 位3-DOR:接受数据溢出出错。如果接受数据溢出条件被检测到,则该位置“1”。当接受缓冲器满,同时接受器又检测到一个新的起始位时,则接收数据溢出出错发生。该位将一直保持为1,直到接受缓冲UD

40、R被读取。重写寄存器USART的操作总是设置DOR标志位为0. 位2-PE:检验错误。在接受允许和校验位比较允许都使能时,接受器检测到刚接受的数据校验出错,那么该位置1.该位将一直保持1,直到该接受缓冲UDR被读取。重写寄存器USART的操作总是设置PE标志位为0. 位1-U2X:USART传输速率倍速。该位只有在异步模式下有效,当使用同步模式时,应设置该位为0.如果设置该位为1,则将使波特率分频器的分频比由16降到8,其效果是异步通信的传输速率加倍。 位0-MPCM:多机通信模式允许。该位使能多机通信模式。当MPCM位写为“1”时,所有接收到的数据帧,如果不包括地址信息的话,将被USART接

41、受器忽略。USART的发送模块不收MPCM设置的影响。3.5.3 USART控制和状态寄存器-UCSRB图13 UCSRB 位7-RXCIE:RX接收完成中断允许。当该位置1时,表示允许响应接受额按成中断请求。如果全局中断标志位I为1且RXCIE位为1,那么当标志位RXC置1时,一个接受完成中断服务被执行。 位6-TXCIE:TX发送完成中断允许。当该位置1时,表示允许响应发送完成中断请求。如果全局中断标志位I为1,且TXCIE位 为1,那么当标志位TXC置1时,一个发送完成中断服务被执行。 位5-UDRIE:USART数据寄存器空中断允许。当该位置1时,表示允许响应发送数据寄存器UDR空中断

42、请求。如果全局中断标志位I位1且UDRIE为1,那么当标志位UDRE置1时,一个发送数据寄存器空中断服务被执行。 位4-RXEN:数据接受允许。当该位置1时,允许USART接受数据。当接受器使能时,对应引脚的特性由通用数字I/O口转变为RXD。禁止数据接受,将清除接受缓冲器中的数据,并使FE,DOR,PE标志位无效(为0)。当接受数据被禁止后,USART发送器将不再占用RXD引脚。 位3-TXEN:发送数据允许。当该位置1时,允许USART发送数据。当发送器使能时,对应引脚的特性由通用数字I/O口转变为TXD.如果在发送数据时禁止发送器,则在移位寄存器中的数据和后续UDR中的数据被全部发送完成

43、后,发送器才会禁止。当发送器禁止后,USART发送器将不再占用TXD引脚。 位2-UCSZ2:数据字位数大小。该位与UCSRC寄存器中的UCSZ1:0位一起使用,用于设置接收和发送数据帧中数据字位的个数。 位1-RXB8:接收数据的第8位。当采用接收的数据帧格式为9位数据帧时,RXB8中接收到数据的第9数据位。RXB8标志位必须在读UDR之前读取。位0-TXB8:发送数据的第8位。当采用发送数据帧格式9位数据帧时,TXB8中发送数据的第9位数据位。TXB8标志位必须在URD写入前写入。3.5.4 USART控制和状态寄存器-UCSRC图 14 UCSRC 位7-URSEL:寄存器选择。该位用于

44、对UCSRC/UBRRH寄存器进行选择。写UCSRC寄存器时,该位必须写入1,读取UCSRC时,该位总是1. 位6-UMSEL:USART工作模式选择。该位用于选择USART为同步或异步工作模式。 位5:4-UPM1:0 校验方式。这2位用于允许和选择产生或验证校验位的类型。如果使能校验模式,发送器将根据发送的数据,自动产生符合要求的校验位,并附加在每一个数据帧后发送。接收器将对接受的数据帧进行校验,产生校验位,并与UPM0的设置进行比较。如果不匹配,则USART寄存器中的PE标志位将置1。 位3-USBS:停止位选择。该位用于选择插入到发送帧中停止位的个数。 位2:1-UCSZ1:0:传送或

45、接受字符长度。这2位同UCSRB寄存器中的UCSZ2位一起使用。 位0-UCPOL:时钟极性选择。该位只在同步模式下使用。在异步模式下,应将该位写为0.UCPOL位设定了串行输出数据变化和数据输入采样和同步时钟XCK之间的关系。3.5.5 波特率寄存器UBRRL和UBRRH图16 UBRRH 位15-URSEL:寄存器选择。该位用于对UBRRH/UCSRC寄存器的选择。写UBRRH寄存器时,该位必须写入0,读取UBRRH时,该位总是0. 位14:12-保留位。 位11:0-UBRR11:0:USART波特率设置寄存器。由寄存器UBRRH低4位和寄存器UBRRL的8位构成一个12位的寄存器,用于

46、对USART传送或接受波特率的设置。如果波特率设置被改变,则正在进行接受和发送将被打断。写UBRRL将立即更新对波特率预分频的设置。3.5.6初始化串口(init_usart()分析:UCSRA = 0x00;单倍速模式UCSRB = _BV(RXCIE) | _BV(TXCIE) | _BV(RXEN) | _BV(TXEN) UCSRC = _BV(URSEL) | _BV(UCSZ1) | _BV(UCSZ0);UBRRH = 0因为晶振7372800Hz的9600波特率。 (unsigned int)(unsigned long)F_CPU/(16*(unsigned long)bau

47、d)-1)UBRRL = 47;3.5.7发送数据(send_data(data)分析:while(!(UCSRA & _BV(UDRE); 当UDRE位置位时,表示可以写入新的数据UDR = data;3.5.8接受数据receive_data分析:while(!(UCSRA & _BV(RXC); 当RXC位置位时,表示接受到新的数return UDR;3.6连接数据库以及PC的串口程序3.6.1 连接数据库连接数据库程序用JAVA实现。用oracle数据库首先建表bus 其中包含3个字段 ID(卡号),customerID(持卡人 的身份证号),money(卡内金额)。首

48、先得有java.sql.*包(一)java.sql.DriverManager用来转载驱动程序,并为创建新的数据连接提供支持。 Class.forName("oracle.jdbc.driver.OracleDriver");建立桥接器。 (二)java.sql.Connection完成对某一指定数据库的连接。 getConnection("jdbc:oracle:thin:localhost:1521:orcl","bus","bus");数据库的名字orcl 用户bus 用户密码bus。 JDBC一般采用基于S

49、tatement对象的查询方法。首先使用Statement类声明一个SQL语句对象,然后通过该连接对象调用createStatement()方法创建SQL语句对象pstm = con.prepareStatement("select * from bus_manage where id=?");有了SQL对象后,这个对象就调用相应的方法实现对数据库的查询操作。具体的,在Statement对象上,可以使用execQuery()方法执行查询语句。execQuery()方法的参数是一个String对象,即一个SQL的数据处理语句,并将查询结果放在ResultSet类声明的对象中,

50、然后进行相应的处理。 rs = pstm.executeQuery(); 在SQL中查询操作是通过select语句来完成的,基本的select语句格式 Select<列名>from<表名> 对数据库进行更新操作: (1)插入记录(insert)Insert into 表名字段名1,字段名2.values(值1 ,值2,.) 注意:插入的值必须和列一一对应。插入值的数据类型必须和对应列的数 据类型相一致。 (2)更新记录(update)Update<表名> set 字段 1 = 值1.where<条件> (3)删除记录(delete)Delete

51、from <表名>wnere 条件在使用delete语句时要特别小心,因为SQL中的Delete没有相应的Undo命令可以将删除的数据恢复,因此,为避免错误,最好是在删除前用带相同条件的Select语句查询一遍,确认无误后在执行delete语句。 (四)消费 当做公交车刷卡消费时,应当时接受到的卡的序列号的卡内金额减1 具体操作先使用上述方法连接到数据库,然后打开串口程序,当接受到卡的序列号时 SQL语句"select * from bus_manage where id=?" 先查询到相应的卡 rs = pstm.executeQuery();/返回结果集 i

52、nt tmp =rs.getInt(2)-1;把金额减1后放入tmp中, "update bus_manage set money=? where id=?"更新语句更新卡的金额。 (五)充值 当要充值时,应当时接受到的卡的序列号的卡内金额加上充值的金额 具体操作先使用上述方法连接到数据库,然后打开串口程序,当接受到卡的序列号时 SQL语句"select * from bus_manage where id=?" 先查询到相应的卡 rs = pstm.executeQuery();/返回结果集 int balance = rs.getInt(2); in

53、t sum = balance+money; "update bus_manage set money=? where id=?"更新语句更新卡的金额。 (六)新卡注册 执行"insert into bus_manage values(?,?,?)"插入语句setString(1, id);设定从串口接受到的IDsetInt(2, 0);设定卡内金额为0setString(3, text); 设定用户ID(身份证号)executeUpdate();更新数据库。 (七)卡的挂失 “select * from bus_manage where id=?&qu

54、ot;先查询接受的卡的ID. 然后执行"delete from bus_manage where id=?"删除语句,在数据库中删除卡的序列号即卡的相关信息。3.6.2 PC串口程序 Java通信串口包 串口API概览   这是用于描述一个被底层系统支持的端口的抽象类。它包含一些高层的IO控制方法,这些方法对于所有不同的通讯端口来说是通用的。SerialPort 和ParallelPort都是它的子类,前者用于控制串行端口而后者用于控这并口,二者对于各自底层的物理端口都有不同的控制方法。这里我们只关心SerialPort。  

55、; 这个类主要用于对串口进行管理和设置,是对串口进行访问控制的核心类。主要包括以下方法  (一)确定是否有可用的通信端口  (二)为IO操作打开通信端口  (三)决定端口的所有权  (四)处理端口所有权的争用  (五)管理端口所有权变化引发的事件(Event)   这个类用于描述一个RS-232串行通信端口的底层接口,它定义了串口通信所需的最小功能集。通过它,用户可以直接对串口进行读、写及设置工作。  (1)串口初始化(initComm() 打开硬件资源,并获取串口: CommPortIdentifier.getPortIdentifier(commName); 设置软件资源,设置进程名称和超时时间 CommPor

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论