基于单片机的无线病房呼叫器的研制【毕业论文】.doc

上传人:文初 文档编号:4752 上传时间:2018-03-30 格式:DOC 页数:45 大小:778.07KB
下载 相关 举报
基于单片机的无线病房呼叫器的研制【毕业论文】.doc_第1页
第1页 / 共45页
基于单片机的无线病房呼叫器的研制【毕业论文】.doc_第2页
第2页 / 共45页
基于单片机的无线病房呼叫器的研制【毕业论文】.doc_第3页
第3页 / 共45页
基于单片机的无线病房呼叫器的研制【毕业论文】.doc_第4页
第4页 / 共45页
基于单片机的无线病房呼叫器的研制【毕业论文】.doc_第5页
第5页 / 共45页
点击查看更多>>
资源描述

1、(20_届)本科毕业设计信息与计算科学基于单片机的无线病房呼叫器的研制目录第一章绪论111选题意义112本设计的总体思想1第二章硬件系统设计221分机电路设计2211分机号码设定电路2212分机指示电路3213分机AT89C2051与NRF24L01的连接电路322主机电路设计4221主机显示电路4222主机报警电路5223主机按键电路5224主机AT89S52与NRF24L01的连接电路623NRF24L01的无线收发模块介绍6231NRF24L01芯片外部端口介绍6232NRF24L01的工作模式介绍8233通讯方式10234SPI协议11第三章程序设计1431分机主程序设计1432主机主

2、程序设计1533发送接收部分程序设计16331发送部分程序设计16332接收部分程序设计16第四章调试与分析1741调试步骤1742调试过程中出现的问题及解决方案17第五章总结19参考文献20致谢错误未定义书签。附录A基于单片机的无线病房呼叫器的研制元器件清单21附录B基于单片机的无线病房呼叫器的研制分机原理图23附录基于单片机的无线病房呼叫器的研制主机原理图24附录D基于单片机的无线病房呼叫器的研制分机PCB图25附录E基于单片机的无线病房呼叫器的研制主机PCB图26附录F基于单片机的无线病房呼叫器的研制分机程序27附录G基于单片机的无线病房呼叫器的研制主机程序351第一章绪论11选题意义在

3、如今的大小医院中,我们看到的病房呼叫器,大部分是镶嵌在墙上的一个按键,他们基本上都是采用有线的方式与主机相连。这种方式在短距离的传输上有一定的优势,线路较短,布线相对不为复杂。但是在一个医院,每个病房都需要数个按键,每个按键对应一条电线,整个医院来说,单纯买线的成本就相当大,在布线时,还要考虑美观因素,一般选择暗埋的方式布线,但是这种方法容易受到医院坏境的限制而且对日后更换电线也造成一定的麻烦,所以在组建时要充分考虑到日后的问题1。相对与有线传输的布线复杂,改线难问题,本设计的采用的是无线的传输方式。该方式无需考虑布线问题,仅仅需要给每个病房提供一个分机,每个病人按照自己的需要按对应的病房号就

4、可以,操作简单,老少兼能用。此外,分机仅需要一节3V的电源就能供电,使用方便且安全指数高。另外有人可能想到无线传输没有保障的问题,不知道自己发送的数据,是否在总台接收到了,本设计在分机特别设置了两个指示灯,一个用来表示发送完成,一个用来表示主机接收成功,如果主机接收到分机发送的信号,分机的接收指示灯就会被点亮,若分机没有收到主机发来的信号,指示灯不会被点亮,用户可以重新发送数据。总的来说该无线病房呼叫器操作简单,安全可靠,经济实惠,稍加改动还可以变成无线抢答器、遥控器等,适用范围广。12本设计的总体思路本设计分为主机和分机,分机负责编辑床位号,主机负责接收显示并且报警,并进行记录翻查和删除,总

5、体设计思想如框图11和12所示。编辑床位号发射控制芯片图11分机基本设计思路控制芯片接收报警记录翻查删除图12主机基本设计思路2第二章硬件系统设计系统分为呼叫主机和接收分机两种,分机用来呼叫,通过单片机进行编码,然后通过射频模块NRF24L01进行发射。当分机接收到主机的回复信号时,分机接收并通过射频模块把信号传输给单片机,单片机解码后,接收指示灯点亮。在一般情况下,主机和分机都处于待机状态,收到发送指令后,接收数据到单片机,然后单片机指示外围硬件作出相应的反应,当接收到接收数据指令后,也同样接收数据到单片机,然后单片机做出相应的回应。21分机电路设计分机主要用来设定呼叫号码,编码并且发送呼叫

