单片机的串行通讯就是排成一队走,并行就是排成一列走

单片机的串行通讯就是排成一队走,并行就是排成一列走

4b5f97c009b60788a63f7ad995f7ac8d.png///插播一条:我自己在今年年初录制了一套还比较系统的入门单片机教程,想要的同学找我拿就行了免費的,私信我就可以哦~点我头像黑色字体加我地球呺也能领取哦。最近比较闲,带做毕设,带学生参加省级或以上比赛///09895b12b14b0c25037477d2a1813747.png

主要内容:串行口的结构、串行口的4种工作方式、多机通信、波特率的制定方法、串行口的应用。

MCS-51单片机内部有一个全双工的异步串行口。

全双工:双机通信之间可以同时实现发送数据和接收数据。

异步:收发双方没有应用同一时钟来控制数据传送。传送的数据是以一帧一帧格式进行的。

串行通信(英语:Serial communication)是指在计算机总线或其他数据通道上,每次传输一个位元数据,并连续进行以上单次过程的通信方式。与之对应的是并行通信,它在串行端口上通过一次同时传输若干位元数据的方式进行通信。

简言之:串行通讯就是排成一队走,并行就是排成一列走。

同步串行通信(Synchronous serial communication)和异步串行通信(Asynchronous serial communication)

1)发送端在发送串行数据的同时,提供一个时钟信号,并按照一定的约定(例如在时钟信号的上升沿的时候,将数据发送出去)发送数据,接收端根据发送端提供的时钟信号,以及大家的约定,接收数据。这就是常说的同步串行通信(Synchronous serial communication),I2C、SPI等有时钟信号的协议,都属于这种通信方式。

2)发送端在数据发送之前和之后,通过特定形式的信号(例如START信号和STOP信号),告诉接收端,可以开始(或者停止)接收数据了。与此同时,收发两方会约定一个数据发送的速度(就是大名鼎鼎的波特率),发送端在发送START信号之后,就按照固定的节奏发送串行数据,与此同时,接收端在收到START信号之后,也按照固定的节奏接收串行数据。这就是常说的异步串行通信(Asynchronous serial communication)。

串行异步通信是单片机中常用的方式:

数据按帧传输,一包含数据按帧传输,一包含起始位、数据校验和停止。依靠起始位、停止保持通信同步。因每帧传输都要建立一次同步,即需要额外两个附加位适用于工作速度较低的场合。

4a14f98fff84b3a2f588ab6a3af673ca.png

串行口的接口及基本原理:

该单片机串行接口是一个可编程的全双工串行通信接口。它可用作异步通信方式(UART),与串行传送信息的外部设备相连接,或用于通过标准异步通信协议进行全双工的8051多机系统也能通过同步方式,使用TTL或CMOS移位寄存器来扩充I/O口。通过管脚RXD(P3.0,串行数据接收端)和管脚TXD(P3.1,串行数据发送端)与外界通信。

两个物理上独立地接收和发送缓冲器,可同时收、发数据(全双工)。两个缓冲区公用一个特殊功能寄存器字节地址:SBUF(99H),它们有相同名字和地址空间,但不会出现冲突,因为它们两个一个只能被CPU读出数据,一个只能被CPU写入数据。

控制寄存器共两个:特殊功能寄存器SCON(控制寄存器)和PCON(状态寄存器)。

串行口控制寄存器SCON :字节地址98H,可位寻址,格式如图所示

0e1a6d3be41f7c1e3f11efd1d32fc09f.png

(1)SM0、SM1——串行口4种工作方式的选择位

SM0 SM1方式功能说明

0 0 0同步移位寄存器方式(用于扩展I/O口)

0 1 1 8位异步收发,波特率可变(由定时器控制)

1 0 2 9位异步收发,波特率为fosc/64或fosc/32

1 1 3 9位异步收发,波特率可变(由定时器控制)

表1串行口的4种工作方式

8b07ec17d82da3d9de10c79a9502ed5c.png

其中fosc为晶体震荡器频率

SM2:多机通信控制位。在方式0时,SM2一定要等于0。在方式1中,当(SM2)=1则只有接收到有效停止位时,RI才置1。在方式2或方式3当(SM2)=1且接收到的第九位数据RB8=0时,RI才置1。

REN:接收允许控制位。由软件置位以允许接收,又由软件清0来禁止接收。

