历史上的今天

今天是:2024年09月28日(星期六)

2021年09月28日 | 51单片机之串口通信详解

发布者:MysticDreamer 来源: eefocus关键字:51单片机  串口通信  通信方式 手机看文章 扫描二维码
随时随地手机看文章

一、串口通信概念

1、串口通信的作用

串口通信主要用于单片机与外部设备的通信。51单片机自身有圈双工的异步通信串口。


2、串口通信的通信方式

串口通信基本通信方式有两种:并行通信串行通信

串行通信:传送数据的各位按顺序一位一位发送或者接收


并行通信:传送数据各位同时发送或接收


3、串行通信的通信方式

串行通信根据帧信息的格式分为异步通信和同步通信


异步通信:一帧数据先用一个起始位“0”表字符开始,然后是5~8位数据,即该字符的代码,规定低位在前,高位在后,接下来是奇偶校验位(可以省略),最后一个停止位“1”表示字符结束。


同步通信:发送方在数据或字符前面用1~2字节同步字符指示一帧的开始,同步字符是双方约定好的,接收方检测到与规定的同步字符符合时,开始接收数据,发送方按顺序连续传送N个数据,N个数据传完后,发送1-2字节的校验码。


接收端和发送端的同步由时钟实现。


同步通信省去了字符开始和结束的标志,一帧可以连续传送若干个数据,所以速度高于异步传送。


4、通信方向

串口通信的通信方向分为单工、半双工、全双工三种。


单工传送:通信接口只能发送或者接收。


半双工传送:通信接口可以接收也可以发送,但是发送和接收不能同时进行。


全双工传送:两机的发送和接收可以同时进行


一般情况下,我们的51单片机采用的为全双工,通过TXD,RXD两个通信接口同时进行数据的发送和接收。


需要注意的是,51单片机在实物连线上要反接,一机的TXD应接另一机的RXD,RXD接另一机的TXD。而一些特殊型号的单片机会标注正接,即RXD接RXD,TXD接TXD。


5、串行通信接口的作用

我们单片机内部的CPU只能处理并行数据,要进行串行通信,就必须要接我们的串行接口,按串行通信协议,进行数据的处理。具体的有


A:实现数据格式化

按串行数据格式,对CPU的并行数据进行处理。


B:进行串行数据和并行数据的转换

发送端,并行转串行送接收端;

接收端,串行转并行送CPU;


C:控制数据的传输速率