6、信息,点亮发送完成指示灯,以及接收主机的回复信息,并进行解码操作,点亮回复指示灯。分机的设计框图2,如图21所示。211分机号码设定电路本设计实物中,设置的号码只有三个按键,分别代表1,2,3,可以按出的病床号分别为10,11,12,13,20,21,22,23,30,31,32,33,其中10,20,30是由于程序内部本身的初始值为0决定的。为了方便设计,本设计只用了三个按键,在实际中可以添加按键,以适应实际需要。分机按键接口电路,如图22所示。VCCP35P34P33P32K1K3K2ENTERGNDR110KR310KR410KR210K图22分机按键接口电路AT89C2051接收发送控

7、制器AT89C2051接收指示灯射频模块发送与接收发送指示灯号码设定键盘输入图21分机的设计框图3按键部分,K1表示数字“1”,K2表示数字“2”,K3表示数字“3”,ENTER为发送按键,若要发送病床号23,则先按K2,再按K3,然后按发送按键ENTER,这样就把我们所需的病床号发送给主机了。程序内部发送的初始值都为0,在不按任何数字键,只按发送的情况下,我们发送的数字为00,按下的第一个数字,代表的是要发送的最高位,所以当只按了一个数字,比如说“1”时,主机接收到的数据是“10”,因为按一个数字键,只改变了最高位。同样的道理,在实际应用中,我们需要完善数字键,需要能发送09,10个数字,这

8、样就能发送所有我们所需要的号码了。为什么要使用拉电阻一般作单键触发使用时,如果IC本身没有内接电阻,为了使单键维持在不被触发的状态或是触发后回到原状态,必须在IC外部另接一电阻。数字电路有三种状态高电平、低电平、和高阻状态,有些应用场合不希望出现高阻状态,可以通过上拉电阻或下拉电阻的方式使处于稳定状态,具体视设计要求而定3一般说的是I/O端口,有的可以设置,有的不可以设置,有的是内置,有的是需要外接,I/O端口的输出类似于一个三极管的C,当C接通过一个电阻和电源连接在一起的时候,该电阻成为上C拉电阻,也就是说,如果该端口正常时为高电平,C通过一个电阻和地连接在一起的时候,该电阻称为下拉电阻,使

9、该端口平时为低电平,作用比如当一个接有上拉电阻的端口设为输如状态时,他的常态就为高电平,用于检测低电平的输入。本设计中10K的上拉电阻可用可不用。用了有节约功耗的作用。212分机指示电路分机在发送了一个病床号后,分机的发送指示灯会被点亮,这样可以让病人确定自己已经发送了自己的信息,从而不会有不必要的担忧,同样在主机在接收到所发送的数据后,会回复给分机一个信号,表明自己已经接收到了分机所发送的信号,这样进一步的确认,让系统更加完善。分机指示电路4如图23所示。其中P11与P10分别为单片机AT89C2051的IO口。213分机AT89C2051与NRF24L01的连接电路NRF24L01芯片分为

10、四种工作状态收发模式、配置模式、待机模式、掉电模式。这四种工作模式的切换由PWR_UP、PRIM_RX、CE的状态确定。单片机与收发模块的接口电路,如图24所示。P12P13P17R61KVCCP11R51KP10图23分机指示电路图24单片机与收发模块的接口电路ENIRQCSNMOSIR101KR111KR121KP16P14P15VCCCESCKMISOVDDR71KR81KR91KGND收发芯片NRF24L01GNDGND4NRF24L01芯片的各个管脚与单片机接口的连接51VCC脚接电压范围为19V36V之间,不能在这个区间之外,超过36V将会烧毁模块。推荐电压33V左右。2除电源VC

11、C和接地端,其余脚都可以直接和普通的5V单片机IO口直接相连,无需电平转换。当然对3V左右的单片机更加适用了。3硬件上面没有SPI的单片机也可以控制本模块,用普通单片机IO口模拟SPI不需要单片机真正的串口介入,只需要普通的单片机IO口就可以了,当然用串口也可以了。49脚接地脚,需要和母板的逻辑地连接起来;2脚和9脚悬空。22主机电路设计主机主要用来接收分机所发送的病床号信息,主机控制芯片AT89S52不断检验是否有信号接收到。一旦接收到信息,主机就会对信息进行解码,然后将解码出来的数据分别存放在十位和个位所在的寄存器,然后在数码管中显示这个病床号。同时分机在接收到信号后会自发报警,提示护士有

12、病人呼叫,与此同时,主机会发送一个确认信号给分机,确认主机已经成功接收到分机所发出的信号。同时主机还具有上翻下翻,查找之前收到的病床号的作用,防止多个分机同时发送数据导致显示速度时间过短,而忽略病床号的问题。本机的存储量为30,到超出30条信息时,前面的信息被覆盖,所以需要人即使查看消息,并且删除消息。主机设计框图,如图25所示。221主机显示电路本设计中使用单片机AT89S52的P26和P27分别控制数码管的个位和十位,当相应的端口变成低电平时,相应的三极管导通,5V的电源通过驱动三极管给数码管的对应的位供电,此时只要给数码管相应段选端口赋予低电平,就能点亮数码管的相应段。因为要显示几位不同

