资源简介 (共52张PPT)单片机与C语言技术应用第四单元 任务34.3 CC2530单片机串口命令控制交通信号灯学习目标01知识储备03任务工单05任务要求与任务分析02任务实施04任务小结06知识与技能提升07延伸阅读08学习目标01掌握串口UART通信的物理层连接方式;掌握串口UART通信的数据帧格式及波特率计算;掌握扫描方式判断串口发送数据是否完成;掌握串口发送数据触发中断;掌握扫描方式判断串口接收数据;掌握串口接收数据触发中断;掌握串口命令控制交通信号灯系统。学习目标01能对与串口通信数据帧格式以及波特率相关的寄存器进行设置;能对扫描方式和中断方式完成串口发送数据的相关寄存器进行配置;能对扫描方式和中断方式完成串口接收数据的相关寄存器进行配置;能使用串口命令控制交通信号灯的开关。学习目标01知识储备03任务工单05任务要求与任务分析02任务实施04任务小结06知识与技能提升07延伸阅读084.3 CC2530单片机串口命令控制交通信号灯任务要求与任务分析02● 任务要求:①黑板通电后,D6红色LED熄灭(红灯灭),串口接收数据等待中;②PC机发送数据0xCF;③串口接收数据0xCF,D6红色LED点亮(红灯亮);④串口发送应答数据0xCF,PC机接收到应答数据0xCF;⑤串口收发控制效果仅上电一次,不可循环。任务要求与任务分析02● 任务分析:中断方式串口接收数据;扫描方式串口发送应答数据。学习目标01知识储备03任务工单05任务要求与任务分析02任务实施04任务小结06知识与技能提升07延伸阅读084.3 CC2530单片机串口命令控制交通信号灯串口0接收触发中断条件1知识储备03串口0接收中断服务函数23扫描方式判断串口0发送状态03知识储备(1)串口0接收中断标志位URX0IF为1,表示串口0接收到一个字节数据。(2)串口0接收中断使能(即URX0IE=1)。(3)总中断使能(即EA=1)。03知识储备以上三个条件都满足的条件下,CPU将会触发串口0接收中断。当串口0接收到完整的一个字节数据,串口0接收中断标志位URX0IF被硬件自动置“1”。在串口0接收中断和总中断都使能的情况下,单片机执行串口0接收中断服务函数且硬件自动将串口0接收中断标志位URX0IF置“0”。03知识储备1.URX0IE = 1; //串口0接收中断使能2.EA=1; //总中断使能采用中断方式接收串口0数据的中断使能配置代码如下:串口0接收触发中断条件1知识储备03串口0接收中断服务函数23扫描方式判断串口0发送状态03知识储备在串口0接收中断服务函数之前,通过宏指令“#pragma vector = 0x13”或“#pragma vector = URX0_VECTOR”将该中断函数指向串口0接收中断向量。因此,当串口0接收中断时,将会执行该中断服务函数。03知识储备通过“__interrupt”关键字声明串口0接收中断服务函数,如“__interrupt void Uart0_Receive_Isr(void)”。进入串口0中断服务函数后,硬件会自动将串口0接收中断标志位URX0IF置“0”,同时软件上必须尽快将U0DBUF寄存器的数据读出并保存在接收缓冲区中,空出的U0DBUF寄存器开始准备接收下一字节的数据。03知识储备本任务声明Rec_Data为字节型全局变量并初始化为0x00,用于存放U0DBUF寄存器的数据,具体参考代码如下:1.#pragma vector = URX0_VECTOR2.__interrupt void UART0_Receive_ISR(void)3.{4. Rec_Data=U0DBUF; //将接收到的数据存放到接收缓冲区Rec_Data中5.}串口0接收触发中断条件1知识储备03串口0接收中断服务函数23扫描方式判断串口0发送状态03知识储备当串口0发送完成一个字节数据后,串口0发送中断标志位UTX0IF会被硬件置1,这时候可以通过软件不断循环检测串口0发送中断标志位UTX0IF的状态变化,从而判断串口0是否完成一个字节的数据发送。采用扫描方式判断串口0是否完成,硬件不会自动将串口0发送中断标志位UTX0IF置0。因此,当检测到串口0发送中断标志位为1时,需要通过软件操作将该标志位置0,才能保证下一字节数据正常发送。03知识储备本任务在串口0数据发送过程中,先将串口0发送中断标志位UTX0IF置0,将需要发送的数据写入U0DBUF寄存器;然后不断循环检测串口0发送中断标志位UTX0IF的状态变化,当检测到该标志位为1时,表示发送完成,软件将该标志位置0并执行发送完成的逻辑处理。整个串口0数据发送过程的具体配置代码如下:03知识储备1.……2.UTX0IF = 0; //发送之前,将串口发送中断标志位置03.U0DBUF = 0xAF; //将16进制数 0xAF写入U0DBUF寄存器4.while( UTX0IF==0 ); //判断数据是否发送完成,未完成继续等待5.UTX0IF=0; //UTX0IF置0,为下次发送做准备6.…… //串口0发送完成逻辑处理学习目标01知识储备03任务工单05任务要求与任务分析02任务实施04任务小结06知识与技能提升07延伸阅读084.3 CC2530单片机串口命令控制交通信号灯任务实施04● 任务实施前必须先准备好以下设备和资源:序号 设备/资源名称 数量 是否准备到位(√)1 计算机(已安装好IAR软件) 1台 2 NEWLab实训平台 1套 3 CC-Debugger 仿真器 1套 4 黑板 1块 12任务实施04打开工程编写代码3编译工程4仿真调试●打开本书配套源代码文件夹中的“串口命令控制交通信号灯.ewp”工程。04任务实施12任务实施04打开工程编写代码3编译工程4仿真调试● 步骤1:头文件包含04任务实施#include ● 步骤2:I/O引脚宏定义04任务实施1.#define YELLOW_LED1 P1_0 //将P1_0引脚宏定义为D3绿色LED控制引脚2.#define YELLOW_LED2 P1_1 //将P1_1引脚宏定义为D4绿色LED控制引脚步骤3:全局变量定义unsigned char Rec_Data = 0x00; //定义串口接收缓冲区并初始化为0x0004任务实施步骤4:编写串口初始化函数04任务实施1.void InitUART(void)2.{3. PERCFG = 0x00; //串口0通信引脚选择备用位置14. P0SEL |= 0x0C; //P0_2和P0_3引脚用作外设功能5. P2DIR &= ~0xC0; //外设多功能复用引脚串口0优先级最高6. U0CSR |= 0x80; //选择串口UART异步通信模式7. U0GCR |= 9; //设置通信波特率为960004任务实施8. U0BAUD |= 59; //设置通信波特率为96009. U0UCR |= 0x02; //配置起始位低电平、停止位高电平、8位数据通信、无奇偶校验10. URX0IF=0; //接收中断标志位URX0IF清零11. U0CSR |= 0x40; //允许串口0接收12. URX0IE =1; //使能串口0中断13. EA =1; //使能总中断14.}04任务实施串口0初始化函数主要完成以下几项任务:(1) 设置PERCFG寄存器进行备用位置选择。(2) 设置P0SEL寄存器,将P0_2和P0_3两个I/O口配置作为外设功能。(3) 设置P0SEL寄存器进行多功能复用引脚优先级配置,串口0的优先级设置为最高。(4) 设置U0CSR寄存器,选择UART异步通信模式。(5) 设置U0GCR寄存器和U0BAUD寄存器选择通信波特率9600bps。(6) 设置U0UCR寄存器进行数据帧格式配置。(7) 将串口0接收中断标志位URX0IF清0。(8) 在U0CSR寄存器原来的基础上将RE位置1,使能串口0接收。(9) 使能串口0接收中断,即将串口0使能开关URX0IE置1。(10) 使能总中断,即将总中断开关EA置1.步骤5:编写串口0接收中断服务函数04任务实施1.#pragma vector = URX0_VECTOR2.__interrupt void UART0_ISR(void)3.{4. //执行串口0接收中断服务函数,硬件自动将串口0接收中断标志位URX0IF清05. Rec_Data=U0DBUF; //接收到的数据放入Rec_Data接收数据缓冲区中6.}04任务实施当串口0接收到一个字节数据时,串口0接收中断标志位URX0IF被硬件自动置1,在串口0接收中断和总中断都使能的情况下,CPU将会执行串口0接收中断服务函数,同时硬件自动将串口0接收中断标志位清0。在串口0接收中断服务函数中,将串口0接收寄存器U0DBUF的数据放入接收数据缓冲区Rec_Data中,然后继续下一次接收。步骤6:编写main主函数1.void main(void)2.{3. InitIO();4. InitUart(); //初始化串口5. while(1) //无限循环6. {7. if(Rec_Data == 0xAF) //判断串口接收到的数据是否为0xAF8. {9. Rec_Data = 0x00; //数据清0,串口0接收到数据才会改变此缓冲区的值04任务实施10. UTX0IF = 0; //串口0发送中断标志清011. U0DBUF= 0xBF; //将0xBF写入发送寄存器中12. while( UTX0IF==0 ); //等待串口0数据发送完成,硬件自动将串口0发送13. //中断标志置114. UTX0IF=0; //发送完成,软件将串口0发送中断标志清015. YELLOW1_LED =! YELLOW1_LED; //D3绿色LED灯状态翻转16. YELLOW2_LED =! YELLOW2_LED; //D4红色LED灯状态翻转17. }18. }19.}04任务实施04任务实施在一个需要利用串口进行收发数据的任务中,通常采用扫描方式判断串口数据是否发送完成,而采用中断方式判断是否接收到数据。04任务实施本任务采用中断方式判断串口0是否接收到十六进制数据0xBF,当接收到数据0xBF时,将应答数据0xAF发送给PC机,并通过扫描方式不断循环检测判断是否发送成功。当应答数据发送成功之后,将黄色交通信号灯的状态翻转,即黑板上D3绿色LED和D4绿色LED状态翻转,然后进入下一次的串口0数据接收。04任务实施12任务实施04打开工程编写代码3编译工程4仿真调试对工程进行编译,观察是否提示编译成功。如果出现错误或警告,需要认真检查修改,重新编译链接,直到没有错误和警告为止。04任务实施12任务实施04打开工程编写代码3编译工程4下载代码(1)用CC-Debugger仿真器的下载线连接黑板;(2)完成代码下载;(3)黑板上电,PC机上利用串口调试助手发送0xBF数据,观察PC机是否接收到0x AF应答数据以及黑板上D3绿色LED和D4红色LED状态是否翻转。04任务实施学习目标01知识储备03任务工单05任务要求与任务分析02任务实施04任务小结06知识与技能提升07延伸阅读084.3 CC2530单片机串口命令控制交通信号灯05任务工单1.当串口0接收到完整的一个字节数据,串口0接收中断标志位( )被硬件( )置( ),在串口0( )和( )都使能的情况下,单片机执行( )且硬件( )将串口0接收中断标志位URX0IF置( )。2.在串口0接收中断服务函数之前,通过宏指令“( ) ”或“( )”将该中断函数指向( ),当串口0接收中断时,将会执行该中断服务函数。3.当串口0发送完成一个字节数据后,串口0发送中断标志位UTX0IF会被硬件置( ),这时候可以通过软件( )检测串口0发送中断标志位( )的状态变化,从而判断串口0是否完成一个字节的数据发送。4.采用( )判断串口0发送是否完成,硬件不会( )将串口0发送中断标志位UTX0IF置( )。因此,当检测到串口0发送中断标志位为( )时,需要通过软件操作将该标志位置( ),才能保证下一字节数据正常发送。本次任务关键知识引导任务工单05各组选派代表分析本组任务实施经验;01添加标题请参照评价标准完成自评;02完成对其他小组的评价。03互评经验分享自评评价方式 可采用自评、互评、老师评价等方式 说明 主要评价学生在项目学习过程中的操作技能、理论知识、学习态度、课堂表现、学习能力等。 序号 评价内容 评价标准 分值 得分1 知识运用(20%) 掌握相关理论知识,完成本次任务关键知识的作答准确率(20分) 20分2 专业技能(40%) 工程编译通过,单片机接收控制命令,应答及执行正常。(40分) 40分工程编译通过,单片机接收控制命令,应答及执行异常。(30分)完成代码的输入,工程没有编译通过。(15分)建立工程错误,或者部分输入代码。(5分)3 核心素养(20%) 具有良好的自主学习、分析解决问题、帮助他人的能力、整个任务过程中有指导他人并解决他人问题(20分) 20分具有较好的学习能力和分析解决问题的能力,任务过程中无指导他人(15分)具有主动学习并收集信息的能力,遇到问题有请教他人并得以解决(10分)不主动学习(0分)4 职业素养(20%) 实验完成后,设备无损坏、设备摆放整齐、工位区域内保持整洁、无干扰课堂秩序(20分) 20分实验完成后,设备无损坏、无干扰课堂秩序(15分)无干扰课堂秩序(10分)干扰课堂秩序(0分)总得分学习目标01知识储备03任务工单05任务要求与任务分析02任务实施04任务小结06知识与技能提升07延伸阅读084.3 CC2530单片机串口命令控制交通信号灯任务小结06学习目标01知识储备03任务工单05任务要求与任务分析02任务实施04任务小结06知识与技能提升07延伸练习084.3 CC2530单片机串口命令控制交通信号灯任务拓展07动动脑(1)请思考中断方式串口接收数据与扫描方式串口接收数据的优缺点;(2)请思考中断方式串口发送数据与扫描方式串口发送数据的优缺点。任务拓展07动动手请在本任务的基础上进行修改,将应答数据改为”0xAA”。学习目标01知识储备03任务工单05任务要求与任务分析02任务实施04任务小结06知识与技能提升07延伸练习084.3 CC2530单片机串口命令控制交通信号灯延伸练习08请在本任务代码基础上进行修改,实现如下功能:(1)当CC2530单片机接收到的数据为0x01时,打开D6红色LED;接收到的数据为0x02时,关闭D6红色LED。(2)当CC2530单片机接收到的数据为0x03时,打开D5绿色LED;接收到的数据为0x04时,关闭D5绿色LED。(3)当CC2530单片机接收到的数据为0x05时,打开D3绿色LED和D4红色LED;接收到的数据为0x06时,关闭D3绿色LED和D4红色LED。 展开更多...... 收起↑ 资源预览