单片机原理与接口技术(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外部设备RXDTXD89C52GNDTXDRXDGND外部设备•并行通信连线多,速度快,适合近距离通信;•串行通信连线少,速度慢,适合远距离通信。7.1.2异步通信和同步通信(12)1.异步通信(时钟不同,甚至频率不同)•传送的数据以帧的形式逐帧传送。异步通信的帧格式…10/10/10/100/10/10/10/10/10/118位数据第n帧00/1..空闲位或停止位起始位停止位校验位空闲位起始位7.1.2异步通信和同步通信(12)2.同步通信(用同一时钟)•每个数据块发送之前,先发送一个或两个同步字符,使发送方与接收方同步,然后再顺序发送数据。•数据块的各个字符间取消起始位和停止位,通信速度得以提高。数据数据…同步字符1同步字符2数据流同步通信帧格式7.1.3波特率•波特率表示每秒传送的数据位数,单位为b/s(记作波特)。例:数据传送速率为每秒10个字符,若每个字符帧为11位,则传送波持率为:11b/字符×10字符/s=110b/s•异步通信速率一般在50~19200b/s之间。7.1.4通信方向•单工方式:一对传输线只允许单方向传送数据;•半双工方式:一对传输线允许向两个方向中的任一方向传送数据,但不能同时进行;•全双工方式:用两对传输线连接发送方和接收方,发送和接收可以同时进行。7.1.5串行通信接口种类•根据串行通信协议(如同步方式、通信速率、数据块格式等)不同,形成了多种串行通信标准。•常见的标准:UART(通用异步串行通信接口)USB(通用串行总线接口)I2C(集成电路间的串行总线)SPI(同步串行外设总线)485总线CAN总线接口等7.2串行口结构及控制主要内容7.2.1MCS-51串行口结构7.2.2特殊功能寄存器7.2.3波特率设计7.2.1与串行口有关的特殊功能寄存器D7D6D5D4D3D2D1D0SM0SM1SM2RENTB8RB8TIRI1.控制状态寄存器SCON•功能:设置串行口的工作方式和标识串行口状态。REN:允许接收控制位。1,允许;0:禁止。TB8:发送数据的第9位。RB8:接收数据的第9位。D7D6D5D4D3D2D1D0SM0SM1SM2RENTB8RB8TIRI7.2.2与串行口有关的特殊功能寄存器SM0SM1工作方式功能说明波特率00方式0同步移位寄存器fosc/1201方式110位异步通信可变,T1或T2提供10方式211位UART、可多机fosc/64或fosc/3211方式311位UART、可多机可变,T1或T2提供SM0和SM1:串行口工作方式选择位。SM2:多机通信控制位,方式2或3中使用。7.2.2与串行口有关的特殊功能寄存器TI:发送中断标志。RI:接收中断标志。关于TI和RI:TI和RI是属同一中断源,CPU不清楚是发送还是接收产生的中断请求,所以,在全双工通信时,必须由软件来判别。D7D6D5D4D3D2D1D0SM0SM1SM2RENTB8RB8TIRI7.2.2与串行口有关的特殊功能寄存器•多机通信实现:(1)实现条件:各个从机的SM2设置为1。•当SM2=1时,若RB8=1,则保留收到的数据;否则,丢弃。(2)实现方法①主机先发送从机地址,并置TB8为1。–此时各从机均可接收此地址,只有目标从机把SM2清0;其它从机保留SM2=1。②主机接着发送数据,并置TB8为0。–此时目标从机正常接收数据,其它从机均丢弃。地址7.2.2与串行口有关的特殊功能寄存器D7D6D5D4D3D2D1D0SMOD---------GF1GF0PDIDL2.电源控制寄存器PCON只有SMOD位与串行口工作有关。•SMOD:波特率倍增位。串行口工作于方式1、2和3时,SMOD=1,串口波特率加倍。•不能位寻址。7.2.3波特率设计•方式0和方式2的波特率固定;•方式1和方式3的波特率由定时器T1溢出率决定。增强型单片机,也可以使用T2作波特率发生器。1.方式0的波特率方式0为同步移位寄存器方式。波特率固定为振荡频率的1/12。并不受PCON寄存器SMOD位影响。7.2.3波特率设计2.方式2的波特率时钟:接收与发送的时钟直接来自振荡频率fosc,为fosc/2,与PCON中SMOD位有关。方式2波特率只有两种(fosc/64或fosc/32)、11位的异步通信,可多机通信。•SMOD=0,波特率为fosc/64;•SMOD=1,波特率为fosc/32。即方式2的波特率=2SMOD×fosc/647.2.3波特率设计3.方式1和方式3的波特率(1)T1作波特率发生器方式𝟏、𝟑波特率=𝟐𝑺𝑴𝑶𝑫𝟑𝟐∙𝑻𝟏溢出率=𝟐𝑺𝑴𝑶𝑫𝟑𝟐∙𝒇𝒐𝒔𝒄𝟏𝟐∙𝟏𝟐𝒏−𝑿•n为T1位数(方式0、1、2、3时分别为13、16、8、8位。•X是T1计数初值。7.2.3波特率设计(2)T2作波特率发生器略主要内容7.3.1串行口方式07.3.2串行口方式17.3.3串行口方式2和方式37.3串行口工作方式7.3.1串行口方式0•方式0为同步移位寄存器输入/输出方式,常用于扩展并行I/O口。RXD为数据端;TXD产生移位时钟,作为外部的同步信号。•方式0只收/发8位数据,无起始位、奇偶校验位及停止位,低位在前、高位在后;•波特率固定为fosc/12。•启动发送:TI=0、写SBUF•启动接收:RI=0、REN置189C52P3.0P3.1P1.0Q0Q7AB74HC164CLKGNDCLRRXDTXD+5V13121110654314128989C52P3.0P3.1P1.0P1.1ABCDEFGHQH74HC165CLKGNDSHIFT时钟禁止RXDTXD+5V13121114654316921581用串行口方式0扩展并行输出/输入口7SH/LD扩展并行输出扩展并行输入串转并IC并转串IC7.3.2串行口方式1•方式1用于串行发送或接收。TXD与RXD分别用于发送、接收数据。•帧格式:1位起始位、8位数据位(低位在前)、1位停止位,共10位。•接收时,停止位进入SCON的RB8。•方式1的波特率可调,由T1或T2控制。•SCON=010xxxxxb,即SM0SM1SM2=010。除方式2、3的多机通信外,SM2应清07.3.2串行口方式11、方式1发送•TI=0、写SBUF启动发送7.3.2串行口方式12、方式1接收1)接收条件:SCON的REN置12)接收过程:串口检测接收引脚RXD,当RXD由高变低时开始移位接收;接收完成后将停止位装入RB8。3)接收的数据有效的两个条件:a、RI=0;b、SM2=0,或者SM2=1并且RB8=1满足以上2条,则将8位数据装入SBUF,且RI置1。以下情况之一数据无效:a)RI=1;b)SM2=1且RB8=07.3.3串行口方式2和方式3•方式2和方式3为每帧11位的异步通信格式。TXD和RXD发送与接收•除波特率不同外,方式2和3操作完全一样。•每帧11位:即1位起始位、8位数据位(低位在前)、1位奇偶校验位和1位停止位。发送时,奇偶位装入SCON的TB8;接收时,奇偶位进入SCON的RB8。•SCON=10010000b=0x90方式2接收•SCON=11010000b=0xD0方式3接收7.4串行口应用举例主要内容7.4.1同步方式应用7.4.2异步方式应用7.4.1同步方式应用•MSC-51单片机的串口在方式0,以同步方式操作。•外接串入/并出或并入/串出器件,可实现I/O口扩展。7.4.1同步方式应用•例7-1用89C52串行口外接74HC595串入/并出移位寄存器扩展8位并口。8位输出口的每位都接有发光二极管,要求8位发光二极管循环点亮。•分析:数据的输出通过RXD发送,移位时钟通过TXD送出,74HC595用于串/并转换。7.4.1同步方式应用方式0扩展输出电路89C52RXDTXDP3.6DSOE74HC595SH_CPMRQ7’ST_CP级联输出输出清0StoreClockPulse,锁存器时钟输入。在上升沿锁存移位寄存器值。#includereg52.h#includeintrins.hsbitP3_6=P3^6;voiddelay10xms(unsignedcharx){//设晶振为12MHzunsignedinti;while(x--)for(i=0;i830;i++);}7.4.1同步方式应用voidmain(){unsignedchardd=0x01;SCON=0x0;//设置串口方式0while(1){TI=0;//清除发送结束标志SBUF=dd;//发送dd=_crol_(dd,1);//左移1位while(TI==0);//等待发送结束P3_6=0;P3_6=1;//输出数据delay10xms(100);//延时1s}}7.4.1同步方式应用•例7-2用89C52串口外接74HC165并出/串入移位寄存器扩展8位并行输入口,8位并行输入口的每位都接一个拨动开关,要求读入开关量的值。•解:数据输入通过RXD接收,移位时钟由TXD产生。时钟禁止端接地,使时钟有效。P1.1接一按键,当按键按下时输入一次数据。数据接收采用查询方式。7.4.1同步方式应用方式0扩展输入电路89C52RXDTXDP1.0P1.1QH74HC165CLKSH/LDINH时钟禁止Shift/Load:=1,移位输出;=0,装入并行数据。7.4.1同步方式应用#includereg52.hsbitLOAD165=P1^0;sbitKEY=P1^1;#includereg52.hsbitLOAD165=P1^0;sbitKEY=P1^1;voiddelay10xms(unsignedcharx){//设晶振为12MHzunsignedinti;while(x--)for(i=0;i830;i++);}7.4.1同步方式应用voidmain(){SCON=0;//设置串口方式0,不允许接收while(1){if(KEY==0)//按键按下{delay10xms(2);//延时20ms去抖if(KEY==0){while(KEY==0);//等待按键释放LOAD165=0;//装入并行数据LOAD165=1;//锁存,允许串行移位RI=0;//准备输入REN=1;//启动接收,输入while(RI==0);//等待输入完成P0=SBUF;//将读到的数据从P0输出REN=0;//准备下次启动}}}}7.4.2异步方式应用•串口方式1与方式3相似,波特率设置一样。不同之处在于方式3比方式1多了一个数据附加位,即特征位,也叫程控位。•方式2与方式3基本一样(只是波特率不同)。接收/发送11位信息:开始为1位低电平的起始位,中间8位数据位,之后为1位程控位(由发送的TB8决定),最后是1高电平的停止位。例7-4利用串口方式3,以中断方式将片内RAM50H~5FH中的数据发送给另一设备。要求用