《无线通信开发技术及实践》课件实践5_第1页
《无线通信开发技术及实践》课件实践5_第2页
《无线通信开发技术及实践》课件实践5_第3页
《无线通信开发技术及实践》课件实践5_第4页
《无线通信开发技术及实践》课件实践5_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

实践5UHF无线数传技术实践5.G.1实践5.G.1

实践5.G.1

编写一个单片机读取CC1101模块芯片版本号和接收信号强度的程序,所读取的内容用LCD12864液晶屏显示。

【分析】芯片版本号和接收信号强度信息的读取需通过读取相应的状态寄存器实现,这些寄存器分别为标志芯片版本编号的VERSION寄存器和指示接收信号强度的RSSI寄存器。其中,CC1101的电子版本编号为0x04,即VERSION的值恒为0x04;而接收信号强度是随时间变化的,即RSSI的值不唯一。图S5-1硬件电路采用单片机控制实现LCD12864显示CC1101状态寄存

器的内容,首先要实现单片机对CC1101状态寄存器的读取,然后要实现LCD12864对读取内容的显示。因此,本实验是CC1101驱动与LCD12864驱动程序的融合。关于CC1101完整的驱动程序,在本书理论篇中已有完整的讲解;关于LCD12864字符显示驱动程序,在实践2也有讲解。但要注意,状态寄存器的值为单字节的十六进制数,而LCD12864驱动程序完成的是单个字符或者字符串的显示。因此,要保证正确显示所读取的内容,必须在LCD12864的驱动函数中添加一个将十六进制数转换为字符的函数。

硬件电路如图S5-1所示。

【参考解决方案】

1.准备工作

将实验板接通 +5V电源,连接JTAG仿真器,将LCD12864液晶屏插入插槽,开启电源开关,查看仿真器

端口号(此处为COM12),在IAR编译器中做好相关设置。

2.源代码编写

新建一个IAR工程,在包含main.c的基础上,依次添加CC1101.h和CC1101.c,LCD12864.h和LCD12864.c四个文件。

1) main.c

main.c文件中包含cc1101.h和LCD12864.h两个头文件,实现了I/O端口初始化、LCD初始化、SPI初始化、CC1101复位、CC1101初始化、LCD显示相关状态寄存器的值等内容。main.c的源程序代码如下:

#include<iom16.h>

#include<intrinsics.h>

#include<string.h>

#include“CC1101.h”

#include“LCD12864.h”

INT8UCCRxBuf[32];

voidIO_init();

voidread_status_reg();

2) CC1101相关文件

采用模块化的编码风格,分别编写CC1101.c和CC1101.h,其源程序代码同任务描述5.D.1。限于本书的

篇幅,此处不再列出,请参见前述相关程序代码。

3) LCD12864相关文件

关于LCD12864的驱动函数,在实践2已有讲述,此处只是在其基础上,在LCD12864.c文件中添加一个将十六进制数转换为字符输出的函数void

LCD_hex_display

(ucharreg_value),并在LCD12864.h中增加相应的函数声明即可。

voidLCD_hex_display(ucharreg_value)函数的实现程序代码如下:限于本书的篇幅,关于LCD12864.h和LCD12864.c的完整内容,此处不再列出,请参考前述相关程序代码。

3.下载调试

将程序下载至实验板,全速运行后,实验结果如下:液晶屏上逐渐出现四行内容,分别为提示语和相应寄存器的值,如图S5-2所示。图S5-2液晶显示结果

实践5.G.2

配合按键、LED灯、蜂鸣器,实现单片机控制两个CC1101模块之间的收/发通信。

【分析】在实践3.G.2中,采用单片机控制串口收/发,结合按键、LED灯、蜂鸣器和LCD,实现了单片机通过两个蓝牙模块进行串口通信。与蓝牙模块不同的是,CC1101模块作为数传模块,不存在AT指令,更无需操作AT指令使其进入透传模式,可直接进行数据的发送和接收。本实践采用与实践3.G.2相同的思路,实现两个CC1101模块之间的SPI收/发通信。两个模块的接收和发送均由单片机通过SPI接口控制,而且要使用CC1101必须实现完整的CC1101驱动程序。

硬件电路如图S5-3所示。图S5-3硬件电路

【参考解决方案】

1.准备工作

将实验板通过JTAG仿真器连至PC机上,查看端口号(此处为COM12),做好IAR中的相关设置。

2.代码编写

本实践仍采用模块化的编码风格,分别编写主函数main.c、按键扫描keyscan.h和keyscan.c、CC1101驱动CC1101.c和CC1101.h。

1) main.c

CC1101模块通过SPI串口与单片机相连,因此主函数采用了任务函数结合定时器中断的方法控制蜂鸣器响、清屏、LED2亮和按键扫描及SPI发送,是实际工程应用中比较常用的编程方法。在主函数中,首先完成SPI和CC1101的初始化,设置好发射功率后,进入接收模式并清空CC1101接收缓存数组;然后,在任务函数中实现CC1101的数据接收与发送,以及蜂鸣器和LED灯控制。

main.c的编写思路与实践3.G.2类似,其源程序代码如下:#include<iom16.h>

#include<intrinsics.h>

#include<string.h>

#include"CC1101.h"

#include"keyscan.h"

#defineCLR_BEEPPORTD|=BIT(PD7) //蜂鸣器不响

#defineSET_BEEPPORTD&=~BIT(PD7) //蜂鸣器响

#defineCLR_LEDPORTC|=BIT(PC7) //LED2灭

#defineSET_LEDPORTC&=~BIT(PC7) //LED2亮INT8Ubeep=0;

INT8Uled=0;

INT8Ustatus=0;

INT8Ukey=0;

INT8UGDO0_flag=0;

INT8Uleng=0;

INT8UCCRxBuf[32];

INT16UCCRxCounter;

INT8Usend[]="HELLO";

INT8U__flashASCII[]="0123456789ABCDEF";

voidTIMER2_init();

voidIO_init();

voiddelayms(INT16Ut);

voidtask0(void);

voidtask1(void);

voidtask2(void);

voidtask3(void);

2) CC1101相关文件

分别编写CC1101.c和CC1101.h,其源程序代码参见任务描述5.D.1,限于本书的篇幅,此处不再列出。

3)按键扫描

分别编写keyscan.h和keyscan.c,源程序代码同实践3.G.2,请参考前述内容,此处不再详细列出。

3.下载验证

使用JTAG仿真器分别将上述源程序

温馨提示

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

评论

0/150

提交评论