历史上的今天
返回首页

历史上的今天

今天是:2026年01月04日(星期日)

正在发生

2023年01月04日 | 80C51单片机串行通信

2023-01-04 来源:zhihu

一、串行通信基础知识

  1. 异步通信和同步通信计算机的数据传输共有两种方式:并行数据传输和串行数据传输。并行数据传输的特点:是各数据位同时传输,传输速度快,效率高。但并行数据传输时有多少数据位就需要有多少根数据线,因此,传送成本高。串行数据传输的特点:是数据传输按位顺序进行,只需一根传输线即可完成,成本低但速度慢,适用于远距离数据传输。常用的Internet网采用的就是串行数据传输。

串行通信又分为异步传输(Asynchronous Transmission)和同步传输(Synchronous Transmission)两种方式,一般称为异步串行通信和同步串行通信。

  1. 异步串行通信异步串行通信是以字符为单位的间歇传输形式。传送时按字符进行包装,为此,在数据位之外要增添起始位、奇偶校验位和停止位,构成一个通信帧。下图为异步通信的帧格式。



几点说明:

① 在串行通信中,信息的两种状态分别以mark和space标志。其中mark译为标号,对应逻辑状态1,在发送器空闲时,数据线应保持在mark状态;space译为空格,对应逻辑状态0。

② 起始位。发送器通过发送起始位而开始一个字符的传输。起始位使数据线处于space状态。

③ 数据位。起始位之后传送数据位。在数据位中,低位在前(左),高位在后(右)。由于字符编码方式的不同,数据位可以是5、6、7或8位等多种形式。

④ 奇偶校验位。用于对字符传送作正确性检查,因此,奇偶校验位是可选择的,共有3种可能,即奇校验、偶校验和无校验,由用户根据需要选定。

所谓偶校验,即数据位和奇偶校验位中逻辑1的个数加起来必须是偶数(全0也视为偶数个1)。

所谓奇校验,即数据位和奇偶校验位中逻辑1的个数加起来必须是奇数。

⑤ 停止位。停止位在最后,用于标志一个字符传输的结束,对应于mark状态。停止位可能是1、1.5或2位,在实际应用中根据需要确定。

⑥ 位时间。一个格式位的时间宽度。

⑦ 帧(Frame)。从起始位开始到停止位结束的全部内容称为一帧。

异步串行通信是一帧接一帧进行的,传输可以是连续的,也可以是断续(间歇)的。

(2)同步串行通信

为提高传送速度,把数据传输按相等的时间间隔分块进行,在数据块的开始加一些特殊字符,作为发送和接收双方的同步标志。由于数据块的位数较多,为防止错位,在发送数据时一般同时给出时钟信号,以保持接收与发送的同步,这就是同步串行通信。同步串行通信的数据传送格式如下图所示:





同步串行通信的数据格式有如下特点和要求:

① 只在数据块传输的开始使用同步字符串,作为发送和接收双方同步的标志,而在结束时不需要同步标志。

② 数据字符之间不允许有间隔,当线路空闲或没有数据可发时,可发送同步字符串。

③ 数据块内各字符的格式必须相同。

同步串行通信比异步串行通信的传送速度快,但同步串行通信要求收发双方在整个数据传输过程中始终保持同步,这将对硬件提出更高的要求,实现起来难度大一些;而异步串行通信只要求在每帧的短时间内保持同步即可,实现起来容易得多。所以同步串行通信适用于数据量大、对速度要求比较高的串行通信场合。

2 、串行通信线路形式

(1)单工形式

单工(Simplex)形式的数据传输是单向的。通信双方中一方固定为发送端,另一方则固定为接收端。单工形式的串行通信只需要一条数据线,如下图所示。

例如,计算机与打印机之间的串行通信。



全双工形式全双工(Fullduplex)形式的数据传输是双向的,可以同时发送和接收数据,因此,全双工形式的串行通信需要两条数据线。



(3)半双工形式

半双工(Halfduplex)形式的数据传输也是双向的。但任何时刻只能由其中的一方发送数据,另一方接收数据。因此半双工形式既可以使用一条数据线,也可以使用两条数据线。



二、80C51串行口

为了实现串行通信,需要有硬件电路以解决串行数据传输中的一系列协调问题,这些硬件就是串行接口电路或简称串行口。

1、80C51串行口硬件结构

通常把实现异步通信的串行口称为通用异步接收器/发送器UART(Universal Asynchronous Receiver/Transmitter)。

80C51的串行口,虽然是既能实现同步通信,又能实现异步通信的全双工串行口,但在单片机的串行数据通信中,最常用的是异步方式,因此,常把它写为UART。它的寄存器结构如下图所示。

2 、串行口控制机制

80C51串行口通过控制寄存器、中断功能和波特率设置实现串行通信控制。

  1. 串行口控制寄存器(SCON)-98H



SM0、SM1——串行口工作方式选择位。其状态组合所对应的工作方式为:

SM0SM1=00,工作方式0;SM0SM1=01,工作方式1;

SM0SM1=10,工作方式2;SM0SM1=11,工作方式3。

SM2——多机通信控制位。TB8——发送数据位8。RB8——接收数据位8。(这3位用于多机通信)

REN——允许接收位。REN=0;禁止接收;REN=1,允许接收。

TI——串行发送中断请求标志。在数据发送过程中,当最后一个数据位被发送完成后,TI由硬件置位。

RI——串行接收中断请求标志。在数据接收过程中,当采样到最后一个数据位有效时,RI由硬件置位。

(2)串行中断

80C51有两个串行中断,即串行发送中断和串行接收中断。但这两个串行中断共享一个中断向量0023H。每当串行口发送或接收一个数据字节时,都产生中断请求。

串行中断请求在芯片内部发生,因此不需要引脚。两个中断共享一个中断向量,就需要在中断服务程序中对中断源进行判断,以便进行不同的中断处理。

对于串行中断控制共涉及3个寄存器,其中一个就是串行口控制寄存器SCON,用于存放串行中断请求标志。另外两个中断允许控制寄存器IE和中断优先级控制寄存器IP。

三、80C51串行口工作方式

80C51单片机的串行口共有4种工作方式,见下表。



1、 串行工作方式0

串行工作方式0是把串行口作为同步移位寄存器使用,实现串行数据的输入/输出。移位数据的传输以8位为一组,低位在前、高位在后。

利用串行工作方式0,加上“并入串出”或“串入并出”芯片的配合,80C51的串行口可实现数据的并行输入/输出。

方式0实现数据并行输入/输出“并入串出”芯片(74165)用于把并行输入数据通过移位形成位串,传送给串行口;而“串入并出”芯片(74164)则接收串行口的串行数据,通过移位形成8位并行数据输出。

工作方式0时,移位操作(串入或串出)的波特率是固定的,为单片机晶振频率的1/12,若晶振频率用fosc表示,则波特率=fosc/12。按此波特率的一个机器周期进行一次移位,若fosc=6 MHz,则波特率为500kb/s,即2 μs移位一次。

利用串行口方式0实现数据并行输入/输出



2、串行工作方式1

串行工作方式1是10位为一帧的异步串行通信方式,这种工作方式是为双机通信而准备的。帧格式包括1个起始位,8个数据位和1个停止位。

方式1的数据发送:是由一条写发送寄存器(SBUF)的指令开始,随后在串行口由硬件自动加入起始位和停止位,构成一个完整的帧格式,然后在移位脉冲的作用下,由TXD端串行输出。一个字符帧发送完后,使TXD输出线维持在1状态下,并将SCON寄存器的TI位置1,通知CPU可以接着发送下一个字符。

接收数据:SCON的REN位应处于允许接收状态,即REN=1。在此前提下,串行口采样RXD端,当采样到从1到0的状态跳变时,就认为已接收到起始位。随后在移位脉冲的控制下,把接收到的数据位移入接收寄存器中。直到停止位到来之后置位中断标志位RI,通知CPU从SBUF取走接收到的一个字符。

3、 串行工作方式2 和3

串行工作方式2和3都是11位为一帧的串行通信方式,即1个起始位、9个数据位和1个停止位。

在这两种工作方式下,字符还是8个数据位,只不过增加了一个第9数据位(D8),它是一个可编程位,其功能由用户设定。

在发送数据时,应予先在串行口控制寄存器SCON的TB8位中把第9个数据位的内容准备好。

这两种工作方式的数据接收过程也与方式1基本类似,不同点仍在第9数据位上,串行口把接收到的前8个数据位移入SBUF,而把第9数据位送SCON的RB8。

串行工作方式2和3是为多机通信而准备的。两者的工作过程相同,差别仅在于波特率的设置,方式2的波特率是固定的,而方式3的波特率可由用户根据需要设定,设定方法与方式1相同。

  1. 串行通信数据传输速率

1 、传输速率的表示方法

  1. 与传输速率有关的术语

波特(Baud):每秒1次的信号变化称为1波特。波特原本是表示电信设备传输速率的单位,后来又用于表示调制解调器的数据传输速率。


