第7章 MCS-51串行接口.ppt_第1页
第7章 MCS-51串行接口.ppt_第2页
第7章 MCS-51串行接口.ppt_第3页
第7章 MCS-51串行接口.ppt_第4页
第7章 MCS-51串行接口.ppt_第5页
免费预览已结束,剩余48页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第7章MCS-51串行接口,【学习目标】熟悉并理解串行通信相关的基本概念:串行通信、异步通信、同步通信、波特率等;了解MCS-51单片机串行口的内部硬件结构;掌握SBUF、SCON、PCON寄存器的结构、控制作用与设置方法;掌握串行口的4种工作方式和应用编程;了解RS-232C电平转换电路和RS-485通信接口电路。,7.1串行通信的基本概念1并行通信与串行通信所谓通信是指计算机与计算机或外围设备之间的数据传输。数据传输主要有两种基本方式:并行通信和串行通信。并行通信是数据的各位同时发送或同时接收;串行通信是数据的各位依次逐位发送或接收。并行通信优点:传送速度快缺点:不便长距离传送串行通信优点:便于长距离传送缺点:传送速度较慢,串行通信的基本特征是数据逐位顺序进行传送串行通信的格式及约定(如:同步方式、通讯速率、数据块格式、信号电平等)不同,形成了多种串行通信的协议与接口标准。常见的有:通用异步收发器(UART)本课程介绍的串口通用串行总线(USB)I2C总线CAN总线SPI总线RS-485,RS-232C,RS422A标准等等,2同步通信和异步通信方式串行通信根据传输数据格式的不同,主要分为异步通信和同步通信两种方式。(1)异步通信异步通信是指发送和接收设备使用各自的时钟控制数据的传输过程。数据以字节为单位组成信息帧传送。异步通信信息帧格式如图7.1所示,包括1个起始位、18个数据位、1个奇偶校验位及12个停止位组成。信息帧由发送端一帧一帧地发送,两相邻字符帧之间可以无空闲位,也可以有若干空闲位,空闲时数据线状态为高电平。发送端和接收端的时钟各自独立,实现双方同步接收是靠信息帧的起始位和停止位。异步通信的优点是不需要传送同步时钟,但信息帧中包含有起始位和停止位,从而降低了有效数据的传输速率,比较适用于低速通信。,(2)同步通信同步通信依靠同步字符保持通信同步。同步通信是由12个同步字符和多字节数据位组成,同步字符作为起始位以触发同步时钟开始发送或接收数据;多字节数据之间不允许有空隙,每位占用的时间相等;空闲位需发送同步字符。(同步字符可以用户约定,也可以有用ASC码中规定的SYNC同步字符(即16H)同步通信传输速度较快,但要求有准确的时钟来实现收发双方的严格同步,对硬件要求较高,适用于成批数据传送。,3串行通信的数据传送速率波特率是指每秒钟传送二进制数码的位数(bit),单位为bit/s。波特率的倒数即为传送每一位所需的时间。1波特=1位/秒(1bps)常用的标准波特率为110bit/s、300bit/s、600bit/s、1200bit/s、1800bit/s、2400bit/s、4800bit/s、9600bit/s、14.4kbit/s、19.2kbit/s等。波特率的倒数即为每位传输所需的时间。相互通信的甲乙双方必须具有相同的波特率,否则无法成功地完成串行数据通信。,4串行通信的制式串行通信具有多种操作模式:单工、半双工和全双工。,单工制式是指甲乙双方通信时只能单向传送数据,发送方和接收方固定。半双工制式是指通信双方都具有发送器和接收器,既可发送也可接收,但不能同时接收和发送,发送时不能接收,接收时不能发送。全双工制式是指通信双方均设有发送器和接收器,并且信道划分为发送信道和接收信道,因此全双工制式可实现甲乙双方同时发送和接收数据,发送时能接收,接收时也能发送,5通信协议(1)奇偶校验(2)累加和校验(3)循环冗余码校验(CyclicRedundancyCheck,简称CRC),发送指令:MOVSBUF,A;将数据写到发送缓冲器SBUF接收指令:MOVA,SBUF;读出接收缓冲器SBUF中接收到的数据控制寄存器共两个:特殊功能寄存器SCON和PCON。,7.2MCS-51串行口结构与工作原理MCS-51单片机内部含有1个可编程全双工串行通信接口,它有4种工作方式。串行口内部结构如下图,两个物理上独立地接收和发送缓冲器,可同时收、发数据(全双工)。两个缓冲器共用一个特殊功能寄存器字节地址:SBUF(99H),串行数据缓冲器SBUF,在逻辑上只有一个,既表示发送寄存器,又表示接收寄存器,具有同一个单元地址99H,用同一寄存器名SBUF。在物理上有两个,一个是发送缓冲寄存器,另一个是接收缓冲寄存器。发送时,只需将发送数据输入SBUF,CPU将自动启动和完成串行数据的发送;接收时,CPU将自动把接收到的数据存入SBUF,用户只需从SBUF中读出接收数据。,指令MOVSBUF,A启动一次数据发送,可向SBUF再发送下一个数指令MOVA,SBUF完成一次数据接收,SBUF可再接收下一个数,7.2.1串行口控制寄存器SCONSCON是MCS-51单片机的一个可位寻址的专用寄存器,用于串行口数据通信的控制。单元地址为98H,位地址为9FH98H。,SM0SM1串行口工作方式选择位。SM2多机通信控制位。REN允许接收控制位。REN=1,允许接收。TB8方式2和方式3中要发送的第9位数据。RB8方式2和方式3中要接收的第9位数据。TI发送中断标志。RI接收中断标志。,1)SM0SM1串行口4种工作方式选择位,所对应的工作方式见表。,2)SM2-多机通信位,主要用于方式2、3。0单机对单机;1多机通信。当SM2=1时,只有当接收到第9位数据(RB8)为1时,才将接收到的前8位数据送入SBUF,并置位RI;否则,将接收到的8位数据丢弃。当SM2=0时,则不论第9位数据为0还是为1,都将8位数据装入SBUF中,并置位RI。在方式0时,SM2必须为0。,3)REN:允许/禁止接收控制位。0禁止串行口接收数据;1允许串行口接收数据。由软件置“1”或清零。4)TB8:发送数据第9位。在方式2和方式3时,TB8是要发送的第9位数据,其值由软件置“1”或清零。在双机通信时,TB8一般作为奇偶校验位使用;在多机通信中,用来表示主机发送的是地址帧还是数据帧,TB8=1为地址帧,TB8=0为数据帧。5)RB8:接收数据第9位。在方式2和方式3时,RB8存放接收到的第9位数据。在方式1,如果SM2=0,RB8是接收到的停止位。在方式0,不使用RB8。,6)TI:发送中断标志。当方式0时,发送完第8位数据后,该位由硬件置位。在其他方式下,遇发送停止位时,该位由硬件置位。因此TI=1,表示帧发送结束,可软件查询TI位标志,也可以请求中断。TI位必须由软件清0。7)RI:接收中断标志。当方式0时,接收完第8位数据后,该位由硬件置位。在其他方式下,当接收到停止位时,该位由硬件置位。因此RI=1,表示帧接收结束,可软件查询RI位标志,也可以请求中断。RI位也必须由软件清0。接收/发送数据,无论是否采用中断方式工作,每接收/发送一个数据都必须用指令对RI/TI清0,以备下一次收/发。,7.2.2特殊功能寄存器PCONPCON主要是为CHMOS型单片机的电源控制而设置的专用寄存器。单元地址为87H,没有位寻址功能,其格式如下:,SMOD=1,串行口波特率加倍。PCON寄存器不能进行位寻址。,SMOD:在串行口工作方式1、2、3中,是波特率加倍位=1时,波特率加倍=0时,波特率不加倍。(在PCON中只有这一个位与串口有关),7.2.3波特率的设置,波特率=T1溢出率,其中,溢出率是指定时器每秒溢出的次数。,波特率计算公式如下:,7.3串行口的4种工作方式89C51串行通信共有4种工作方式,由串行控制寄存器SCON中SM0SM1决定。7.2.1方式0(同步移位寄存器工作方式)以RXD(P3.0)端作为数据移位的输入/输出端,以TXD(P3.1)端输出移位脉冲。移位数据的发送和接收以8位为一帧,不设起始位和停止位,无论输入/输出,均低位在前高位在后。串口方式0发送数据时序:,方式0可将串行输入输出数据转换成并行输入输出数据。,1输出(发送),=0时,将74LS164输出端Q0Q7清零;=1时,允许74LS164输出端Q0Q7输出数据。这时,通过移位脉冲TXD的控制,数据D0D7从RXD端逐位移入74LS164内的移位寄存器,并从74LS164的Q0Q7输出。当8位数据全部移出后,SCON寄存器的TI位被自动置1。,串行口作为并行输出口使用时,要有“串入并出”的移位寄存器配合。(例如CD4094或74LSl64),2输入(接收),串行口作为并行输入口使用时,要有“并入串出”的移位寄存器配合。(例如CD4014或74LSl65),74LS165S/L端为移位/置入端,当S/L=0时,从Q0Q7并行置入数据,当S/L=1时,允许从QH端移出数据。在MCS-51串行控制寄存器SCON中的REN=1时,TXD端发出移位时钟脉冲,从RXD端串行输入8位数据。当接收到第8位数据D7后,置位中断标志RI,表示一帧数据接收完成。,3波特率:方式0波特率固定,为单片机晶振频率的十二分之一。即一个机器周期进行一次移位。4应用举例:电路如图所示,要求使发光二极管从左向右依次点亮,并进行循环操作,试编程。,汇编语言程序如下:MAIN:MOVSCON,#00HCLREAMOVA,#80HTX:CLRP1.0;将74ls164的Q0Q7端清零MOVSBUF,AJNBTI,$SETBP1.0;发送完,允许Q0Q7输出数据LCALLDELAYRRA;右循环CLRTISJMPTX,对应C51程序如下:#includesbitP1_0=P10;voidmain()unsignedcharled;SCON=0;EA=0;led=0 x80;P1_0=1;while(1)SBUF=led;while(TI=0);TI=0;led=(led1);循环右移一位if(led=0)led=0 x80delay();,串行口工作方式0,工作方式0:8位移位寄存器I/O方式,发送:SBUF中的串行数据由RxD逐位移出;TxD输出移位时钟,频率=fosc1/12;每送出8位数据TI就自动置1;需要用软件清零TI。,接收:串行数据由RxD逐位移入SBUF中;TxD输出移位时钟,频率=fosc1/12;每接收8位数据RI就自动置1;需要用软件清零RI。,经常配合“串入并出”“并入串出”移位寄存器一起使用扩展接口。,方式0工作时,多用查询方式编程:发送:MOVSBUF,A接收:JNBRI,$JNBTI,$CLRRICLRTIMOVA,SBUF,工作方式0:8位移位寄存器I/O方式,复位时,SCON已经被清零,缺省值:方式0。,接收前,务必先置位REN=1允许接收数据。,串行口方式0的扩展应用经常用到,串行口常用工作方式0扩展出并行I/O口,工作方式1、2、3则常用于串行通信,AB,CLK,hgfedcba,CLR,AB,CLK,CLR,AB,CLK,CLR,+5V,74LS164,74LS164,74LS164,74LS164是串入并出芯片;74LS165是并入串出芯片,hgfedcba,hgfedcba,+5V,共阳LED数码管,VCC,TxD,RxD,51单片机,共阳极,hgfedcba,a,b,c,d,g,e,f,h,共阳LED数码管公共端(字位)接高电平,笔划(字段)置为低电平就被点亮了,hgfedcba,累加器A,11000000,0C0H=“0”,比如要显示“0”须令abcdef为“0”电平,gh为“1”电平。,再比如要显示“3”须令abcdg为“0”电平,efh为“1”电平。,10110000,0B0H=“3”,hgfedcba,例:利用串行口工作方式0扩展出8位并行I/O口,驱动共阳LED数码管显示09。,AB,CLK,hgfedcba,CLR,+5V,VCC,TxD,RxD,51单片机,74LS164,共阳LED数码管,根据上图编写的通过串行口和74LS164驱动共阳LED数码管(查表)显示0-9数字的子程序:DSPLY:MOVDPTR,#TABLEMOVCA,A+DPTRMOVSBUF,AJNBTI,$CLRTIRETTABLE:DB0C0H,0F9H,0A4HDB0B0H,99H,92HDB82H,0F8H,80H,90H,hgfedcba,累加器A,11000000,0C0H=“0”,10110000,0B0H=“3”,共阳极,hgfedcba,a,b,c,d,g,e,f,h,7.3.2方式1方式1是一帧10位的异步串行通信方式,包括1个起始位,8个数据位和一个停止位。其帧格式为:,1方式1数据发送CPU只需向发送缓冲器SBUF写入数据即可启动数据发送过程,如MOVSBUF,#40h。起始位、停止位由硬件自动加入。然后在移位脉冲的作用下,由TXD端串行输出。一帧数据发送完毕,将SCON中的TI置1。如:发送40H和50H单元之中的两个字符:MOVSBUF,40HJNBTI,$;发送完否,否,等待CLRTI;是,发送下一数据MOVSBUF,50H,2方式1数据接收接收时,必须将REN设置为“1”,数据从RXD(P3.1)引脚输入。在REN=1前提下,当采样到RXD从1向0跳变状态时,就认定为已接收到起始位。随后在移位脉冲的控制下,将串行接收数据移入SBUF中。一帧数据接收完毕,将SCON中的RI置1,表示可以从SBUF取走接收到的一个字符。当一帧数据接收完毕后,必须同时满足以下两个条件,这次接收才真正有效。1)RI=0,即上一帧数据接收完成时,RI=1发出的中断请求已被响应,SBUF中的数据已被取走,说明“接收SBUF”已空。2)收到停止位=1或SM2=0时,则将接收到的数据装入SBUF,停止位进入RB8,且将中断标志位RI置“1”。若这两个条件不同时满足,则接收到的数据不能装入SBUF,这意味着该帧数据将丢失。,在实际应用时,通常是先确定波特率,后根据波特率求T1定时初值。,3.波特率,方式1波特率可变,由定时/计数器T1的计数溢出率来决定。,其中SMOD为PCON寄存器中最高位的值,SMOD=1表示波特率倍增。,波特率=T1溢出率,当定时计数器T1用作波特率发生器时,通常选用定时初值自动重装的工作方式2(注意:不要把定时计数器的工作方式与串行口的工作方式搞混淆了)。其计数结构为8位,假定计数初值为COUNT,单片机的机器周期为T,则定时时间为(256-COUNT)*T。从而在1s内发生溢出的次数(即溢出率)为:,波特率=(2SMOD/32)T1的溢出率,波特率=(2SMOD/32)T1的溢出率,溢出率:T1溢出的频繁程度即:T1溢出一次所需时间的倒数。,初值X=2n-,2SMODfosc32波特率12,波特率=,2SMODfosc3212(2n-X),其中:X是定时器初值,4方式1应用举例【例7.4】设甲乙机以串行方式1进行数据传送,fosc=11.0592MHz,波特率为1200b/s。甲机发送的16个数据存在内RAM40H4FH单元中,乙机接收后存在内RAM50H为首地址的区域中。分析:双机通信时,双方的波特率与数据格式应一致。串行口工作方式1的波特率是可变的,波特率取决于T1溢出率(设SMOD=0),应先根据要求的波特率计算T1定时器初值,然后对串行口进行初始化,最后进行数据的发送或接收。发送与接收程序均采用查询方式。,T1初值=256-=232=E8H,32,121200,11059200,20,(1)T1定时器初值计算,甲机发送子程序:,TX:MOVTMOD,#20H;置T1定时器工作方式2MOVTL1,#0E8H;置T1计数初值MOVTH1,#0E8H;置T1计数重装值CLRET1;禁止T1中断SETBTR1;T1启动MOVSCON,#40H;置串行方式1,禁止接收MOVPCON,#00H;置SMOD=0(SMOD不能位操作)CLRES;禁止串行中断MOVR0,#40H;置发送数据区首地址MOVR2,#16;置发送数据长度MOVA,R0;读一个数据MOVSBUF,A;发送JNBTI,$;等待一帧数据发送完毕CLRTI;清发送中断标志INCR0;指向下一字节单元DJNZR2,TXR;判16个数据发完否?未完继续RET;,TXR:,对应的C51程序如下:transmit()unsignedchar*p;unsignedchari;TMOD=0X20;TH1=0XE8;TL1=0XE8;ET1=0;ES=0;EA=0;PCON=0;SCON=0X40;TR1=1;p=0 x40;SBUF=*p;for(i=1;i16;i+)while(TI=0);TI=0;SBUF=*(p+i);,RX:MOVTMOD,#20H;置T1定时器工作方式2MOVTL1,#0E8H;置T1计数初值MOVTH1,#0E8H;置T1计数重装值CLRET1;禁止T1中断SETBTR1;T1启动MOVSCON,#40H;置串行方式1,禁止接收MOVPCON,#00H;置SMOD=0(SMOD不能位操作)CLRES;禁止串行中断MOVR0,#50H;置接收数据区首地址MOVR2,#16;置接收数据长度SETBREN;启动接收RXD:JNBRI,$;等待一帧数据接收完毕CLRRI;清接收中断标志MOVA,SBUF;读接收数据MOVR0,A;存接收数据INCR0;指向下一数据存储单元DJNZR2,RXD;判16个数据接收完否?未完继续RET;,乙机接收子程序:,对应C51程序如下:receive()unsignedchar*p;unsignedchari;TMOD=0X20;TH1=0XE8;TL1=0XE8;ET1=0;ES=0;EA=0;PCON=0;SCON=0X40;TR1=1;REN=1;p=0 x50;for(i=0;i16;i+)while(RI=0);*(p+i)=SBUF;RI=0;,7.3.3方式2方式2是一帧11位的串行通信方式,即1个起始位,8个数据位,1个可编程位TB8/RB8和1个停止位,其帧格式为:,当SMOD=0时,波特率=20fosc/64=fosc/64当SMOD=1时,波特率=21fosc/64=fosc/32,可编程位TB8/RB8既可作奇偶校验位用,也可作控制位(多机通信)用,其功能由用户确定。,数据发送和接收与方式1基本相同,区别在于方式2把发送/接收到的第9位内容送入TB8/RB8。,波特率:方式2波特率固定,即fosc/32和fosc/64。如用公式表示则为:波特率=2SMODfosc/64,4方式2应用举例【例7.5】串行口工作在方式2,SMOD=1,发送数据#Data,第9位作奇偶校验位,请编写发送子程序。,TTT:MOVSCON,#80H;设置串行口工作在方式2MOVPCON,#80H;置SMOD=1MOVA,#Data;将数据Data送入累加器A,;得到奇偶校验值MOVC,PMOVTB8,C;将奇偶校验值送入TB8MOVSBUF,A;将数据Data写入发送缓冲器;SBUF,启动发送Wait:JBCTI,Next;等待发送完SJMPWaitNext:RET,【例7.6】串行口工作在方式2,SMOD=1,接收数据并做奇偶校验,请编写接收子程序。,RRR:MOVSCON,#90H;置串行口工作在方式2,使能接收MOVPCON,#80H;置SMOD=1Wait:JBCRI,Next;等待接收SJMPWaitNext:MOVA,SBUF;将接收到的数据读到累加器AJBP,Next1;若接收端奇偶值P=1转Next1JBRB8,ERR;若发送端奇偶值RB8=1则接收错误,;转ERR处理SJMPRIGHTNext1:JNBRB8,ERR;RB81,转ERR处理RIGHT:;接收正确处理程序ERR:;接收错误处理程序RET,7.3.4方式3方式3同样是一帧11位的串行通信方式,其通信过程与方式2完全相同,所不同的仅在于波特率。方式2的波特率只有固定的两种,而方式3的波特率则与方式1相同,即通过设置T1的初值来设定波特率。,串行口四种工作方式的比较四种工作方式的区别主要表现在帧格式及波特率两个方面。,四种工作方式比较,7.3.5串行口应用编程总结用户在进行51单片机串行口编程时,主要应做以下几方面的设置。1波特率计算2串行口发送/接收初始化步骤在进行串行口应用编程时,需先对串行口进行初始化操作,初始化主要设置以下与串行口工作相关寄存器:SCON、PCON、IE、IP、TMOD、TCON、TH1、TL1等。进行串行口通信时,发送数据可以按照以下步骤操作:1)选择串行口工作方式SCON,置TI=0,REN=0。2)赋波特率PCON、T1定时器初值等。3)开串行口中断IE、IP(若有)。4)发送数据第9位写入TB8(若有)。5)发送数据写入SBUF,启动一次发送。6)查询TI=1否?或等待中断处理。而接收数据可以按照以下步骤操作:1)选择串行口工作方式SCON,置RI=0,REN=1,SM2设置。2)赋波特率PCON、T1定时器初值等。3)开串行口中断IE、IP(若有)。4)查询RI=1否?或等待中断处理。5)将SBUF中数据读入A。,常用波特率及其产生条件常用波特率通常按规范取1200、2400、4800、9600、,若采用晶振12MHz和6MHz,则计算得出的T1定时初值将不是一个整数,产生波特率误差而影响串行通信的同步性能。解决的方法只有调整单片机的时钟频率fosc,通常采用11.0592MHz晶振。,给出了串行方式1或方式3时常用波特率及其产生条件。,7.4多机通信多个51单片机可以利用串行口进行多机通信,在多机通信中,一般采用主从式,即通信系统中只能有一台主机,可以有多台从机,主机发布信息从机接收,从机发送数据只能主机接收,从机之间不能直接通信。主从式多机通信结构如图7.16所示。,要保证主机与所选择的从机实现可靠地通信,必须保证串口具有识别功能。SCON中的SM2位就是满足这一条件而设置的多机通信控制位。原理:在串行口以方式2(或方式3)接收时:若SM2=1,表示置多机通信功能位,这时有两种可能:(1)接收到的第9位数据为1时,数据才装入SBUF,并置中断标志RI=1向CPU发出中断请求;(2)接收到的第9位数据为0时,则不产生中断标志,信息将抛弃。若SM2=0,则接收的第9位数据不论是0还是1,都产生RI=1中断标志,接收到的数据装入SBUF中。上述特性,便可实现MCS-51的多机通信。,设多机系统中有一主机和3个MCS-51从机,如图。主机的RXD与从机的TXD相连,主机TXD与从机的RXD端相连。从机地址分别为00H、01H、02H。,7.5串行通信接口标准(RS-232C、485简介)在计算机测控系统中,数据通信主要采用异步串行通信方式。在设计通信接口时,必须根据需要选择标准接口,并考虑传输介质、电平转换和通信控制芯片等问题,以保证通

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论