接口应具备对数据传输速率----波特率的控制选择能力(具有波特率发生器


D:进行传送错误检测

发送时,接口对传送数据在的生成奇偶校验位或校验码;在接收时接口检查校验位或校验码,以确定传送中是否有误码。


51单片机内含的通信接口:

51单片机内含一个全双工的异步通信接口,通过对串行接口写控制字可以选择其数据格式,内含波特率发生器,提供可选波特率,可完成双机通信或多机通信。


二、串行口的结构和工作原理

1、串行口结构

串行口主要由两个数据缓冲寄存器SBUF和一个输入移位寄存器组成,内部还有一个串行控制寄存器SCON和一个波特率发生器(T1定时器或内部时钟及分频器组成)


我们串行口发送的数据先逐位进入接收端移位寄存器,再送入接收端SBUF。移位寄存器和SBUF采用了双缓冲结构,避免两帧数据发送混乱。


2、串行口工作原理

A:发送机CPU向SBUF写入数据,启动发送过程


B:按SCON设定好的控制方式和设定的波特率,由低位到高位一位一位的按移位时钟发送到电缆线上


C:数据通过电缆线到达接收机


D:接收机按照设定的波特率,按移位时钟一位一位的由低到高移入SBUF


因此我们的发送机,接收机波特率必须保持一致,才可以正常的收发数据,即发送机移出的刚好被接收机移入。


E:发送机发完一帧数据(发送缓冲器空),硬件置位发送中断标志位TI(SCON.1)位可作为查询标志,如果设置为允许中断,将引起中断,发送机可再发送下一帧数据。(先发后查)


F:接收机,预先置位REN(SCON.4)即允许接收,再按波特率由低到高进入接收机移位寄存器,数据收齐后(接收缓存器满),硬件置位RI(SCON.0),可作为查询标志,如果设置为允许中断,将引起接收中断,CPU方可从SBUF中读入这帧数据。(先查后收)


总结:

① 查询方式发送的过程:发送一个数据→查询TI→发送下一个数据(先发后查)

查询方式接收的过程:查询RI→读入一个数据→查询RI→读入下一个数据(先查后收)

②通信双方波特率必须相同


3、波特率的设定

第一种方式:

系统时钟分频值


第二种方式:

定时器T1提供(针对基础51来讲)


波特率计算:

当串口工作在工作方式0和2时,波特率固定。

方式0时 fosc / 12

方式2时 SMOD=0 fosc / 32 或 SMOD=1 fosc / 64


方式1时

波特率=(2^SMOD/32)*(单片机时钟频率/(256-X)) //X是初值

但一般情况下,我们是先确定波特率,再确定定时计数器初值

三、串行口的控制寄存器

1、串口工作方式寄存器SCON

在这里插入图片描述
在这里插入图片描述

2、电源控制寄存器PCON

四、串行口的具体应用编程

1、定好波特率

串行口波特率有两种方式:固定波特率和可选波特率

当使用可变波特率时,应先计算T1的计数初值,并对T1初始化

当使用固定波特率时,选择方式0、2


2、填写控制字

对SCON寄存器设置工作方式,若为接受程序,需置为REN=1(允许接收),同时将TI、RI置零(串口中断标志位)

3、选择串行通信方式

串行通信可采用两种方式:查询方式和中断方式

TI和RI是一帧数据发送或接收完的标志,可用于查询;如果允许中断,可引起中断。


查询方式:

发送一个数据→查询TI→发送下一个数据(先发后查)

查询RI→读入一个数据→查询RI→读入下一个数据(先查后收)


中断方式:

发送程序:发送一个数据→等待中断,在中断中发送下一个数据

接受程序:等待中断,在中断中再接受一个数据


注意:两种方式中,都要软件请TI、RI标志位,即用程序语句清0


4、约定标志字符


为了收发双方的协调,除了两边的波特率要保持一致,也可以约定标志字符作为发送数据的起始,先发送标志字符,待对方收到并回应之后,再正式发数据。

当我们采用多机通信时,标志字符就相当于是各个分机的地址


五、查询方式和中断方式详细流程

1、查询方式

2、中断方式

六、例程

#include "reg52.h"


typedef unsigned int u16;   

typedef unsigned char u8;


void UsartInit()

{

SCON=0X50; //  0101 0000  设置为工作方式1  

TMOD=0X20; //  0010 0000  设置计数器工作方式2

PCON=0X80; //  1000 0000波特率加倍

TH1=0XF3; //计数器初始值设置,波特率9600

TL1=0XF3;

ES=1; //打开接收中断

EA=1; //打开总中断

TR1=1; //打开计数器

}


void main()

{

UsartInit();  //串口初始化

while(1);

}


void Usart() interrupt 4  //串行口中断

{

u8 receiveData;

receiveData=SBUF;//出去接收到的数据

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

SBUF=receiveData;//将接收到的数据放入到发送寄存器

while(!TI); //等待发送数据完成

TI=0; //清除发送完成标志位

}

关键字:51单片机  串口通信  通信方式 引用地址:51单片机之串口通信详解

上一篇:51单片机之晶振与定时器
下一篇:基于51单片机的直流电机调速设计

推荐阅读

阿里巴巴的汽车战略在 2018 云栖大会上迎来巨大升级——从单车智能转向车路协同,目标是在 20 年内打造智慧高速公路。这是一个相对长远的目标,而现实呢?单车智能仍然值得被关注,比如,车载 OS。对于阿里来说,即使汽车战略再怎么升级,车载 OS 也是基石一样的存在:基于 AliOS 的斑马智行,早已搭载在将近 70 万辆量产车里,成为「互联网汽...
一、STM32 的 USART 简介:STM32 芯片具有多个 USART 外设用于串口通讯,它是 Universal SynchronousAsynchronous Receiver and Transmitter 的缩写,即通用同步异步收发器可以灵活地与外部设备进行全双工数据交换。有别于 USART,它还有具有 UART 外设(UniversalAsynchronousReceiver and Transmitter),它是在 USART 基础上裁剪掉了...
很多世界顶尖的“建筑师”可能是你从未听说过的人,他们设计并创造出了很多你可能从未见过的神奇结构,比如在芯片内部源于沙子的复杂体系。如果你使用手机、电脑,或者通过互联网收发信息,那么你就无时无刻不在受益于这些建筑师们的伟大工作。 赫曼·豪瑟(Hermann Hauser)就是这些“建筑师”里的一员。可以说,现年72岁的赫曼·豪瑟是个标准的“斜杠人...
大陆昆山等地下达限电停工令,半导体、面板、组装代工业目前相对无碍,包括联电(2303)旗下8英寸晶圆厂苏州和舰、日月光投控、友达、仁宝、纬创等指标厂昨(27)日均表示,目前大陆厂区正常运作。法人指出,相关厂商目前生产不受影响,因此“没有订单出不了货的问题,也不会有转单状况发生”。现阶段半导体市况供不应求,加上年底欧美旺季将至,和舰、日...

史海拾趣

问答坊 | AI 解惑

飞思卡尔新一代8位单片机“三项全能”

  据市场研究专家分析,全球消费电子产业持续迅猛发展将推动微控制器(MCU)市场需求。在中国,传统家电及新兴数码消费电子产业的规模扩大,也必将成为整个消费类MCU市场的重要源动力。虽然用户需求在不断发生变化,8位MCU依然是低端应用的核心并且 ...…

查看全部问答∨

如何将12DC转换成220V AC

请各位高手给点建议和方案…

查看全部问答∨

3G iPhone真机拆解 组件供应商名

3G iPhone真机拆解 组件供应商名单出炉[来源:国际电子商情] 摘要:iSuppli公司在7月11日得到了一部3G iPhone,并对其进行了拆解,以确定其中的组件供应商,以及主 要部件成本和系统成本。新款3G iPhone采用了进化性的设计,而没有采用前沿性的特点 ...…

查看全部问答∨

关于角度传感器

本帖最后由 paulhyde 于 2014-9-15 09:10 编辑 想用KMZ41+UZZ9001作为角度传感器,想问下KMZ41作为磁阻传感器,检测的磁场需要自己外加吗?如果要的话,应该怎么加呢,加在哪个位置(芯片上方吗)?用普通磁铁可以了吗? 第一次用,望各位高人指 ...…

查看全部问答∨

还不错的电源

本帖最后由 paulhyde 于 2014-9-15 09:04 编辑 值可调的电源  …

查看全部问答∨

下载NK时会停在 Sp=ffffc7cc 或者死在 PSMFSD_MountDisk: FG_Init failed! status=33 ,请教做过相关的兄

各位:     最近不知道为什么下载NK时总是死在 Sp=ffffc7cc Windows CE Kernel for ARM (Thumb Enabled) Built on Aug  4 2008 at 18:38:38 ProcessorType=0411  Revision=7 sp_abt=ffff5000 sp_irq=ffff2800 s ...…

查看全部问答∨

PXA270+CE5.0系统中的RTC驱动问题,时间显示有问题,????

基本情况介绍:            PXA270+CE5.0,RTC采用外接X1226芯片,I2C读写。已实现其读写RTC函数,且读写正确,通过调用OEMSetRealTime和OEMGetRealTime便可对其调用。现在的问题是: 1  任 ...…

查看全部问答∨

rtos51,声称最多可以有16个任务,但有个问题

来自EEWORLD合作群:12425841他設定的 每一个任务占用多少字节…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved