收稿日期:作者简介:张小波,男,硕士,讲师。研究领域为单片机应用技术和嵌入式系统应用设计基于MCS—51单片机的串行通信技术张小波徐航(江西环境工程职业学院江西赣州341000)摘要:本文主要介绍了MCS—51单片机串行口的内部结构,工作原理,及与串口通信有关的特殊功能寄存器的格式功能,最后详细阐述了串口通信技术的具体应用。关键字:波特率、数据缓冲器SBUF、串行控制寄存器(SCON)串行通信是CPU与外界交换信息的一种基本通信方式。通信时仅需一到两根传输线,且每次只能传送一位,适用于长距离传输,但速度较慢。MCS—51串行口是一个可编程的全双工串行通信接口,其对应的引脚为P3.0(10脚)和P3.1(11脚),分别为RXD和TXD,通过软件编程它可以作通用异步收发器用,也可以做同步移位寄存器使用,其帧格式有8位、10位和11位3种,并能设置各种波特率。MCS—51串行口有两个独立的缓冲器,即发送缓冲器和接收缓冲器,且共用一个地址99H(SBUF)。同时,MSC—51串行口可以用软件设置成4种不同的工作方式。1.串行口的工作原理通过对特殊功能寄存器—串行口控制寄存器中SM0、SM1两位的操作,MCS—51单片机串口通信工作方式有4种,与串行口有关的特殊功能寄存器有串行口控制寄存器SCON、电源控制寄存器PCON和定时器T1,主要确定了串口通信的工作方式和波特率的计算方法。(1)串行口数据缓冲器SBUFSBUF是两个在物理上相互独立的接收,发送缓冲器,可同时发送,接收数据,两个缓冲器共用一个字节地址,为99H,可字节寻址,不可位寻址,复位值为00H。可通过编程对SBUF的读写来区别是对接收缓冲器的操作还是对发送缓冲器的操作。CPU写SBUF,就是修改发送缓冲器;CPU读SBUF,就是读接收缓冲器,在硬件结构上,串行口对外有两条独立的收发信号线RXD和TXD,因此可以同时发送,接收数据,实现全双工传送。(2)串行口控制寄存器SCONSCON寄存器用于确定串行通信的工作方式、接收和发送控制、串行口的中断状态标志,它既可以是字节寻址,也可以是位寻址,字地址为98H,其复位值为00H。SM0,SM1—工作方式控制位,可构成4种通信工作方式,分别为:方式0-同步移位寄存器;方式1-10位异步收发;方式2-11位异步收发;方式3-11位异步收发。SM2—多机通信控制位,用于主一从式多机通信控制,因多机通信是在方式2和方式3下进行,因此SM2位主要用于方式2和方式3。若SM2=1,则允许多机通信。若SM2=0,则不属于多机通信情况,接收到一帧数据后,无论第9位(D8)是0还是1,都置中断标志RI=1,接收到的数据装入接收/发送缓冲器(SBUF)中。在工作方式1时,若SM2=1,则只有接收到有效停止位时中断标志RI才置1,以便接收下一帧数据;在工作方式0时,SM2必须为0。REN—允许接收控制位,用软件置1或清零,REN=1,允许接收;REN=0,禁止接收。TB8—发送数据位8,在方式2和方式3时,TB8是要发送的第9位数据。在多机通信中,以TB8位的状态表示主机发送的是地址还是数据:TB8=0为数据,TB8=1为地址,该位由软件置位或清零,此外,该位还可以作为数据的奇偶检验位。RB8—接收数据位8,在工作方式2和工作方式3种,它是接收到的第9位数据位,既可以作为约定好的奇偶检验位,也可以作为多机通信时的地址帧或数据帧标志。在工作方式1中若SM2=0,则RB8是接收到的停止位,在工作方式0种不使用RB8。TI—发送中断标志位,在工作方式0中,发送完8位数据后,由硬件置1,向CPU申请接收中断,CPU响应中断后,必须用软件清零;在其他方式下,在发送停止位前,由硬件置位。RI—接收中断标志位。在工作方式0种,接收完8位数据后,由硬件置1,向CPU申请发送中断,CPU响应中断后,必须用软件清零;在其他方式下,在接收到停止位的中间时刻由硬件置1,中断响应后也必须用软件清零。串行发送中断标志位TI和接受中断标志位RI是同一个中断源,在全双工通信中,必须用软件来判别是发送中断请求还是接收中断请求。(3)电源控制寄存器PCONPCON主要是为CHMOS型单片机上实现电源控制而设置的专用寄存器,单元地址为87H其中只有一位SMOD与串行口工作有关。SMOD称为波特率选择位。在工作方式1,2,3中若SMOD=1,则波特率提高一倍;若SMOD=0,则波特率不加倍。除了以上3种特殊功能寄存器以外,串口的工作还与定时器T1和中断允许寄存器IE有关,定时器T1主要在工作方式1,工作方式2中用于计算波特率,而IE主要用于接收/发送中断的允许控制,ES=0,禁止串行中断,ES=1,允许串行中断。2.串行口应用实例SMOD—51单片机串行口有4种工作方式,根据每种工作方式的具体内容MCS—51单片机串行口主要应用有:①利用串口扩展并行输入,输出,此时串口工作方式为0。②利用串行口进行异步单工通信。单片机只具有发送或接收功能。③利用串行口进行异步双工通信,每一台单片机均具有发送和接收功能。2.1利用串行口扩展并行输入、输出口MCS—51单片机的串行口在工作方式0状态下使用移位寄存器芯片可以扩展一个或多个8位并行I/0口,这种方式不占用片外RAM地址,而且还能简化单片机系统的硬件结构,其缺点是操作速度慢。图1-(a)是利用两片74LS165扩展两个8位并行输入口的使用电路。74LS165是可并行置入得8位移位寄存器。当S/L由“1”变“0”时,并行输入端的数据被置入各寄存器,当S/L=“1”且时钟禁止端(15引脚)为低电平时。在时钟脉冲的作用下,数据向QH方向移动,图中SIN为串行输入端。图1-(b)所示是利用两片74LS164扩展两个8位并行输出口的使用电路,74LS164是8位串入并出移位寄存器,由于其无输出控制端。故在串行输入过程中,输出端会不断地变化,所以一般应在74LS164和输出装置之间加输出控制门,以保证串行输入结束后再输出数据。图1利用串行口扩展并行输入、输出口(a)利用74LS165扩展并行输入口图(b)利用74LS164扩展并行输出口2.2利用串行口进行异步单工通信在这种应用方式下,每一个单片机只有一种功能:接收或者是发送功能。此时我们可以用一个单片机发送命令,另一个单片机接收命令,从而实现一台单片机通过串口控制另一台单片机的目的。如图2-(a)所示,为甲机通过串口控制乙机LED闪烁的实现电路图。图中两单片机都工作于串口模式1,甲机的k1按键可通过串口分别控制乙机的LED1,LED2。由于甲,乙单片机完成的任务不同,甲机是控制机,负责发送或停止发送命令,乙机仅负责接收控制命令并控制LED1,LED2完成不同的动作。其程序设计的主要内容有:(1)串口初始化工作,设置串口的工作模式,本例中为工作方式1,甲机为发送命令,乙机接收命令,因此甲机SCON=0X40,乙机SCON=0X50。(2)定时器初始化工作。设置定时器T1的工作方式和初始值,本例中T1为工作方式2,初值为TH1=TL1=OXFD,此处,定时器的初始化工作主要目的是确定串口工作速度和波特率。(3)启动定时器T1(SETBTR1)。(4)如果串口工作在中断方式还必须设置IE允许ES中断,即ES=1,并编写中断编程。本例为查询方式,不需此步骤。2.3利用串行口进行异步全双工通信。MCS—51单片机的P3.0引脚和P3.1引脚是一对异步全双工通信串口,同一时刻,每一单片机既能发送又能接收数据,是单片机串行口应用的重点,能实现单片机之间的双向通信。图2-(b)是单片机之间双向通信电路,本单片机系统的主要功能是:甲机的K1按键可通过串行口分别控制乙机的LED1,LED2;乙机按键可向甲机发送字符,甲机接收后会在其P0端口的数码管上显示。其程序设计方法与单工通信方式相同。图2单片机之间的通信(a)甲机通过串口控制乙机LED闪烁电路(b)单片机之间双向通信电路3.小结MCS—51单片机的串行口是一个全双工串行口,可同时发送和接收数据。它有4种工作方式,不仅可用于扩展并行输入,输出口,而且可用于单片机与单片机,单片机与PC及之间的异步通信。通过对与串行口有关的特殊功能寄存器(SFR)、串行控制寄存器(SCON)、电源控制器(PCON)和定时器的编程设置,串行口可工作在不同的模式,不同的速度,从而实现不同的通信功能。MCS—51单片机与其它设备进行通信时,仅需一至两根导线,适用于长距离信息传输。因此,MCS—51单片机串行口通信技术是当今成熟而又应用非常广泛的一种通信技术。参考文献[1]张洪润,张亚凡,单片机原理及应用[M].清华大学出版社,2004,12:106.[2]沙爱军,基于单片机的超声波测距系统的研究与设计[J].电子科技,2009,22(11).[3]胡汉才.单片机原理与其接口技术(第二版)[M].北京:清华大学出版社,2004.[4]彭伟,单片机C语言程序设计实例100例.电子工业出版社.2009,06[5]王文杰,许文斌,单片机应用技术.冶金工业出版社.2008,06