单片机应用设计-基于单片机的433M无线通信系统

上传人:卷*** 文档编号:124755912 上传时间:2022-07-25 格式:DOCX 页数:52 大小:1.40MB
返回 下载 相关 举报
单片机应用设计-基于单片机的433M无线通信系统_第1页
第1页 / 共52页
单片机应用设计-基于单片机的433M无线通信系统_第2页
第2页 / 共52页
单片机应用设计-基于单片机的433M无线通信系统_第3页
第3页 / 共52页
点击查看更多>>
资源描述
学 号: 课 程 设 计题 目基于单片机的433M无线通信系统学 院专 业班 级 姓 名指引教师 1月 13日单片机应用设计任务书学生姓名: 专业班级: 指引教师: 工作单位: 题 目: 基于单片机的433M无线通信系统课程设计目的:1、熟悉单片机应用系统的硬件设计及软件设计的基本措施;2、 将单片机原理与应用理论课的理论知识应用于实际的应用系统中;3、 训练单片机应用技术,锻炼实际动手能力4、 提高对的地撰写论文的基本能力。课程设计内容和规定1、 完毕硬件电路的设计,其中涉及单片机和CC1101模块的设计;2、 完毕无线通信模块的程序设计与实现,上机运营调试程序,记录实验成果(如图表等),并对实验成果进行分析和总结;3、 课程设计报告书按学校统一规范来撰写,报告重要涉及如下内容:目录、摘要、核心词、基本原理、方案论证、硬件设计、软件设计(带流程图、程序清单)、仿真成果、实物运营成果照片、结论献等;4、 查阅不少于6篇参照文献。初始条件:1、 STC89C52和CC1100H模块;2、 先修课程:单片机原理与应用。时间安排:第19周,安排设计任务,完毕硬件设计;第20周,完毕软件设计、撰写报告,答辩。指引教师签名: 年 月 日系主任(或责任教师)签名: 年 月 日目录摘要Abstract1基本原理1 1.1无线通信系统1 1.2芯片简介11.2.1单片机STC89C521 1.2.2 无线通信CC1101芯片32方案论证与设计5 2.1无线通信模块选择5 2.2 单片机最小系统选择5 2.3整体方案设计63 硬件电路设计64软件程序设计8 4.1发送端编程8 4.2接收端编程9 4.3程序调试与下载105硬件仿真126实物制作与调试12 6.1 STC89C52单片机最小系统12 6.2无线通信模块CC110113 6.3稳压电路模块137心得体会158参考文献16附录17摘要随着通信系统信息容量的不断提高,射频技术在无线通信中占据着举足轻重的位置。无线射频技术运用射频方式进行非接触双向通信,可以自动辨认目的对象并获取有关数据,具有精度高、适应环境能力强、抗干扰强、操作快捷等许多长处。本文重要内容是以单片机应用技术、无线收发技术为理论基本,实现数据的无线收发及状态的显示。 一方面,本文简介了STC89C52单片机以及无线收发芯片CC1101的有关理论知识。另一方面本文对于要解决的实验任务,简介了如何构建思路及方案分析。具体简介了系统的设计方案及各个模块的器件选型和硬件电路设计,MCU部分的软件设计流程图以及无线通信模块CC1101的软件编程要点。完毕了基于单片机的433M无线通信系统的设计实现。433MHz频段的长处在于无需申请频段许可,采用全向天线作为发射和接受天线,在实验室环境内发射无死区。核心字:STC89C52 CC1101 433M无线通信AbstractWith the continuous improvement of information capacity of communication system, radio frequency technology plays an important role in wireless communication. Wireless rf technology using non-contact two-way communication in the form of radio frequency (rf) can automatically identify the target object and obtain the relevant data, has high precision, strong ability to adapt, strong anti-interference, quick operation and many other advantages. The main content of this paper is the application technology of single chip microcomputer and wireless transceiver technology as the theoretical basis to realize the wireless transmission and status display of data.First of all, this paper introduces the relevant theoretical knowledge of STC89C52 single chip microcomputer and wireless transceiver chip CC1101. Secondly, this paper introduces how to construct train of thought and plan analysis. This paper introduces the design scheme of the system and the device selection and hardware circuit design of each module, the software design flow chart of the MCU part and the software programming key points of the wireless communication module CC1101. The design and implementation of the 33m wireless communication system based on SCM is completed. The advantage of the 433MHz frequency band is that there is no need to apply for the band license, and the whole antenna is used as the transmitting and receiving antenna, and there is no dead zone in the laboratory environment.Key words: STC89C52 CC1101 433M wireless communication.1基本原理1.1无线通信系统无线通信就是不用导线、电缆、光纤等有线介质,而是用自由空间来传递电磁信号的通信方式。无线通信重要涉及短波通信微波通信卫星通信和红外线通信。而无线收发顾名思义,就是将两块通信模块以空气为传播介质来实现发送和接受数据。发送时,通过模块中携带数据的变化高频电流,在天线上形成电磁波信号,发送出去。而接受端中,天线将接受到的电磁波信号转换为携带数据的变化高频电流。短距离无线数据传播技术是作为一种无线通信的实用技术广泛应用于工业、农业以及人们平常生活中的,它是在一种单片的射频收发芯片和微控制器以及某些外围的电子器件(如电阻、电容等)构成的无线通信模块硬件电路的基本上,再配合软件上的开发,并按照命令字节的合同进行数据包的操作,便可实现其最基本的无线数据传播功能。简朴的讲,只要有微控器,单片射频收发芯片以及少量的外围和显示设备就可以构成一种无线传播系统,传播系统构造如图1.1所示。外围操作和显示设备外围操作和显示设备单片射频收发芯片微控制器单片射频收发芯片微控制器 图1.1 无线传播系统构造图1.2芯片简介1.2.1单片机STC89C52STC89C52是一种低功耗、高性能的CMOS 8位微控制器,具有 8K 在系统可编程Flash 存储器。在单芯片上,拥有机灵的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。具有如下原则功能: 8k字节Flash ROM,512字节RAM, 32 位I/O 口线,看门狗定期器,内置4KB EEPROM,MAX810复位电路,2个16 位定期器/计数器,一种6向量2级中断构造,全双工串行口。此外 STC89X52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,容许RAM、定期器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一种中断或硬件复位为止。最高运作频率35MHz,6T/12T可选。1.参数阐明:(1)增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意 选择,指令代码完全兼容老式8051;(2)工作电压:5.5V3.3V(5V 单片机)/3.8V2.0V(3V 单片机);(3)工作频率范畴:040MHz,相称于一般8051 的080MHz,实际工作 频率可达48MHz;(4)顾客应用程序空间为8K 字节;(5)片上集成512 字节RAM;(6)通用I/O 口(32个),复位后为:P0/P1/P2/P3 是准双向口/弱上拉, P0 口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为 I/O 口用时,需加上拉电阻;(7)ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RXD/P3.0,TXD/P3.1)直接下载顾客程序,数秒即可完毕一片;(8)具有EEPROM 功能;(9)具有看门狗功能;(10)共3个16位定期器/计数器。即定期器T0、T1、T2;(11)外部中断4 路,下降沿中断或低电平触发电路,Power Down 模式可由外部中断低电平触发中断方式唤醒;(12)通用异步串行口(UART),还可用定期器软件实现多种UART;(13)工作温度范畴:-40+85(工业级)/075(商业级);(14)PDIP 封装;2.引脚阐明(1)电源引脚 VCC:+5V 电源 VSS:接地端(2)外接晶体引脚 XTAL1:外接晶振输入端 XTAL2:外接晶振输入端(3)输入输出引脚 P0.0P0.7:不作为地址/数据线使用时,可作为准双向I/O口使用。但必须外接上拉电阻。 P1.0P1.7:带内上拉电阻的8位准双向通用I/O 口。 P2.0P2.7:带内上拉电阻的8位准双向通用I/O 口。访 问片外存储器时,P2 口用作高8位地址线。 P3.0P3.7:8位准双向I/O接口,每个引脚还具有第二功能(4)控制线 RST是复位端,当RST端浮现持续两个机器周期以上的高电平时,即可实现复位操作。 本实验基于STC89C52的单片机最小系统如图1.2所示 图1.2 单片机最小系统电路构造图1.2.2 无线通信CC1101芯片CC1101是TI(德州仪器)推出的一款低功耗433/868/915M频段的无线传播射频芯片,集2-FSK、GFSK、MSK调制方式于一体,提供扩展硬件支持的信息包解决、数据缓冲、群发信息、空闲信道评估、连接质量批示(RSSI)和无线唤醒,其具有多种优势特性,使得此芯片得到广泛应用。CC1101芯片具有如下基本特性:(1)支持 2-FSK、4-FSK、GFSK、MSK以及 OOK等等灵活的 ASK 波形整形的实现的方式;(2)工作频段:300348 MHz、387464 MHz 和 779928 MHz;(3)高敏捷度(1.2 kBaud、433 MHz、1% 误包率条件下为 112 dBm);(4)低电流消耗(1.2 kBaud、433 MHz 下 RX 中为 15 mA);(5)所有支持频率下高达 +12dBm 的可编程输出功率;(6)0.6500kBaud 的可编程数据速率;(7)高效的 SPI 接口;运用一次“突发”数据传播便可对所有寄存器进行编程,编程很简洁;(8)64字节发送/接受FIFO,从而顾客可以设计出高效编程缓冲,以达到最快传播波特率;(9)迅速的锁定频率合成器以及 90 S的建立时间使其适合于许多跳频系统;(10)提供同步字检测、地址校验、灵活的数据包长度和自动 CRC 解决的片上支持;(11)地址及CRC 检查功能及点对多点通信地址控制;(12)数字 RSSI 输出,这是许多射频芯片无法输出的重要参数;(13)可编程信道滤波器带宽;(14)可编程载波监听 (CS) 批示器;(15)可编程前导质量批示器 (PQI),用于随机噪声伪同步字检测增强保护;(16)支持在信号发送之前自动空闲信道评估 (CCA)(用于载波监听系统)(17)支持每个数据包的链路质量批示 (LQI);(18)可选数据自动白化和去白 (de-whitening);(19)原则2.54 DIP 间距接口,便于嵌入式应用;(20)125 个可选工作频道,满足多点通信和跳频通信需要;(21)1.8V3.6V的宽工作电压;本实验中所用的CC1101芯片模块的电路构造如图1.3所示 图1.3 CC1101芯片模块的电路构造图2方案论证与设计通过仔细地分析与论证,我觉得本次的基于单片机的488M无线通信系统可分为无线通信模块CC1101、单片机STC89C52最小系统、STC-ISP系统编程下载三部分构成。2.1无线通信模块选择方案一:nRF905芯片nRF905单片无线收发器是挪威Nordic公司推出的单片射频发射器芯片,工作电压为1.9-3.6V,32引脚QFN封装(5mm5mm),工作于433/868/915MHz3个ISM频道(可以免费使用)。最大发射功率+10dBm,GFSK调制模式,仅支持50kbps通讯速率,最大数据包长度32-Byte,内置CRC。校验测试nRF905时选用444.0MHz的工作频率,设立发射功率为+10dBm(10mW),启动CRC校验,设立数据包长度为32-Byte。nRF905通讯距离的测试成果与nRF2401A和nRF24L01+相似,距离500米通讯稳定(丢包率局限性1%)。到700米时浮现严重的丢包。同步,nRF905所采用的433MHz胶棒天线具有较强的方向性,在接近极限距离时尤为明显。如想在远距离通讯中获得更好的稳定性,建议换用高增益的定向天线。方案二:CC1101芯片德州仪器(TI)射频芯片CC1101,相较于nRF系列的无线数传芯片,CC1101提供了更加丰富的功能。支持ASK、OOK、GFSK、2-FSK、4-FSK和MSK调制模式,支持通讯速率0.6kbps500kbps,最高发射功率+10dBm。64-Byte的数据缓冲区,支持数据白化、支持前向交错及曼彻斯特编码。它们会增长数据在传播时的可靠性和浮现错误编码时的纠错功能。但启动这两个功能的同步也会使通讯速率增长一倍,这也在一定限度上减少了接受敏捷度(速率越高接受敏捷度越低)。综上所述,考虑到芯片性价比和系统功能实现难易限度,本设计选用方案二中TI的射频芯片CC1101作为无线通信系统的数据传播模块。2.2 单片机最小系统选择方案一: STM32系列基于专为规定高性能、低成本、低功耗的嵌入式应用专门设计的ARMCortex-M3内核。按性能提成两个不同的系列:STM32F103“增强型”系列和STM32F101“基本型”系列。增强型系列时钟频率达到72MHz,是同类产品中性能最高的产品;基本型时钟频率为36MHz,以16位产品的价格得到比16位产品大幅提高的性能,是16位产品顾客的最佳选择。方案二:STC89C52是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash存储器。在单芯片上,拥有机灵的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、有效的解决方案。经比较,考虑到在课程学习的进度和深度方面,方案二STC89C52的使用可以巩固课内知识的同步也提高可课外动手实践能力,可以在基本不增长硬件复杂性的状况下,大大减少了软件的复杂性,且硬件调节较软件调节具有更高的可操作性,故选择方案二。2.3整体方案设计本系统使用无线传播模块CC1101作为数据通信节点,STC89C52单片机作为微控制器核心,将程序下载到2个单片机中,然后按KEY后发送信息,发送信息完毕后,发送方单片机控制LED闪烁,如果接受方接受到发送方数据,且经验证接受数据信息的对的性和无丢包后,控制接受端LED闪烁。并且两个STC89C52均可做为发送端和接受端,一种做为发送,相应另一端即为接受,实现及时双向通信。系统构造框图如图2.1所示图2.1 433M无线通信系统构造框图3 硬件电路设计3.1 STC89C52单片机最小系统对51系列单片机来说,最小系统一般应当涉及:单片机、晶振电路、复位电路。在制作51单片机最小系统时需注意如下几点:(1)复位电路的极性电容C1的大小直接影响单片机的复位时间,一般采用1030uF,51单片机最小系统容值越大需要的复位时间越短;(2)晶振Y1也可以采用6MHz或者11.0592MHz,在正常工作的状况下可以采用更高频率的晶振,51单片机最小系统晶振的振荡频率直接影响单片机的解决速度,频率越大,解决速度越快;(3)起振电容C2、C3一般采用1533pF,并且电容距离晶振越近越好,晶振距离单片机越近越好;(4)P0口为开漏输出,作为输出口时需加上拉电阻,阻值一般为10k;STC89C52单片机最小系统的电路设计图如图3.1所示。图3.1 STC89C52单片机最小系统电路设计图3.2 无线通信模块CC1101 射频模块布线是整个系统PCB板设计中的核心。外围器件最佳选用体积小的贴片元件,滤波电容尽量接近器件引脚布置,这样滤波效果会更好。尽量将数字电路远离射频电路由于数字电路存在陡峭的上升下降沿,因此MCU是射频电路的巨大噪声源,也可以考虑使用金属屏蔽罩,虽然该措施存在诸多缺陷,但仍然非常有效,并且在诸多时候是隔离核心电路的唯一措施。虽然CC1101的使用手册给出了外围器件的具体参数,但实际应用中,诸多时候阻抗匹配仍然需要重新测量计算,也要调节相应器件的参数。例如接地电容,由于板存在分布电容,实际使用的电容要比推荐的略小某些。整个PCB板最佳采用统一接地方式。虽然数字地会干扰射频地和模拟地,但是若分开成3部分,最后总是有些高速信号线要穿过这些分开的接地点。在CC1101无线通信模块的设计过程中要注意如下问题:(1)VCC(5V)脚接电压范畴为 4.5V到5.5V之间,推荐电压5V,不能在这个电压区间之外。(2)VCC(3.3V)脚接电压范畴为 1.8V-3.5V之间,不能在这个区间之外,超过3.6V将会烧毁模块。这里使用LM1117-3.3V芯片转换得到。(3)硬件上面没有SPI的单片机也可以控制本模块,用一般单片机IO口模拟SPI不需要单片机SPI模块介入,只需添加代码模拟SPI时序即可。(4)17脚、18脚为接地脚, 需要和母板的逻辑地连接起来。CC1101模块的电路设计图如图3.2所示。图3.2 CC1101模块的电路设计图4软件程序设计4.1发送端编程STC89C52控制CC1101作为发射端的编程流程重要涉及如下4部分。(1)数据编码:计算待发送数据的字节和数据包的编码;(2)发射模式初始化:上载数据到TX、FIFO,使能TX;(3)激活TX状态:如果所有字节没有完全写到TX 、FIFO,MCU将设立为低功耗模式;(4)TX、FIFO阈值中断:填充TX、FIFO,当数据字节低于256时设立为固定长度模式,所有字节所有写完则完全发送。STC89C52控制CC1101作为发射端的编程流程图如图4.1所示。图4.1 CC1101发送模式流程图4.2接受端编程STC89C52控制CC1101作为接受端的编程流程重要涉及如下5部分。(1)初始化RX:设立无线长度模式并设立FIFO阈值;(2)激活RX状态:如果所有字节没有完全读到RX FIFO,MCU将设立为低功耗模式;(3)RX FIFO阈值中断:从RX FIFO读取长度字段,计算接受数据字节的总长度,数据字节低于255时设立为固定长度模式,计算并设立PKTLEN;(4)RX数据包的接受:读出剩余字节,读完所有字节则完全接受;(5)数据包解码,循环冗余码校验;STC89C52控制CC1101作为接受端的编程流程图如图4.2所示。图4.2 CC1101发送模式流程图4.3程序调试与下载本次单片机课程设计使用C语言进行目的程序的撰写,并运用keil软件来对程序进行调试。在“433M无线通信系统”课题中将整个系统的软件编程放在一种工程中,然后分别对各个功能程序单独编译调试,在单元的调试没有问题之后便对整个工程总体调试运营,在确认完毕了所有的功能后便将相应程序生成.hex文献准备烧入单片机芯片中去。.hex文献的烧入这次我们使用了USB转TTL的接口来实现。keil软件调试界面如图4.3所示。stc-isp的在系统编程与下载界面如图4.4所示。图4.3 keil软件调试界面图4.4 stc-isp的在系统编程与下载界面5硬件仿真STC89C52单片机最小系统仿真电路图如图5.1所示。图5.1 STC89C52单片机最小系统仿真电路图6实物制作与调试6.1 STC89C52单片机最小系统STC89C52单片机最小系统电路设计图如图6.1所示。 图6.1 单片机最小系统电路设计图6.2无线通信模块CC1101无线通信模块CC1101电路设计图如图6.2所示。 图6.2 无线通信模块CC1101电路设计图6.3稳压电路模块3.3V稳压电路设计图如图6.3所示。其是运用LM1117-3.3芯片将输入的5V电压输出为3.3的电压,并且实现了较小纹波的电压稳定输出。 图6.3 3.3V稳压电路设计图6.4 433M无线通信系统整体电路433M无线通信系统整体电路图如图6.4所示。图6.4 433M无线通信系统整体电路图本系统使用无线传播模块CC1101作为数据通信节点,STC89C52单片机作为微控制器核心,将程序下载到2个单片机中,然后按KEY后发送信息,发送信息完毕后,发送方单片机控制LED闪烁,如果接受方接受到发送方数据,且经验证接受数据信息的对的性和无丢包后,控制接受端LED闪烁。并且两个STC89C52均可做为发送端和接受端,一种做为发送,相应另一端即为接受,实现及时双向通信。7心得体会这次的课程设计实践时间虽然短暂,但却使我受益匪浅。在课本上的知识实现到现实中的同步,也学到了诸多课本中学不到的知识。让我感受到理论付诸于实践的重要性,这对知识的理解有很大的协助。对于这次课程设计,我耗费了比较多的心思,这既是对课程理论内容的一次复习和巩固,同步也让我们丰富了更多与该专业有关的其她知识,例如软件应用等,在摸索中学习,在摸索中成长,在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的又一收获,在真正设计之前我们做了相称丰富的准备,一方面巩固一下课程理论,再一遍熟悉课程知识的构架,然后结合加以理论分析、总结,有了一种清晰的思路和一种完整的的软件流程图之后才着手设计。在设计程序时,我们不能妄想一次就将整个程序设计好,反复修改、不断改善是程序设计的必经之路;养成注释程序的好习惯是非常必要的,一种程序的完美与否不仅仅是实现功能,而应当让人一看就能明白你的思路,这样也能为资料的保存和交流提供了以便;我觉得在设计课程过程中遇到问题是很正常,但我们应当将每次遇到的问题记录下来,并分析清晰,以免下次再遇到同样的问题的课程设计又出错了。刚开始的时候,由于对无线通信模块CC1101的知识不熟悉,因此做起来比较困难。我大量查阅图书馆和网上的资料,但愿能尽量在较短的时间内理解有关无线通信模块CC1101在通信系统上的应用,和有关射频模块的理解与应用及使用措施。在PROTUES仿真STC89C52单片机最小系统过程中,真真切切地感受到了仿真工具的重要性,如果可以纯熟灵活运用仿真工具可大大的减短数学设计的周期。最后在实际中,先分开调试子模块STC89C52最小系统和无线通信模块CC1101,再对整体基于单片机433M无线通信系统实物进行软件调试和硬件方面功能测试。本次的设计,其实也是我们所学知识的一次综合运用,让我深深的结识到了学习单片机要有一定的基本,要有电子技术方面的数字电路和模拟电路等方面的理论基本,特别是数字电路;也要有编程语言的汇编语言或C语言。要想成为单片机高手,我们一方面要学好汇编语言,然后转入C语言学习,因此我们不能学到背面就忘了前面的知识,更应当将所学的知识紧紧的结合在一起,综合运用,所谓设计,就是规定创新,只有将知识综合运用起来才干真正的设计好。通过这次单片机专业课程实践设计,我觉得收获了诸多,无论是理论知识的学习,还是实践部分的运用。在课程设计之前,虽然自己已经接触过某些有有关单片机的知识,例如51系列、430超低功耗系列、STM32系列等等,但是跟射频有关的部分还是很生疏,在本次单片机专业课程实践设计中第一次接触无线射频模块CC1101,理解其在无线通信、射频、信号调制解调等方面强大的功能,但愿后来可以有机会,能对有有关CC1101无线通信系统的功能进行深一层次的理解。8参照文献1 刘岚 尹勇等,单片计算机基本及应用(第1版),武汉理工大学出版社,2 尹勇 撒继铭等,单片计算机原理及应用(第1版),科学出版社,3 谢自美.电子线路设计实验测试(第3版),华中科技大学出版社,4 刘教瑜. 单片机原理及应用.武汉理工大学出版社,5 张东亮.单片机原理与应用.人民邮电出版社,6 李群芳.单片微型计算机与接口技术(第3版).电子工业出版社,附录 部分源程序:1.main.c #include main.h/main.h 中具有TX/RX选择配备选项const char *g_Ashining = ashining;uint8_t g_TxMode = 0, g_UartRxFlag = 0;uint8_t g_UartRxBuffer 100 = 0 ;uint8_t g_RF24L01RxBuffer 32 = 0 ; /* * brief :主函数 * param :无 * note :无 * retval:无 */int main( void )uint8_t i = 0;/串口初始化drv_uart_init( );/LED初始化drv_led_init( );/SPI初始化drv_spi_init( );/CC1101初始化CC1101_Init( );for( i = 0; i 6; i+ )led_red_flashing( );led_green_flashing( );drv_delay_ms( 500 );#ifdef_CC1101_TX_TEST_/*发送*/按键初始化drv_button_init( );while( 1 )/模式切换/Demo程序默觉得发送模式1,即发送固定字符串“ashining”,可以通过按键切换到发送模式2,即通过串口发送数据,按键的作用就是切换发送模式1 2/如果在程序移植过程中不需要两种发送模式,删除下面 if 语句程序块和按键初始化程序即可if( BUTOTN_PRESS_DOWN = drv_button_check( )g_TxMode = 1 - g_TxMode;/模式会在 TX_MODE_1( 0 ),TX_MODE_2( 1 )之间切换/状态显示清零led_green_off( );led_red_off( );if( TX_MODE_1 = g_TxMode )for( i = 0; i 6; i+ )led_red_flashing( );/固定发送模式,红灯闪烁3次drv_delay_ms( 500 );elsefor( i = 0; i 6; i+ )led_green_flashing( );/串口发送模式,绿灯闪烁3次drv_delay_ms( 500 );/如果在程序移植过程中不需要两种发送模式,删除上面 if 语句程序块和按键初始化程序即可/模式切换/发送if( TX_MODE_1 = g_TxMode )CC1101_Tx_Packet( (uint8_t *)g_Ashining, 8 , ADDRESS_CHECK );/模式1发送固定字符,1S一包drv_delay_ms( 1000 );led_red_flashing( );else/查询串口数据i = drv_uart_rx_bytes( g_UartRxBuffer );if( 0 != i )CC1101_Tx_Packet( g_UartRxBuffer, i , ADDRESS_CHECK );led_red_flashing( );#else/*接受*/while( 1 )CC1101_Clear_RxBuffer( );CC1101_Set_Mode( RX_MODE );while( 0 != CC1101_GET_GDO0_STATUS( );while( 0 = CC1101_GET_GDO0_STATUS( );i = CC1101_Rx_Packet( g_RF24L01RxBuffer );/接受字节if( 0 != i )led_green_flashing( );drv_uart_tx_bytes( g_RF24L01RxBuffer, i );/输出接受到的字节#endif2. drv_button.c#include drv_button.h#include drv_delay.h/* * brief :按键初始化 * param :无 * note :无 * retval:无 */ void drv_button_init( void )/引脚配备 部分51单片机不需要/BUTTON引脚配备为输入BUTTON_PxM0 = IO_IN_PUT_ONLY_M0 BUTTON_PIN_BIT;BUTTON_PxM1 = IO_IN_PUT_ONLY_M1 BUTTON_PIN_BIT;BUTTON_PIN = 1;/默认状态置高/* * brief :按键查询 * param :无 * note :无 * retval: *0:按键没有按下 *1:检测到按键动作 */uint8_t drv_button_check( void )if( 1 != BUTTON_PIN )/检测按键输入状态drv_delay_ms( 45 );/消抖if( 1 != BUTTON_PIN )return 1;/按键按下,返回按键状态return 0;3. drv_delay.c#include drv_delay.h/* * brief :1MS延时函数 * param : * note :12MHz 下1MS延时 * retval:无 */static void drv_delay_1ms( )uint16_t Ms = 1;uint32_t j = 80;while( Ms- )while( j- );/* * brief :MS延时函数 * param : *Ms:延时的MS数 * note :无 * retval:无 */void drv_delay_ms( uint16_t Ms )while( Ms- )drv_delay_1ms( );4. drv_led.c#include drv_led.h/* * brief :LED初始化 * param :无 * note :无 * retval:无 */ void drv_led_init( void )/引脚配备 部分51单片机不需要/LED引脚配备为推挽输出LED_RED_PxM0 |= IO_OUT_PUT_PP_M0 LED_RED_PIN_BIT;LED_RED_PxM1 |= IO_OUT_PUT_PP_M1 LED_RED_PIN_BIT;LED_RED_PIN = 1;/IO初始化状态置高,LED灭LED_GREEN_PIN = 1;/* * brief :LED亮 * param : *LedPort:LED选择 * note :无 * retval:无 */void drv_led_on( LedPortType LedPort )/IO电平置低,LED亮if( LED_RED = LedPort )LED_RED_PIN = 0;elseLED_GREEN_PIN = 0;/* * brief :LED灭 * param : *LedPort:LED选择 * note :无 * retval:无 */void drv_led_off( LedPortType LedPort )/IO电平置高,LED灭if( LED_RED = LedPort )LED_RED_PIN = 1;elseLED_GREEN_PIN = 1;/* * brief :LED闪烁 * param : *LedPort:LED选择 * note :无 * retval:无 */void drv_led_flashing( LedPortType LedPort )if( LED_RED = LedPort )if( 1 = LED_RED_PIN )LED_RED_PIN = 0;elseLED_RED_PIN = 1;elseif( 1 = LED_GREEN_PIN )LED_GREEN_PIN = 0;elseLED_GREEN_PIN = 1;5. drv_spi.c#include drv_spi.h/* * brief :SPI初始化(软件) * param :无 * note :无 * retval:无 */void drv_spi_init( void )/引脚配备 部分51单片机不需要/SCK MOSI NSS 配备为推挽输出SPI_SCK_PxM0 = IO_OUT_PUT_PP_M0 SPI_SCK_PIN_BIT;SPI_SCK_PxM1 = IO_OUT_PUT_PP_M1 SPI_SCK_PIN_BIT;SPI_MOSI_PxM0 = IO_OUT_PUT_PP_M0 SPI_MOSI_PIN_BIT;SPI_MOSI_PxM1 = IO_OUT_PUT_PP_M1 SPI_MOSI_PIN_BIT;SPI_NSS_PxM0 = IO_OUT_PUT_PP_M0 SPI_NSS_PIN_BIT;SPI_NSS_PxM1 = IO_OUT_PUT_PP_M1 SPI_NSS_PIN_BIT;/MISO 配备为输入SPI_MISO_PxM0 = IO_IN_PUT_ONLY_M0 SPI_MISO_PIN_BIT;SPI_MISO_PxM1 = IO_IN_PUT_ONLY_M1 SPI_MISO_PIN_BIT;/时钟置低SPI_SCK = 0;/MOSI MISO NSS置高SPI_MOSI = 1;SPI_MISO = 1;SPI_NSS = 1;/* * brief :SPI收发一种字节 * param : *TxByte: 发送的数据字节 * note :非堵塞式,一旦等待超时,函数会自动退出 * retval:接受到的字节 */uint8_t drv_spi_read_write_byte( uint8_t TxByte )uint8_t i = 0, Data = 0;spi_set_clk_low( );for( i = 0; i 8; i+ )/一种字节8byte需要循环8次/* 发送 */if( 0x80 = ( TxByte & 0x80 )spi_set_mosi_hight( );/如果即将要发送的位为 1 则置高IO引脚elsespi_set_mosi_low( );/如果即将要发送的位为 0 则置低IO引脚TxByte = 1;/数据左移一位,先发送的是最高位spi_set_clk_high( );/时钟线置高_nop_( );/* 接受 */Data = 1;/接受数据左移一位,先接受到的是最高位if( 1 = spi_get_miso( )Data |= 0x01;/如果接受时IO引脚为高则觉得接受到 1spi_set_clk_low( );/时钟线置低_nop_( );return Data;/返回接受到的字节/* * brief :SPI收发字符串 * param : *ReadBuffer: 接受数据缓冲区地址 *WriteBuffer:发送字节缓冲区地址 *Length:字节长度 * note :非堵塞式,一旦等待超时,函数会自动退出 * retval:无 */void drv_spi_read_write_string( uint8_t* ReadBuffer, uint8_t* WriteBuffer, uint16_t Length )spi_set_nss_low( );/片选拉低while( Length- )*ReadBuffer = drv_spi_read_write_byte( *WriteBuffer );/收发数据ReadBuffer+;WriteBuffer+;/读写地址加1spi_set_nss_high( );/片选拉高6. drv_uart.c#include drv_uart.h/* * brief :串口初始化 * param :无 * note :无 * retval:无 */void drv_uart_init( )/引脚配备 部分51单片机不需要/TX配备为输出 RX配备为输入UART_TX_PxM0 |= IO_OUT_PUT_PP_M0 UART_TX_PIN_BIT;UART_TX_PxM1 |= IO_OUT_PUT_PP_M1 UART_TX_PIN_BIT;UART_RX_PxM0 |= IO_IN_PUT_ONLY_M0 UART_RX_PIN_BIT;UART_RX_PxM1 |= IO_IN_PUT_ONLY_M1 UART_RX_PIN_BIT;UART_TX = 1;/串口配备SCON &= (uint8_t)(uint8_t)( ( UART_MODE | UART_RX );/清SM0 SM1 RENSCON |= (uint8_t)( UART_8BAUDRATE_VOLATILE | UART_RX );/TIM1配备TMOD &= (uint8_t)(uint8_t)( TIM1_MODE );TMOD |= TIM1_MODE_2;/8位自动重装PCON = 0x00;TH1 = 0xFD;/波特率默认配备为9600TL1 = 0xFD;TI = 1;/清发送标志TR1 = 1;/使能定期器/* * brief :串口发送数据 * param : *TxBuffer:发送数据首地址 *Length:数据长度 * note :无 * retval:无 */void drv_uart_tx_bytes( uint8_t* TxBuffer, uint8_t Length )while( Length- )while( 0 = TI );/等待上次发送完毕TI = 0;/清标志位SBUF = *TxBuffer;/发送数据TxBuffer+;/* * brief :串口接受数据 * param : *RxBuffer:发送数据首地址 * note :无 * retval:接受到的字节个数 */uint8_t drv_uart_rx_bytes( uint8_t* RxBuffer )uint8_t l_RxLength = 0;uint16_t l_UartRxTimOut = 0x7FFF;while( l_UartRxTimOut- )/在超时范畴内检测数据if( 0 != RI )/检测与否接受到数据RI = 0;/清标志位*RxBuffer = SBUF;/读数据RxBuffer+;l_RxLength+;l_UartRxTimOut = 0x7FFF;/重置超时检测return l_RxLength;/等待超时,数据接受完毕本科生课程设计成绩评估表姓 名性 别专业、班级综合训练题目:单片机应用设计综合训练答辩或质疑记录:1、CC1101模块如何与单片机相连答:CC1101模块通过4个SPI口与单片机进行连接,从而由单片机控制它进行相应的收发操作。2、实物所实现的重要功能答:个人的实物实现的功能重要有两个,一种是接受模块能自动的接受到由发射模块发出的信息,另一种是发射模块通过串口调试助手向接受方发出任意信息,接受方也能在其串口调试助手上看到
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!