13、的数字,所以数码管必须用动态扫描的方式来实现7。本系统采用LED共阳接法,采用动态显示,首先将要显示的数据分别放在数组A30和数组B30里,然后逐个取出进行显示。为了防止闪烁,每位LED显示12MS。为了防止重影,当一位显示完毕后立刻将其关闭,然后进行下一位的显示。LED显示电路,如图26所示。接收射频模块发送与接收主控制器AT89S52报警显示电路上翻下翻删除发送图25主机设计框图5123456ABCD654321DCBATITLENUMBERREVISIONSIZEBDATE22MAY2011SHEETOFFILEE毕业毕业设计基于单片机的无线医院呼叫器电路图基于单片机的无线医院呼叫器DD

14、BDRAWNBYQ2PNPR191KR181KR171KR161KR151KR141KR131K5VR147KP27ABFCGDEDPY45710832ABCDEFG9DPDP1DIG1ABFCGDEDP6DIG2DS二位数码管Q1PNPP26R247KR2210KR2410KR2610KR2810KR2710KR2310KR2510K5VP07P06P03P05P04P02P01图26LED显示电路222主机报警电路当主机接收到分机的呼叫信号后,主机单片机触发报警端口,报警端口置1,产生报警信号,通知办公室值班人员,报警电路用单片机AT89S52的P35口输出1KHZ的音频信号经放大后驱动扬

15、声器,发出报警信号,报警发声电路如图27所示。123456ABCD654321DCBATITLENUMBERREVISIONSIZEBDATE22MAY2011SHEETOFFILEE毕业毕业设计基于单片机的无线医院呼叫器电路图基于单片机的无线医院呼叫器DDBDRAWNBYLSSPEAKERC4001UFC50047UFVS6OUT5GAIN1GAIN8IN3IN2BYPASS7GND4LS1LM386R21105VP35RW110KC7220UFC6220UF123456ABCD654321DCBATITLENUMBERREVISIONSIZEBDATE22MAY2011SHEETOFFIL

16、EE毕业毕业设计基于单片机的无线医院呼叫器电路图基于单片机的无线医院呼叫器DDBDRAWNBYK1UPK2DOWNR510K5VK4CLOK3DELR410KR610KR310KP22P23P21P20图27报警发声电路图28按键电路223主机按键电路本设计具有四个按键,通过上拉电阻与单片机AT89S52的IO口相连,作用分别为上翻、下翻、6删除及编辑,主要用于对呼叫记录的翻查,及删除,以防止忽略了某些呼叫的号码。其中K1为上翻按键,按下K1后,即可对存储的已呼叫过的号码进行上翻操作。K2为下翻按键,按下K2即可对存储号码进行下翻操作。K3为删除按键,按下K3,即可对已经存储的号码进行删除操作

17、,不过要在编辑状态下才可进行删除操作。K4为编辑按键,按下K4后,数码管会闪烁,表示已经进入编辑状态,此时可以完成删除操作。第二次按下K4按键后,退出编辑状态,数码管正常显示。按键电路如图28所示。224主机AT89S52与NRF24L01的连接电路主机单片机AT89S52与射频模块的连接与分机相类似,只要射频模块的几个端口与单片机的普通IO口串联1K的电阻后相连即可,在这里不作重复说明。23NRF24L01的无线收发模块介绍NRF24L01是一款工作在2425GHZ世界通用ISM频段的单片无线收发器芯片。无线收发器包括频率发生器、增强型SCHOCKBURSTTM模式控制器、功率放大器、晶体振

18、荡器、调制器、解调器。输出功率、频道选择和协议的设置可以通过SPI接口进行设置。极低的电流消耗当工作在发射模式下发射功率为6DBM时电流消耗为9MA,接收模式时为123MA5。掉电模式和待机模式下电流消耗更低。快速参考数据见表1。表21NRF24L01快速参考数据参考数值单位最低供电电压19V最大发射功率0DBM最大数据传输率2000KBPS发射模式下,电流消耗(0DBM)113MA接收模式下,电流消耗(2000KBPS)123MA温度范围4080数据传输率为1000KBPS下的灵敏度85DBM掉电模式下电流消耗900NA231NRF24L01芯片外部端口介绍NRF24L01及外部接口见图29

