单片机的串行口是和外部设备进行通信的重要通道,下面将对串行通信接口的物理和电气标准、多机及远程通信的方法做进一步介绍。图9-23 MAX485双机通信原理图9-24 MAX485多机通信原理9.3.2 串行接口的物理标准RS-232C物理标准规定接口通向外部的连接器是一种型号为DB25的25芯插针插座。......
2023-11-17
8051系列单片机内部集成的串行通信接口全称为“通用异步收发器”(UART),它既可作异步传输使用,也可作同步移位寄存器使用,还可用于数据的组网通信。串行口在接收和发送数据时,均可以向CPU申请中断,以保证能对接收和发送的信息及时处理。
9.2.1 UART的结构
8051系列单片机通用异步收发器的内部结构如图9-7所示。UART与单片机内部8位数据总线相连,SBUF是收发缓冲器,由接收缓冲器和发送缓冲器两部分构成,二者具有同一地址(99H)。8051系列单片机的串行数据通信的启动方法很简单,只要将数据写入发送缓冲器就能启动数据的发送,而在接收数据时,只要读取保存在接收缓冲器中的内容即可。单片机会按照读或写的方式不同,自动分配要访问的目标寄存器是发送还是接收。
图9-7 8051系列单片机通用异步收发器的内部结构
UART工作时,定时器T1用于产生通信需要的时钟,控制寄存器用于对串行口的工作状态进行相应的监控和设置。当数据写入发送SBUF后,数据在发送控制器的工作状态进行相应的监控和设置。当数据写入发送SBUF后,数据在发送控制器的控制下,按位从TXD引脚移出;外部数据在接收控制器的控制下,从RXD引脚移入移位寄存器并对串行数据进行恢复,恢复后的数据保存至接收SBUF中供软件读取。
当接收SBUF中的数据没有被软件读取时,移位寄存器还可以暂时接收并保存下一个新数据,从而避免发生数据溢出,这种结构也是串行口特有的接收双缓冲结构。发送器则没有类似的数据缓冲结构,因为在发送数据时单片机是主动的,不存在数据过载的问题。
波特率是指串行通信每秒钟传送数据的位数,波特率的单位是b/s(Bit Per Second,位/秒)。例如:异步串行通信的数据传送速度是每秒钟120个字符,每个字符包含有十位的二进制数,则传输的波特率可以用以下方法来计算:
波特率=120字符/秒×10位/字符=1200位/秒=1200 b/s
9.2.2 UART的控制寄存器
1.串行口控制寄存器(Serial Control Register,SCON)
串行口控制寄存器SCON,可位寻址。
(1)bit7、bit 6(SM0、SM1):串行口工作方式控制位,具体设置见表9-1。
表9-1 串行口工作方式
注:fosc为系统晶振频率。
(2)bit5(SM2):多机通信控制位,主要是用于方式2和方式3,该位决定了是否用收到的不同特征的数据位来激活自己的中断系统。
① 0:无论串行口收到的一帧数据的第9位是0还是1,都认为这个数据有用,置位RI并将其放进SBUF,并向CPU申请中断。
② 1:串行口到的一帧数据的第9位如果是1,则认为这个数据有用,将其放进SBUF,置位RI并向CPU申请中断;如果收到数据的第9位是0,则认为这个数据无用将其丢弃。
注意:a.当SM2为1时,是否接收某个数据可由外部数据自身的特征来控制,这就让单片机对外部数据具有了选择性。
b.在方式0时,SM2位必须为0。
c.在方式1时,如果SM2位为1时,只有当接收到有效的停止位时,才会置位RI并申请中断。
(3)bit4(REN):串行口接收允许位。
① 0:禁止接收。
② 1:允许接收。
(4)bit3(TB8):在多机通信中(方式2或方式3),TB8作为一个存储位,保存着将要发送的一帧数据的第9位,通常用作区别地址帧或数据帧的标志。TB8=0,表示发送的是数据;TB8=1,表示发送的是地址。在双机通信中,第9位常用作奇偶校验位。
(5)bit2(RB8):在多机通信中(方式2或方式3),RB8作为一个存储位,保存着已经接收到的一帧数据的第9位,用作地址帧或数据帧的判断。在双机通信中,用于对接收到的数据进行奇偶校验。
(6)bit1(TI):发送中断标志位。
在方式0时,当串行口发送一帧数据的第8位结束时,硬件置位TI位,并向CPU申请中断。
在方式1~3时,当串行口刚开始发送一帧数据的停止位时,硬件置位TI位,并向CPU申请中断。TI位置位后,必须用软件清零。
(7)bit0(RI):接收中断标志位。
在方式0时,当串行口接收到一帧数据的第8位结束时,硬件置位RI位,并向CPU申请中断。
在方式1~3时,当串行口接收到一帧数据的停止位中间时,硬件置位RI位,并向CPU申请中断。RI位置位后,必须用软件清零。
2.中断允许寄存器(Interrupt Enable Register,IE)
中断允许寄存器IE在项目7中已经介绍,本项目重点介绍对串行口有影响的位ES。
(1)bit7:5(略)。
(2)bit4(ES):串行口中断允许位。
① 0:禁止串行口中断。
② 1:允许串行口中断。
(3)bit3:0(略)。
3.电源管理寄存器(Power Control Eegister,PCON)
PCON寄存器用于对电源和单片机的波特率控制,不可位寻址,本项目重点介绍对串行口有影响的位SMOD。
(1)bit7(SMOD):串行口波特率倍增位。
① 0:串行口波特率不变,系统复位时默认为SMOD=0。
② 1:串行口波特率加倍。
(2)bit6:0(略)。
9.2.3 串行口的工作方式
按照设置的不同,串行口可以工作在以下4种方式下:
1.方式0(8位移位寄存器I/O方式)
当SM0、SM1位为“00”时,串行口工作在方式0下,串行口为同步移位寄存器输入/输出模式,常用于外接移位寄存器,用以扩展并行I/O口,这种方式不适用于单片机之间的通信。在方式0状态下,串行口发送的一帧数据为8位,不设起始位和停止位,先发送和接收的是最低位,波特率是固定的,具体可用下式来表示:
方式0的波特率=fosc/12
1)方式0的发送
在方式0的发送过程中,当数据写入发送缓冲器(SBUF)时,单片机内部产生一个写SBUF的正脉冲,该脉冲触发串行口把SBUF中的8位数据以fosc/12的固定波特率从RXD(P3.0)引脚串行输出,低位在前、高位在后。TXD(P3.1)引脚输出同步移位脉冲,当单片机发送完8位数据后,置位发送中断标志位TI,方式0的发送时序如图9-8所示。
图9-8 方式0的发送时序
2)方式0的接收
在方式0接收时,REN为串行口允许接收控制位。在方式0状态下,当REN=1时单片机开始接收数据,引脚RXD(P3.0)为数据输入端,TXD(P3.1)为同步移位脉冲输出端,接收器以fosc/12的固定波特率采样RXD引脚的数据,当接收完8位数据后,置位接收中断标志位RI,并向CPU申请中断,方式0的接收时序如图9-9所示。
图9-9 方式0的接收时序
需要特别注意的是,方式0的数据传输不同于串口的同步通信方式,其用途是经常配合串入并出或者并入串出移位器件一起使用,用于扩展I/O口,具体电路如图9-10所示。方式0是串行口的默认工作模式,当单片机复位后,SCON寄存器被清零,串行口工作在方式0的默认模式下。另外,当TI/RI位硬件置位后,需要用软件清零这两个标志位。
图9-10 串行口扩展I/O口电路
2.方式1(波特率可变的10位异步通信方式)
当SM0、SM1位为“01”时,串行口工作在方式1状态下。方式1用于数据的串行发送和接收。TXD和RXD引脚分别用来发送和接收数据。在方式1下,一帧数据由10位组成,即1个起始位、8个数据位和1个停止位,数据的低位在前、高位在后。方式1的数据帧格式如图9-11所示。
图9-11 方式1的数据帧格式
工作在方式1时,串行口被配置成波特率可变的8位异步串行通信接口,其波特率可以由下式计算:
方式1的波特率=(2SMOD/32)×定时器T1的溢出率
1)方式1的发送
在方式1下发送数据时,数据位由TXD端输出,当数据写入发送缓冲器(SBUF)时,单片机内部产生一个写SBUF正脉冲,此脉冲触发串行口以设定的波特率开始发送数据,数据的低位在前、高位在后。当单片机发送完8位数据并在发送停止位前,置位发送中断标志位TI。方式1发送时序如图9-12所示。
(www.chuimin.cn)
图9-12 方式1的发送时序
2)方式1的接收
在方式1下接收数据时(REN=1、RI=0),数据从RXD(P3.0)引脚输入,当单片机检测到起始位的负跳变时,就开始以约定的波特率接收数据。当接收完8位数据并在停止位到来时,置位接收中断标志位RI。方式1接收数据时序如图9-13所示。
图9-13 方式1的接收时序
3.方式2(固定波特率的11位异步接收/发送方式)
当SM0、SM1位为“10”时,串行口工作在方式2状态下,此时串行口被定义为9位异步串行通信接口,一帧数据由11位构成,即1个起始位、8个数据位、1个可编程控制位和1个停止位。方式2时的数据格式类似于方式1,所不同的是增加了一位可编程的数据位(TB8/RB8),这一位在双机通信时可用于“奇偶校验”,在多机通信时可用于地址/数据的标志位。方式2的数据帧格式如图9-14所示。
图9-14 方式2的数据帧格式
方式2常用于单片机间通信,其波特率是固定的,具体可用下式表示:
方式2的波特率=fosc×2SMOD/64
1)方式2发送
发送数据前,先根据通信协议软件设置TB8位(用于奇偶校验或地址/数据帧的标志),该位会在发送时自动转移到待发送数据的程控位上去。设置好TB8位后,将待发送的8位数据写入SBUF,即可启动发送过程,发送完成后TI位会硬件置位。方式2数据发送时序如图9-15所示。
图9-15 方式2、方式3发送时序
2)方式2接收
串行口以方式2接收数据时(REN=1、RI=0),数据从RXD(P3.0)引脚输入,当单片机检测到起始位的负跳变时,就开始以约定的波特率接收数据。当数据的第9位接收完成,并且在停止位到来时,会根据SMOD寄存器中SM2位的状态对第9位进行判断。如果SM2位为0,无论单片机收到的第9位是0还是1,都认为这个数据有用,将前8位放入SBUF,将第9位数据送入RB8,并置位RI,如果允许还将向CPU申请中断。
如果SM2位为1,串行口收到的第9位如果是1,就认为这个数据有用,将其前8位放进SBUF,将第9位保存至RB8,并置位RI;第9位如果是0,就认为这个数据无用,将其丢弃。方式2接收数据的时序如图9-16所示。
图9-16 方式2、方式3接收时序
4.方式3(可变波特率的11位异步接收/发送方式)
当SM0、SM1位为“11”时,串行口工作在方式3状态下,方式3为波特率可变的9位异步通信方式,方式3和方式2唯一的区别就是方式3的波特率是可变的,由定时器T1的溢出率来决定,其发送和接收原理和工作时序可以参考方式2。方式3的波特率可由下式来计算:
方式3的波特率=(2SMOD/32)×定时器T1的溢出率
9.2.4 数据的校验
数据在传输过程中,由于会受到可能的干扰而引起发送的信息和接收到的不一致,产生了错误,这种错误我们称其为“误码”。一旦数据在传输过程中产生了误码,就要想办法把它找出来,数据检错的方法有很多,常用的有以下两种:
1.奇偶校验
奇偶校验(Parity Check)是一种校验代码传输正确性的基本方法,根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。奇偶校验分为奇校验和偶校验两种方式,采用何种校验是事先约定好的。
奇偶校验是最简单的检错方法,即在传送字符的各数据位之外,再另外传送一位奇偶校验位,用校验位来调整这组代码中“1”的个数为奇数或偶数。在奇校验时,接收端会检验收到的一组代码中(包括校验位本身)“1”的个数是否为奇数,奇数则为传输正确,而在偶校验中,代码中“1”的个数应为偶数。
(1)奇校验:所有传送的数位(含数据位和校验位)中“1”的个数为奇数,例如:“8位数据位+1位校验位”的数据为:101101010,这组数据中1的个数为奇数,可以通过奇校验。
(2)偶校验:所有传送的数位(含数据位和校验位)中“1”的个数为偶数,例如:“8位数据位+1位校验位”的数据为:101101011,这组数据中1的个数为偶数,可以通过偶校验。
奇偶校验只能够检测出信息传输过程中的部分误码(1位误码能检出,2位及2位以上误码不能检出),同时它也不能对数据进行纠错,在发现错误后只能要求发送方重新发送。尽管如此,由于奇偶校验实现起来非常简单,仍然得到了广泛使用。
2.CRC
CRC是更高级的差错校验方式,全称为循环冗余校验(Cyclical Redundancy Check)。循环冗余校验的方法是在每个数据块(帧)中加入一个帧检查序列(FCS),该序列中包含了帧的详细信息,帧检查序列用于发送和接收装置比较帧的正确性,这种校验方式校验功能强大且具有自我纠错的能力,但对收发双方的数据运算能力有一定的要求。
9.2.5 波特率的设定
串行通信中收发双方在发送或接收数据时,波特率必须一致。在串行口的4种工作方式中,方式0和方式2的波特率是固定的,其波特率与使用的晶体振荡器有关。方式1和方式3则不同,其波特率是由定时器T1的溢出率来决定的。所谓定时器的溢出率,就是指定时器每秒钟溢出的次数。通过改变定时器的初值,就可以改变定时器的溢出率,从而改变串行口的波特率。
(1)方式0的波特率:串行口工作在方式0时,波特率固定为晶振频率fosc的1/12,且不受SMOD位的影响。例如:当晶振频率fosc=12 MHz时,串行口的波特率为1 Mb/s。
(2)方式2的波特率:串行口工作在方式2时,波特率与晶振频率及SMOD的值有关,即
波特率=fosc×2SMOD/64
晶振频率fosc=12 MHz时,当SMOD位为0时,波特率为187.5 kb/s;而当SMOD为1时,波特率为375 kb/s。
(3)串行口工作在方式1或方式3时,使用定时器T1作为波特率发生器,这时波特率是由T1的溢出率和SMOD的值共同决定的,即
波特率=(2SMOD/32)×定时器T1的溢出率
在串行口工作时,T1通常设置为8位初值自动重装定时器,TL1用于8位计数器,而TH1用于存放重装初值,当晶体振荡器的频率为12 MHz时,波特率的计算方法如下:
1)定时器1每计一个数所用的时间为
2)假定初值为X,定时器1溢出所用的时间为
3)定时器T1的溢出率为
4)方式1或方式3的波特率为
将上式代入,方式1或方式3的波特率可以表示为
不同时钟频率下的定时器1初值与波特率的对应关系可以参考表9-2。
表9-2 波特率与时钟频率和定时器1初值的对应关系
MCU小贴士:8051系列单片机为什么常用11.0592 MHz晶振?
涉及通信标准,串行口波特率都是1200的整数倍,为了使单片机串行口波特率尽量准确,8051系列单片机通常使用11.0592 MHz的晶振,目的是减少波特率的误差。
设定时器的初值为X,当单片机的晶振频率为11.0592 MHz且SMOD的值为0时,要使串行口产生9600 b/s的波特率,可以将以上数值代入波特率的计算公式中,这时定时器的初值可由下式来计算:
定时器T1的初值X为:253(FDH)。从上面的计算中,我们不难发现11 059 200正好是9600×32×12的整数倍,所以使用11.0592 MHz可以确保所计算出来的初值是整数,从而确保不会产生波特率的误差。
编程向导:串行通信的配置。
串行口的控制原理如图9-17所示。
图9-17 串行口的工作原理
串行通信的配置方法可以参考以下步骤:
(1)编程TMOD寄存器,将定时器T1设置成8位自动重装定时器。
(2)依据波特率的不同,计算定时器T1的初值,并分别装入TH1和TL1中。
(3)置位TCON寄存器的TR1位以启动定时器T1。
(4)编程SCON寄存器,设定串行口的工作方式。
(5)编程PCON寄存器,设定串行口是否工作在倍速状态。
(6)如使用中断,需要编程IE寄存器,开启总中断EA和串行口中断ES。
(7)中断响应后需软件清零相应的中断标志位TI和RI。
有关单片机原理与应用 基于C语言的文章
单片机的串行口是和外部设备进行通信的重要通道,下面将对串行通信接口的物理和电气标准、多机及远程通信的方法做进一步介绍。图9-23 MAX485双机通信原理图9-24 MAX485多机通信原理9.3.2 串行接口的物理标准RS-232C物理标准规定接口通向外部的连接器是一种型号为DB25的25芯插针插座。......
2023-11-17
异步串口通信的字符格式数据传送分为串行和并行,通信又分为异步和同步。异步串行通信是一帧接一帧进行的,传送既可以是连续的,也可以是断续的。串行通信的传送速率及通信波特率的计算MCS51系列单片机串行接口组成的通信系统是一种异步通信系统。波特率在串行口异步通信中是一个由用户决定的保证通信可靠的重要参数。1)串行接口控制寄存器SCON设置串行接口控制寄存器SCON是一个可位寻址的专业寄存器,用于串行数据通信控制。......
2023-11-07
在MCS-51单片机中,与串行通信有关的控制寄存器有3个,分别是串行控制寄存器SCON、串行口电源控制寄存器PCON和中断允许寄存器IE。1.串行控制寄存器SCONSCON是一个可位寻址的专用寄存器,用于串行数据通信的控制。2.串行口电源控制寄存器PCONPCON主要是为CHMOS型单片机8051的电源控制而设置的。表9-4串行口电源控制器寄存器在电源控制寄存器PCON中只有1位SMOD与串行口工作有关,SMOD是串行口波特率的倍增位,当SMOD=1时,串行口波特率加倍。......
2023-11-17
由于单片机的显示和存储功能有限,因而与PC通信是非常必要的。对一些复杂的控制系统,需要以局部单片机组成一套控制网。通信波特率8051串行接口组成的通信系统是一种异步通信系统,即通信双方在发送与接收时,只靠通信双方的软件控制同步。RI接收结束标志。一般对单片机的数据通信要求不很高,用串行接口即可达到,一般为2400~9600bit/s。......
2023-11-07
8051单片机全双工串行口具有4种工作方式,可通过软件编程选择。方式1为波特率可变的10位异步通信接口方式。在串行口由硬件自动加入起始位和停止位,构成一个完整的帧格式,在移位脉冲作用下串行数据从TXD引脚输出。发送和接收的一帧信息为11位,即1个起始位,9个数据位和1个停止位。发送一帧信息后,置位中断标志TI,其过程与方式1相同。方式3为波特率可变的11位UART方式。......
2023-11-04
所谓I/O接口也就是输入/输出接口。根据信号传输方式的不同,I/O接口一般可分为并行接口和串行接口两种方式。通常所说的并行接口一般称为Centronics接口,也称为IEEE1284标准。当传输距离较远、位数又多时,并行接口会导致通信线路复杂且成本提高。图5-13所示为各类并行接口及并行电缆,传输的是数字量和开关量。串行接口按电气标准及协议来分包括RS-232-C、RS-422、RS-485等。......
2023-06-23
图9-4串行口与74LS164连接图图9-5方式0数据输出时序图2.数据的接收在满足REN=1和RI=0的条件下,串行口即开始从RXD端以fosc/12的波特率输入数据,当接收完8位数据后,置中断标志RI为1,请求中断。若将并入串出移位寄存器的输出连接到单片机的RXD引脚,当串行口工作于方式0接收时,即可接收到CD4014或74LS165输入端的并行数据。......
2023-11-17
注意:进行单片机电子系统设计时,时钟频率一般选用11.05926MHz时,可以获得标准的波特率,所以51单片机选用这个看起来很“怪”的晶振。因为方式0和2波特率是固定传输,方式1和3波特率是可变的,表3-15给出方式1和方式3常用波特率设置。表3-15 常用波特率设置表单片机的串行通信方法较为多样,传统的串行通信方式是通过单片机自带的串行口进行RS232方式的通信。......
2023-11-04
相关推荐