KMUFWJ1/29第9章MCS-51单片机的串行接口MCS-51串行口的应用MCS-51单片机的串行口串行通信基础单片机的多机通信KMUFWJ2/29为保证通信能顺利进行,发送方和接收方要遵守基本通信规程。通信规程在计算机通信中称为协议,包括:收发双方的同步方式、传输控制步骤、差错检验方式、数据编码、数据传输速度、通信报文格式及控制字符的定义等。串行通信规程有两类:同步通信:通过同步字符的识别实现通信异步通信:利用字符的再同步技术实现通信一、串行通信规程9.1串行通信基础KMUFWJ3/29在异步通信中,数据通常是以字符(或字节)为单位组成字符帧传送的。发送端和接收端依靠字符帧格式和波特率来协调数据的发送和接收字符帧由起始位、数据位、奇偶校验位、停止位和空闲位等五部分组成。1.异步通信规程无空闲位字符帧有空闲位字符帧KMUFWJ4/292.同步通信规程同步通信是一种连续串行传送数据的通信方式,以帧为传输单位,一次通信只传送一帧信息。同步通信中的信息帧与异步通信中的字符帧是不同的。波特率定义为每秒钟传送二进制数码的位数,单位为bps,即位/秒。KMUFWJ5/291.异步接收/发送器(UART)具有异步通信功能的串行接口硬件称为异步接收/发送器2.串行通信的制式单工:单向传输半双工:分时双向传输全双工:同时双向传输二、串行通信的制式KMUFWJ6/29MCS-51内部有一个的可编程全双工串行异步收发电路9.2MCS-51单片机的串行口1.发送和接收电路一、串行口的结构KMUFWJ7/292.串行口控制寄存器SCON.SM0、SM1:为串行口方式选择位,用于控制串行口的工作方式。00方式0:8位移位寄存器I/O,波特率固定为fosc/1201方式1:8位UART(1+8+1位),波特率可变,按公式计算10方式2:9位UART(1+8+1+1位),波特率固定=fosc/32或fosc/6411方式3:9位UART(1+8+1+1位),波特率可变,按公式计算KMUFWJ8/293.电源控制寄存器PCONSMOD:串行口波特系数控制位。在方式1、2和3下时,当SMOD=1时,通信波特率可以提高一倍。GF1,GF0:用户可自行定义使用的通用标志位PD:掉电控制位0:常规方式;1:掉电方式。振荡器停振;片内RAM和SRF不变;程序停止;只有复位能退出掉电状态。IDL:待机控制位0:常规方式;1:待机方式。KMUFWJ9/291.方式0(SM0、SM1=00)[同步移位寄存器]二、串行口的工作方式发送:数据由RXD逐位移出;TXD输出移位时钟,每送出8位数据TI就自动置1;需要用户复位TI。接收:数据由RXD逐位移入;TXD输出移位时钟;每接收8位数据RI自动置1;需要用户复位RI。KMUFWJ10/292.方式1(SM0、SM1=01)[10位异步收发]1位起始位,8位数据位,1位停止位,波特率可变发送:CPU执行SBUF写入指令MOVSBUF,A后,启动串行口开始发送数据。波特率由定时器T1控制,发送完一帧数据时,发送完一帧信息后,发送电路自动维持TXD为高电平,发送中断标志TI由硬件在发送停止位时置位。接收:置REN=1后,当确认起始位有效后,开始接收本帧其余数据。在接收到第9数据位(即停止位)时,必须同时满足两个条件:RI=0和SM2=0或接收到的停止位为1,才能把接收到的8位字符存入SBUF中,把停止位送入RB8中,并使RI=1,若上述条件不满足,则这次收到的数据就被丢弃,不装入SBUF中。KMUFWJ11/293.方式2和方式3[11位异步收发]接收:接收到的字符送入SBUF,第9位数据装入RB8中,并使RI=11位起始位,9位数据位,1位停止位。方式2波特率固定,方式3波特率可变。发送:在启动发送前,应把第9位数据预先装入SCON的TB8中,第9位数据可用如下指令装入:SETBTB8CLRTB8然后用指令MOVSBUF,A启动发送KMUFWJ12/29方式0:同步移位寄存器–波特率固定=fosc/12方式1:10位异步收发,波特率可变初值波特率=noscSMODf2112322方式0:n=13n为定时器T1的位数方式1:n=16方式2:n=8三、串行口的通信波特率KMUFWJ13/29方式2:11位异步收发,波特率固定oscSMODf642波特率=方式3:11位异步收发,波特率可变初值波特率=noscSMODf2112322SMOD=0fosc/64SMOD=1fosc/32KMUFWJ14/299.3MCS-51串行口的应用●方式0下的MCS-51串行口是一个移位寄存器●并行输入串行输出●串行输入并行输出●常用于和数字移位寄存器接口一、串行口在方式0下的应用KMUFWJ15/29串入/并出移位寄存器74HC16474HC164引脚功能:●A、B:串行数据输入端●Q0~Q7:8个并行输出端●CLK:移位脉冲输入●CLR:清零KMUFWJ16/29【例9-5】利用串行口扩展一个6位数码管静态显示器。要显示的6位数字(在0~9范围)顺序存放在内部RAM40H开始的单元中,编写从串口输出显示6位数字的程序。数码管是共阴极还是共阳极?KMUFWJ17/29SM0SM1SM2RENTB8RB8TIRISCONSCON=00000000B=00H要求串口工作在方式0发送数据,则串行口控制寄存器SCON应如何设置?KMUFWJ18/29源程序ORG1000HDisBufEQU40HDISP:MOVSCON,#00H;设置串行口方式0发送MOVR2,#06H;设置循环次数MOVR0,#DisBuf+5;R0指向最后一个数MOVDPTR,#TAB;DPTR指向字形表首址LOOP0:MOVA,@R0;取显示数MOVCA,@A+DPTR;查表得到字形码MOVSBUF,A;送到串行口WAIT:JNBTI,WAIT;等待发送结束CLRTI;清除发送结束标志DECR0;调整指针DJNZR2,LOOP0;未显示完继续RET;子程序返回TABDB0C0H,0F9H,0A4H,……,90H;字形码表‘0’~‘9’END为什么要CLRTI?为什么R0指向最后一个数?段码串行输出,数字是否会依次在显示器上闪过?KMUFWJ19/29●串行口用于异步通信的方式–方式1、方式2、方式3●串行口在方式1下的应用特点–8位数据位–波特率可变●串行口在方式2和方式3下的应用特点–9位数据位–常用于多机通信二、串行口在其他方式下的应用KMUFWJ20/29串行口在方式3下的应用举例【例9-7】用中断法编写串行口发送程序。设单片机的时钟频率fosc=11.0592MHz,要求波特率2400bps,用串口方式3,发送数据块在内部RAM中,首址为TBLOCK,长度存在LEN中。要求偶校验在第9位发送,字符块长度率先发送。TxDRxDTxDRxDGNDGND甲机乙机硬件连接KMUFWJ21/29什么是奇偶校验?奇偶校验分为奇校验和偶校验2种。奇校验规定编码后“1”的总个数为奇数;偶校验规定编码后“1”的总个数为偶数。KMUFWJ22/29定时器T1用作波特率发生器,工作在方式2定时器控制寄存器TMOD应如何设置?GATEC/TM1M0GATEC/TM1M0T1T0TMODTMOD=00100000B=20HKMUFWJ23/29要求波特率2400,取SMOD=0,初值多少?初值 波特率=82112322oscSMODf初值=2561121105920032224000解得:初值=244=F4HKMUFWJ24/29要求串口按方式3发送数据,串行口控制寄存器SCON应如何设置?SM0SM1SM2RENTB8RB8TIRISCONSCON=11000000B=C0HKMUFWJ25/29串口发送主程序TBLOCKEQU20HLENEQU14HSTART:MOVTMOD,#20H;定时器T1工作方式2MOVTH1,#0F4HMOVTL1,#0F4H;波特率2400bpsMOVPCON,#00H;SMOD=0SETBTR1;启动T1MOVSCON,#0C0H;串行口方式3MOVR0,#TBLOCK;R0指向字符块首址MOVA,LEN;数据块长度送AMOVC,P;取奇偶校验位MOVTB8,C;设置为第9位数据MOVSBUF,A;发送长度数据MOVR2,ASETBEA;开CPU中断WAIT:SETBES;开串行口中断SJMPWAIT;循环等待中断这条指令做什么用?中断入口是多少?KMUFWJ26/29串口中断服务程序ORG0023HLJMPTXSVEORG1100HTXSVE:CLRES;关串行口中断CLRTI;清串口发送中断请求标志MOVA,@R0;数据送AMOVC,P;取奇偶校验位MOVTB8,C;设置为第9位数据MOVSBUF,A;发送字符数据DJNZR2,NEXT;若数据块未发送完,转NEXTSJMP$;停止发送NEXT:INCR0RETI;中断返回END如果要求奇校验,应如何修改程序?KMUFWJ27/299.4单片机的多机通信单片机多机通信是指由两台以上单片机组成的网络,通过串行通信方式实现对某一过程的控制。通常可分为星形结构、环形结构、串行总线结构和主从式多机结构四种。在此我们仅介绍主从式多机结构。星型环型串行总线型KMUFWJ28/29主从式多机结构是一种分散形网络结构,具有接口简单和使用灵活等优点。单片机多机通信应用的关键是确定多机通信协议和根据多机通信协议进行软件编程。主从式多机型接口必须加驱动和隔离,不能简单地线对线连接。KMUFWJ29/299.4.1MCS-51多机通信原理主从式单片机多机通信系统中,只有一台主机,可有多台从机。主机可以发送信息到任一台从机;从机只能发送信息到主机,从机之间不能通讯。主机的SM2=0;所有从机的SM2=1,以便接收主机发来的地址。主机给从机发送地址时,第9数据位应设置1,指示从机接收这个地址。所有从机在SM2=1、RB8=1和RI=0时,接收主机发来的从机地址,并与本机地址相比较,确认是否为被寻址从机。被寻址从机通过指令清除SM2,以便正常接收数据,并向主机发回接收到的从机地址,供主机核对。未被寻址的从机保持SM2=1,并退出各自中断服务程序。完成主机和被寻址从机之间的数据通信,被寻址从机在通信完成后重新使SM2=1,并退出中断服务程序,等待下次通信。多机通信原理9.4.2多机通信应用举例(见教材)