19、所示。7图29NRF24L01及外部接口引脚及其功能见表22。表22NRF24L01引脚及其功能引脚名称引脚功能描述1CE数字输入RX或TX模式选择2CSN数字输入SPI片选信号3SCK数字输入SPI时钟4MOSI数字输入从SPI数据输入脚5MISO数字输出从SPI数据输出脚6IRQ数字输出可屏蔽中断脚7VDD电源电源(3V)8VSS电源接地(0V)9XC2模拟输出晶体震荡器2脚10XC1模拟输入晶体震荡器1脚/外部时钟输入脚11VDD_PA电源输出给RF的功率放大器提供18V电源12ANT1天线天线接口113ANT2天线天线接口214VSS电源接地(0V)15VDD电源电源(3V)16IRE

20、F模拟输入参考电流17VSS电源接地(0V)18VDD电源电源(3V)19DVDD电源输入去耦电路电源正极端20VSS电源接地(0V)8232NRF24L01的工作模式介绍NRF24L01的工作模式见表23。表23NRF24L01的工作模式模式PWR_UPPRIM_RXCEFIFO寄存器状态接收模式111发送模式101数据在TXFIFO寄存器中发送模式1010停留在发送模式,直至数据发送完待机模式101TXFIFO为空待机模式10无数据传输掉电模式0NRF24L01在不同模式下的引脚功能如表24。表24NRF24L01不同模式下的引脚功能引脚名称方向发送模式接收模式待机模式掉电模式CE输入高电

21、平10US高电平低电平CSN输入SPI片选使能,低电平使能SCK输入SPI时钟MOSI输入SPI串行输入MISO三态输入SPI串行输出IRQ输出中断,低电平使能NRF24L01各种功能模式介绍一、待机模式待机模式I在保证快速启动的同时减少系统平均消耗电流。在待机模式I下,晶振正常工作。在待机模式II下部分时钟缓冲器处在工作模式。当发送端TX_FIFO寄存器为空并且CE为高电平时进入待机模式II。在待机模式期间,寄存器配置字内容保持不变。二、掉电模式在掉电模式下,NRF24L01各功能关闭,保持电流消耗最小。进入掉电模式后,NRF24L01停止工作,但寄存器内容保持不变。掉电模式由寄存器中PWR

22、_UP位来控制。NRF24L01有如下几种数据包处理方式一、SHOCKBURSTTM;二、增强型SHOCKBURSTTM模式。一、SHOCKBURSTTM模式SHOCKBURST模式下NRF24L01可以与成本较低的低速MCU相连。高速信号处理是由芯片内部的射频协议处理的,NRF24L01提供SPI接口,数据率取决于单片机本身接口速度。SHOCKBURST模式通过允许与单片机低速通信而无线部分高速通信,减小了通信的平均消耗电流。在SHOCKBURSTTM接收模式下,当接收到有效的地址和数据时IRQ通知MCU,随后MCU可将接收到的数据从RXFIFO寄存器中读出。在SHOCKBURSTTM发送模

23、式下,NRF24L01自动生成前导码及CRC校验。数据发送完毕后IRQ通知MCU。减少了MCU的查询时间,也就意味着减少了MCU的工作量同时减少了软件的开发时间。NRF24L01内部有三个不同的RX_FIFO寄存器(6个通道共享此寄存器)和三个不同的TX_FIFO寄9存器。在掉电模式下、待机模式下和数据传输的过程中MCU可以随时访问FIFO寄存器。这就允许SPI接口可以以低速进行数据传送,并且可以应用于MCU硬件上没有SPI接口的情况下。二、增强型的SHOCKBURSTTM模式增强型SHOCKBURSTTM模式可以使得双向链接协议执行起来更为容易、有效。典型的双向链接为发送方要求终端设备在接收

24、到数据后有应答信号,以便于发送方检测有无数据丢失。一旦数据丢失,则通过重新发送功能将丢失的数据恢复。增强型的SHOCKBURSTTM模式可以同时控制应答及重发功能而无需增加MCU工作量。NRF24L01在接收模式下可以接收6路不同通道的数据。每一个数据通道使用不同的地址,但是共用相同的频道。也就是说6个不同的NRF24L01设置为发送模式后可以与同一个设置为接收模式的NRF24L01进行通讯,而设置为接收模式的NRF24L01可以对这6个发射端进行识别。数据通道0是唯一的一个可以配置为40位自身地址的数据通道。15数据通道都为8位自身地址和32位公用地址。所有的数据通道都可以设置为增强型SHO

25、CKBURST模式。NRF24L01在确认收到数据后记录地址,并以此地址为目标地址发送应答信号。在发送端,数据通道0被用做接收应答信号,因此,数据通道0的接收地址要与发送端地址相等以确保接收到正确的应答信号。NRF24L01配置为增强型的SHOCKBURSTTM发送模式下时,只要MCU有数据要发送,NRF24L01就会启动SHOCKBURSTTM模式来发送数据。在发送完数据后NRF24L01转到接收模式并等待终端的应答信号。如果没有收到应答信号,NRF24L01将重发相同的数据包,直到收到应答信号或重发次数超过SETUP_RETR_ARC寄存器中设置的值为止,如果重发次数超过了设定值,则产生M

