物联网技术区|| STC15单片机应用开发之用计算机控制LED灯
发布者:
布时间:2020-09-16 16:18:03
点击量:
使用计算机的串口助手向实验板发送控制符,实验板上的LED灯根据控制字符进行点亮、熄灭、闪烁三种状态的转换,具体实现过程为:串口助手向实验板发送“01”时,LED灯亮;发送“00”时,LED灯灭。
知识引入
STC15W4k56S4单片机内部共有4路全双工串行通信接口,串行通信是指将数据字节分成一位一位的形式在一条传输线上逐个传输。特点是:传输速度慢,但传输线少,适用于长距离传输,RS-232是应用最多的一种异步串行通信总线标准。
- STC15W4K56S4单片机具有4个采用UART工作方式的全双工异步串行通信接口(串口1、串口2、串口3和串口4)。
- STC15W4K56S4单片机的串行口1有4种工作方式,其中两种方式的波特率是可变的,另两种是固定的,以供不同应用场合选用。串行口2/串行口3/串行口4都只有两种工作方式,这两种方式的波特率都是可变的。用户可用软件设置不同的波特率和选择不同的工作 方式。主 机可通过查询或中断方式对接收/发送进行程序处理,使用十分灵活。
STC15W4K56S4单片机的串行通信口,除用于数据通信外,还可方便地构成一个 或多个并行I/O口,或作串—并转换,或用于扩展串行外设等。
- 串行通信分类
(1)同步通信
同步通信是一种连续串行传送数据的通信方式,一次通信传输一组数据。同步通信需要
建立发送方时钟对接收方时钟的直接控制,使双方达到完全同步。同步通信的数据传输效率较高,通常可达56000bit/s或更高,缺点是要求发送时钟与接收时钟必须严格保持同步,硬件相对较复杂。
(2)异步通信
在异步通信中,数据通常以数据(或字节)为单位组成字符帧进行传输。发送端与接收端可以有各自的时钟来控制数据的发送与接收,且两个时钟彼此独立,互不干扰,但要求传输速率一致。但由于传输间隔任意,每个字符都要用一些数位来进行分隔,比如起始位和停止位等。
- 相关寄存器设置
每个STC15W4k56S4单片机串行口的数据缓冲器由2个互相独立的接收、发送缓冲器构成,可以同时发送和接收数据。发送缓冲器只能写入而不能读出,接收缓冲器只能读出而不能写入,因而两个缓冲器可以共用一个地址码。串行口1的两个缓冲器共用的地址码是99H;串行口2的两个缓冲器共用的地址码是9BH;串行口3的两个缓冲器共用的地址码是ADH;串行口4的两个缓冲器共用的地址码是85H。串行口1的两个缓冲器统称串行通信特殊功能寄存器SBUF;串行口2的两个缓冲器统称串行通信特殊功能寄存器S2BUF;串行口3的两个缓冲器统称串行通信特殊功能寄存器S3BUF;串行口4的两个缓冲器统称串行通信特殊功能寄存器S4BUF。
本任务中采用串口1实现对LED灯的控制,与串口1有关的特殊功能寄存器有:单片机串口1的控制寄存器、与波特率设置有关的定时/计数器(T1/T2)的相关寄存器,与中断控制相关的寄存器,具体如表3-6 所示。
表3-6 与单片机串口1有关的特殊功能寄存器
串口1控制寄存器SCON用于设定串行口1的工作方式,允许接收控制以及设置状态标志,REN位为允许串口接收控制位。TI为发送中断标志位,RI为接收中断标志位,发送或者接收完成之后,由硬件置位,可用查询方法也可用中断方法相应中断,然后在相应的查询服务程序或中断服务程序中,由软件清除TI或RI。串口方式选择如表3-7所示,f
SYS为系统时钟频率。
REN=1 或 SCON |=0x10; //启动串口1接收
表3-7 串行方式选择位
SM0 SM1 |
工作方式 |
功 能 |
波特率 |
0 0 |
方式0 |
8位同步移位寄存器 |
fSYS/12或fSYS/2 |
0 1 |
方式1 |
10位URAT |
可变,取决于T1或T2溢出率 |
1 0 |
方式2 |
11位UART |
fSYS/64 或fSYS/32 |
1 1 |
方式3 |
11位UART |
可变,取决于T1或T2溢出率 |
寄存器SCON中SM2为多机通信控制位,用于方式2和方式3中,TB8和RB8分别为发送数据第9位和接收数据第9位。
电源与波特率选择寄存器PCON中,SMOD位为波特率倍增系数选择位,在串口工作方式1,2,3中,串口波特率与SMOD有关,当SMOD=0时,通信速度为基本波特率,当SMOD=1时,通信速度为基本波特率的两倍;SMOD0位为帧错误检测有效控制位,当SMOD0=1时,SCON寄存器中SM0/FE用于帧错误检测(FE),当SMOD0=0时,SCON寄存器中SM0/FE用于SM0功能,与SM1一起制定串行口1工作方式。
辅助寄存器AUXR中,当UART_M0x6=0时,串口1的通信速度与传统8051单片一致,波特率为系统时钟频率的12分频,即f
SYS/12,当UART_M0x6=1时,串口1的通信速度是传统8051单片的6倍,波特率为系统时钟频率的2分频,即f
SYS/2;S1ST2位为当串口1的工作方式为1、3时,S1ST2为串行口1波特率发生器选择控制位,当S1ST2=0时,选择定时器1为波特率发生器,当S1ST2=1时,选择定时器2为波特率发生器。
串口1工作方式0中,波特率为fSYS/12(UART_M0x6=0)或者fSYS/2(UART_M0x6=1)。
串口1工作方式2中,波特率取决于PCON中SMOD的值,SMOD=1时,波特率为fSYS/32,SMOD=0时,波特率为fSYS/64。
在方式1和方式3下,波特率由定时器T1或定时器T2的溢出率决定。方式1和方式3 的波特率为:
当定时器1工作于模式0(16位自动重装载模式)且AUXR.6/T1x12=0时,定时器1的溢出率= SYSclk/12(65536-[RLTH1,RLTL1]);当定时器1工作于模式0(16位自动重装载模式)且AUXR.6T1x12=1时,定时器1的溢出率= SYSclk/65536-[RLTH1,RLTL1];当定时器1工作于模式2(8位自动重装模式)且T1x12=0时,定时器1的溢出率= SYSclk/12/(256-TH1);当定时器1工作于模式2(8位自动重装模式)且T1x12=1时,定时器1的溢出率= SYSclk/(256-TH1);
当AUXR2/T2x12=0时,定时器T2的溢出率= SYSclk/12/(65536-[RLTH2,RLTL2]);
当AUXR.2T2x12=1时,定时器T2的溢出率= SYSclk/(65536-[RLTH2,RLTL2])。
本任务中,使用串口1进行LED等控制,串口工作为方式1,实验板中时钟频率fosc=11.0592MHz,串口波特率设定为9600。
3.关键代码分析
#include
// 引用头文件
#define uchar unsigned char //定义unsigned int为uint
#define uint unsigned int //定义unsigned uchar为uchar
uchar rec_data; //定义一个字符型变量用于存放接收到的数据
bit rec_flag; //定义一个位变量(接收到数据记标志)
sbit LED = P2^2; //接收指示灯
//========= 串口中断服务函数 ============
void UartInit(void) //9600bps@11.0592MHz
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
AUXR &= 0xBF; //定时器1时钟为Fosc/12,即12T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xFD; //设定定时初值
TH1 = 0xFD; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
}
void serial_int() interrupt 4
{
if(RI) //判断是否为接收中断
{
RI = 0; //接收中断标志清0
rec_data = SBUF; //保存数据
rec_flag = 1; //接收标志置1
}
}
//-----------------------------------主函数----------------------------
void main()
{
UartInit(); //串口初始化
ES = 1; //允许串口中断
EA = 1; //开启所有中断
P2M1 &= ~(3<<2); //IO口设置
P2M0 |= (3<<2);
rec_flag = 0; //接收标志位初始化
while(1) //主循环
{
if(rec_flag==1) //判断是否接收到数据
{
rec_flag = 0; //接收标志清0
if(rec_data ==0x01) LED=0; //当收到0x01数据时 点亮LED
else LED=1;
}
}
}
任务实现
- 1. 将无线模块插到节点底板上,注意天线朝左。
- 2. 为节点底板通电
- 3. 使用Keil软件打开随书资源中”源代码\项目三\任务3\WZ01_CZ_A_V1.0.uvproj”,工程目录如图所示。
- 4. 在主程序main.c中编辑前面关键代码分析中的源码,完成后保存。
- 5. 依据本教材项目二中任务二的操作,进行编译选项的设置。
- 6. 点击编译按钮,成功编译后,在工程目录下output文件夹中生成了”计算机控制LED灯实验.hex”可执行文件。
- 7. 打开STC-ISP软件,将USB-TTL下载器插上电脑(需要安装驱动),依据本教材项目二中任务三中的操作,选择下载器端口号和刚刚生成的HEX文件。
- 8. 查看运行结果
程序下载完毕时。打开串口助手(见图3-1),串口根据自己电脑上的串口接口进行调整,波特率设为9600 bit/s,点击打开串口。
图3-1 串口助手
上电初始状态LED灯熄灭,在“发送缓冲区”窗口中输入01,点击发送数据,无线模块上的LED灯点亮;在“发送缓冲区”窗口中输入00,点击发送数据,无线模块上的LED灯熄灭。
注意主要是利用计算机串口通信来控制节点板上LED灯状态,主要讲述了单片机串口的基本知识及其相关寄存器的功能描述,介绍了STC-ISP软件中串口助手的使用方法,在学习过程中重点掌握串口寄存器的设置及程序中的书写方式。理解关键代码分析中void UartInit(void)串口初始化的代码功能,可以与前面任务中相关寄存器初始化代码对比,加深理解。
唯众物联网工程应用实训装置带你快速掌握物联网关键技术
一、产品名称:物联网工程应用实训装置
二、产品型号和技术规格
1. 产品型号:WZ-IOT-ATP
2. 外型尺寸:
桌面式操作台1个操作台底座1个
3. 电压/功率:220V
4. 配套设备
实训台:
温湿度传感器1个
人体红外监测器1个
高频RFID阅读器1个
光照强度检测器1个
可燃气体监测器1个
RGB三色灯执行器1个
LED显示屏2个
智能语音播放设备1个
继电器1个
物联网教学实训主要用于对物联网核心课程的知识点学习,能够服务于相关课程的实验和实训需求。
核心课程主要针对学科基础技术的培养,掌握物联网概论,传感器和RFID 等感知设备认知和开发,ZigBee/Wi-Fi/蓝牙等无线网络的配置、维护和开发,物联网互联接入及存储,物联网应用层软件开发,物联网产品整合等基本知识。
核心课程采用全模块化的实验箱教学产品进行实验,具备优良的教学实验特性:全模块化的设计、开放式的硬件接口、开源的实验代码、完整的教学资源、贴心的售后服务。
基于ARM Cortex-M4核心的通信网关,支持无线节点模块的双向连接及组网,与配套“可视化编辑器”和“可视化控制器”进行配置和控制。物联网关可以管理不同协议的无线节点模块,并能将多个无线节点模块视作不同设备,将无线节点模块的数据转换为TCP网络通信进行传输,网关同无线节点模块可以互通互联,轻松构建物联网络,共同构成物联应用开发平台。通过本物联网平台,可以迅速降低物联网应用的开发成本和开发时间,开发者即便不会编程,也可以在一两天之内,就迅速使用本平台开发搭建出自己的物联网应用。
通过电脑PC端可直接以“可见即可得”的方式在此工具上生成不同的设备操作界面,支持指示灯、按键、图片集合、变量视窗、图文链接等五种可视化控件。所有控件的动作都可以直接反应到实际的物联设备(即无线节点模块)上。界面生成后,可以直接导入App使用,而不需要重新编译或安装App。
通过物联网关、可视化控制器、可视化界面生成器编辑器、万纳模组、物联网传感器/执行器以及配套物联网连件连接件,师生不仅可以完成出基于物联网、远程访问、设备联动等功能的物联网实训项目,还可以迅速开发物联网商业产品\项目,如空气监测仪、电气设备在线监测器等等,并随时实现不同设备间的联动,而这些开发过程,基于本系统的可视化开发工具,可以做到零编程实现物联网应用系统。
支持家庭常用的各种无线协议(红外、射频),兼容市面绝大多数品牌的空调、电视机、灯光、安防、窗帘等等家电设备,因此可以直接当做一套完备的智能家居系统进行使用,并集成了摄像头功能,可以直接在App中使用摄像头。
平台所有设备采用模块化、集散化、工业化的设计模式,每个模块都为独立工作单元;模块均接近实际应用系统,能够容纳2-3个学生同时实训,可完成工程项目应用开发系统中硬件设备的安装、布线与调试,完成设备间的无线组网,既具有展示型又具有实操性。能够组建具有行业特色的物联网智能家居实训项目,确保学生可利用设备搭建真实工程项目。
上一篇:物联网技术区||STC15单片机应用开发之LED灯闪烁效果实现
下一篇:物联网技术区||STC15单片机应用开发之 LED灯亮度控制