80C51单片机串行通信

发布者:心有归属最新更新时间:2023-01-04 来源: zhihu关键字:80C51  单片机  串行通信 手机看文章 扫描二维码
随时随地手机看文章

一、串行通信基础知识

  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表示要求从机接收数据。从机接收到命令后,要作出应答,并报告自己的状态。



关键字:80C51  单片机  串行通信 引用地址:80C51单片机串行通信

上一篇:ADC0832简易数字电压表C语言
下一篇:单片机第一步——51单片机

推荐阅读最新更新时间:2024-11-12 20:30

如何用Atmega 16单片机驱动字符型液晶显示芯片
研究了一下,如何用ATmega 16单片机,来驱动字符型液晶显示芯片,现把研究心得写出来: 我手里的这个RT1601液晶显示模块,使用的是S6A0069显示芯片。 各个引脚简单说明一下: 控制和数据引脚配置如下: ------------------------------- PORTD_0 -RS PORTD_1 - R/W PORTD_2 - E PORTA - DATA BUS ------------------------------ LCD.h 1#ifndef_LCD_H_ 2#define_LCD_H_ 3/****************************
[单片机]
如何用Atmega 16<font color='red'>单片机</font>驱动字符型液晶显示芯片
Cortex--M0单片机二-十进制整数转换的快速算法
  为了提高Cortex—M0系列单片机应用系统的二进制到十进制BCD码整数转换代码的执行效率,采用除十求余数法来实现。该快速算法的核心内容是通过高效的汇编语言来实现常数除法,无论在程序代码的运行时间和存储空间上,都远胜于sprintf函数。   在单片机应用系统中,一般都需要高效快速地完成系统所需要的任务,并在任务完成后使系统进入睡眠或低功耗状态,以便最大限度地节省系统功耗,增强系统的抗干扰能力。因此,必须优化和提高系统中各个模块的运算速度,以最大限度地压缩软件运行时间。许多单片机应用系统中都需要进行二进制整数转换为十进制BCD码的操作,以便实现系统信息的显示。对于Cortex—M0系列单片机,由于其指令系统中没有十进制调整指令
[单片机]
Cortex--M0<font color='red'>单片机</font>二-十进制整数转换的快速算法
基于双单片机的数据通信模块设计方案
在信息数据传播的过程中,人们为了保障数据通信系统的工作性能,就将一些新型的通信技术应用到其专用,从而实现双单片机数据通信模块的设计,以确保信息数据传递的有效性和稳定性。其中SPI总线的应用,不但使得数据通信的效果得到很好的改善,还简化了整个通信系统的电流结构,使得双单片机数据通信模块设计的可靠性得到有效的提高。而且随着社会的不断发展,人们也将许多先进的科学技术应用到其中,有效的促进了我国通信行业的发展,使其通信性能得到进一步的优化。 双单片机SPI总线数据通信设计分析 在当前我国工业经济发展的过程中,人们为了实现工业的信息化生产,就将计算机控制系统应用到其中才,使其生产效率和质量得到有效的提高。但是,由于工业生产环境十分的恶劣,这
[电源管理]
AVR单片机驱动无源蜂鸣器C程序
/* 内部1 M晶振。 定时器实险,周期信号驱动无源蜂鸣器,些实验基于定时器的CTC模式,由硬件产生频率信号。 程序中实现单一频率的周期性提示音。 程序采用单任务方式,软件延时。 */ #include iom16v.h /*延时函数*/ void delay_ms(unsigned char i) { unsigned char a, b; for (a = 1; a i; a++) { for (b = 1; b; b++) { ; } } } void main(void) { unsigned char i; DDRA = 0x00; /*方向输入*/ PORTA = 0xFF; /*打开上拉*/
[单片机]
单片机PSD数据采集电路设计方案
  根据高精度光电位置灵敏探测器(PSD)的工作原理及输出特性,本文介绍了一套基于单片机技术的PSD输出信号数字采集电路的设计方案。通过Atmega16型单片机控制AD1674模/数转换、AD7501多路转换等实现对PSD输出模拟信号的数字化转换和采集。电路结构简单、成本低廉、体积较小,广泛适用于各实验室的PSD输出信号采集模拟实验。   0 引言   PSD作为一种精密的光电位置传感器,具有灵敏度高、响应时间短、位置分辨率高、光谱响应范围大等特点,因此被广泛应用于现代光电检测技术中,尤其是高精度、高速度的数据采集技术中。如何在极短的响应时间内实现多数据的采集,成了采集PSD输出数据的关键。本文基于单片机技术,设计搭建了一套高速的
[单片机]
<font color='red'>单片机</font>PSD数据采集电路设计方案
51单片机对LCD1602液晶显示的驱动控制设计
利用串行A/D转换器TLC549对输入信号电压源进行采集转换成数字信号给51单片机,经单片机进行数据处理后给1602液晶显示。 误差小于1%. #include #include #define uint unsigned int #define uchar unsigned char uchar LCD[6]; //电压数据转换成LCD1602液晶字符显示 uint Volt; sbit DO= P1^0; //时钟 sbit CS= P1^1; //片选 sbit CLK = P1^2; //数据输出 sbit RS = P2^0; //1602液晶数据/命令选择端 sbit RW = P2^1; //1602液晶读写端
[单片机]
51<font color='red'>单片机</font>对LCD1602液晶显示的驱动控制设计
单片机DAC0832+LM324波形发生器程序设计
单片机源程序如下: #include reg51.h #include string.h #define uchar unsigned char #define uint unsigned int sbit RS=P3^0; sbit RW=P3^1; sbit EN=P3^3; sbit K1=P2^0; sbit K2=P2^1; sbit K3=P2^2; sbit K4=P2^3; sbit K5=P2^4; uchar WaveChoice=1; uchar ys=30; uchar i,a=0; uchar sqar_num=128; uint freq; uchar code Sin ={
[单片机]
<font color='red'>单片机</font>DAC0832+LM324波形发生器程序设计
单片机PID算法实现
initial interrupter void init_interrupter(void) { TMOD=0x21; /* 设置计时器0工作于模式1,设置计时器1工作于模式2*/ TL0=0x00; /* T0=0000定时时间为71.1ms;71.1ms*15=1.066s*/ TH0=0xdc; /*T0=DC00定时时间为10ms;10ms*100=1s*/ /*T0=FC66定时时间为1ms;10ms*1000=1s*/ TL1=0xfd; /* 设置串口通信速率9600bps*/ TH1=0xfd; PCON=0x00; /* SMOD=0, 速率不倍增*/ SCON=0x50;
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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