当前位置:文档之家› 串口通信实验讲解

串口通信实验讲解

课程名称:Zigbee技术及应用实验项目:串口通信实验指导教师:
专业班级:姓名:学号:成绩:
一、实验目的:
(1)认识串口通信的概念;
(2)学习单片机串口通信的开发过程;
(3)编写程序,使单片机与PC通过串口进行通信。

二、实验过程:
(1)根据实验目的分析实验原理;
(2)根据实验原理编写C程序;
(3)编译下载C程序,并在实验箱上观察实验结果。

三、实验原理:
串行通信是将数据字节分成一位一位的形式在一条传输线上逐个地传送,此时只需要一条数据线,外加一条公共信号地线和若干条控制信号线。

因为一次只能传送一位,所以对于一个字节的数据,至少要分8位才能传送完毕,如图3-1所示。

图2-1串行通信过程
串行通信制式:
(1)单工制式
这种制式是指甲乙双方通信时只能单向传送数据,发送方和接收方固定。

(2)半双工制式
这种制式是指通信双方都具有发送器和接收器,即可发送也可接收,但不能同时接收和发送,发送时不能接收,接收时不能发送。

(3)全双工制式
这种制式是指通信双方均设有发送器和接收器,并且信道划分为发送信道和接收信道,因此全双工制式可实现甲乙双方同时发送和接收数据,发送时能接收,接收时能发送。

三种制式分别如图3-2所示
图3-2串行通信制式
3.1硬件设计原理
CC2530有两个串行通信接口USART0和USART1,两个USART具有同样的功能,可已分别运行于UART模式和同步SPI模式。

CC2530的两个串行通信接口引脚图分布如表3-1所示
表3-1 CC2530串行通信口引脚图分布
本实验CC2530模块使用的是USART1的位置2,P1_6和P1_7。

3.2程序设计原理
串口通信程序流程图如图3-3所示
开始
系统时钟初始化串口1初始化等待接收数据
中断
将接收的数据存入缓存将缓存的数据原样发送给PC
中断结束,继
续执行主程序
图3-3程序设计流程图
(1)寄存器的配置
P1SEL寄存器,P1_0-P1_7功能选择,0:通用I/O 1:外设
U1CSR寄存器,USART1
控制和状态
U1UCR寄存器,USART1控制
(2)本实验配置UART:无硬件流控制,无奇偶校验,8位数据位,1位停止位,所以,U1UCR应配置为0x00
因单片机复位,U1UCR全部为0,所以U1UCR寄存器应保持默认,无需配置。

(3)波特率设置
当运行在UART 模式时,内部的波特率发生器设置UART 波特率。

当运行在SPI 模式时,内部的波特率发
生器设置SPI 主时钟频率。

由寄存器UxBAUD.BAUD_M[7:0]和UxGCR.BAUD_E[4:0]定义波特率。

该波特率用于UART 传送,也用于SPI 传送的串行时钟速率。

波特率由下式给出:
F M BAUD E
BAUD **+=28
_22)_256(波特率 (3-1)
(式3-1中:F 是系统时钟频率,等于16 MHz RCOSC 或者32 MHz XOSC 。


本实验设置的波特率为57600,U1GCR |= 10,U1BAUD |= 216 四、实验步骤和实验结果 1.硬件配置 :
(1)实验设备:CC2530核心板一块;传感器底板一个;仿真器一个;方口USB线一根;USB转TTL 模块一个;杜邦线三根。

2.实验步骤:
步骤一:编写串口收发程序,编译无误。

步骤二:将CC2530模块(CC2530核心板与传感器底板,简称CC2530模块)与仿真器连接,仿真器用USB连接线与电脑进行连接。

步骤三:点击IAR软件中的 Download and Debug 按钮进行编译下载。

步骤四:然后单击调试工具栏中的GO 按钮。

步骤五:CC2530模块与USB转TTL模块连接,将USB转TTL模块插入PC的USB口。

3. 程序及现象:
1)实验程序:
#include <ioCC2530.h>
char str[]="MICROSEC USART TEST!\n";
/***********************************
* @fn Clock_Init
* @brief 初始化系统时钟.
* @param None
* @return None
**********************************/
void Clock_Init(void)
{
CLKCONCMD &= ~0x40; //选择32MHz晶振
while(!(SLEEPSTA&0x40)); //等待晶振稳定
CLKCONCMD &= ~0x47; //TICHSPD128分频,CLKSPD不分频
SLEEPCMD |= 0x04; //关闭不用的RC振荡器
}
/***********************************
* @fn UART1_Init
* @brief UART1初始化.
* @param None
* @return None
**********************************/
void UART1_Init(void)
{
PERCFG=0x73; //使用串口备用位置2 P1口
P1SEL|=0xC0; //P1_6 P1_7用作串口
P2DIR=0x40; //选择串口1优先作为串口
U1CSR|=0x80; //UART方式
U1BAUD|=216; //波特率57600
U1GCR=10;
UTX1IF=1; //串口1 TX中断标志位置1
U1CSR|=0x40; //允许接收
URX1IE=1; //开串口接收中断 'URX1IE = 1' IEN0|=0x84; //开总中断
}
/***********************************
* @fn UART1_Send_String
* @brief UART1初始化.
* @param *Data,len
* @return None
**********************************/
void UART1_Send_String(char *Data,int len) {
int j ;
for(j=0;j<len;j++)
{
U1DBUF= *Data++;
while(UTX1IF==0);
UTX1IF=0;
}
}
/***********************************
* @fn main
* @brief 主函数.
* @param None
* @return None
**********************************/
void main(void)
{
Clock_Init(); //系统时钟初始化 UART1_Init(); //串口1初始化
UART1_Send_String(str,21); //发送一个字符串 while(1) //等待中断的到来 {
}
}
/***********************************
* @fn UART1_IRQ
* @brief 串口接收中断服务函数.
* @param None
* @return None
**********************************/
#pragma vector=URX1_VECTOR
__interrupt void UART1_IRQ(void)
{
char data;
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通过串口进行通信。

在本次实验过程中,因连接问题导致实验失败,最终在老师和同学的帮助下完成了此次实验,感觉本次实验收获极多。

相关主题