TB8: 是要发送数据的第9位。在方式2或方式3中,要发送的第9位数据,根据需要由软件置1或清0。例如,可约定作为奇偶校验位,或在多机通信中作为区别地址帧或数据帧的标志位。

RB8:接收到的数据的第9位。在方式0中不使用RB8。在方式1中,若(SM2)=0,RB8为接收到的停止位。在方式2或方式3中,RB8为接收到的第9位数据。

TI:发送中断标志。在方式0中,第8位发送结束时,由硬件置位。在其它方式的发送停止位前,由硬件置位。TI置位既表示一帧信息发送结束,同时也是申请中断,可根据需要,用软件查询的办法获得数据已发送完毕的信息,或用中断的方式来发送下一个数据。TI必须用软件清0。

RI:接收中断标志位。在方式0,当接收完第8位数据后,由硬件置位。在其它方式中,在接收到停止位的中间时刻由硬件置位(例外情况见于SM2的说明)。RI置位表示一帧数据接收完毕,可用查询的办法获知或者用中断的办法获知。RI也必须用软件清0。

波特率即数据传送的速率,其定义是每秒钟传送的二进制数的位数。例如,数据传送的速率是120字符/s,而每个字符如上述规定包含10数位,则传送波特率为1200波特。

波特率:每秒钟传送码元数目,单位波特( Baud)(位/秒( bps)

假设波特率为: 1200b/s

每一位代码的传送时间 Td(码元宽度)为波特率的倒数。

Td=1b/( 1200bs)= 0.833ms

而每个字符格式包含 10个代码位(1个起始位、1个终止位、8个数据位),传送一字节需要 8.33ms。

传送距离随波特率增加而减少

波特率制定方法:

·收、发双方的波特率必须一致。

·串口方式0和方式2的波特率是固定的;

·串口方式1和方式3的波特率是可变的,由T1溢出率确定。

串口各种工作方式下波特率的计算

.方式0时,波特率固定为时钟频率fosc的1/12。

.方式2时,波特率仅与SMOD位的值有关。

2定时器T1产生波特率的计算

(1)方式0波特率=时钟频率fosc×1/12,不受SMOD位的值的影响。若fosc=12MHz,波特率为fosc/12即1Mb/s。

(2)方式2波特率=(2^SMOD/64)×fosc

若fosc=12MHz: SMOD=0波特率=187.5kb/s;SMOD=1波特率=375kb/s

(3)方式1或方式3时,波特率为:

波特率=(2^SMOD/64)×T1的溢出率

实际设定波特率时,T1常设置为方式2定时(自动装初值)这种方式不仅操作方便,也可避免因软件重装初值而带来的定时误差。

由上式可见,波特率随fosc、SMOD和初值X而变化。

a922e96fc387594067fb2e22d68b4f3e.png

帧格式:

17345ccad64d3590fcb0dba1c9b7fe0f.png

起始位(1位)---低电平;

数据位(8位);

奇偶校验位(1位,可无校验位);

停止位(1位)---高电平。

空闲位

串行口的四种工作方式:

1、工作方式0

工作方式0由SCON寄存器SM0\SM1都为低电平决定,用于移位寄存器,I/O口扩展应用。一帧信息包括8位数据位、低位在前,高位在后。波特率固定为fosc/12。

发送:TI=0时,执行MOV SBUF,A将数据写入发送缓冲寄存器,并启动发送。TXD端输出移位脉冲,串行口把SBUF中数据依次从低到高从RXD读出。一帧数据发送完毕,硬件自动将RI发送中断标志位置1,若再次发送需要用指令CLR TI清零。

MOV SBUF,A;启动发送

JNB TI,$;若TI=0则该指令原地踏步等待发送完毕

CLR TI;请0,清发送中断标志位

接收:在RI=0,REN=1时,开始串行接收数据,TXD输出移位脉冲。将数据以固定波特率接收到SBUF中去,一帧数据接收完毕后,硬件自动将RI置1,若再接收数据需要用MOV A,SBUF读出数据,然后用指令将RI清零。

JNB RI,$;RI=0则软件原地踏步,等待接收

CLR RI;清接收中断标志位

MOV A,SBUF;将接收数据送入累加器A中

2、工作方式1

一帧信息包括起始位、8位数据位、停止位共10位,低位在前,高位在后。波特率可变,由定时器/计数器T1的输出率和SMOD(PCON.7)决定。

基本的接收发送指令与方式0同,但是:

(1)当SM2=0时,将接收的数据送入SBUF中,停止位送入RB8中,并置中断标志位RI=1.

(2)当SM2=1时,接收停止位=1,将接收的数据送入SBUF并且停止位送入RB8,并置RI=1,否则丢弃接收到的数据。再次接收前需要将RI清0。

波特率计算方法:波特率=(2^SMOD/32)*定时器T1的溢出率

溢出率:定时器在1S内产生溢出的次数。

定时器的溢出率与定时器的工作模式有关,可以改变TMOD寄存器T1方式字段中的M1\M0两位。T1定时器工作在方式2时,作为8位定时器自动重载功能。

3、方式2

9位异步通信接口。每帧数据均为11位,1位起始位0,8位数据位(先低位),1位可程控的第9位数据和1位停止位。

方式2波特率=(2^SMOD/64)×fosc

发送前,先根据通讯协议由软件设置TB8(例如,双机通讯时的奇偶校验位或多机通讯时的地址/数据的标志位)。

SM0、SM1=10,且REN=1。数据由RXD端输入,接收11位信息。当位检测到RXD从1到0的负跳变,并判断起始位有效后,开始收一帧信息。在接收器完第9位数据后,需满足两个条件,才能将接收到的数据送入SBUF。

(1)RI=0,意味着接收缓冲器为空。

(2)SM2=0或接收到的第9位数据位RB8=1时。

当上述两个条件满足时,接收到的数据送入SBUF(接收缓冲器),第9位数据送入RB8,并置“1”RI。若不满足两个条件,接收的信息将被丢弃。

4、方式3

SM0、SM1=11,串口为方式3。波特率可变的9位异步通讯方式,除波特率外,方式3和方式2相同。

多机通信(主动式结构)

要保证主机与所选择的从机实现可靠地通信,必须保证串口具有识别功能。

SCON中的SM2位就是满足这一条件而设置的多机通信控制位。

原理:在串行口以方式2(或方式3)接收时,若SM2=1,表示置多机通信功能位,这时有两种可能:

(1)接收到的第9位数据为1时,数据才装入SBUF,并置中断标志RI=1向CPU发出中断请求;

(2)接收到的第9位数据为0时,则不产生中断标志,信息将抛弃。

主机发送信息两类:一类是地址,用来需要和主机通信的从机,特征是串行发送的第9位数据TB8为1;另一种是数据,串行传送的第9位数据TB8=0.

主从机通信的过程如下:

1)使所有的从机工作方式2或3,且SM2=1,REN=1,以便主机发送地址信息,从机接收地址帧信息。