26、AX_RT中断。只要收到确认信号,NRF24L01就认为最后一包数据已经发送成功(接收方已经收到数据),把TX_FIFO中的数据清除掉并产生TX_DS中断(IRQ引脚置高)。在增强型SHOCKBURSTTM模式下,NRF24L01有如下的特征()当工作在应答模式时,快速的空中传输及启动时间,极大的降低了电流消耗。()低成本。NRF24L01集成了所有高速链路层操作,比如重发丢失数据包和产生应答信号。无需单片机硬件上一定有SPI口与其相连。SPI接口可以利用单片机通用I/O口进行模拟。()由于空中传输时间很短,极大的降低了无线传输中的碰撞现象。()由于链路层完全集成在芯片上,非常便于软硬件的开发

27、。增强型SHOCKBURSTTM发送模式()配置寄存器位PRIM_RX为低。()当MCU有数据要发送时,接收节点地址(TX_ADDR)和有效数据TX_PLD通过SPI接口写入NRF24L01。发送数据的长度以字节计数从MCU写入TX_FIFO。当CSN为低时数据被不断的写入。发送端发送完数据后,将通道0设置为接收模式来接收应答信号,其接收地址RX_ADDR_P0与接收端地址。TX_ADDR相同。例数据通道5的发送端TX5及接收端RX地址设置如下TX5TX_ADDR0XB3B4B5B60510TX5RX_ADDR_P00XB3B4B5B605RXRX_ADDR_P50XB3B4B5B605()设

28、置CE为高,启动发射。CE高电平持续时间最小为10US。()NRF24L01SHOCKBURSTTM模式无线系统上电启动内部16MHZ时钟无线发送数据打包高速发送数据(由MCU设定为1MBPS或2MBPS)()如果启动了自动应答模式(自动重发计数器不等于0,ENAA_P01),无线芯片立即进入接收模式。如果在有效应答时间范围内收到应答信号,则认为数据成功发送到了接收端,此时状态寄存器的TX_DS位置高并把数据从TXFIFO中清除掉。如果在设定时间范围内没有接收到应答信号,则重新发送数据。如果自动重发计数器(ARC_CNT)溢出(超过了编程设定的值),则状态寄存器的MAX_RT位置高。不清除TX

29、FIFO中的数据。当MAX_RT或TX_DS为高电平时IRQ引脚产生中断。IRQ中断通过写状态寄存器来复位。如果重发次数在达到设定的最大重发次数时还没有收到应答信号的话,在MAX_RX中断清除之前不会重发数据包。数据包丢失计数器(PLOS_CNT在每次产生MAX_RT中断后加一。也就是说重发计数器ARC_CNT计算重发数据包次数,PLOS_CNT计算在达到最大允许重发次数时仍没有发送成功的数据包个数。()如果CE置低,则系统进入待机模式I。如果不设置CE为低,则系统会发送TXFIFO寄存器中下一包数据。如果TXFIFO寄存器为空并且CE为高则系统进入待机模式II。()如果系统在待机模式II,当

30、CE置低后系统立即进入待机模式I。增强型SHOCKBURSTTM接收模式()SHOCKBURST接收模式是通过设置寄存器中PRIM_RX位为高来选择的。准备接收数据的通道必须被使能(EN_RXADDR寄存器),所有工作在增强型SHOCKBURSTTM模式下的数据通道的自动应答功能是由(EN_AA寄存器)来使能的,有效数据宽度是由RX_PW_PX寄存器来设置的。地址的建立过程见增强型SHOCKBURSTTM发送章节。()接收模式由设置CE为高来启动。()130US后NRF24L01开始检测空中信息。()接收到有效的数据包后(地址匹配、CRC检验正确),数据存储在RX_FIFO中,同时RX_DR位

31、置高,并产生中断。状态寄存器中RX_P_NO位显示数据是由哪个通道接收到的。()如果使能自动确认信号,则发送确认信号。()MCU设置CE脚为低,进入待机模式I低功耗模式)。()MCU将数据以合适的速率通过SPI口将数据读出。()芯片准备好进入发送模式、接收模式或掉电模式。233通讯方式11一、两种数据双方向的通讯方式如果想要数据在双方向上通讯,PRIM_RX寄存器必须紧随芯片工作模式的变化而变化。处理器必须保证PTX和PRX端的同步性。在RX_FIFO和TX_FIFO寄存器中可能同时存有数据。1自动应答(RX)自动应答功能减少了外部MCU的工作量,并且在鼠标/键盘等应用中也可以不要求硬件一定有

