MCS-51 单片机的串行通信(RS-232/UART)

2023-03-24 20:30   327   0  

主要内容:串行口的结构、串行口的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)。




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


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


a3b2005e-ac52-11ed-bcd2-b8ca3a6cb5c4.jpg


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


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




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




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


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


a3b2005f-ac52-11ed-bcd2-b8ca3a6cb5c4.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种工作方式


a3b20060-ac52-11ed-bcd2-b8ca3a6cb5c4.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溢出率确定。


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


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

  2. 方式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而变化。


a3b20061-ac52-11ed-bcd2-b8ca3a6cb5c4.png


帧格式:


a3b20062-ac52-11ed-bcd2-b8ca3a6cb5c4.png


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


数据位(8位);


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


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


空闲位


串行口的四种工作方式:


1、工作方式0


工作方式0由SCON寄存器SM0SM1都为低电平决定,用于移位寄存器,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方式字段中的M1M0两位。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。因为干扰信号一般是以共模信号的形式存在,所以差分信号的应用极大地提高了放大器系统的信噪比。


单端传输就是对与地而言的。


例:基本设置指令如下。


a3b20063-ac52-11ed-bcd2-b8ca3a6cb5c4.jpg




登录icspec成功后,会自动跳转查看全文
博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。