波特率(Baud Rate):是每秒钟事件发生的数目或信号变化的次数。在单片机的串行数据传输中,事件和信号变化都反映在二进制位上,因此就以波特率表示串行数据的传输速率。


比特率(Bit Rate):也称为位速率,即每秒钟传输二进制数的位数。在一般的单片机串行通信中,波特率与比特率的概念是一样的,但在高速串行通信中,由于一个事件的编码往往不止1位,因此波特率与比特率就不一样了,例如事件按4位编码,如果数据传输的波特率是2400,则比特率就是9600。


(2)单片机中使用的波特率

单片机使用波特率作为串行通信传送速率的单位。即

1波特=1 b/s(位/秒)

在串行数据传输中,波特率除表明数据传送速率外,还可以表示串行口中移位脉冲频率的高低,因为串行数据发送和接收的速率是由移位脉冲决定的。波特率高表明移位脉冲频率高,串行数据传输速度就快;反之,波特率低表明移位脉冲频率也低,串行数据传输速度就慢。

波特率的数值差异很大,例如,在RS232C标准中规定,允许波特率为每秒50~19 200 b/s。在实际的串行数据传输应用中,应根据速度要求、线路质量以及设备情况等因素选定波特率。

2、80C51的波特率

(1)串行工作方式0的波特率

串行工作方式0的波特率是固定的,其值为

波特率=fosc/12

其中fosc表示外部振荡器频率。fosc/12即外部振荡脉冲的12分频。在串行工作方式0下,每个机器周期产生一个移位脉冲,进行一次串行移位。因为波特率固定,不存在设置波特率的问题。

(2)串行工作方式2的波特率

串行工作方式2的波特率也是固定的,但有两个数值。其计算公式为:

波特率=fosc×2smod/64

其中smod是串行口波特率倍增位SMOD的值。这两种固定的波特率可根据需要选择,而选择的方法是设置PCON寄存器中SMOD位的状态。

(3)串行工作方式1和方式3的波特率串行工作方式1和方式3的波特率不是固定的,可以根据需要设置。

80C51是以定时器T1作为波特率发生器,以其溢出脉冲产生串行口的移位脉冲。因此,在这两种工作方式中,通过计算T1的计数初值就可以实现波特率的设置。假定定时器的计数初值为X,则计数溢出周期为:

(12/fosc)×(256-X)

溢出率为溢出周期的倒数,则波特率计算公式为:

波特率=(2smod/32)×(定时器1溢出率)=(2smod/32)×{fosc/[12×(256-X)]}

根据上述波特率计算公式,得出计数初值的计算公式为:

X=256-[fosc×(2smod)]/(384×波特率)

以定时器T1作波特率发生器是由系统决定的,用户只需先把波特率确定下来,再通过计算得到定时器的计数初值,然后通过初始化程序装入T1即可。当定时器T1作波特率发生器使用时,应选择定时方式2(即8位自动加载方式) 。

  1. 串行通信应用

1 、近程串行通信

单片机的数据信号在传输线上传送时,由于受到线间分布电容和噪声干扰等影响,将引起传输信号的幅度衰减和波形畸变,极易导致传输错误。加之导线越长电容越大,所以传输距离就受到一定的限制。

由于近距离串行通信不改变数据位波形和频率,所以也称为基带传输方式。虽然基带方式实现起来既方便又经济,但只能用于近程通信。

2 、调制解调器的使用

对于远程通信(例如城市之间),不能使用基带传输方式,只能使用模拟信号形式进行,一般使用电话线。

为了在电话线上进行串行数据传输,需要在发送端把数字信号转变为模拟信号再进行发送,这种把数字信号转变为模拟信号的过程称为调制。

在接收端应把模拟信号再转变为数字信号,这一过程称为解调。

远程通信多采用双工方式,即通信双方都应具有发送和接收功能。为此在通信线路的两端都设置调制器和解调器,并且把二者结合在一起称为调制解调器(Modem)。使用电话线作传输线的远程通信连接如下图所示



3 、双机通信

双机通信使用串行工作方式1进行。在进行双机串行通信之前,首先把通信中的一些技术性问题设定下来。其中包括:

① 确定数据通路形式。若为单工形式,则需确定哪一方为发送方哪一方为接收方;而对于双工形式则双方都能发送和接收数据,不存在这个问题。

② 制定好通信协议。虽然串行工作方式1的数据帧格式是固定的,但数据传送的波特率以及是否使用奇偶校验等问题还需事先约定。

③ 设计好联系代码,以便进行通信联络。联系代码可以使用ASCII码,也可以自行设计。自行设计的联系代码只能供自己使用。

