51单片机玩转物联网基础篇09-串口通信

最新更新时间:2022-05-13来源: eefocus关键字:51单片机  物联网  串口通信 手机看文章 扫描二维码
随时随地手机看文章

前言

串口通信在嵌入式开发中占据非常重要的低位,串口经常被用来调试系统,打印必要的调试信息,帮助我们分析定位问题,同时很多常见的外设也支持串口协议,如WIFI模块、蓝牙模块、4G模块、指纹模块、PM2.5传感器、甲醛传感器等诸多元器件,本节开始,我们正式学习51单片机的串口。


一、基础知识

1. 通信方式简介

串口使用的通信方式是串行通信,串口通信是相对于并行通信来说的,所谓并行通信的是数据的各位同时传送,其特点是传输速度快、效率高,但是使用数据线较多,传输成本较高,适合近距离通信,其示意图如下:

图片

所谓串行通信其实是指数据通过一根数据线一位一位依次传送给目标设备,其特点是至少只需要一根传输线即可完成,成本低但传输速断慢,其只需要少数几条线就可以在系统间交换信息。其示意图如下:

图片

2. 串行通信制式

按照数据传输方向,可以分为三张总制式,即单工、半双工、全双工。 图片(a) 单工制式


A站和B站数据只能从一个设备发至另一个设备,单向传输。


(b) 半双工工制式


A站和B站数据传送是双向的,但同一时刻只能有一个方向数据传送,接收开关可由软件控制。


© 全双工制式


A站和B站任意时刻数据都可以同时发送和接收数据


3. 单片机串口介绍

我们将从单片机串口结构原理、串口通信方式特点两个方面介绍单片机串口,串口结构原理了解即可,串口通信方式特点需要重点掌握


(a) 串口结构原理


图片

单片机串口内部结构如上图所示,主要由两个物理上独立的串行数据缓冲寄存器SBUF、发送控制器、接收控制器、输入移位寄存器和输出控制门组成,单片机发送数据时候通过TXD(P3.1引脚)发出,接收数据时使用RXD(P3.0引脚),注意发送SBUF和接收SBUF共用一个地址,不可同时使用。


(b) 串口相关寄存器


(1) 控制寄存器SCON(88H)

图片

TCON用于控制定时器的启动、停止、溢出标志和外部中断信号触发方式。


(2) 方式控制寄存器TMOD(89H)

图片

从上图中可知,GATE为0时候,定时器由TR0或TR1控制启动,为1的时候,只有在外部中断引脚为高电平时候,TR0或者TR1才可以控制启动,对于T1,有3种工作方式,而T0有四种工作方式;


© 串口工作方式


串口的工作方式由控制寄存器SCON的SM0和SM1两位进行控制,具体工作方式如图所示。

在这里插入图片描述

(1) 方式0


在方式0下,串行口位同步移位寄存器方式,波特率固定位fosc/12。这时的 数据传送,无论是输入还是输出,均由RXD端完成,由TXD端输出移位时钟脉冲。发送和接收一帧的数据为8位二进制,不设起始位和停止位,低位在前,高位在后,一般用于I/O的扩展。对应的时序图如下所示。


①方式0发送

在这里插入图片描述

②方式0接收

在这里插入图片描述

方式0下,SCON中的TB8、RB8位没有用到,发送或接收完8位数据由硬件置“1”TI或RI中断标志位,CPU响应中断, TI或RI标志位须由用户软件清“0”。


(2) 方式1


在方式1下,串行口位10位通用异步通信接口。一帧信息包括1位起始位,8位数据位和1位停止位,8位数据位是低位在前高位在后。方式1的时序图如下所示。


①方式1发送

图片

②方式1接收

图片

串行口以方式1发送时,数据由TXD端输出。任何一条以SBUF为目的的寄存器都启动一次发送,发送条件是TI=0.发送开始时内部SEND信号变为有效电平,随后由TXD端输出自动加入的起始位,此后每过一个时钟脉冲,由TXD端输出一个数据位,8位数据位发送完后,置位TI,TI置是通知CPU可发下一个字符。


