5.4 远程模式使用串口命令控制交通信号灯 课件(共67张PPT)-《单片机技术与C语言基础 》同步教学(电子工业版)

资源下载
  1. 二一教育资源

5.4 远程模式使用串口命令控制交通信号灯 课件(共67张PPT)-《单片机技术与C语言基础 》同步教学(电子工业版)

资源简介

(共67张PPT)
单片机与C语言技术应用
第五单元 任务4
5.4 远程模式使用串口命令控制交通信号灯
学习目标
01
知识储备
03
任务工单
05
任务要求与任务分析
02
任务实施
04
任务小结
06
知识与技能提升
07
延伸阅读
08
学习目标
01
掌握交通信号灯在各种工作模式下的运行过程;
掌握根据任务需求查阅C语言相关知识点;
掌握根据任务要求查阅CC2530中文技术手册的相关知识要点;
掌握对任务进行分解并设计软件流程;
掌握C语言的预处理、数据类型、常用运算符、控制语句、程序结构相关知识点;
掌握I/O口输入检测、I/O口输出控制、定时器1计数、串口0通信。
学习目标
01
能根据任务需求对任务进行分解并设计软件流程图;
能根据任务需求查阅CC2530中文技术手册的相关知识要点;
能利用C语言知识要点结合软件流程图编写代码;
能对I/O口输入检测、I/O口输出控制、定时器1计数、串口0通信进行整合设计智能交通信号灯。
学习目标
01
知识储备
03
任务工单
05
任务要求与任务分析
02
任务实施
04
任务小结
06
知识与技能提升
07
延伸阅读
08
5.4 远程模式使用串口命令控制交通信号灯
任务要求与任务分析
02
● 任务要求:
①黑板通电后,D5绿色LED点亮(绿灯亮),D3、D4和D6均熄灭,表示初始化为手动模式和绿灯亮状态;
②操作SW2按键,直到出现D4红色LED闪烁(指示灯闪烁),表示当前为远程模式;
任务要求与任务分析
02
● 任务要求:
③PC机发送控制命令0xBF,D4闪烁,D3绿色LED点亮(黄灯亮),D5和D6熄灭,PC机接收到应答数据0xBF;
④PC机发送控制命令0xCF,D4闪烁,D6红色LED点亮(红灯亮),D3和D5熄灭,PC机接收到应答数据0xCF;
任务要求与任务分析
02
● 任务要求:
⑤PC机发送控制命令0xAF,D4闪烁,D5绿色LED点亮(绿灯亮),D3和D6熄灭,PC机接收到应答数据0xAF;
⑥PC机发送除0xAF、0xBF、0xCF以外的控制命令,D3、D4、D5、D6状态未发生任何变化,PC机接收到应答数据为PC机所发出的控制命令。
任务要求与任务分析
02
● 任务分析:
定时器1工作在模模式下定时输出控制;
中断方式串口接收PC机控制命令;
根据控制命令控制交通信号灯;
扫描方式将控制命令作为应答数据发送给PC机。
学习目标
01
知识储备
03
任务工单
05
任务要求与任务分析
02
任务实施
04
任务小结
06
知识与技能提升
07
延伸阅读
08
5.4 远程模式使用串口命令控制交通信号灯
交通信号灯远程模式下的运行过程
1
知识储备
03
C语言知识要点
2
3
CC2530技术手册中相关知识要点
03
知识储备
远程模式下,单片机通过串口接收PC机发送的控制命令控制交通信号灯,并将控制命令作为应答数据发送给PC机。
控制命令可以是一个字节或多个字节,每个字节所代表的含义依据双方制定的控制协议。
单片机串口发送和接收都可以采用扫描方式或中断方式,但在工程应用中,串口发送一般采用扫描方式,而串口接收一般采用中断方式。
03
知识储备
本任务的串口发送采用扫描方式,而串口接收采用中断方式。
串口接收中断服务函数的执行时间要求尽可能短,避免连续字节接收过程中丢掉下一个字节。
因此,在串口接收中断服务函数里,需要将接收寄存器的内容放入串口接收数据缓冲区,同时更新串口接收数据更新标志。
主函数根据串口接收数据更新标志的值判断当前串口是否接收到新的数据。
03
知识储备
定义两个字节型全局变量,其中一个变量用作串口接收数据缓冲区,另一个变量用作串口接收数据更新标志。
当串口接收数据更新标志无效时,表示串口未接收到新的数据;
当串口接收数据更新标志有效时,表示串口已接收到新的数据。
主函数根据串口接收数据更新标志判断串口是否接收到新的数据,同时根据串口接收数据缓冲器的值控制交通信号灯。
03
知识储备
本任务中定义串口接收数据缓冲区和串口接收数据更新标志的配置代码如下:
1.unsigned char Rec_Data=0x00; //串口接收数据缓存区
2.unsigned char Rec_flag=0x00; //串口接收数据更新标志
Rec_flag为0x00表示串口未接收到数据;
Rec_flag为0x01表示串口已接收到数据。
交通信号灯远程模式下的运行过程
1
知识储备
03
C语言知识要点
2
3
CC2530技术手册中相关知识要点
03
知识储备
已在本单元任务1介绍。
交通信号灯远程模式下的运行过程
1
知识储备
03
C语言知识要点
2
3
CC2530技术手册中相关知识要点
03
知识储备
本任务主要涉及I/O口输入检测、I/O口输出控制、定时器1计数和串口0通信,其中,I/O口输入检测使用扫描方式,定时器1选择工作在模模式下,串口0接收采用中断方式,串口0发送采用扫描方式。
03
知识储备
为完成本任务,可查阅CC2530中文数据手册中相关技术要点,具体如下:
(1)查阅CC2530中文数据手册中的“7.3 通用I/O口”;
(2)查阅CC2530中文数据手册中的“7.11 I/O引脚”;
(3)查阅CC2530中文数据手册中的“7.6 外设I/O口”
(4)查阅CC2530中文数据手册中的“9.1 16位计数器”;
(5)查阅CC2530中文数据手册中的“9.4 模模式”;
03
知识储备
(6)查阅CC2530中文数据手册中的“9.8 输出比较模式”;
(7)查阅CC2530中文数据手册中的“9.10 定时器1中断”;
(8)查阅CC2530中文数据手册中的“9.12 定时器1寄存器”
(9)查阅CC2530中文数据手册中的“16.1 UART模式”;
(10)查阅CC2530中文数据手册中的“16.4 波特率的产生”;
(11)查阅CC2530中文数据手册中的“16.6 USART中断”;
(12)查阅CC2530中文数据手册中的“16.8 USART寄存器”。
学习目标
01
知识储备
03
任务工单
05
任务要求与任务分析
02
任务实施
04
任务小结
06
知识与技能提升
07
延伸阅读
08
5.4 远程模式使用串口命令控制交通信号
任务实施
04
● 任务实施前必须先准备好以下设备和资源:
序号 设备/资源名称 数量 是否准备到位(√)
1 计算机(已安装好IAR软件) 1台
2 NEWLab实训平台 1套
3 CC-Debugger 仿真器 1套
4 黑板 1块
1
2
任务实施
04
打开工程
编写代码
3
编译工程
4
仿真调试
●打开本书配套源代码文件夹中的“远程模式使用串口命令控制交通信号灯.ewp”工程。
04
任务实施
1
2
任务实施
04
打开工程
编写代码
3
编译工程
4
仿真调试
● 步骤1:头文件包含
04
任务实施
#include
● 步骤2:I/O引脚和数值宏定义
04
任务实施
1.#define Led_Red P1_4 //P1_4引脚宏定义
2.#define Led_Green P1_3 //P1_3引脚宏定义
3.#define Led_Yellow P1_0 //P1_0引脚宏定义
4.#define Led_Mode P1_1 //P1_1引脚宏定义
5.#define SW1 P1_2 //P1_2引脚宏定义
6.#define SW2 P0_1 //P0_1引脚宏定义
7.
8.#define Manual_Mode 0x00 //手动模式
9.#define Auto_Mode 0x01 //自动模式
10.#define Remote_Mode 0x02 //远程模式
11.#define Green_State 0x00 //绿灯亮
12.#define Yellow_State 0x01 //黄灯亮
13.#define Red_State 0x02 //红灯亮
14.#define Yellow_Time 5000 //绿灯持续时间
15.#define Red_Time 6000 //绿灯与黄灯持续的总时间
16.#define Green_Time 11000 //绿灯、黄灯、红灯持续的总时间
步骤3:全局变量定义及初始化
1.unsigned char Work_Mode=Manual_Mode; //工作模式,初始化默认为手动模式
2.unsigned char Led_State =Green_State; //初始化默认为绿灯
3.unsigned int Led_Timer=0; //交通灯计数器
4.unsigned int Mode_Led_Timer=0x00; //模式指示灯计数器,单位为1ms
5.
6.unsigned char Rec_Data=0x00; //串口接收数据缓存区
7.unsigned char Rec_flag=0; //串口接收数据更新标志
04
任务实施
04
任务实施
main主函数执行之前,全局变量将被定义并初始化,因此黑板上电后,工作模式默认为手动模式且交通信号灯的状态默认为绿灯点亮。
步骤4:编写I/O口初始化函数
04
任务实施
1.void InitIO(void)
2.{
3. P1SEL &=0xE4; //设置P1_0、P1_1、P1_3、P1_4为通用I/O引脚
4. P1DIR |=0x1B; //设置P1_0、P1_1、P1_3、P1_4为输出引脚
5. P1SEL &=0xFB; //设置P1_2为通用I/O引脚
6. P1DIR &=0xFB; //设置P1_2为输入引脚
7. P0SEL&=0xFD; //设置P0_1为通用I/O口引脚
8. P0DIR&=0xFD; //设置P0_1为输入引脚
04
任务实施
9. //输入默认上拉
10. Led_Red=0; //关闭红灯
11. Led_Green=1; //开启绿灯
12. Led_Yellow=0; //关闭黄灯
13. Led_Mode=0; //模式指示灯关闭,表示上电初始状态处于手动模式
14.}
完成I/O口的输入/输出与上下拉配置,点亮绿灯,并将模式指示灯关闭,表示上电初始状态处于手动模式。
步骤5:编写定时器1初始化函数
04
任务实施
1.void Init_Timer1(void)
2.{
3. T1CTL=0x02; //定时器分频系数为1,默认为16MHz,选择模模式
4. T1CC0L=0x80; //最大计数值低8位
5. T1CC0H=0x3E; //最大计数值高8位,最大计数值为16000,定时1ms
6. T1CCTL0|=0x04; //配置通道0为比较模式
7. T1IE=1; //使能定时器1中断
8.}
04
任务实施
设置定时器1的分频系数,从而决定定时器1的时钟频率;设置定时器1的最大计数值并选择模模式工作;设置定时器1为通道0比较输出并使能定时器1中断。
步骤6:编写串口0初始化函数
04
任务实施
1.void InitUart(void)
2.{
3. PERCFG = 0x00; //位置1 P0口
4. P0SEL = 0x0C; //P0_2,P0_3用作串口
5. P2DIR &= ~0xC0; //P0优先作为UART0
6. U0CSR |= 0x80; //UART方式
7. U0GCR |= 9; //U0GCR.BAUD_E
04
任务实施
8. U0BAUD |= 59; //波特率设为9600 UxBAUD.BAUD_M
9. U0UCR|=0x02; //禁止流控,串口通信模式设置
10. UTX0IF = 0; //串口0发送中断标志初始化为0
11. URX0IF = 0; //串口0接收中断标志初始化为0
12. U0CSR |= 0x40; //串口0接收允许
13. URX0IE=1; //串口0接收中断使能
14.}
选择串口0通信的I/O口,设置串口0通信波特率;
设置串口0通信的数据帧格式,将串口发送和接收中断标志置0;
设置串口0接收允许,使能串口0接收中断。
04
任务实施
步骤7:编写延时函数
已在本单元任务1完成。
步骤8:编写SW1按键检测函数
已在本单元任务2完成。
步骤9:编写SW2按键检测函数
已在本单元任务1完成。
步骤10:编写远程模式控制任务函数
04
任务实施
1.void Remote_Control_Task(void)
2.{
3. if(Work_Mode==Remote_Mode) //判断当前是否为远程模式
4. {
5. if(Rec_flag==1) //判断串口是否接收到新数据
6. {
7. Rec_flag=0; //串口接收更新标志置0
8. switch(Rec_Data) //判断接收数据的值
9. {
10. case 0xAF:
04
任务实施
11. Led_Green=1; //绿灯亮
12. Led_Yellow=0; //黄灯灭
13. Led_Red=0; //红灯灭
14. Led_State=Green_State; //绿灯状态
15. break;
16. case 0xBF:
17. Led_Green=0; //绿灯灭
18. Led_Yellow=1; //黄灯亮
19. Led_Red=0; //红灯灭
20. Led_State=Yellow_State; //黄灯状态
21. break;
04
任务实施
22. case 0xCF:
23. Led_Green=0; //绿灯灭
24. Led_Yellow=0; //黄灯灭
25. Led_Red=1; //红灯亮
26. Led_State=Red_State; //红灯状态
27. break;
28. default:
29. break;
30. }
04
任务实施
31. UTX0IF=0; //串口发送完成标志清0
32. U0DBUF=Rec_Data; //串口发送应答数据
33. while(UTX0IF==0); //等待串口发送完成
34. UTX0IF=0; //串口发送完成标志清0,为下次发送做准备
35. }
36. }
37.}
04
任务实施
远程模式下根据串口接收的命令控制交通信号灯,并将接收的命令作为应答数据通过串口发送至PC机。
04
任务实施
远程模式控制任务:
04
任务实施
步骤11:编写定时器1中断服务函数
已在本单元任务3完成。
步骤12:编写串口0接收中断服务函数
04
任务实施
1.#pragma vector = URX0_VECTOR
2. __interrupt void UART0_RX_ISR(void)
3.{
4. URX0IF = 0; //清除串口接收中断标志
5. Rec_Data=U0DBUF; //将接收到的数据放入接收数据缓冲区
6. Rec_flag=1; //串口接收数据更新标志
7.}
04
任务实施
串口0接收中断主要完成将接收到的数据移入接收数据缓冲区,同时将串口接收数据更新标志置1,远程模式控制任务根据串口接收数据更新标志判断是否接收到控制命令。
步骤13:编写main主函数
04
任务实施
1.void main(void)
2.{
3. InitIO(); //I/O口初始化
4. Init_Timer1(); //定时器初始化
5. InitUart(); //串口初始化
6. EA=1; //使能总中断
7. while(1)
04
任务实施
8. {
9. SW1_Key_Scan(); //SW1按键扫描任务
10. SW2_Key_Scan(); //SW2按键扫描任务
11. Remote_Control_Task(); //远程模式控制任务
12. }
13.}
04
任务实施
main主函数完成I/O口初始化、定时器1初始化、串口初始化以及总中断使能,然后不断循环执行SW1按键检测任务、SW2按键检测任务及远程模式控制任务
04
任务实施
main主函数:
04
任务实施
1
2
任务实施
04
打开工程
编写代码
3
编译工程
4
仿真调试
对工程进行编译,观察是否提示编译成功。如果出现错误或警告,需要认真检查修改,重新编译链接,直到没有错误和警告为止。
04
任务实施
1
2
任务实施
04
打开工程
编写代码
3
编译工程
4
下载代码
(1)用CC-Debugger仿真器的下载线连接黑板;
(2)完成代码下载;
(3)黑板上电,手动操作SW2按键,观察到D4红色LED闪烁表示当前为远程模式;PC机通过串口发送0xAF命令,观察D5绿色LED(绿灯)是否点亮,同时PC机是否接收到应答数据0xAF;PC机通过串口发送0xBF命令,观察D3绿色LED(黄灯)是否点亮,同时PC机是否接收到应答数据0xBF;PC机通过串口发送0xCF命令,观察D6红色LED(红灯)是否点亮,同时PC机是否接收到应答数据0xCF。
04
任务实施
学习目标
01
知识储备
03
任务工单
05
任务要求与任务分析
02
任务实施
04
任务小结
06
知识与技能提升
07
延伸阅读
08
5.4 远程模式使用串口命令控制交通信号灯
05
任务工单
本次任务关键知识引导:
1.( )类型数据长度为1个字节,可以表示( )到( )之间的数值。( )类型数据长度为2个字节,可以表示( )到( )之间的数值。
2.while循环表达式为( )时,执行循环主体内的语句;直到表达式为( )时,跳出循环语句。
3.连接好CC-Debugger仿真器,选择菜单Project->( )进入调试状态。
4.选择菜单Debug->( )退出仿真调试模式。
5.断点有( )和( )之分,功能为在指定指令或者代码行中断程序的执行。
6.P0INP、P1INP、P2INP寄存器的配置只对( )I/O端口有效。
7.中断服务函数中( )关键字表示该函数是一个中断服务函数。
8.( )用于中断服务函数指向特定的中断向量。
任务工单
05
各组选派代表分析本组任务实施经验;
01
添加标题
请参照评价标准完成自评;
02
完成对其他小组的评价。
03
互评
经验分享
自评
评价方式 可采用自评、互评、老师评价等方式 说明 主要评价学生在项目学习过程中的操作技能、理论知识、学习态度、课堂表现、学习能力等。 序号 评价内容 评价标准 分值 得分
1 知识运用(20%) 掌握相关理论知识,完成本次任务关键知识的作答准确率(20分) 20分
2 专业技能(40%) 工程编译通过,PC机发送命令,交通信号灯控制和PC机接收应答数据正常。(40分) 40分
工程编译通过,PC机发送命令,交通信号灯控制和PC机接收应答数据异常。(30分)
完成代码的输入,工程没有编译通过。(15分)
建立工程错误,或者部分输入代码。(5分)
3 核心素养(20%) 具有良好的自主学习、分析解决问题、帮助他人的能力、整个任务过程中有指导他人并解决他人问题(20分) 20分
具有较好的学习能力和分析解决问题的能力,任务过程中无指导他人(15分)
具有主动学习并收集信息的能力,遇到问题有请教他人并得以解决(10分)
不主动学习(0分)
4 职业素养(20%) 实验完成后,设备无损坏、设备摆放整齐、工位区域内保持整洁、无干扰课堂秩序(20分) 20分
实验完成后,设备无损坏、无干扰课堂秩序(15分)
无干扰课堂秩序(10分)
干扰课堂秩序(0分)
总得分
学习目标
01
知识储备
03
任务工单
05
任务要求与任务分析
02
任务实施
04
任务小结
06
知识与技能提升
07
延伸阅读
08
5.4 远程模式使用串口命令控制交通信号灯
任务小结
06
学习目标
01
知识储备
03
任务工单
05
任务要求与任务分析
02
任务实施
04
任务小结
06
知识与技能提升
07
延伸练习
08
5.4 远程模式使用串口命令控制交通信号灯
任务拓展
07
动动脑
如果SW1按键或SW2按键出现卡键现象,远程模式下使用串口命令控制交通信号灯能正常运行吗?
任务拓展
07
动动手
请在本任务的基础上进行修改,PC机发送控制命令0x01时,绿灯点亮并将控制命令加1作为应答数据;
PC机发送控制命令0x02时,黄灯点亮并将控制命令加2作为应答数据;
PC机发送控制命令0x03时,红灯点亮并将控制命令加3作为应答数据;
任务拓展
07
动动手
PC机发送控制命令0x00时,绿灯、黄灯、红灯均熄灭并将控制命令直接作为应答数据;
PC机发送控制命令0xFF时,绿灯、黄灯、红灯均点亮并将控制命令直接作为应答数据。
学习目标
01
知识储备
03
任务工单
05
任务要求与任务分析
02
任务实施
04
任务小结
06
知识与技能提升
07
延伸练习
08
5.4 远程模式使用串口命令控制交通信号灯
延伸练习
08
本任务的远程控制命令为一个字节,而工程应用中的远程控制命令通常为数据帧,包括帧头、帧尾、数据包等。采用数据帧进行远程控制,将使得控制功能更加丰富。
延伸练习
08
针对以上问题,可以根据数据帧的长度定义接收数据缓冲区的大小。单片机依据约定好的协议解析接收数据缓冲器的内容,并控制交通信号灯。同时定义一串口计数器,用于计算前后两个字节接收之间的时间差,当计数器所计算的时长超过一定范围,可判定为下一帧数据的开始。

展开更多......

收起↑

资源预览