2)主机发送要寻址的从机的地址信息,其中包括8位需要与之通信的从机地址,第9位TB8=1.

3)所有从机接收到地址信息,置RI=1.

4)各从机进行地址比较,对于接收到的地址和自己的地址相同的从机,使SM2=0,准备接收主机随后发来的数据,对于地址不符合的从机,仍保持SM2=1的状态,对主机随后的数据不予理睬,直至发现新的地址帧。

备注:补充RS485差分传输特性,所谓差分传输,就是发送端在两条信号线上传输幅值相等相位相反的电信号,接收端对接受的两条线信号作减法运算,这样获得幅值翻倍的信号。

特点:从严格意义上来讲,所有电压信号都是差分的,因为一个电压只能是相对于另一个电压而言的。在某些系统里,"系统地"被用作电压基准点。当'地'当作电压测量基准时,这种信号规划被称之为单端的。我们使用该术语是因为信号是用单个导体上的电压来表示的。另一方面,一个差分信号作用在两个导体上。信号值是两个导体间的电压差。尽管不是非常必要,这两个电压的平均值还是会经常保持一致。

可以想象,这两个导体上被同时加入的一个相等的电压,也就是所谓共模信号,对一个差分放大系统来说是没有作用的,也就是说,尽管一个差分放大器的输入有效信号幅度只需要几毫伏,但它却可以对一个高达几伏特的共模信号无动于衷。这个指标叫做差分放大器的共模抑制比(CMRR),一般的运算放大器可以达到90db以上,高精度运放甚至达到120db。

猜你喜欢

转载自blog.csdn.net/danpianji777/article/details/124831034