串口通信实验

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

课程名称:Zigbee技术及应用实验项目:串口通信实验指导教师:专业班级:姓名:学号:成绩:一、实验目的:(1)认识串口通信的概念;(2)学习单片机串口通信的开发过程;(3)编写程序,使单片机与PC通过串口进行通信。二、实验过程:(1)根据实验目的分析实验原理;(2)根据实验原理编写C程序;(3)编译下载C程序,并在实验箱上观察实验结果。三、实验原理:串行通信是将数据字节分成一位一位的形式在一条传输线上逐个地传送,此时只需要一条数据线,外加一条公共信号地线和若干条控制信号线。因为一次只能传送一位,所以对于一个字节的数据,至少要分8位才能传送完毕,如图3-1所示。接收设备发送设备D0D1D2D3D4D5D6D7图2-1串行通信过程串行通信制式:(1)单工制式这种制式是指甲乙双方通信时只能单向传送数据,发送方和接收方固定。(2)半双工制式这种制式是指通信双方都具有发送器和接收器,即可发送也可接收,但不能同时接收和发送,发送时不能接收,接收时不能发送。(3)全双工制式这种制式是指通信双方均设有发送器和接收器,并且信道划分为发送信道和接收信道,因此全双工制式可实现甲乙双方同时发送和接收数据,发送时能接收,接收时能发送。三种制式分别如图3-2所示图3-2串行通信制式3.1硬件设计原理CC2530有两个串行通信接口USART0和USART1,两个USART具有同样的功能,可已分别运行于UART模式和同步SPI模式。CC2530的两个串行通信接口引脚图分布如表3-1所示表3-1CC2530串行通信口引脚图分布本实验CC2530模块使用的是USART1的位置2,P1_6和P1_7。3.2程序设计原理串口通信程序流程图如图3-3所示开始系统时钟初始化串口1初始化等待接收数据中断将接收的数据存入缓存将缓存的数据原样发送给PC中断结束,继续执行主程序图3-3程序设计流程图(1)寄存器的配置P1SEL寄存器,P1_0-P1_7功能选择,0:通用I/O1:外设本实验需配置P1_6和P1_7为外设,P1SEL|=0xC0。位名称复位R/W描述7:0SELP1_[7:0]0x00R/WP1.7到P1.0功能选择0:通用I/O1:外围函数U1CSR寄存器,USART1控制和状态本实验使用UART模式,U1CSR|=0x80。位名称复位R/W描述7MODE0R/WUSART模式选择0:SPI模式1:UART模式6RE0R/WUART接收器使能。注意在UART完全配置之前不使能接收。0:禁用接收器1:接收器使能5SLAVE0R/WSPI主或者从模式选择0:SPI主模式1:SPI从模式4FE0R/W0UART帧错误状态0:无帧错误检测1:字节收到不正确停止位级别3ERR0R/W0UART奇偶错误状态0:无奇偶错误检测1:字节收到奇偶错误2RX_BYTE0R/W0接收字节状态。URAT模式和SPI从模式。当读U0DBUF该位自动清除,通过写0清除它,这样有效丢弃U0DBUF中的数据。0:没有收到字节1:准备好接收字节1TX_BYTE0R/W0传送字节状态。URAT模式和SPI主模式0:字节没有被传送1:写到数据缓存寄存器的最后字节被传送0ACTIVE0RUSART传送/接收主动状态、在SPI从模式下该位等于从模式选择。0:USART空闲1:在传送或者接收模式USART忙碌U1UCR寄存器,USART1控制(2)本实验配置UART:无硬件流控制,无奇偶校验,8位数据位,1位停止位,所以,U1UCR应配置为0x00因单片机复位,U1UCR全部为0,所以U1UCR寄存器应保持默认,无需配置。位名称复位R/W描述7FLUSH0R0/W1清除单元。当设置时,该事件将会立即停止当前操作并且返回单元的空闲状态。6FLOW0R/WUART硬件流使能。用RTS和CTS引脚选择硬件流控制的使用。0:流控制禁止1:流控制使能5D90R/WUART奇偶校验位。当使能奇偶校验,写入D9的值决定发送的第9位的值,如果收到的第9位不匹配收到字节的奇偶校验,接收时报告ERR。如果奇偶校验使能,那么该位设置以下奇偶校验级别。0:奇校验1:偶校验4BIT90R/WUART9位数据使能。当该位是1时,使能奇偶校验位传输(即第9位)。如果通过PARITY使能奇偶校验,第9位的内容是通过D9给出的。0:8位传送1:9位传送3PARITY0R/WUART奇偶校验使能。除了为奇偶校验设置该位用于计算,必须使能9位模式。0:禁用奇偶校验1:奇偶校验使能2SPB0R/WUART停止位的位数。选择要传送的停止位的位数0:1位停止位1:2位停止位1STOP1R/WUART停止位的电平必须不同于开始位的电平0:停止位低电平1:停止位高电平0START0R/WUART起始位电平。闲置线的极性采用选择的起始位级别的电平的相反的电平。0:起始位低电平1:起始位高电平(3)波特率设置当运行在UART模式时,内部的波特率发生器设置UART波特率。当运行在SPI模式时,内部的波特率发生器设置SPI主时钟频率。由寄存器UxBAUD.BAUD_M[7:0]和UxGCR.BAUD_E[4:0]定义波特率。该波特率用于UART传送,也用于SPI传送的串行时钟速率。波特率由下式给出:FMBAUDEBAUD28_22)_256(波特率(3-1)(式3-1中:F是系统时钟频率,等于16MHzRCOSC或者32MHzXOSC。)表3-232MHz系统时钟常见的波特率设置波特率(bps)UxBAUD.BAUD_MUxGCR.BAUD_E误差(%)24005960.1448005970.1496005980.141440021680.03192005990.142880021690.033840059100.1457600216100.037680059110.14115200216110.03230400216120.03本实验设置的波特率为57600,U1GCR|=10,U1BAUD|=216四、实验步骤和实验结果1.硬件配置:(1)实验设备:CC2530核心板一块;传感器底板一个;仿真器一个;方口USB线一根;USB转TTL模块一个;杜邦线三根。2.实验步骤:步骤一:编写串口收发程序,编译无误。步骤二:将CC2530模块(CC2530核心板与传感器底板,简称CC2530模块)与仿真器连接,仿真器用USB连接线与电脑进行连接。步骤三:点击IAR软件中的DownloadandDebug按钮进行编译下载。步骤四:然后单击调试工具栏中的GO按钮。步骤五:CC2530模块与USB转TTL模块连接,将USB转TTL模块插入PC的USB口。3.程序及现象:1)实验程序:#includeioCC2530.hcharstr[]=MICROSECUSARTTEST!\n;/************************************@fnClock_Init*@brief初始化系统时钟.*@paramNone*@returnNone**********************************/voidClock_Init(void){CLKCONCMD&=~0x40;//选择32MHz晶振while(!(SLEEPSTA&0x40));//等待晶振稳定CLKCONCMD&=~0x47;//TICHSPD128分频,CLKSPD不分频SLEEPCMD|=0x04;//关闭不用的RC振荡器}/************************************@fnUART1_Init*@briefUART1初始化.*@paramNone*@returnNone**********************************/voidUART1_Init(void){PERCFG=0x73;//使用串口备用位置2P1口P1SEL|=0xC0;//P1_6P1_7用作串口P2DIR=0x40;//选择串口1优先作为串口U1CSR|=0x80;//UART方式U1BAUD|=216;//波特率57600U1GCR=10;UTX1IF=1;//串口1TX中断标志位置1U1CSR|=0x40;//允许接收URX1IE=1;//开串口接收中断'URX1IE=1'IEN0|=0x84;//开总中断}/************************************@fnUART1_Send_String*@briefUART1初始化.*@param*Data,len*@returnNone**********************************/voidUART1_Send_String(char*Data,intlen){intj;for(j=0;jlen;j++){U1DBUF=*Data++;while(UTX1IF==0);UTX1IF=0;}}/************************************@fnmain*@brief主函数.*@paramNone*@returnNone**********************************/voidmain(void){Clock_Init();//系统时钟初始化UART1_Init();//串口1初始化UART1_Send_String(str,21);//发送一个字符串while(1)//等待中断的到来{}}/************************************@fnUART1_IRQ*@brief串口接收中断服务函数.*@paramNone*@returnNone**********************************/#pragmavector=URX1_VECTOR__interruptvoidUART1_IRQ(void){chardata;IEN0&=~0x40;//关串口接收中断'URX1IE=0'data=U1DBUF;//将接收的字节从U1DBUF取出来U1DBUF=data;//将取出来的字节放入U1DBUF发送出去while(UTX1IF==0)//等待发送完成UTX1IF=0;IEN0|=0x08;//开串口接收中断'URX1IE=1'}2)实验现象:将程序编译完成,烧入CC2530模块。PC端发送hello,单片机将hello返回给PC,并显示在串口调试助手的接收窗中如图3-4所示。图3-4串口功能调试五、实验总结在本次实验中,我认真了解了串口通信的概念,学了单片机串口通信的开发过程编写程序,使单片机与PC通过串口进行通信。在本次实验过程中,因连接问题导致实验失败,最终在老师和同学的帮助下完成了此次实验,感觉本次实验收获极多。

1 / 10
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功