历史上的今天
返回首页

历史上的今天

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

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

2021-09-28 来源:eefocus

一、串口通信概念

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; //清除发送完成标志位

}

推荐阅读

史海拾趣

AUREL公司的发展小趣事

AUREL公司深知人才是企业发展的核心动力。因此,公司一直注重人才的引进和培养。通过与高校和研究机构的合作,公司吸引了大批优秀的研发人才和管理人才。同时,公司还建立了完善的人才激励机制和培训体系,为员工提供了广阔的职业发展空间。这些举措使得AUREL公司的人才队伍不断壮大,为公司的持续发展提供了有力保障。

EiKO Global LLC公司的发展小趣事

EiKO Global LLC,简称EiKO,成立于XXXX年,由一群热衷于照明科技的先驱者共同创立。公司初期专注于照明产品的研发与生产,致力于为全球用户提供高质量的照明解决方案。EiKO凭借对市场的敏锐洞察力和技术创新,迅速在北美市场崭露头角。

在创立初期,EiKO便确立了以“质量第一、客户至上”为经营理念的方针。通过引进先进的生产设备和技术,严格把控产品质量,EiKO的照明产品逐渐赢得了消费者的信赖。同时,EiKO还积极拓展市场,与多家知名企业和零售商建立了合作关系,产品销售网络遍布全球。

Blue Sky Research公司的发展小趣事

Blue Sky Research自成立之初,便以技术创新为核心竞争力。公司不断投入研发,成功开发出一系列高性能的激光二极管模块和光纤耦合激光组件。这些产品凭借其卓越的性能和稳定性,迅速在电子行业中占据了一席之地。随着技术的不断迭代和升级,Blue Sky Research逐渐在激光技术领域树立了行业标杆,成为众多企业争相合作的对象。

弘凯光电(BRIGHTEK)公司的发展小趣事

随着技术的不断进步和市场的逐步打开,弘凯光电开始将业务拓展至全球范围。公司的客户群迅速扩大,遍布60多个国家和地区,同时在欧洲、北美、南美、东南亚和中东地区均设立了经销网点。此外,弘凯光电还积极寻求国际认证,以证明其产品的品质和可靠性。通过取得ISO9001质量保证体系、ISO14001国际环境管理体系认证等一系列认证,公司进一步提升了品牌形象和市场竞争力。

Adaptive Interconnect Electronics, Inc. [AIE]公司的发展小趣事

为了适应全球电子市场的快速发展,AIE公司积极实施全球化战略。公司在多个国家和地区设立了分支机构或办事处,以便更好地服务当地客户。同时,AIE还积极参加国际电子展会和论坛,与全球各地的合作伙伴和客户建立了广泛的联系。这些举措不仅拓展了AIE的市场份额,也提升了公司的国际影响力。

中科银河芯(GXCAS)公司的发展小趣事
在饱和状态下,集电极和发射极之间的电压降(Vce)很小,通常在0.3V到0.4V之间。这意味着三极管在这两个极之间相当于一个低阻值的开关。

问答坊 | AI 解惑

X86学习之第一章以太网配置

本帖最后由 paulhyde 于 2014-9-15 08:56 编辑 1.3.3 Network scripts Using the network scripts To be able to access the network functions, you need to include the necessary shell scripts by running: . /etc/functions.sh # common fun ...…

查看全部问答>

怎样安装wince下的unimodem驱动

请问怎样手工装wince 5.0的unimodem驱动 我的ce下没有  怎样像装windows xp的驱动一样通过设备管理器装? …

查看全部问答>

请教vxworks命令的实现机制

有一个问题想请教,vxworks的命令是什么样的机制和实现该命令的函数对应的?比如说我在命令行下输入 ls \"/dev/\" ,系统怎样对这个命令进行解释?相关函数放在什么地方?我可以修改么? 另外vxworks有设置系统时间的相关命令么?…

查看全部问答>

WINCE5.0中怎么实现用系统调用去执行命令行,如ARP -A等...

vc6.0中可以通过WinExec/system()来实现,但在WINCE中怎么去实现(VS2005.net)?我主要是想用程序去实现ARP -S 调用,去设置静态ARP缓存。…

查看全部问答>

串口收发不稳定。。有时收的多有时收的少?求救。。。。

串口收发不稳定。。有时收的多有时收的少?求救。。。。…

查看全部问答>

有关ATI显卡的问题!

求救..!我的电脑的ATI打不开了,而且我再一个游戏的时候,它说让我升级显卡,我句下了一个ATI的显卡驱动,在没有卸载以前的那个上边又按了一个,但是按完了之后它又说,必须在安装一个.NET FRAMEWORK,我就又下了一个那个,也按了,打开时又说系统找不到指定 ...…

查看全部问答>

想玩GPS的朋友进来看看!

HCDB-2410-A开发套件(www.hcdzart.com) 中央处理器 ◆S3C2410 16/32Bit ARM920T内核;工作频203MHz,运算能力220MIPS,最高工作频率266MHz。 存储器 ◆64M SDRAM ◆64M Nand Flash ◆SD卡 显示接口 ◆一个标准VGA输出,可以直接连接普通的P ...…

查看全部问答>

XDS100可以调试tms320f28335吗?

手头只有调试TMS320F28027的XDS100,不知道该XDS100能不能调试tms320f28335   以前自己做的2407A用的是并口调试工具,现在有没有什么USB的,可以自己DIY的工具啊?…

查看全部问答>

电子元气件的识别(公司内部培训用)

公司内部培训用的 [ 本帖最后由 cigarette66 于 2011-6-19 19:00 编辑 ]…

查看全部问答>

电子竞赛准备的模拟资料

和大家分享一下我收藏的资料,无论是准备竞赛还是做项目。对于模拟类电路还是很有帮助的。…

查看全部问答>