32、SPI接口,因此降低成本减少电流消耗。自动重应答功能可以通过SPI口对不同的数据通道分别进行配置。在自动应答模式使能的情况下,收到有效的数据包后,系统将进入发送模式并发送确认信号。发送完确认信号后,系统进入正常工作模式(工作模式由PRIM_RX位和CE引脚决定)。2自动重发功能(ART)TX自动重发功能是针对自动应答系统的发送方。SETUP_RETR寄存器设置启动重发数据的时间长度。在每次发送结束后系统都会进入接收模式并在设定的时间范围内等待应答信号。接收到应答信号后,系统转入正常发送模式。如果TX_FIFO中没有待发送的数据且CE脚电平为低,则系统将进入待机模式I。如果没有收到确认信号,则系

33、统返回到发送模式并重发数据直到收到确认信号或重发次数超过设定值(达到最大的重发次数)。有新的数据发送或PRIM_RX寄存器配置改变时丢包计数器复位。二、数据包识别和CRC校验应用于增强型SHOCKBURSTTM模式下每一包数据都包括两位的PID(数据包识别)来识别接收的数据是新数据包还是重发的数据包。PID识别可以防止接收端同一数据包多次送入MCU。在发送方每从MCU取得一包新数据后PID值加一。PID和CRC校验应用在接收方识别接收的数据是重发的数据包还是新数据包。如果在链接中有一些数据丢失了,则PID值与上一包数据的PID值相同。如果一包数据拥有与上一包数据相同的PID值,NRF24L01

34、将对两包数据的CRC值进行比较。如果CRC值也相同的话就认为后面一包是前一包的重发数据包而被舍弃。1接收方接收方对新接收数据包的PID值与上一包进行比较。如果PID值不同,则认为接收的数据包是新数据包。如果PID值与上一包相同,则新接收的数据包有可能与前一包相同。接收方必须确认CRC值是否相等,如果CRC值与前一包数据的CRC值相等,则认为是同一包数据并将其舍弃。2发送方每发送一包新的数据则发送方的PID值加一。234SPI协议SPI接口SPI接口是标准的SPI接口,其最大数据传输率为10MBPS。大多数寄存器是可读的。SPI指令设置SPI接口可能用到的指令在下面有所说明。CSN为低后SPI接

35、口等待执行指令。每一条指令的执行都必须通过一次CSN由高到低的变化。SPI指令格式12R_REGISTER和W_REGISTER寄存器可能操作单字节或多字节寄存器。当访问多字节寄存器时首先要读/写的是最低字节的高位。在所有多字节寄存器被写完之前可以结束写SPI操作,在这种情况下没有写完的高字节保持原有内容不变。例如RX_ADDR_P0寄存器的最低字节可以通过写一个字节给寄存器RX_ADDR_P0来改变。在CSN状态由高变低后可以通过MISO来读取状态寄存器的内容。中断NRF24L01的中断引脚(IRQ)为低电平触发,当状态寄存器中TX_DS、RX_DR或MAX_RT为高时触发中断。当MCU给中

36、断源写1时,中断引脚被禁止。可屏蔽中断可以被IRQ中断屏蔽。通过设置可屏蔽中断位为高,则中断响应被禁止。默认状态下所有的中断源是被禁止的。表25NRF24L01SPI串行口指令设置指令名称指令格式操作R_REGISTER000AAAAA读配置寄存器。AAAAA指出读操作的寄存器地址W_REGISTER001AAAAA写配置寄存器。AAAAA指出写操作的寄存器地址,只有在掉电模式和待机模式下可操作。R_RX_PAYLOAD01100001读RX有效数据132字节。读操作全部从字节0开始。当读RX有效数据完成后,FIFO寄存器中有效数据被清除。应用于接收模式下。W_RX_PAYLOAD101000

37、00写TX有效数据132字节。写操作从字节0开始。应用于发射模式下。FLUSH_TX11100001清除TXFIFO寄存器,应用于发射模式下。FLUSH_RX11100010清除RXFIFO寄存器,应用于接收模式下。在传输应答信号过程中不应执行此指令。也就是说,若传输应答信号过程中执行此指令的话将使得应答信号不能被完整的传输。REUSE_TX_PL11100011重新使用上一包有效数据。当CE为高过程中,数据包被不断的重新发射。在发射数据包过程中必须禁止数据包重利用功能。NOP11111111空操作。可以用来读状态寄存器。SPI时序图210SPI读操作13图211SPI写操作图212SPINO

