




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
...wd......wd......wd...专业课程设计报告题目:基于单片机的射频无线收发系统姓名:晁州专业:通信工程班级学号:10042309同组人:朱丽洁指导教师:张小林南昌航空大学信息工程学院2013年07月05日基于单片机的无线射频收发系统摘要:随着现代电子技术的飞速开展,通信技术也取得了长足的进步。在无线通信领域,越来越多的通信产品大量涌现出来。但设计无线数据传输产品往往需要相当的无线电专业知识和价格高昂的专业设备,因而影响了用户的使用和新产品的开发。nRF24L01是一个为433MHzISM频段设计的无线收发芯片,它为短距离无线数据传输应用提供了较好的解决方法,使用nRF24L01降低了开发难度,缩短了开发周期,使产品能更快地推向市场。本文提出了一种应用于无线数据收发系统的设计思路及实现方案,给出了基于无线射频芯片nRF24L01和STC89C52单片机的无线数据传输模块的设计方法,详细分析了各局部实现原理,并对系统的传输距离、传输数据的正确性进展了测试。试验说明,该系统性能稳定,具有较强的抗干扰能力,有较强的实用价值。关键词:无线通信无线数据传输模块单片机射频目录前言……………………11系统设计………………………11.1系统设计……………21.2实现过程……………22系统组成…………22.1射频收发控制模块……………32.1.1无线射频收发芯片nRF24L01介绍……………32.1.2稳压局部………………………52.2单片机控制局部……………………62.2.1STC89C52RC功能介绍…………62.2.2内部构造………………………62.2.3串口通信………………………82.3显示局部…………103软件设计………………113.1主程序流程图……………………113.2数据收发子程序流程图…………123.3键盘子程序流程图………………134测试结果及分析………………………134.1硬件电路测试……………………144.2系统测试…………144.2.1测试方法……………………144.2.2功能测试及分析……………145结论………………166参考文献……………17致谢………………………18附录1:无线发射系统电路图…………19附录2:发送程序………………………20前言伴随着短距离、低功率无线数据传输技术的成熟,无线数据传输被越来越多地应用到新的领域。与有线通信方式相比,无线通信以其不需铺设明线,使用便捷等一系列优点,在现代通信领域占重要地位。但以往的无线产品存在范围和方向上的局限。例如,一些无线产品在使用时,无法将信息反响给控制者;还有一些无线产品不能很好地显示参数或状态信息,如果能在系统中增加一块小型液晶显示电路,产品不仅能向用户显示其状态或状态的改变,而且可以大大降低成本。正如人们所发现的,只要建设双向无线通信-双工通信并且选无线数据传输模块基于微功耗单片射频收发器NRF24L01设计,采用89C52单片机完成数据的处理和控制择成本低的收发芯片,就会出现许多新应用。本次设计主要是利用无线收发电路,加上单片机控制与液晶显示制成一套完整的数据收发系统。考虑到目前市场上的一些需求,设计的主要要求是方案成本低,体积小,低功耗,集成度高,尽量无需调外部元件,传输时间短,接口简单。。第一章系统设计1.1系统设计无线数据传输系统有点对点,点对多点和多点对多点三种。本系统由于实际应用的需要,接收器和数据终端之间的数据传输通过NRF24L01进展,构成点对点无线数据传输系统。整个系统中,两数据终端之间的无线通信采用433MHz的频段作为载波频率,收发通过串口通信。无线数据收发系统可以分为无线收发控制电路、单片机控制电路、显示电路和按键电路四局部组成,系统原理框如图1-1所示:液晶显示屏单片机系统无线收发器按键单片机系统无线收发器液晶显示屏单片机系统无线收发器按键单片机系统无线收发器图1-1无线数据收发系统原理图1.2实现过程当我们需要发送数据时,使用按键来输入所需发送的信息。按键与单片机的STC89C52RC的P3.2-P3.5口相接,单片机的P1.0口控制信息的发送与接收,并且TXD端与收发器输入端相连,通过TXD将数据传入收发器,收发器接收到数据后,通过FSK调制,将信号发送出去;接收端的收发器通过解调,将载波信号转换为数字信号,完成信息传输过程;收发器的输出端通过RXD端将数字信号输入到单片机;单片机将数据传送到显示器,这样就完成了一次数据发送与接收并显示的过程。本系统采用的是半双工传送方式。所谓半双工就是通信的双方均具有发送和接收信息的能力,信道也具有双向传输性能,但是,通信的任何一方都不能同时既发送信息又接收信息,即在指定的时刻,只能沿某一个方向传送信息。所以上述实现过程只介绍了由一方传送到另一方的过程,而相反方向与其原理一样。第二章系统组成2.1射频收发控制模块该模块主要由NRF24L01构成,RF24L01是一款工作在2.4~2.5GHz世界通用ISM频段的单片无线收发器芯片。无线收发器包括:频率发生器、增强型SchockBurst模式控制器、功率放大器、晶体振荡器调制器、解调器。输出功率频道选择和协议的设置可以通过SPI接口进展设置。2.1.1无线收发芯片nRF24L01介绍1.主要引脚功能图2-1NRF24L01引脚图表2-1NRF24L01主要引脚说明表接口电路管脚说明管脚名称管脚功能说明1GND接地电源电源地2VCC接电源正电源正。范围在1.9-3.6V。3CE模块输入信号由单片机给出信号控制NRF24L01模块内部射频电路工作与否4CSN模块输入信号模块的片选信号,单片机发出信号来控制允许向模块读或写数据5SCK模块输入信号串行时钟信号。由单片机发出,来控制模块的读或写的运作节拍6MOSI模块输入信号是单片机向NRF24L01发送数据的接口7MISO模块输出信号是NRF24L01模块向单片机送数据的接口8IRQ模块输出信号是NRF24L01产生中断信号发送给单片机的接口2.内部构造图2-2NRF24L01无线收发芯片内部构造图3.NRF24L01无线模块特点:(1)GFSK调制:(2)硬件集成OSI链路层;(3)具有自动应答和自动再发射功能;(4)片内自动生成报头和CRC校验码;(5)数据传输率为lMb/s或2Mb/s;(6)SPI速率为0Mb/s~10Mb/s;(7)125个频道:(8)与其他nRF24系列射频器件相兼容;4.GFSK调制本系统中的NRF24L01是具备GFSK调制的无线收发芯片。GFSK高斯频移键控调制是把输入数据经高斯低通滤波器预调制滤波后,再进展FSK调制的数字调制方式。它在保持恒定幅度的同时,能够通过改变高斯低通滤波器的3dB带宽对已调信号的频谱进展控制,具有恒幅包络、功率谱集中、频谱较窄等无线通信系统所希望的特性。因此,GFSK调制解调技术被广泛地应用在移动通信、航空与航海通信等诸多领域中。2.1.2稳压局部由于NRF24L01的VCC脚接电压范围为3.3V~3.6V之间,不能在这个区间之外,超过3.6V将会烧毁模块,因此选用3.3V电压。该稳压局部电路如以以下图所示:图2-3稳压电路该稳压局部主要由LM317和外围电路构成。LM317作为输出电压可变的集成三端稳压块,是一种使用方便、应用广泛的集成稳压块。稳压电源的输出电压可用下式计算:Vo=1.25〔1+R2/R1〕〔2-1〕因此选择R1为200欧姆,为了便于调试R2使用滑动变阻器。在应用中,为了电路的稳定工作,需要接二极管作为保护电路,防止电路中的电容放电时的高压把LM317烧坏。2.2单片机控制局部控制电路主要组成局部为单片机STC89C52RC,通过STC89C52RC与nRF905进展串行通信,并用其控制NRF24L01的工作模式和SPI输入输出,从而调整收发状态。STC89C52RC还控制液晶屏的显示和按键等系统工作。2.2.1STC89C52RC功能介绍STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。具有以下标准功能:8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KBEEPROM,MAX810复位电路,3个16位定时器/计数器,4个外部中断,一个7向量4级中断构造〔兼容传统51的5向量2级中断构造〕,全双工串行口。另外STC89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停顿工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停顿,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选。2.2.2内部构造STC89C52RC单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时器/计数器、并行I/O口、串行I/O口和中断系统等几大单元以及数据总线、地址总线和控制总线三大总线构成。图2-4STC89C52RC芯片引脚图(1)电源和晶振VCC:供电电压。
GND:接地。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:来自反向振荡器的输出。(2)I/O口①P0口P0口的字节地址为80H,位地址为80H~87H。P0口既可以作为通用I/O口使用,也可以作为单片机系统的地址/数据线使用。当作为输出口使用时,由于输出电路是漏极开路,必须外接上拉电阻才能有高电平输出。②P1口P1口的字节地址为90H,位地址为90H~97H。P1口只能作为通用I/O口使用。当作为输出口使用时,已能对外提供推拉电流负载,外电路无需再接上拉电阻;当作为输入口使用时,应先向其锁存器写入“1〞,使输出驱动电路的FET截止。③P2口P2口的字节地址为0A0H,位地址为0A0H~0A7H。P2口用于为系统提供高位地址,但只作为地址线使用而不作为数据线使用。此外,P2口也可作为通用I/O口使用。④P3口P3口的字节地址为0B0H,位地址为0B0H~0B7H。P3口可以作为通用I/O口使用,但在实际应用中它的第二功能信号更为重要。P3.0RXD〔串行输入口〕P3.1TXD〔串行输出口〕P3.2/INT0〔外部中断0〕P3.3/INT1〔外部中断1〕P3.4T0〔计时器0外部输入〕P3.5T1〔计时器1外部输入〕P3.6/WR〔外部数据存储器写选通〕P3.7/RD〔外部数据存储器读选通〕(3)4根控制线①RST:复位信号。保持RST脚两个机器周期以上的高电平,就可以完成CPU系统复位操作,使系统的一些单元内容回到规定值。②/PSEN:外部程序存储器读选通信号。在读外部ROM时,/PSEN有效〔低电平〕,以实现外部ROM单元的读操作。③/EA/VPP:访问程序存储器控制信号。当/EA信号为低电平时,对ROM的读操作限定在外部程序存储器;而当/EA为高电平时,那么对ROM的读操作是从内部程序存储器开场,并可延续至外部程序存储器。④ALE/PROG:地址锁存控制信号。在系统扩展时,ALE用于控制P0口输出的低8位地址送入锁存器锁存起来,以实现低位地址和数据的分时传送。此外由于ALE是以六分之一晶振频率的固定频率输出的正脉冲,因此也可作为外部时钟或外部定时脉冲使用。2.2.3串口通信通信主要有两种方式:并行通信和串行通信。并行通信是在传送数据过程中每个字节的各位同时进展传送的通信方式,而串行通信[14]是指每个字节的各位分别进展传送的通信方式。1串口通信方式STC89C52串行口可设置四种工作方式,可有8位、10位和11位帧格式。本系统中,STC89C52RC采用串行口工作于方式1,即每帧10位的异步通信格式:1位起始位,8位数据位〔低位在前〕,1位停顿位。当SM0=0,SM1=1时,串行口选择方式1。其帧格式为:停顿停顿起始D6D7D0D1D2D3D4D5图2-5帧格式图2串行通信控制存放器(1)串行控制存放器(SCON)SCON的地址为98H,用于选择串行口的工作方式和指示串行口的工作状态。各位含义如下:①SM0、SM1:串行口工作方式选择位。②SM2:多机通信选择位。③REN:串行口允许接收位。‘1’时允许接收,‘0’时制止接收。④TI:串行口发送中断标志位。在方式1中,于发送停顿位之前,由硬件置位。因此TI=1,表示帧发送完毕。⑤RI:串行口接收中断标志位。在方式1中,当接收到停顿位时,该位由硬件置位。RI=1,表示帧接收完毕。(2)串行数据缓冲器(SBUF)串行数据缓冲器SBUF的地址为99H,用来存放需发送和接收的数据,它由两个独立的存放器组成,一个是发送缓冲器,另一个是接收缓冲器,它们占用同一地址〔99H〕。当执行写SBUF指令时,数据写入到串行口发送缓冲器中,读SBUF就是读串行口接收缓冲器。(3)电源控制存放器(PCON)PCON的地址为87H,该存放器的最高位〔SMOD〕是串行口波特率的倍增位,当SMOD=1时,串行口波特率加倍。系统复位时,SMOD=0。(4)中断允许存放器〔IE〕在IE中,ES位为串行中断允许控制位。ES=0时制止串行中断,ES=1时允许串行中断。3数据发送与接收(1)数据发送在不发送数据时,TXD端保持高电平。当执行写SBUF的指令时,便启动一次发送过程;发送数据时,先发送一个起始位,该位通知接收端开场接收,也使发送和接收过程同步。接下来发送8位数据,先发送低位,最后发送的是高电平的停顿位。(2)数据接收REN=1,CPU允许串行口接收数据,接收数据开场于检测到RXD〔P3.0〕端发生一个“1〞到“0〞的跳变。先接收起始位,然后依次将采样RXD端并将数据移入移位存放器中。假设满足条件RI=0且SM2=0或接收到停顿位,那么将前8位数据送入SBUF并置位RI;如果上述条件不满足,那么数据丧失。(3)波特率的设定串口方式1的波特率是可变的,由定时器T1的溢出率决定:〔2.2〔2.2〕其中,SMOD为PCON存放器最高位的值。溢出率为溢出周期的倒数,假定计数初值为X,那么计数溢出周期为〔2.3〔2.3〕其中,fosc为晶振频率。那么波特率计算公式为:〔2.4〔2.4〕由波特率算出计数初值,以便进展定时器的初始化。初值X确定如下:〔2.5〔2.5〕2.3显示局部该局部由锁存器74HC573与数码管构成,单片机通过两片74HC573分别对共阴极数码进展位选和段选。第三章软件设计无线数据传输主要由无线数据收发器NRF24L01、STC89C52RC单片机、显示器和按键组成,收发器与STC89C52RC间用串行口通信。整个系统的各个局部都是服务于无线数据传输这个目的。所以,在整个系统的软件设计中,无线数据的传输是最为重要的。这里使用C语言编写单片机控制程序。3.1主程序流程图当单片机上电开场执行之后,对液晶和单片机存放器进展初始化,同时设置串口控制字及波特率,接着进入键盘扫描程序和接收程序。假设有某个按键按下,那么执行相应的键盘子程序;假设单片机判断接收到数据,那么开场进展CRC校验,如果数据正确就通过液晶显示传送的信息。主程序流程图见图3-1。开场开场初始化设置串口工作方式NYNN判断是否有按键按下执行相应的程序判断是否接收到数据CRC校验是否正确数据处理送入显示扫描键盘,同时判断是否有数据接收YY图3-1主程序流程图3.2数据收发子程序流程图单片机STC89C52控制nRF2401的收发状态、完成编解码等工作。nRF2401芯片“PWR-UP〞端接高电平,“FREQ〞端接低电平,分别表示系统在上电后始终处于“正常工作模式〞和“工作频道为通道1〞。单片机STC89C52控制nRF2401,使其一直为接收状态。当按键4按下时,STC89C52接收到输入的低电平信号,从脚送出高电平至P1.0脚,使nRF24L01进入发射状态。数据收发子程序流程图见图3-2。入口入口置nRF24L01为接收状态判断按键4是否按下置Nrf24L01为发射状态数据发射YN键盘扫描图3-2数据收发子程序流程图3.3键盘子程序流程图以以下图为键盘子程序流程图,此流程图的含义是:当有按键按下时,程序开场进展判断是哪个按键按下,判断完毕后那么转向相应的键处理子程序,进展字符的输入或命令的处理,并通过按键4把要发送的数据进展CRC校验编码,再把编码后的数据发送出去。有按键按下有按键按下判断是哪个按键按下按键1按键4按键3按键2CRC校验发送数据清零选择要发送的数据将要显示的数据移位图3-4键盘子程序流程图第四章测试结果及分析4.1硬件电路测试本设计中将控制模块和无线射频模式分开设计,控制模块通过一只单排7脚的接口控制射频模块,测试的步骤如下:(1)将控制模块和无线射频模块焊好,检查确认无虚焊、粘焊;(2)先对控制模块上电进展测试,主要是测试控制模块的串口能否收发数据,测试方法是将控制模块的串口与PC机的串口通过RS232标准相连接,并将串口的程序写到STC89C52上,然后用串口测试软件测试,如果串口能收发数据,便可开场对无线射频模块进展测试;(3)将无线收发模块与控制模块连接起来,上电进展测试,按照程序,上电时处于接收状态,看是否与程序吻合;(4)确认射频模块上电处于接收状态后,可测试nRF2401的第4管脚是否为1.1V左右,如果是,那么说明VCO电感设计合理,否那么要重新设计PCB板,此外,nRF401在没有数据接收时,仍会自动从DOUT发送随机数据,使用万用表进展测试时,该引脚电压应为2.5V左右。4.2系统测试4.2.1测试方法(1)首先让电路正常工作,把接收器放在一定的位置,将发射器从远处逐渐靠近接收器,可测到传送的最远距离。(2)在距离接收器一定的距离时,间隔一段时间就发送数据信息,可测出接收器的接收灵敏度。(3)比较发射器和接收器的数据显示是否一样,以测试传输数据的正确性。4.2.2功能测试及分析由于无线通信环境的不确定性,各种环境下的传输效果是不尽一样的,路径损耗、建筑物影响、人体影响、外界干扰、多径现象和周围环境的吸收等都会对传输的距离产生一定的影响,只能在一个给定的条件下进展测试和评估。因此,分别选择了不同的试验场地来进展实验。(1)当建筑物很多的时候,数传模块两端均离地面1.5m〔2.0m〕高时,能够到达的最正确通信距离为5~10m;接收灵敏度为2~3秒;当发送端发送MESSAGE时,接收端能准确显示MESSAGE这段英文字符。(2)在空旷场地,数传模块两端均离地面1.5m高时,最远的通信距离能够到达50m;接收灵敏度为3~5秒;当发送端发送字母A时,接收端能准确显示。但测试中的通信距离与数据手册上的说明相差较大,原因可能源于调谐天线。在实验中发现,当有人员走动或其它信号出现的时候,通信的距离会变得不稳定,这是由于天线是一个辐射器件,任何环境的改变都会影响天线的性能。测试中还发现,在现场即使没有任何发送器,在nRF401的DOUT引脚上也会观察到微小的连续数字“噪声〞。后来通过研究发现,当接收器翻开时,环境中的任何信号〔数据或噪声〕都会被天线捕捉到并被解调。这就是所看到的系统中没有工作的发送器却存在“噪声〞的原因。通过对系统数据传输能力的测试,该系统发送和接收数据正确、可靠,各元件工作正常。在硬件连接正确的根基上,利用nRF2401进展串行数据接收及发送,收到了较好效果。结论此次设计将应用于无线通信领域,并且针对当前市场上无线产品的缺乏进展了改进。本文根据nRF2401的特点,提出了一种将其应用无线数据收发系统的实现方案。此方案采用了较完善的软硬件设计和抗干扰措施,保证了系统工作的安全性和可靠性,是一种较好的设计思路,具有通用性,便于投入实际应用。并且只要稍作改动就可以应用到小区传呼、工业数据采集、自动读表、警报和安全系统、无线键盘、无线操纵杆、家庭自动化、遥测和玩具等其他一些短距离无线通信领域,实现无线数据的双向传输,具有较好的市场应用价值。参考文献[1]黄智伟.无线数字收发电路设计,第2版,电子工业出版社,2004年,253-269.[2]WUXunwei,HANGGuoqiang.LowpowerDCcircuitsemployingACpowersupply,SCIENCEINCHINA(INFORMATIONSCIENCES),2002,Vol.45No.3,232.[3]苗长云,沈保锁,窦晋江等.现代通信原理,第1版,电子工业出版社,2005年,174-177.[4]BehrouzForouzan.IntroductiontoDataCommunicationsandNetworking,FirstEdition,mechanicindustrybookconcern,1999,121-125.[5]KavehPahlavan.NordicnRF401ProductSpecification,Nordiccorporation,2000,36.[6]NigelBrooke.串行数据标准的选择与使用,电子产品世界,2000年,10月,31-32.[7]RichardG.lyons.UnderstandingDigitalSignalProcessing,BradfordUniversity,2001,36-37.[8]Tugal.D.A,Tugal.0.DataTransmission-analysisDesignApplications,Florence,Italy,2004,32.[9]赵景波,刘金辉,荣盘祥等.ProtelDXP根基与实例培训教程,第1版,中国电力出版社,2005年,119-144.[10]臧铁钢,唐才峰,陈学锋等.ProtelDXP电路设计与应用,第1版,中国铁道出版社,2004年,172-179.[11]刘立枫,赵民建.信号接收机,中国无线电电子学文摘,2005年,31期,45-47.[12]周仕凤.用MCS-51做LCD接口实验,电子世界,2002年,第8期,37.[13]李广第,朱月秀,王秀山等.单片机根基,第2版,北京航空航天大学出版社,2001年,40-70.[14]杨振江,杜铁军,李群等.流行单片机实用子程序及应用实例,第1版,西安电子科技大学出版社,2002年,102-115.[15]张俊谟.MCS-51和80C51系列单片机,电子世界,2001年,第8期,30.[16]蔡莹.液晶技术与电子纸,电子产品世界,2003年,11上半月,38-40.[17]康华光,邹寿彬.电子技术根基,第1版,高等教育出版社,2002年,191-197.
[18]黄智伟,王彦,陈文光等.全国大学生电子设计竞赛训练教程,第1版,电子工业出版社,2004年,73-80.致谢为期三周的课程设计已经接近尾声,这次课程设计不仅使我将所学的知识都融合在一起,还给了我一次锻炼动手能力的时机,并且在指导教师的帮助下,使我的专业水平有了很大的提高。在课程设计即将完毕之际,我要感谢我的指导教师张小林教师以及陈光教师。他们不辞辛苦,经常利用自己的休息时间帮助我。当我有不明白的问题时,教师们会耐心地给我讲解,并在学习和科研方面给了我大量的指导,为我提供了良好的科研环境,不仅让我学到了知识,掌握了科研的方法,也获得了实践锻炼的时机。教师们言传身教、循循善诱,使我学到了作为一名大学生应该具备的那种踏实勤恳、一丝不苟、求真务实的优良品质和严谨的教学态度。在本论文的撰写过程中,教师从选题直至成稿一直给予我重要的指导和帮助,为我解开了无数的困惑,提供了很多关键性的建议。在课题的设计中,我对各种编程方法都有了更进一步的了解,拓宽了知识面,开阔了眼界,提高了对知识的综合应用能力,增强了学习知识的兴趣。在内容的研究中,他们在技术上给予了我极大的帮助,并且在论文的最后评阅过程中,也给我提出了非常有价值的意见,使我受益匪浅。在此祝愿教师们身体安康,全家幸福。最后,我要再一次感谢所有在此期间帮助过我的人,我衷心的祝福你们!附录1无线发射系统电路图附录2发送程序#include<reg52.h>#include<intrins.h>typedefunsignedcharuchar;typedefunsignedcharuint;//****************************************NRF24L01端口定义***************************************sbit MISO =P1^3;sbit MOSI =P1^4;sbit SCK =P1^2;sbit CE =P1^1;sbit CSN =P3^2;sbit IRQ =P3^3;//************************************按键***************************************************sbit KEY1=P3^4;sbit KEY2=P3^5;sbit KEY3=P3^6;sbit KEY4=P3^7;sbitdula=P2^6;sbitwela=P2^7;////************************************数码管位选*********************************************//sbit led3=P0^0;//sbit led2=P0^1;//sbit led1=P0^2;//sbit led0=P0^3;//************************************蜂明器***************************************************sbit BELL=P2^3;//***********************************数码管0-9编码*******************************************ucharseg[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0~~9段码//*********************************************NRF24L01*************************************#defineTX_ADR_WIDTH5 //5uintsTXaddresswidth#defineRX_ADR_WIDTH5 //5uintsRXaddresswidth#defineTX_PLOAD_WIDTH20 //20uintsTXpayload#defineRX_PLOAD_WIDTH20 //20uintsTXpayloaduintconstTX_ADDRESS[TX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01}; //本地地址uintconstRX_ADDRESS[RX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01}; //接收地址//***************************************NRF24L01存放器指令*******************************************************#defineREAD_REG0x00 //读存放器指令#defineWRITE_REG0x20 //写存放器指令#defineRD_RX_PLOAD0x61 //读取接收数据指令#defineWR_TX_PLOAD0xA0 //写待发数据指令#defineFLUSH_TX0xE1 //冲洗发送FIFO指令#defineFLUSH_RX0xE2 //冲洗接收FIFO指令#defineREUSE_TX_PL0xE3 //定义重复装载数据指令#defineNOP0xFF //保存//*************************************SPI(nRF24L01)存放器地址****************************************************#defineCONFIG0x00//配置收发状态,CRC校验模式以及收发状态响应方式#defineEN_AA0x01//自动应答功能设置#defineEN_RXADDR0x02//可用信道设置#defineSETUP_AW0x03//收发地址宽度设置#defineSETUP_RETR0x04//自动重发功能设置#defineRF_CH0x05//工作频率设置#defineRF_SETUP0x06//发射速率、功耗功能设置#defineSTATUS0x07//状态存放器#defineOBSERVE_TX0x08//发送监测功能#defineCD0x09//地址检测#defineRX_ADDR_P00x0A//频道0接收数据地址#defineRX_ADDR_P10x0B//频道1接收数据地址#defineRX_ADDR_P20x0C//频道2接收数据地址#defineRX_ADDR_P30x0D//频道3接收数据地址#defineRX_ADDR_P40x0E//频道4接收数据地址#defineRX_ADDR_P50x0F//频道5接收数据地址#defineTX_ADDR0x10//发送地址存放器#defineRX_PW_P00x11//接收频道0接收数据长度#defineRX_PW_P10x12//接收频道0接收数据长度#defineRX_PW_P20x13//接收频道0接收数据长度#defineRX_PW_P30x14//接收频道0接收数据长度#defineRX_PW_P40x15//接收频道0接收数据长度#defineRX_PW_P50x16//接收频道0接收数据长度#defineFIFO_STATUS0x17//FIFO栈入栈出状态存放器设置//**************************************************************************************voidDelay(unsignedints);voidinerDelay_us(unsignedcharn);voidinit_NRF24L01(void);uintSPI_RW(uintuchar);ucharSPI_Read(ucharreg);voidSetRX_Mode(void);uintSPI_RW_Reg(ucharreg,ucharvalue);uintSPI_Read_Buf(ucharreg,uchar*pBuf,ucharuchars);uintSPI_Write_Buf(ucharreg,uchar*pBuf,ucharuchars);unsignedcharnRF24L01_RxPacket(unsignedchar*rx_buf);voidnRF24L01_TxPacket(unsignedchar*tx_buf);voiddisplay(uchardip){ P0=seg[dip]; dula=1; dula=0; P0=0xc0; wela=1; wela=0;}//*****************************************长延时*****************************************voidDelay(unsignedints){ unsignedinti; for(i=0;i<s;i++); for(i=0;i<s;i++);}//******************************************************************************************uint bdatasta;//状态标志sbit RX_DR =sta^6;sbit TX_DS =sta^5;sbit MAX_RT =sta^4;/******************************************************************************************/*延时函数/******************************************************************************************/voidinerDelay_us(unsignedcharn){ for(;n>0;n--) _nop_();}//****************************************************************************************/*NRF24L01初始化//***************************************************************************************/voidinit_NRF24L01(void){inerDelay_us(100); CE=0;//chipenable CSN=1;//Spidisable SCK=0;//Spiclocklineinithigh SPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);//写本地地址 SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH);//写接收端地址 SPI_RW_Reg(WRITE_REG+EN_AA,0x01);//频道0自动 ACK应答允许 SPI_RW_Reg(WRITE_REG+EN_RXADDR,0x01);//允许接收地址只有频道0,如果需要多频道可以参考Page21 SPI_RW_Reg(WRITE_REG+RF_CH,0);//设置信道工作为2.4GHZ,收发必须一致 SPI_RW_Reg(WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//设置接收数据长度,本次设置为32字节 SPI_RW_Reg(WRITE_REG+RF_SETUP,0x07); //设置发射速率为1MHZ,发射功率为最大值0dB}/****************************************************************************************************/*函数:uintSPI_RW(uintuchar)/*功能:NRF24L01的SPI写时序/****************************************************************************************************/uintSPI_RW(uintuchar){ uintbit_ctr; for(bit_ctr=0;bit_ctr<8;bit_ctr++)//output8-bit { MOSI=(uchar&0x80);//output'uchar',MSBtoMOSI uchar=(uchar<<1);//shiftnextbitintoMSB.. SCK=1;//SetSCKhigh.. uchar|=MISO; //capturecurrentMISObit SCK=0; //..thensetSCKlowagain }return(uchar); //returnreaduchar}/****************************************************************************************************/*函数:ucharSPI_Read(ucharreg)/*功能:NRF24L01的SPI时序/****************************************************************************************************/ucharSPI_Read(ucharreg){ ucharreg_val; CSN=0;//CSNlow,initializeSPIcommunication... SPI_RW(reg);//Selectregistertoreadfrom.. reg_val=SPI_RW(0);//..thenreadregistervalue CSN=1;//CSNhigh,terminateSPIcommunication return(reg_val);//returnregistervalue}/****************************************************************************************************//*功能:NRF24L01读写存放器函数/****************************************************************************************************/uintSPI_RW_Reg(ucharreg,ucharvalue){ uintstatus; CSN=0;//CSNlow,initSPItransaction status=SPI_RW(reg);//selectregister SPI_RW(value);//..andwritevaluetoit.. CSN=1;//CSNhighagain return(status);//returnnRF24L01statusuchar}/****************************************************************************************************//*函数:uintSPI_Read_Buf(ucharreg,uchar*pBuf,ucharuchars)/*功能:用于读数据,reg:为存放器地址,pBuf:为待读出数据地址,uchars:读出数据的个数/****************************************************************************************************/uintSPI_Read_Buf(ucharreg,uchar*pBuf,ucharuchars){ uintstatus,uchar_ctr; CSN=0; //SetCSNlow,initSPItranaction status=SPI_RW(reg); //Selectregistertowritetoandreadstatusuchar for(uchar_ctr=0;uchar_ctr<uchars;uchar_ctr++) pBuf[uchar_ctr]=SPI_RW(0);// CSN=1; return(status);//returnnRF24L01statusuchar}/*********************************************************************************************************/*函数:uintSPI_Write_Buf(ucharreg,uchar*pBuf,ucharuchars)/*功能:用于写数据:为存放器地址,pBuf:为待写入数据地址,uchars:写入数据的个数/*********************************************************************************************************/uintSPI_Write_Buf(ucharreg,uchar*pBuf,ucharuchars){ uintstatus,uchar_ctr; CSN=0;//SPI使能 status=SPI_RW(reg); for(uchar_ctr=0;uchar_ctr<uchars;uchar_ctr++)// SPI_RW(*pBuf++); CSN=1;//关闭SPI return(status);//}/****************************************************************************************************//*函数:voidSetRX_Mode(void)/*功能:数据接收配置/****************************************************************************************************/voidSetRX_Mode(void){ CE=0; SPI_RW_Reg(WRITE_REG+CONFIG,0x0f); //IRQ收发完成中断响应,16位CRC ,主接收 CE=1; inerDelay_us(130);}/******************************************************************************************************//*函数:unsignedcharnRF24L01_RxPacket(unsignedchar*rx_buf)/*功能:数据读取后放如rx_buf接收缓冲区中/******************************************************************************************************/unsignedcharnRF24L01_RxPacket(unsignedchar*rx_buf){unsignedcharrevale=0; sta=SPI_Read(STATUS); //读取状态存放其来判断数据接收状况 if(RX_DR) //判断是否接收到数据 { CE=0; //SPI使能 SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);//readreceivepayloadfromRX_FIFObuffer revale=1; //读取数据完成标志 } SPI_RW_Reg(WR
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025BEC指导合同英语特色介绍:掌握合同条款的秘诀
- 2025智能软件产品研发与技术支持合同
- 《质子激发分析》课件
- 2025劳动合同书劳务合同范本
- 8.1《薪火相传的传统美德》 课件 2024-2025学年统编版道德与法治七年级下册
- 课件:人格尊严的法律守护者-教学资源与活动设计
- 《肠道病毒轮状病毒》课件
- 优等期刊论文奖金申请作业指导课件
- 《绿色生活倡导》课件
- 《我是称职小交警》(教案)-2024-2025学年三年级上册劳动人民版
- 固体化学导论全套课件
- 2025山西杏花村旅游开发有限公司招聘50人笔试参考题库附带答案详解
- 正式展会合同协议
- 工程甩项合同协议
- 费用开支标准管理制度
- 期中模拟卷(新疆专用)-2024-2025学年八年级英语下学期核心素养素质调研模拟练习试题(考试版)A4
- 甲状旁腺切除术后的护理措施
- 2024慢性鼻窦炎诊断和治疗指南解读课件
- (T8联考)2025届高三部分重点中学3月联合测评生物试卷(含答案详解)河北版
- 员工入职申请表(完整版)
- T-GDEIIA 56-2024 垂直起降低空航空器起降场基础设施配置技术要求
评论
0/150
提交评论