④ 定义数据表。以便给发送数据提供来源、给接收数据提供去处,只要指出数据表的首地址及数据长度就可以把数据表确定下来。

4 、多机通信

(1)多机通信系统

一对多式的多机通信可以构成一个主从结构的分布式单片机系统,常在规模较大的工业过程控制系统中使用。在这样的系统中,出于集中管理和控制的需要,主机可随时向各从机发布命令,并把现场状态和检测数据等通过从机及时传输回主机进行处理。以主机为主导方,要给每台从机编码,以便主机能按编码呼叫从机,有效的从机编码范围是01H~FEH,而把FFH作为一条控制命令使用。所以在80C51多机通信系统中,从机数目最多可达254台。



(2)多机通信技术要点说明

与双机通信相比,多机通信的复杂性在于主机如何呼叫从机以及如何从呼叫状态转入到通信状态。为此多机通信有3个技术要点:第9数据位,串行口控制寄存器SCON中的多机通信控制位SM2,串行工作方式2或方式3。

1)第9数据位

第9数据位是供主机使用的标识位。因为在多机通信中主机既发送从机编码(地址帧),又发送数据(数据帧),为区分地址帧和数据帧,设置了第9数据位。第9数据位为1时,表明主机发送的是从机编码;第9数据位为0时,表明主机发送的是数据。程序如下:

MOVSCON,#0D8H;TB8=1,串行工作方式3

MOV R3,#01H

MOV A, R3

MOVSBUF,A

从机接收到地址帧后与本机编码比较,若相符,则再把该机编码返回,作为应答码,以示呼叫成功。然后主机把TB8位清0(CLR TB8),接着进行命令和数据传输。

2)串行口控制寄存器SCON的多机通信控制位SM2

在从机方,对于主机发送过来的从机编码和数据,应该有不同的反映。在串行口控制寄存器SCON中定义一个多机通信控制位SM2,以SM2位的状态来通知从机是否进行接收操作。

如果SM2=1,只有接收到的第9数据位为1时,才将接收到的从机编码送入SBUF,并置位RI;否则,接收到的数据被丢弃。如果SM2=0,则不论第9数据位状态如何,都将所接收的内容装入SBUF中,并置位RI。

各从机初始化时应将串行控制寄存器SCON的SM2位置1,等待主机呼叫。各从机都能接收到主机发送的地址帧,自动把其中的第9数据位送串行口控制寄存器SCON的RB8位,并把RI置1,以便通过中断或查询程序进行编号比较,判断主机是否在呼叫自己。确认之后,再把从机编码返回作为应答,并把本身的SM2位复位为0,为后面的数据传输作准备。

从机接收地址帧的指令序列如下:

MOVSCON,#0F0H ;SM2=1,串行工作方式3

QWE: JBCRI,ASD ;等待主机呼叫

SJMPQWE

ASD: MOVA,SBUF ;判断是否为本机

XRLA,#01H

JZZXC

……

ZXC:CLRSM2 ;确认后应答,SM2=0

MOVA,#01H

MOVSBUF,A

3)串行工作方式2或方式3

多机通信的主机和从机均应工作于方式2或方式3,主要目的是为了传送和处理第9数据位。所设定的工作方式应一直保持,因为主机可能随时结束当前通信,再呼叫另一个从机。

(3)多机通信的格式约定

呼叫成功后,主从机双方即可进行通信,通信流程可根据需要确定。

多数情况是主机首先发出“方向”命令,通知从机数据传送的方向。

例如,用00H表示要求从机发送数据,用01H表示要求从机接收数据。从机接收到命令后,要作出应答,并报告自己的状态。



推荐阅读

史海拾趣

Ford Aerospace & Communications Corp公司的发展小趣事

进入20世纪50年代,随着太空技术的兴起,福特汽车公司开始关注卫星通信的潜力。虽然福特并未直接参与卫星的发射或制造,但它通过资助相关科研机构和大学的研究项目,间接推动了卫星通信技术的发展。这些研究为后来的全球卫星通信系统提供了重要的理论基础和技术支持。

Display Engineering Services公司的发展小趣事

在汽车制造领域,福特一直是技术创新的领导者。20世纪60年代,福特开始将电子设备集成到汽车中,包括车载电话、导航系统以及早期的娱乐系统。这些创新不仅提升了驾驶的便捷性和舒适性,也预示着未来汽车电子化、智能化的趋势。虽然这些技术并不直接属于航空通信范畴,但它们展示了福特在电子技术应用方面的前瞻性和实力。

FARNELL公司的发展小趣事