38、P操作时序图14第三章程序设计本设计的程序分为主机和分机两部分,都包括延时函数、NRF24L01初始化函数、SPI写时序函数、SPI读时序函数、NRF24L01读写寄存器函数、读数据函数、写数据函数、数据接收配置函数、读取数据函数、发送数据函数、主函数等。31分机主程序设计分机的工作是不断检测有无按键按下,并且判断是哪个按键按下。例如当数字键1按下时,判断是不是被第一次按下,是,则把1赋给TXBUF0,不是则把1赋给TXBUF1。同样如果其他数字键被按下,则数组TXBUF被赋予其他的值。当ENTER键被按下时,数组TXBUF中的数据就被发送出去,同时数组中的数据变成0。当数组中的数据为0时,E

39、NTER键被按下,那么发送的数据将会是00。该程序中,当ENTER键被按下,发送完成标志位FS_FINISH被置1,检测到发送发送完成标志位被置1后,判断是否发送完成,发送完成,则发送指示灯LED1赋值0,从而发送指示灯LED1被点亮。同时清空TXBUF数组中的数据,延时12MS后,LED1赋值0,发送完成指示灯关闭,开启接收部分,接收标志位被置1。当接收标志位被置1后,判断是否有数据接收到,如果接收到数据,则接收指示灯LED2被点亮,延时12MS后,接收指示灯熄灭。接收标志位被赋0,一次收发完成。分机程序设计流程图如图31所示。NOYESENTER键按下发送数据发送指示灯亮接收到信号开始检测

40、按键开始初始化程序接收指示灯亮结束图31分机程序设计流程图1532主机主程序设计主机程序同样不断的检测按键是否被按下,与此同时,主机还有判断是否接收到数据。如果有数据接收到,数组索引号加1直到34(如果数组索引号超过34,则把索引循环从0开始),把数据缓冲区RXBUF中的数据分别赋给十位AG_J和个位BG_J,并且报警,响应呼叫,把TXBUF中的数据发给从机。延时一段时间后,报警关闭。如果检测到UP键按下,数组索引号加1,如果DOWN键按下,数组索引号减1。如果按下CLO键,数码管闪烁显示,编辑状态标志位G_EDIT_FLAG被置1,此时如果按DEL键,那么当前索引号所在位的数据将被下一个索引

41、号所在位的数据代替,也就是删除了当前的病床号。再次按下CLO按键后,编辑状态标志位G_EDIT_FLAG被取反,数据显示恢复正常,退出编辑状态。而与此同时,数码管显示的是对应索引号所在的数据,动态显示让AG_J和BG_J同时显示在数码管上,因此就能同时显示个位和十位,让人清晰得看到所呼叫的病床号。主机程序设计流程图如图32所示。开始程序初始化NOYESUP按下显示下一位数据NOYESDOWN按下显示上一位数据NOYESCLO按下编辑状态标志位取反NOYESDEL按下且进入编辑状态删除当前组数据YES报警显示当前数据有数据接收到发送数据NO图32主机程序设计流程图1633发送接收部分程序设计33

42、1发送部分程序设计当单片机接到发送指令后,CE由1变为0,NRF24L01芯片进入到发送模式,打开SPI,程序把接收端地址、写入数据的地址,写入数据的个数装载进去,关闭SPI。再次打开SPI,把前面装载的地址所在的数据装载进来,执行收发完成中断,再置CE为高电平1,使芯片进入发送模式,激发数据的发送,延时10US。此时,数据已经被发送出去。发送部分流程图见图33所示。332接收部分程序设计当单片机接到接收指令后,单片机去读取状态寄存器,判断是否接收到数据,如果接收到数据,CE被置0,打开SPI使能,读取数据,将读取的数据放到接收缓冲区中,关闭SPI使能端。接收部分程序如图34所示。开始图34接

43、收部分程序流程图打开SPI接收到数据读取数据放入到数据缓冲区关闭SPI图33发送部分流程图打开SPI开始装载地址关闭SPI再次打开SPI装载数据发送数据关闭SPI17第四章调试与分析41调试步骤一、将程序烧录到单片机AT89S52和AT89C2051。二、在焊接好的电路板上引出一条5V的红色电源线、一条33V的黄色电源线,和一条黑色的地线。三、在可调电源上调出5V和33V,分别与电源线和地线连接,不插芯片。四、打开电源,用万用表测试个芯片电源与地是否满足要求。五、满足要求后插上芯片,重新打开电源开关进行调试。数码管显示00,再按分机的数字键1,再按2,然后按ENTER,此时分机的的发送完成指示

44、灯会亮,表示分机已经发送数据了,接着接收指示灯会亮,说明分机已经接收到主机传给的信号,主机收到分机信号后报警,并且在数码管上显示12。重复以上的步骤,让数码管显示11、12、13、21、22、23、31、32、33;再按单个数字,并且发送,例如按数字键1,再按ENTER,此时数码管显示10,重复该步骤,让数码管显示10、20、30;此时,存在数组中的数据顺序为11、12、13、21、22、23、31、32、33、10、20、30。此时按主机的UP键,数码管显示00,因为后面没有存数据,显示00为正常。再按主机的DOWN键,数码管显示30,再按,能依次倒叙显示之前按的数据。若是此时按DEL按键,

