单片机原理及应用(C语言版)第7章MCS-51单片机串行口第7章MCS-51单片机串行口目录7.1串行通信基本知识7.2串行口结构及控制7.3串行口工作方式7.4串行口应用举例7.5单片机与PC机通信的接口电路本章要点本章主要讲述MCS-51单片机串行口的结构、工作原理以及应用。主要内容包括串行通信基本知识、MCS-51单片机串行口结构、串行口工作方式以及单片机与PC机通信的接口电路。7.1串行通信基本知识主要内容7.1.1数据通信7.1.2异步通信和同步通信7.1.3波特率7.1.4通信方向7.1.5串行通信接口种类7.1.1数据通信计算机与外界的信息交换称为通信。基本的通信方法有并行通信和串行通信两种。1.并行通信单位信息(通常指一个字节)的各位数据同时传送的通信方法称为并行通信。2.串行通信单位信息的各位数据被分时一位一位依次顺序传送的通信方式称为串行通信。P1.0P1.1P1.2P1.389C52P1.4P1.5P1.6P1.7GNDD0D1D2D3D4D5D6D7GND外部设备7.1.1数据通信RXDTXD89C52GNDTXDRXDGND外部设备图7-1并行通信示意图从图中可以看出:并行通信连线多,速度快,适合近距离通信;串行通信连线少,速度慢,适合远距离通信。图7-1并行通信示意图图7-2串行通信示意图1.异步通信异步通信中,传送的数据可以是一个字符代码或一个字节数据,数据以帧的形式一帧一帧传送。7.1.2异步通信和同步通信0/10/10/10/10/1100/10/10/10/10/10/1100/1…停止位起始位8位数据校验位停止位起始位0/1数据第n个字符第n+1个字符图7-3异步通信的一帧数据格式2.同步通信在同步通信中,每一数据块发送开始时,先发送一个或两个同步字符,使发送与接收取得同步,然后再顺序发送数据。数据块的各个字符间取消起始位和停止位,所以通信速度得以提高。7.1.2异步通信和同步通信数据数据…同步字符1同步字符2数据流图7-4同步通信数据帧格式7.1.3波特率在串行通信中,对数据传送速度有一定要求。波特率表示每秒传送的位数,单位为b/s(记作波特)。例如:数据传送速率为每秒钟10个字符,若每个字符的一帧为11位,则传送波持率为:11b/字符×10字符/s=110b/s异步通信的传送速率一般在50~19200b/s之间。7.1.4通信方向单工方式:一对传输线只允许单方向传送数据;半双工方式:一对传输线允许向两个方向中的任一方向传送数据,但不能同时进行;全双工方式:用两对传输线连接在发送器和接收器上,发送和接收能同时进行。7.1.4通信方向接收器发送器接收器发送器发送器接收器数据流接收器发送器发送器数据流接收器(a)单工方式(b)半双工方式(c)全双工方式图7-5串行通信传输方式7.1.5串行通信接口种类根据串行通信格式及约定(如同步方式、通信速率、数据块格式等)不同,形成了许多串行通信接口标准,如常见的:UART(串行异步通信接口)、USB(通用串行总线接口)、I2C(集成电路间的串行总线)、SPI(串行外设总线)、485总线、CAN总线接口等。7.2串行口结构及控制主要内容7.2.1MCS-51串行口结构7.2.2与串行口有关的特殊功能寄存器7.2.3波特率设计7.2.1MCS-51串行口结构÷12TH1TL1fosc÷2÷16发送SBUF(99H)÷16输入移位寄存器TXD(P3.1)写SBUF:MOVSBUF,A;发送读SBUF:MOVA,SBUF;读入RITI移位时钟SMOD=1SMOD=0RXD(P3.0)T1溢出率装载SBUF接收SBUF(99H)图7-6串行口方式1、3内部结构示意简图7.2.2与串行口有关的特殊功能寄存器1.控制状态寄存器SCON用于定义串行通信口的工作方式和反映串行口状态,其字节地址为98H,复位值为00000000B,可位寻址格式为:D7D6D5D4D3D2D1D0SM0SM1SM2RENTB8RB8TIRISM0和SM1(SCON.7、SCON.6):串行口工作方式选择位。7.2.2与串行口有关的特殊功能寄存器SM0SM1工作方式功能说明波特率00方式0同步移位寄存器fosc/1201方式18位数据UART可变(T1溢出率/32或/16)10方式29位数据UARTfosc/64或fosc/3211方式39位数据UART可变(T1溢出率/32或/16)SM2(SCON.5):多机通信控制位,在方式2或3中使用。REN(SCON.4):允许接收控制位,由软件置1或清0。TB8(SCON.3):发送数据的第9位。RB8(SCON.2):接收数据的第9位。TI(SCON.1):发送中断标志。RI(SCON.0):接收中断标志。7.2.2与串行口有关的特殊功能寄存器关于TI和RI:串行发送中断标志TI和接收中断RI是同一个中断源,CPU事先不知道是发送中断标志TI还是接收中断标志RI产生的中断请求,所以,在全双工通信时,必须由软件来判别。2.电源控制寄存器PCON电源控制寄存器PCON(地址为87H)中只有SMOD位与串行口工作有关。D7D6D5D4D3D2D1D0SMOD---------GF1GF0PDIDL7.2.2与串行口有关的特殊功能寄存器SMOD(PCON.7):波特率倍增位。串行口工作于方式1、方式2和方式3时,当SMOD=1时,串行口波特率加倍。复位值为00000000B。PCON寄存器不能进行位寻址。7.2.3波特率设计方式0和方式2的波特率是固定的,方式1和方式3的波特率是由定时器T1的溢出率来决定的。在增强型单片机中,也可以使用T2作波特率发生器。1.方式0的波特率固定为振荡频率的1/12。并不受PCON寄存器中SMOD位的影响。方式0的波特率=fosc/122.方式2的波特率接收与发送的移位时钟由振荡频率fosc的第二节拍P2时钟(fosc/2)给出,所以,方式2波特率取决于PCON中SMOD位的值:当SMOD=0时,波特率为fosc的1/64;若SMOD=1,则波特率为fosc的1/32。即方式2的波特率=2SMOD×fosc/647.2.3波特率设计3.方式1和方式3的波特率(1)T1作波特率发生器在最典型应用中,定时器T1选用定时器模式2,此时n=8,设定时器的初值为X:于是,X=256-322SMOD12fosc322SMOD波特率)(3841SMODfosc方式1、3的波特率=×(T1溢出速率)即波特率=××/(2n-初值)7.2.3波特率设计(2)T2作波特率发生器在增强型单片机中,还可以使用T2作为波特率发生器。当寄存器T2CON的位TCLK=1和(或)RCLK=1时,允许串行口从T2获得发送和(或)接收的波特率。串行口方式1、3的波特率=T2溢出率/16定时器2作波特率发生器时,计数在每个状态周期递增。这样:方式1、3的波特率=)),((振荡频率RCAP2LRCAP2H65536327.2.3波特率设计主要内容7.3.1串行口方式07.3.2串行口方式17.3.3串行口方式2和方式37.3串行口工作方式7.3.1串行口方式0方式0为同步移位寄存器输入/输出方式,常用于扩展I/O口。RXD为数据输入或输出,TXD为移位时钟,作为外接部件的同步信号。方式0不适用于两个89C52之间的数据通信,可以通过外接移位寄存器来实现单片机的接口扩展。在这种方式下,收/发的数据为8位,低位在前,无起始位、奇偶校验位及停止位,波特率是固定的。89C52P3.0P3.1P1.0Q0Q7AB74HC164CLKGNDCLRRXDTXD+5V13121110654314128989C52P3.0P3.1P1.0P1.1ABCDEFGHQH74HC165CLKGNDSHIFT时钟禁止RXDTXD+5V131211146543169215817.3.1串行口方式0发送电路接收电路7.3.2串行口方式1方式1真正用于串行发送或接收,为10位通用异步接口。TXD与RXD分别用于发送与接收数据。收发一帧数据的格式为1位起始位、8位数据位(低位在前)、1位停止位,共10位。在接收时,停止位进入SCON的RB8,此方式的传送波特率可调。7.3.3串行口方式2和方式3串行口工作在方式2和方式3均为每帧11位异步通信格式,由TXD和RXD发送与接收(两种方式操作是完全一样的,不同的只是特波率)。每帧11位:即1位起始位、8位数据位(低位在前)、1位可编程的第9数据位和1位停止位。发送时,第9数据位(TB8)可以设置为1或0,也可将奇偶位装入TB8;接收时,第9数据位进入SCON的RB8。7.4串行口应用举例主要内容7.4.1同步方式应用7.4.2异步方式应用7.4.1同步方式应用MSC-51单片机的串行口在方式0时,以同步方式操作。外接串入/并出或并入/串出器件,可实现I/O口的扩展。例7-2用89C52串行口外接164串入/并出移位寄存器扩展8位并行输出口,外接165并入/串出移位寄存器扩展8位并行输入口。8位并行输出口的每位都接一个发光二极管,要求从8位并行输入口读入开关的状态值,使闭合开关对应的发光二极管点亮。如图7-13所示。89C52RXDTXDP1.0P1.1AB74HC164CLKCLRQH74HC165CLKSHIFT7.4.1同步方式应用图7-13方式0扩展输入输出电路解:数据的输入输出通过RXD接收和发送,移位时钟通过TXD送出,74HC164用于串/并转换,74HC165用于并/串转换。C语言程序清单:#includereg52.hsbitP1_0=P1^0;sbitP1_1=P1^1;unsignedchardata1;voidmain(){SCON=0x10;//串行口方式0,允许接收ES=1;EA=1;//允许串行口中断7.4.1同步方式应用P1_0=0;//关闭并行输出P1_1=1;//并行置入数据P1_1=0;//开始串行移位SBUF=0;//送入串行数据while(1);//等待中断}voids_srv()interrupt4//中断服务程序{if(TI)//发送中断{TI=0;P1_0=1;//打开并行输出}7.4.1同步方式应用else//接收中断{RI=0;data1=SBUF;//读取接收的数据P1_0=0;//关闭并行输出SBUF=~data1;//送入串行数据P1_1=1;//为接收下一次P1_1=0;//数据做准备}}汇编语言程序清单:ORG0000HSJMPMAINORG23HSJMPS_SRV;串行口中断服务程序7.4.1同步方式应用MAIN:MOVSCON,#10H;串行口方式0初始化SETBESSETBEAMOVA,#0CLRP1.0;关闭并行输出MOVSBUF,A;开始串行输出SETBP1.1CLRP1.1SJMP$;等待中断7.4.1同步方式应用S_SRV:JBCTI,SENDCLRRIMOVA,SBUFCLRP1.0CPLAMOVSBUF,ASETBP1.1CLRP1.1RETISEND:SETBP1.0RETI7.4.1同步方式应用•教材例题111100007.4.2异步方式应用串行口方式1与方式3很近似,波特率设置一样,不同之处在于方式3比方式1多了一个数据附加位。方式2与方式3基本一样(只是波特率设置不同),接收/发送11位信息:开始为1位起始位(0),中间8位数据位.数据位之后为1位程控位(由用户置SCON的TB8决定),最后是1位停止位(1)。只比方式1多了一位程控位。例7-3将片内RAM50H~5FH中的数据串行发送,用第9个数据位作奇偶校验位,设晶振为11.0592MHz,波特率为2400b/s,编制串行口方式3的发送程序。解:用TB8作奇偶校验位,在数据写入发送缓冲器之前.先将数据的奇偶位P写入TB8,这时,第9位数据作奇偶校验用,发送采用中断方式。7.4.2异步方式应用C语言程序清单:#includereg52.hunsignedchari=