为了保持在电子行业中的领先地位,FARNELL公司积极寻求创新与合作。公司与多家知名电子元器件制造商建立了长期合作关系,共同研发新产品、新技术。同时,FARNELL公司还致力于为客户提供定制化的解决方案,满足不同客户的需求。这种创新与合作的精神使FARNELL公司在电子行业中保持了持续的发展动力。

BOOKLY公司的发展小趣事

BOOKLY公司深知品质是赢得市场的关键。因此,公司从创立之初就建立了严格的质量管理体系,确保每一款产品的品质和性能都达到最高标准。同时,BOOKLY还注重品牌塑造,通过精心的品牌设计和营销活动,提升了品牌知名度和美誉度。这些努力使得BOOKLY的产品在市场上获得了良好的口碑和广泛的认可。

Arco Electronics公司的发展小趣事

Arco Electronics公司深知品牌建设对于企业发展的重要性。因此,公司投入大量资源用于品牌建设和市场推广。公司通过与知名企业合作、赞助行业展会等方式提升品牌知名度;同时,还积极运用新媒体进行线上推广,与消费者建立更紧密的联系。这些举措有效地提升了Arco的品牌形象和市场影响力。

东科半导体(DK)公司的发展小趣事

东科半导体(DK)公司一直将技术创新作为发展的核心驱动力。公司投入大量资金和资源用于研发,先后开发出AC/DC、同步整流、第三代半导体氮化镓芯片等先进技术。其中,东科半导体的同步整流芯片研发成功,其独特的两引脚封装技术为全球首创,为公司赢得了行业内的独家竞争优势。这一技术的成功应用,不仅提升了公司产品的性能,也进一步巩固了东科在电源管理芯片市场的领先地位。

问答坊 | AI 解惑

正在学DSP,但发觉DSP却用处不大!前途也~~

发觉DSP的用处真不大,而且价格有高。 做音视频的编解码,用专用的ASC电路成本更低廉,性能更高。应为这种方案的厂家提供的选择更多,成本更低廉。 至于控制领域,用 ARM7, STM32等CORTEX-M3性能价格更低廉. 例如用ARM7: LPC系列,AT91SAM7 ...…

查看全部问答>

机器人

本帖最后由 paulhyde 于 2014-9-15 09:19 编辑 介绍机器人的几个文档  …

查看全部问答>

奇怪的看门狗问题!

测试LPC2124的看门狗功能时遇到这样一个问题,主函数如下,其中延时函数DelayNS()里面有一个喂狗函数WdtFeed(),在后面的while循环里等待看门狗计数溢出复位。结果如预期一样正确。然而奇怪的是,当把延时函数DelayNS()里面的喂狗函数WdtFeed()注 ...…

查看全部问答>

节能议题发烧 LED灯泡降价策略效应

LED照明在价格持续下跌、技术不断进步的趋势下,前景看好,工研院预估,LED照明将从2011年开始大幅成长,2014年台湾照明市场规模将达到708亿美元(约新台币2.14兆元)。 观察日本推广LED灯泡的成功经验,主要是在于政府政策支持、厂商成本下降的能 ...…

查看全部问答>

好用的Verilog串口UART程序

==========================================================================//-----------------------------------------------------// Design Name : uart // File Name   : uart.v//     : Simple UART// Coder&nb ...…

查看全部问答>

proteus仿真430提示错误

使用proteus仿真430的时候设置什么的都对但是运行起来proteus就提示芯片选择错误 IAR软件里全部都设置好了,但是就是仿真不行,用的IAR FOR 430 5.5版本,proteus用的是7.9的。有谁遇到过这样的问题吗,请求帮助啊! …

查看全部问答>

为什么我用两个定时中断会出现合并后就编译出现乱码??分开的编译却是正常的。求救!

#include #include sbit p10=P1^0;   //数码管控制端 sbit p11=P1^1; sbit p12=P1^2; sbit p13=P1^3; sbit p20=P2^0;   //按键控制端 sbit p21=P2^1; sbit p22=P2^2; sbit p27=P2^7; bit GoFlag; #define uchar un ...…

查看全部问答>

请教大虾关于msp430f5438的问题,非常急

各位大虾好 之前我用msp430f149的SPI控制nrf24l01 做到了正常通信 最近使用msp430f5438将程序移植 却始终无法通信 。在示波器上看时序 发现5438的SPI中的MOSI CLK都正常工作。但是MISO读回的值始终为0XFF,程序改了好几次,一直不成功,我是第一次 ...…

查看全部问答>

静态时序分析与逻辑设计

  这是有关静态时序分析方面的资料,欢迎有兴趣的人士下载阅读。…

查看全部问答>