45、数码管没有反应,因为要在编辑状态下,DEL才有效。按下主机的EDIT键,数码管为闪烁显示,此时表示主机已经在编辑状态下了,此时若按下DEL键,将会删除数组中的数据,即能删除病床号。再次按下EDIT后,退出编辑状态。例如,此时数码管显示21,按下EDIT键,数码管闪烁,再按一次DEL键,数码管显示22,此时按DOWN键,数码管显示13,即21已经被删除了。再次按下DEL键,13被删除,再次按下EDIT后,数码管正常显示,退出编辑状态。42调试过程中出现的问题及解决方案问题一按下分机的ENTER后,发送完成指示灯和接收完成指示灯都不会亮。问题分析1分机没有将数据发送给分机;2LED灯的电流太小不能

46、驱动。解决过程由于分机发送一个数字后,主机显示有变化,所以排除了分机没有发送的问题。用灌电流的方式去驱动LED灯,也就是用外接电源直接与LED灯串联,并用1K的电阻限流,然后输入到单片机串口。问题二分机发送的数据,在数码管上显示乱码。问题分析1数码管的对应码字计算有误;2程序有误(1)发送接收引起的乱码;(2)主机数据转移引起的乱码。解决方案用单纯的数字显示程序去控制数码管的显示,数码管能显示正常,所以排除了第一种对应码字写错的原因。那么就是程序有误了,将分机发送的数据,直接给主机赋值,结果18是主机仍然乱码,结果发现是二维数组内的数据去对应查找数码管码字时出现错误,不能采用这种二维数组直接查

47、找的方式,应该采用指针形式,或者用其他的方式而不用二维数组。最终采用的方式是,采用一维数组,将十位和个位的数据放在两个一维数组里,然后通过查找数码管码字去显示数字。问题三主机个位和十位的显示总是相同,而且显示的数字总是第二次按下的数字。问题分析1三极管的连接方式有误(仿真时发现不能灭掉数码管);2按键抖动引起。解决方案因为复位时,数码管有显示不同数字的时候,所以暂时先考虑抖动问题。将定时器的延时时间加长到最大,等到按键按下后,延时尽量长的时间,结果发现快速按键后,数码管能显示两位不同的数字,从而确定了是因为按键抖动的问题引起的。于是加一个变量,判断是否有数字键按下。问题四设置定时器的时间为最长

48、,并且中间加变量后,出现了新问题,数码管的显示会乱码。而且按键抖动问题似乎也没有解决,上翻下翻过程中,显示的,一直不是分机发送的数据。解决方案由于延时加到了最长时间,仍然不能解决去抖动问题,此时想到了定时器问题,考虑可能是定时器的原因,才使发送数据出现乱码,因此程序去掉了定时器,改用标志位的方式来解决按键问题。去掉定时器后,发送接收问题解决了,上翻下翻删除也都正常了。问题五喇叭的声音很轻。解决方案LM386音频放大器,放大信号为20DB到200DB,要把信号放到足够大,需要在1脚和8脚之间加一个10UF的电容,此时放大倍数为200DB。问题六上电后喇叭有噪声。解决方案在LM386的7脚加一个滤

49、波电容接地。工作稳定后,该管脚电压值约等于电源电压的一半。增大这个电容的容值,减缓直流基准电压的上升、下降速度,有效抑制噪声。在器件上电、掉电时的噪声就是由该偏置电压的瞬间跳变所致。做该设计时,要注意不能用定时器,SPI时序要求非常高,用了定时器后会直接导致接收乱码。尽量用别的办法去代替定时器的功能。19第五章总结刚接触到这个题目时,觉得这个课题很简单,只要了解编码、解码、发射、接收在程序中是怎样实现的就可以了。从网上看别人的程序,感觉发射接收部分的程序网上很多,版本都一样,也就是说我只要去了解这个过程就可以了,但是实际上做起来,却没有那么简单,在做的过程中,出现的一些问题,发现自己的程序是多么得不完美,这让我调试起来很费力。最初完成的电路板的设计,PCB布线都没有难倒我,这是基于课程设计的经验,增加了我的动手能力还有思考问题和解决问题的能力,但是初次的编程,运用到自己的板子上时,发现所需要的功能没有一个是实现的,现在才发现自己的程序问题太多了,于是不停得查找书本,查找分部分得查找程序,首先要解决的是主机和分机的接收问题,用最简单的程序,去确定主机能接收到分机的信号,再次去考虑主机能接收到分机发射具体内容,最后一步步

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文资料库 > 毕业论文

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。