方式1接收时,数据从RXD端输入,当REN置后,就允许接收器接收,接收器便以波特率的倍速率采样RXD端电平,当采样到RXD端从到的跳变时就启动检测器,接收的值是3次连续采样(第7、8/9个脉冲时采样)取其中两次相同的值,以确认是否真正的(负跳变)的开始。


(3)方式 2和方式3


串行口工作在2、3时,为11位异步通信口,发送、接收一帧信息由11位组成,即1位起始位,8位数据位,1位可编程位和1位停止位。发送时,可编程位(TB8)可设置0或1,该为一般用做校验位或地址为/数据位标志。接收时,可编程位送入SCON中的RB8。


在接收器收到第9位数据后,需满足一下两个条件,才能将接收到的数据送入SBUF。(1)SM2=0或接收到的第9位数据位RB8=1时。(2RI=0,意味着接收缓冲器为空。当上述两个条件满足时,接收到的数据送入SBUF,第9位数据送入RB8,RI置1,若不满足这两个条件,接收到的信息将被丢弃。方式2和方式3的时序图如下所示。


①方式2和方式3发送


图片

②方式2和方式3接收

图片

方式2、3的区别在于:方式2的波特率位fosc/32或fosc/64,而方式3的波特率可变。方式2/3发送时,数据由TXD端输出,附加的第9位数据位SCON中的TB8,方式2/3接收时,可编程送入SCON中的RB8。


4. 串口波特率计算

在方式0时,每个机器周期发送或接收一位数据,因此波特率固定为单片机时钟频率的1/12,且不受SMOD的影响。若晶振频率fosc=12MHZ时,则波特率=fosc/12=1Mb/s,即1us移位一次。


方式2的波特率取决于PCON中的SMOD的值,当SMOD=0时,波特率位fosc的1/64,若SMOD=1时,则波特率位fosc的1/32.


方式1、方式3的波特率可变,由定时器T1的溢出率与SMOD的值共同决定,波特率=2SMOD/32×(定时器1溢出率) ,其中溢出率取决于计数速率和定时器的预置值。定时器的溢出周期为=(256-X)×12/fosc,溢出率为溢出周期的倒数。


因此,波特率的公示可以写成波特率=(2SMOD/32)×[fosc/12×(256-X)]。实际应用时,总是先确定波特率,再计算定时器1的定时初值,根据上述波特率的公式,得出定时器方式2的初值公式为:X=256-(2SMOD×fosc)/(384×波特率)。例如,已知8051单片机时钟频率为11.0592MHZ,选用T1工作方式2作为波特率发生器,波特率位9600,则定时器初值,TH1=256-(11059200/384/9600)256-3=253。


二、实例运行

1、程序


串口初始化程序:


void ConfigUART(unsigned int baund)

{

    SCON  = 0x50;  //配置串口为模式1

    TMOD &= 0x0F;  //清零T1的控制位

    TMOD |= 0x20;  //配置T1为模式2

    TH1 = 256 - (11059200/12/32)/baund;  //计算T1重载值

    TL1 = TH1;     //初值等于重载值

    ET1 = 0;       //禁止T1中断

    ES  = 1;       //使能串口中断

    TR1 = 1;       //启动T1

}


串口中断程序


void InterruptUART() interrupt 4

{

    if (RI)  //接收到新字节

    {

       RI = 0;  //清零接收中断标志位

       SBUF=SBUF+1;//将接收到的数据加1发回去

    }

    if (TI)  //字节发送完毕

    {

        TI = 0;   //清零发送中断标志位

    }

    

}


三、运行

将hex文件烧录到开发板中,显示效果如下图所示,串口助手发送数据,单片机返回数据。 

图片

关键字:51单片机  物联网  串口通信 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic571938.html

上一篇:8051单片机实战分析(以STC89C52RC为例) | 01 - 点亮一个LED
下一篇:51单片机玩转物联网基础篇08-定时器

推荐阅读

51单片机玩转物联网基础篇08-定时器
前言在实时控制系统中,经常需要定时时钟以实现精准延时、定时,也经常需要计数功能以实现对外界脉冲进行计数, 本节,我们开始学习51单片机的定时器,然后开启一个定时器,实现1S翻转一次电平,控制LED灯亮灭。一、基础知识1.定时器简介51单片机的定时器有两个,分别是T0和T1,它们可以用于定时或者对外部脉冲(事件)计数,还可以作为串行口的波特率发生器使用,定时器裸机结构图如下所示定时器工作在定时方式时候,计数器对内部时钟机器周期数进行计数,每个机器周期等于12个晶体震荡周期,定时器工作在计数方式时候,计数脉冲来自外部输入引脚P3.4、P3.5,当外部输入信号从1到0跳变时,计数器的值加一。2.定时器相关寄存器(1) 控制寄存器TCON(
发表于 2022-05-13
<font color='red'>51单片机</font>玩转物联网基础篇08-定时器
8051单片机实战分析(以STC89C52RC为例) | 01 - 点亮一个LED
1 原理图以点亮单片机P2.2端口的LED为例:从图中不难看出,LED的右边是通过电阻接到VCC,如果要点亮LED就得把LED左边的端口进行拉低,根据二极管的单向导电性,LED正向导通从而LED发光。2 代码main.c文件的代码:#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器sbit led=P2^2; //将单片机的P2.2端口定义为led/******************************************************************************** 函 数 名 : main* 函数功能 : 主函数* 输 入
发表于 2022-05-13
80<font color='red'>51单片机</font>实战分析(以STC89C52RC为例) | 01 - 点亮一个LED
8051单片机实战分析(以STC89C52RC为例) | 02 - LED延时约5s闪烁
代码修改如下:#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器typedef unsigned int u16; //对数据类型进行声明定义typedef unsigned char u8;sbit led=P2^2; //将单片机的P2.2端口定义为led/******************************************************************************** 函 数 名 : delay* 函数功能 : 延时函数,i=1时,大约延时10us*******************************
发表于 2022-05-13
8051单片机实战分析(以STC89C52RC为例) | 03 - LED流水灯
1 原理图从图中不难看出,整个P2端口都接有LED,写代码时需要驱动整个P2端口。2 代码#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器#include <intrins.h> //因为要用到左右移函数,所以加入这个头文件typedef unsigned int u16; //对数据类型进行声明定义typedef unsigned char u8;#define led P2 //将P2口定义为led 后面就可以使用led代替P2口/*************************************************************
发表于 2022-05-13
80<font color='red'>51单片机</font>实战分析(以STC89C52RC为例) | 03 - LED流水灯
8051单片机实战分析(以STC89C52RC为例) | 04 - 蜂鸣器驱动
蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机IO引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路。三极管的作用为驱动,通过三极管放大驱动电流,从而可以让蜂鸣器发出声音。有源蜂鸣器和无源蜂鸣器的区别:这里的“源”不是指电源。而是指震荡源。 也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。必须用2K~5K的方波去驱动它。有源蜂鸣器往往比无源的贵,就是因为里面多个震荡电路。有源蜂鸣器示意图:无源蜂鸣器示意图:无源蜂鸣器的优点是:便宜声音频率可控,可以做出“多来米发索拉西
发表于 2022-05-13
80<font color='red'>51单片机</font>实战分析(以STC89C52RC为例) | 04 - 蜂鸣器驱动
51单片机玩转物联网基础篇01-开发环境搭建
前言上至航天,下至儿童玩具,凡事沾一点智能的东西,都离不开单片机的身影…,本文开始,我们学习STC89C52单片机,这款单片机属于8051系列单片机,51单片机作为入门级单片机不仅在教学实验中应用广泛,在实际项目中应用亦是十分广泛。一、基础知识1.什么是单片机?单片机是一个单片微型计算机,由中央处理器CPU、数据存储器RAM、程序存储器ROM、输入/输出设备(键盘、显示屏等)等集成到一块芯片上组成。2.单片机能做什么?前言中开篇便比较好的阐释了单片机的功能,凡是沾点智能的影子的东西,都离不开单片机的身影,尤其是当下物联网正发展的如火如荼,单片机又迎来新的春天,目前智能仪表、智能小家电用的比较多的便是51单片机+无线模块方式连接物联网
发表于 2022-05-16
51单片机玩转<font color='red'>物联网</font>基础篇01-开发环境搭建
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved