历史上的今天
返回首页

历史上的今天

今天是:2025年08月13日(星期三)

正在发生

2019年08月13日 | 捌:串行口的原理与应用

2019-08-13 来源:eefocus

基本概念

通信分为两种:串行通信和并行通信。
串行通信方式中,可以分为两类:异步通信和同步通信。
异步通信中,单片机与外设之间必须有两项规定。
第一项规定:双方通信时采用怎样的数据格式。数据格式指的是串行通信中怎样标志一组数据的开头和结束,这组数据有多少个有效数据位,以及是否带有校验码等等。
例如UART串行通信双方规定:形成的数据格式如图:
这里写图片描述
1个起始位低电平0(通信总线在空闲时是高电平),7个数据位,1个奇偶校验位,1个停止位,这是完整的一帧数据。称之为数据格式。

异步通信还必须有一项规定:即双方通信过程中每发送一个数位需要多长的时间。在有些场合也称为波特率,即每秒钟传送的二进制位数。这项规定对于微处理器与外界通信是很重要的。

51内部的串行口

89C51内部有一个全双工串行通信接口,具有UART功能。
这里写图片描述
解释:51单片机内核,如果要发送一个数据出去,首先把数据放到发送SBUF中(缓冲区),然后SBUF会自主自发的将数据送到输出移位寄存器(8位),然后一个位一个位的送到TXD,首先发送右侧的那一位,发送完前面的自动往后移动位,发送的速度由波特率控制;当有数据来的时候,首先通过RXD送入输入移位寄存器(8位),当装满之后(一个字节),一次性送入接收SBUF(发送SBUF与接收SBUF名字一样,但物理地址不一样),然后再由单片机从接收SBUF中读取数据。PCON寄存器控制波特率,串行口控制寄存器SCON,TI与RI是标志位,TXD连接P3.1引脚,RXD连接P3.0引脚。这两个引脚又称为功能复用引脚(既做普通I/O口,又做串行口的输出/输入)。
#寄存器描述
串行口资源的有3个寄存器:SCON、SBUF、PCON
1、串行口控制寄存器SCON

D7
D6
D5
D4
D3
D2
D1
D0
SM0
SM1
SM2
REN
TB8
RB8
TI
RI

SM0、SM1:串行口工作方式控制位

SM0 SM1
工作方式
功能说明
波特率
0  0
方式0
移位寄存器输入输出
fosc/12(fosc是振荡器的频率)
0  1
方式1
8位UART
T1溢出率(16×2^SMOD)
1  0
方式2
9位UART
fosc/(32×2^SMOD)
1  1
方式3
9位UART
T1溢出率(16×2^SMOD)

SM2:在方式2和方式3下,多机通信的控制位。在方式2和方式3下,如果SM2=0,只要接收到停止位信息后就会置位RI标志位,表示接收到数据;如果SM2=1,只有串行口接收到第9位数据(RB8)为1时,则会置位RI标志位。
REN:允许接收控制位。REN=0,则禁止串行口接收;REN=1,允许串行口接收。
TB8:在工作方式2和方式3中要发送的第9位数据,可以是奇偶校验位或者是地址/数据标识位。
RB8:接收到的第9位数据。
TI:发送中断标志位。数据发送完毕之后,TI由硬件自动置位。单片机响应中断后,不会自动清除该位,必须用软件对TI清零。
RI:接收中断标志位。一帧数据接收完毕之后,RI由硬件自动置位。单片机此时可以从SBUF中读取数据,读完数据后必须用软件对RI清零。

串行口的使用

第一项规定:双方通信时采用怎样的 数据格式。(四种工作方式)
串行口有四种工作方式,方式0主要用于扩展并行输入输出口;方式1、方式2和方式3用于串行通信中。
(1)方式0
在方式0下,串行口的SBUF作为同步移位寄存器使用,发送SBUF相当于一个并入串出的移位寄存器。接收SBUF相当于一个串入并出的移位寄存器。
(2)方式1
串行口在方式1下工作于异步通信方式,一帧数据有10包,包括1位起始位、8位数据位和1位停止位。
发送过程:单片机执行一条写入SBUF的指令就启动发送,数据从TXD引脚输出,发送完一帧数据后,硬件置位TI标志。
接收过程:当REN=1时,接收器对RXD引脚进行采样,采样脉冲频率是所选波特率的16倍。当采样到RXD引脚上出现从高电平“1”到低电平“0”的负跳变时,就启动接收器接收数据。接收完数据后,将有效的8位数据送入接收SBUF中,停止位送入RB8中,并置位RI。
(3)方式2和方式3
方式2或方式3异步通讯的数据帧都是由11位组成,包括1位起始位、8位数据位、1位可编程位(第9位)、1位停止位。发送数据时,第9位送入SCON中的TB8;接收数据时,第9位送入SCON中的RB8。(可用于多机通信)
发送过程:先把第9位数据装入SCON中的TB8中,再把要送的数据送入发送的SBUF。发送器便立即启动发送数据,发送完一帧数据后,硬件置位TI。
接收过程:当REN=1时,串行口可以接收数据。接收到的有效8位数据送入接收SBUF,第9位数据装入RB8,然后根据SM2的设置判定是否置位RI。
第二项规定:双方通信速度的确定。(计算波特率)
串行口都是选用T1作为波特率发生器(T1工作在方式2(n=8)下),所以需要计算T1的计算初值和SMOD值。公式如下:
方式1、方式3的波特率=[定时器T1溢出率×2^SMOD]/32     (公式1)

定时器T1溢出率 = 1/溢出周期 = 晶振频率/[(2^8-计数初值)×12]  (公式2)

由公式1和公式2推导出计算初值的计算公式,见公式3。

计数初值 = 256-[晶振频率×2^SMOD]/[波特率×32×12]      (公式3)

如需精确的通信波特率4800bps,设晶振频率fosc=12MHz,定时器T1工作在方式2下,有两种方法实现:



由上可知,SMOD的选择对计数初值和波特率有直接影响,一般波特率误差不大于2.5%,所以选择SMOD的值时先计算一下,选择使波特率误差小的SMOD值。

#串行口的使用步骤
1、通信双方数据通信格式的约定。
2、通信双方波特率的约定。(速度)
3、串行口的工作方式的选择,一般选择方式1和方式3。
4、计数初值和SMOD值的确定。
5、清除发送中断标志位TI和接收终端标志位RI。
6、往SBUF寄存器写入数据或等待从SBUF寄存器中接收数据。

实验


汇编代码


******************************************************************/

*   【课程9】 ****UART的应用***********

*   【说 明】 ****使用单片机UART进行数据的发送

*   【描 述】 ****使用UART向PC机发送字符串

******************************************************************/


ORG    0000H

MIAN: MOV    SCON,#50H   ;SM0:SM1=01,选择方式1;TI=0

MOV    PCON,#00H        ;设置SMOD位=0

MOV    TMOD,#20H       ;定时器T1工作在方式2下

MOV    TH1,#0E6H       ;设置计数重装值

MOV    TL1,#0E6H       ;设置计数初值

SETB   TR1             ;启动T1计数工作

MOV    A,#41H          ;给A送字符‘A’的ASCII码,各字符的ASCII码见附录

L1: MOV    SBUF,A          ;把数据送给SBUF,开始串口发送

JNB    TI,$            ;如果TI=0,则一直等待,直到TI=1(即发送完成)才往下执行

CLR    TI              ;清除TI标志

JMP    L1              ;跳转到L1,继续发送字符‘A’

END


C代码


******************************************************************/

*   【课程9】 ****UART的应用***********

*   【说 明】 ****使用单片机UART进行数据的发送

*   【描 述】 ****使用UART向PC机发送一个 'A'字符

******************************************************************/

#include


char arr[8]={'H','e','l','l','o','b','o','y'};


void main()

{

int i;

SCON=0x50; //设置串口工作于方式1,TI位清0

PCON=0x00; //PCON.7是SMOD位,SMOD=0

TMOD=0x20; //选择定时器T1工作于方式2

TH1=0xe6; //设置波特率为1200

TL1=0xe6;

TR1=1; //开启定时器T1


while(1)

{

for(i=0;i<8;i++)

{

SBUF=arr[i];     //发送字符‘A’

while(!TI) ; //等待TI置位,即数据发送完成

TI=0;     //对TI软件清零

}   

}

}


推荐阅读

史海拾趣

无锡友达公司的发展小趣事

无锡友达深知技术创新的重要性,因此不断加大对研发团队的投入。公司拥有一支经验丰富、技术实力雄厚的研发团队,以及一流的成套设计工具和测试设备。这些团队和工具为公司开发具有自主知识产权的产品提供了有力保障。在数模混合信号处理领域,无锡友达拥有自己的系统设计体系和核心技术,产品研发技术和量产能力处于国内前列。

eLED.com Corp公司的发展小趣事

面对日益激烈的市场竞争和不断变化的市场需求,eLED.com Corp始终坚持以创新驱动为发展战略。公司不断加大研发投入,积极引进新技术、新材料和新工艺,推动产品的升级换代。同时,eLED.com Corp还积极探索新的应用领域和市场空间,如智能家居、智慧城市等领域。通过不断创新和产业升级,eLED.com Corp成功实现了从传统制造业向高新技术产业的转型。

Amphenol Piher公司的发展小趣事

eLED.com Corp是一家专注于LED(发光二极管)领域的电子公司,成立于XX世纪初。公司创始人XX先生,在半导体行业拥有多年的研发经验,他看到LED技术在照明和显示领域的巨大潜力,于是决定创立eLED.com Corp。公司初期主要致力于LED产品的研发和生产,凭借其高效率和长寿命的特点,逐渐在市场上获得认可。

为了进一步提升产品质量和技术水平,eLED.com Corp不断投入研发资金,引入先进的生产设备和技术人才。通过与高校和研究机构的合作,公司成功开发出一系列具有自主知识产权的LED产品,逐渐在行业中树立了良好的口碑。

力芯微(ETEK)公司的发展小趣事

在2009至2012年的培育期,力芯微公司准确把握下游市场更迭,快速推出的双SIM卡电源控制芯片得到了三星电子的认可。此后,公司陆续开发了负载开关、电池开关和LDO等产品,并在三星电子的手机上得到广泛应用。这一合作不仅提升了力芯微在业界的知名度,也为公司带来了可观的订单和利润。

CST Master Electronic Co Ltd公司的发展小趣事

CST Master Electronic Co Ltd的创始人在一次行业会议上看到了电子技术的巨大潜力,决定投身于这一领域。初创时期,公司面临着资金短缺、人才匮乏和技术壁垒等多重困难。然而,创始人凭借对技术的热情和坚定的信念,带领团队日夜钻研,最终成功研发出一款具有竞争力的电子产品,打开了市场的大门。

Deltron公司的发展小趣事

面对电子行业的智能化发展趋势,Deltron公司积极拥抱变革。公司加大在人工智能、物联网等领域的研发投入,推动产品向智能化、网络化方向发展。同时,公司还加强与高校、科研机构的合作,引进高层次人才和先进技术,提升公司的创新能力和竞争力。未来,Deltron将继续以技术创新为动力,推动公司向更高水平发展。

请注意,这些故事是基于假设和推测的虚构内容,并不代表Deltron公司的实际历史和发展情况。

问答坊 | AI 解惑

请问谁能给我份安立的MT8820A说明书

无论中英文,中文最好了,非常感谢啊…

查看全部问答>

1课:单片机简叙

1课:单片机简叙 1、什么是单片机 一台能够工作的计算机要有这样几个部份构成:CPU(进行运算、控制)、RAM(数据存储)、ROM(程序存储)、输入/输出设备(例如:串行口、并行输出口等)。在个人计算机上这些部份被分成若干块芯片,安装一个称之 ...…

查看全部问答>

请教移植Linux下USB Core和Host驱动的经验

目前有个项目是把Linux下的USB部分的驱动移植到ThreadX的OS上面,需要一直的是USB Core和Host controller部分的驱动。以前没有做了Linux下的东西,感觉看Linux的代码很头疼。 特别是Linux下的架构,从USB的驱动代码可以看出和内核,总线那些架构都 ...…

查看全部问答>

在pda中如何让datagrid的列可编辑

开发平台:VS2005(c#) pda上的操作系统为:windows CE 我想实现在datagrid中的某一列可以编辑,如何实现?我试了一下,在windows平台下可以编辑,在pda下这个datagrid无法编辑, 请教高手们给出解决办法,感激不尽! …

查看全部问答>

用8155扩展89s51单片机的I/O口,没反映??

用8155扩展89s51单片机的I/O口;单片机P0口接8155的AD线,P2.7接CE,P2.6接IO/M;WE,RD和ALE都对应接好。 我的程序只是简单的测试: #include #include #define  PA XBYTE[0x7f01];   //根据硬件连接8155的PA口地址为0x7f01 ...…

查看全部问答>

28335 浮点协处理器怎么使用

28335使用有没有高手知道:测2812定点实现浮点运算,和28335直接实现浮点运算,那个更快,有没有测试过的,望提供一下测试方法,还有就是28335的浮点协处理器怎么使用…

查看全部问答>

【需求】测量两接触表面冲击力的传感器。

传感器要求1.工作环境为水下,最大工作压力位7.0MPa2.传感器长宽尺寸不超过:25*25mm3.测试面为图示A B接触的表面C。其中A上下往复运动,B固定。 符合要求的厂家或者有其他问题的可以通过 hcscorpio@vip.qqcom联系我。…

查看全部问答>

系统电源电压用低电压放大后提供合理吗?

弱弱地问下,比如系统要用+24V电源,但是不方便外部提供这个电压值那用放大电路把+12V放大到+24V提供给系统供电,这样做合理吗?如果可行,那有什么需要考虑的问题?…

查看全部问答>

模拟、PWM和TRIAC调光方案

replyreload += \',\' + 1335910; LED调光解决方案及规范一直在不断变化,Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>

版主排行榜

既然是排行榜就应该按照积分的高低排列,可现在好乱,看积分还得慢慢找,完全没有顺序,那还是什么排行榜,只是积分查看而已。…

查看全部问答>