资源预览内容
第1页 / 共9页
第2页 / 共9页
第3页 / 共9页
第4页 / 共9页
第5页 / 共9页
第6页 / 共9页
第7页 / 共9页
第8页 / 共9页
第9页 / 共9页
亲,该文档总共9页全部预览完了,如果喜欢就下载吧!
资源描述
实验实验 9 9 单片机串口发数单片机串口发数 【实验目的】【实验目的】 通过本实验的学习,使实验者熟悉 CC2530 芯片硬件 USART0 串行总线接口UART 模式的配置和使用,并掌握单片机如何使用串口发送数据。 【实验内容】【实验内容】 编写 IAR 程序,实现从 CC2530 上通过串口不断地发送字符串“UART0 发送数据”,在 PC 端使用串口助手来接收数据。实验使用 CC2530 的串口 1,波特率为 57600。实验结果如图 1-24 所示。 图 1-24 PC 机串口接收数据 【实验原理】【实验原理】 CC2530 有两个串行通信接口 USART0 和 USART1。两个串行口既可以工作于UART(异步通信)模式,也可以工作于 SPI(同步通信)模式,模式的选择由串行端口控制/状态暂存器的 UxCSR.MODE 决定。本实验采用 USART0 串行端口 UART模式,UART 模式可以选择两线连接(TXD 和 RXD)或四线连接(TXD、RXD、CTS和 RTS),其中 RTS 和 CTS 用于硬件流量控制。UART 模式提供全双工传送,接收器中的位同步不影响发送功能。传送一个 UART 字节包含 1 个起始位、8 个数据位、 1 个可选项的第 9 位数据或奇偶校验位再加上 1 个 (或 2 个) 停止位。 注意:虽然真实数据封包含 8 位或 9 位,但是数据传送只涉及一个字节。 U0CSR.MODE 设置为 1 时,即选择了 UART 模式,UART 操作由 UASRT0 控制和状态缓存器 U0CSR 及 UART 控制缓存器控制。本实验使用 CC2530 的 USART0 串行总线接口采用异步 UART 模式。 根据外部设备 I/O 接脚映射表, 可以得到与 CC2530连接的线序如下表所示。 实验相关寄存器: 实验中操作了的寄存器有: P1、 P1DIR、 CLKCONCMD、 PERCFG、P0SEL、U0CSR、U0GCR、U0UCR、U0BAUD、U0DUB、TCON、IRCON2、IEN0 等寄存器。 【实验步骤】【实验步骤】 1.建立一个新项目 参照实验 1 操作步骤,在指定路径建立一个新的工作空间“Test09”,在该空间下新建一个 IAR 项目“uartPrj1.ewp” 并保存。 2.添加或新建程序文件 参照实验 1 的操作步骤, 往项目中添加或者新建程序文件 uart1.c。 【实验相关代码】【实验相关代码】 /*UARTUART 接脚接脚 CC2530CC2530 RXD P0.2 TXD P0.3 CTS P0.4 RTS P0.5 / #include “ioCC2530.h“ / 引用头文件,包含对CC2530的寄存器、中断向量等的定义 /*/ /定义led灯端口 #define LED1 P1_0 / P1_0定义为P1.0 unsigned int counter=0; /统计溢出次数 /* * 函数名称:InitUART0 * 功 能:UART0初始化 * P0.2 RX * P0.3 TX * 波特率:57600 * 数据位:8 * 停止位:1 * 奇偶校验:无 * 入口参数:无 * 出口参数:无 * 返 回 值:无 */ void initUART0(void) /* 片内外设引脚位置采用上电复位默认值,即PERCFG寄存器采用默认值 */ PERCFG = 0x00; /位置 1 P0 口 /* UART0相关引脚初始化 P0.2RX, P0.3TX P0.4CT, P0.5RT */ P0SEL = 0x3c; /P0 用作串口, P0.2、P0.3、P0.4、P0.5作为片内外设I/O /* P0口外设优先级采用上电复位默认值,即P2DIR寄存器采用默认值 */ /* 第一优先级:USART0 第二优先级:USART1 第三优先级:Timer1 */ /* UART0波特率设置 */ /* 波特率:57600 当使用32MHz 晶体振荡器作为系统时钟时, 要获得57600波特率需要如下设置: UxBAUD.BAUD_M = 216 UxGCR.BAUD_E = 10 该设置误差为0.03% */ U0BAUD = 216; U0GCR = 10; /* USART模式选择 */ U0CSR |= 0x80; / UART模式 /* UART0配置 ,以下配置参数采用上电复位默认值: 硬件流控:无 奇偶校验位(第9位):奇校验 第9位数据使能:否 奇偶校验使能:否 停止位:1个 停止位电平:高电平 起始位电平:低电平 */ U0UCR |= 0x80; / 进行USART清除 /* 用於发送的位顺序采用上电复位默认值, 即U0GCR寄存器采用上电复位默认值 */ /* LSB先发送 */ UTX0IF = 0; / 清零UART0 TX中断标志 EA = 1; /使能全局中断 /* * 函数名称:inittTimer1 * 功 能:初始化定时器T1控制状态寄存器 * 入口参数:无 * 出口参数:无 * 返 回 值:无 */ void inittTimer1() /* 配置定时器1的16位计数器的计数频率,定时0.2S,计数10次,即2S发一次数据 Timer Tick 分频 定时器1的计数频率 T1CC0的值 时长 32MHz /128 250KHz 50000 0.2s */ CLKCONCMD /时钟速度设置为32MHz T1CTL = 0x0E; / 配置128分频,模比较计数工作模式,并开始启动 T1CCTL0 |= 0x04; /设定timer1通道0比较模式 T1CC0L =50000 / 把50000的低8位写入T1CC0L T1CC0H = (50000 / 把50000的高8位写入T1CC0H T1IF=0; /清除timer1中断标志(同IRCON /清除通道0中断标志 TIMIF /不产生定时器1的溢出中断 /定时器1的通道0的中断使能T1CCTL0.IM默认使能 IEN1 |= 0x02; /使能定时器1的中断 EA = 1; /使能全局中断 /* * 函数名称:UART0SendByte * 功 能:UART0发送一个字节 * 入口参数:c * 出口参数:无 * 返 回 值:无 */ void UART0SendByte(unsigned char c) U0DBUF = c; / 将要发送的1字节数据写入U0DBUF(串口 0 收发缓冲器) while (!UTX0IF); / 等待TX中断标志,即U0DBUF就绪 UTX0IF = 0; / 清零TX中断标志 /* * 函数名称:UART0SendString * 功 能:UART0发送一个字符串 * 入口参数:无 * 出口参数:无 * 返 回 值:无 */ void UART0SendString(unsigned char *str) while(1) if(*str = 0) break; / 遇到结束符,退出 UART0SendByte(*str+); / 发送一字节 /* * 功 能:定时器T1中断服务子程序 */ #pragma vector = T1_VECTOR /中断服务子程序 _interrupt void T1_ISR(void) EA = 0; /禁止全局中断 counter+; if(counter=10) counter=0; LED1 = !LED1; UART0SendString(“UART0发送数据n“); / 从UART0发送字符串 / T1IF=0; /清T1的中断请求 T1STAT /清除通道0中断标志 EA = 1; /使能全局中断 /* * 函数名称:main * 功 能:main函数入口 * 入口参数:无 * 出口参数:无 * 返 回 值:无 */ void main(void) P1DIR |= 0x01; /* 配置P1.0的方向为输出 */ inittTimer1(); /初始化Timer1 initUART0(); / UART0初始化 while(1) ; 3. 配置项目设置 参照实验 1 的操作步骤,配置项目设置。 4. 下载程序到 CC2530 参照实验 1 的操作步骤,下载程序到 CC2530 进行调试。
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号