第07章 单片机串行通信系统.ppt_第1页
第07章 单片机串行通信系统.ppt_第2页
第07章 单片机串行通信系统.ppt_第3页
第07章 单片机串行通信系统.ppt_第4页
第07章 单片机串行通信系统.ppt_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

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

文档简介

第07章单片机串行通信系统,7.1概述6.2串行通信接口7.3串行通信工作方式7.4串行通信波特率设置7.5串行方式时间显示Proteus仿真,串行通信优点:便于长距离传送缺点:传送速度较慢,计算机与外界信息交换称为通信。,通信的基本方式可分为并行通信和串行通信:,并行通信是数据的各位同时发送或同时接收;,串行通信是数据的各位依次逐位发送或接收。,并行通信优点:传送速度快缺点:不便长距离传送,7.1概述,串行通信按同步方式可分为异步通信和同步通信。,并行通信和串行通信,7.1.1异步通信,串行异步传送中,通信双方必须事先约定:1、字符格式。双方要事先约定字符的编码形式、奇偶校验形式及起始位和停止位的规定。2、在异步通信中,发送端与接收端的波特率必须一致。(波特率(Baudrate)。波特率就是数据的传送速率,即每秒钟传送的二进制数位数,单位为位/秒。),常用标准波特率:b/s110、300、600、1200、1800、2400、4800、9600、19200,7.1.2同步通信,波特率的倒数即为每位传输所需的时间。相互通信的甲乙双方必须具有相同的波特率,否则无法成功地完成串行数据通信。,串行通信波特率,波特率bps(bitpersecond)定义:每秒传输数据的位数,即:,1波特=1位/秒(1bps),7.1.3串行通信的制式,串行通信中,数据通常是在二个端点(点对点)之间进行传送,按照数据流动的方向可分成三种传送模式:单工、半双工、全双工.,1、单工方式(Simplex):数据仅按一个固定方向传送。,2、半双工制式(HalfDuplex),使用同一根传输线,数据可双向传送,但不能同时进行。,3、全双工制式(FullDuplex),数据的发送和接收可同时进行,单工:广播,双工:电话,半双工:对讲机,指令清0RI/TI,波特率发生器,下降沿表示“0”起始位开始,波特率因子:16,波特率加倍,7.280C51串行通信接口,波特率因子,为保证数据传送的准确性,发送/接收时钟频率f应大于等于波特率Bf=nBn为波特率因子。同步时:n=1异步时:通常n=16,即16个时钟脉冲传送一位数据,在7、8、9三个时钟脉冲边沿采样数据,并采用三取二原则确定数据值,波特率误差与时钟频率,设晶振频率:6MHz.SMOD=0,串口方式1波特率B=4800b/s波特率误差8.5%波特率B=1200b/s波特率误差0.1%波特率不同,误差不同若选择晶振频率:11.059MHz.波特率误差普遍很小,发送时,只需将发送数据输入SBUF,CPU将自动启动和完成串行数据的发送;接收时,CPU将自动把接收到的数据存入SBUF,用户只需从SBUF中读出接收数据。,串行口特殊功能寄存器5个,1、串行数据缓冲器SBUF,在逻辑上只有一个,既表示发送寄存器,又表示接收寄存器,具有同一个单元地址99H,用同一寄存器名SBUF。在物理上有两个,一个是发送缓冲寄存器,另一个是接收缓冲寄存器。,2、串行控制寄存器SCON,SM0SM1串行口工作方式选择位。SM2多机通信控制位。REN允许接收控制位。REN=1,允许接收。TB8方式2和方式3中要发送的第9位数据。RB8方式2和方式3中要接收的第9位数据。TI发送中断标志。RI接收中断标志。,SM0、SM1:串行口工作方式选择位。用于选择四种工作方式,SM2,通常,SM2主要用于从机的状态控制SM2=0表示从机为数据传送状态SM2=1表示从机为地址传送状态,3)REN允许串行接收控制位REN0禁止接收数据REN1允许接收数据4)TB8发送数据第9位。在方式2和方式3时,TB8为所要发送的第9位数据在多机通信中,以TB8位的状态表示主机发送的信息是否地址。在SM2=1时,TB8=1,表明信息为地址但在SM2=0时,也可用作数据的奇偶校验位。方式0,方式1中,该位不用,5)RB8接收数据第9位在方式2、3时,RB8是接收的第9位数据。可作为奇偶校验位或地址帧的标志在方式1时,若SM2=0,RB8是接收的停止位在方式0时,不使用RB86)TI发送中断标志位在方式0时,发送完第8位数据后,该位由硬件置位。在其它方式下,于发送停止位之前,由硬件置位,并向CPU申请中断CPU在响应中断后,必须用软件清零。在非中断方式,TI也可供查询使用。7)RI接收中断标志位在方式0时,接收完第8位数据后,该位由硬件置位。在其它方式下,于接收到停止位之前,该位由硬件置位,并向CPU申请中断在CPU响应中断后,也必须用软件清零在非中断方式,RI也可供查询使用。,3、电源控制寄存器PCON,SMOD=1:波特率加倍SMOD=0:表示波特率不加倍。,)GF1,GF0用户可自行定义的通用标志位)PD掉电方式控制位PD=0:常规工作方式PD=1:进入掉电方式CPU处于掉电方式时,振荡器停振,片内RAM和SRF的值保持不变,P0P3口维持原状,程序停止。只有复位能退出掉电方式。4)IDL待机方式(空闲方式)控制位。IDL=0:常规工作方式IDL=1:进入待机方式CPU处于待机方式时,振荡器继续振荡,中断、定时器、串口功能继续有效,片内RAM和SRF保持不变,CPU状态保持,P0P3口维持原状,程序停顿。中断、复位都能退出待机状态。,4.中断允许控制寄存器IE(A8H),总中断允许控制位。EA=1,开放所有中断;EA=0,禁止所有中断。,串行口中断(包括串行发、串行收)允许位。ES=1,允许串行口中断;ES=0,禁止串行口中断。,定时/计数器T1中断允许位。ET1=1,允许定时器T1中断;ET1=0,禁止定时器T1中断。,外部中断1中断允许位。EX1=1,允许外部中断1中断;EX1=0,禁止外部中断1中断。,定时/计数器T0中断允许位。ET0=1,允许定时器0中断;ET0=0,禁止定时器0中断。,外部中断0中断允许位。EX0=1,允许外部中断0中断;EX0=0,禁止外部中断0中断。,5.中断优先级控制寄存器IP(B8H),串行口中断优先级控制位。PS=1,设定串行口为高优先级中断;PS=0,设定串行口为低优先级中断。,定时器T1中断优先级控制位。PT1=1,设定定时器T1中断为高优先级中断;PT1=0,设定定时器T1中断为低优先级中断。,外部中断1中断优先级控制位。PX1=1,设定外部中断1为高优先级中断;PX1=0,设定外部中断1为低优先级中断。,定时器T0中断优先级控制位。PT0=1,设定定时器T0中断为高优先级中断;PT0=0,设定定时器T0中断为低优先级中断。,外部中断0中断优先级控制位。PX0=1,设定外部中断0为高优先级中断;PX0=0,设定外部中断0为低优先级中断。,中断源同级自然优先级外部中断0最高级定时器T0中断外部中断1定时器T1中断串行口中断最低级,工作方式移位寄存器方式,可外接移位寄存器以扩展I/O口,也可以外接同步输入/输出设备。一帧信息有8位数据,低位在前,高位在后,没有起始位和停止位数据从RXD输入或输出。TXD用来输出同步脉冲。数据格式如下:,波特率固定为fosc/12。,前,后,7.3串行通信方式,指令将TI/RI清零,方式0工作时,多用查询方式编程:发送:MOVSBUF,AJNBTI,$CLRTI接收:JNBRI,$CLRRIMOVA,SBUF注)复位时,SCON被清零,工作方式的缺省值为方式0。接收前,务必先置位REN=1方允许接收数据。,【例7.3-1】74LS165芯片的输入端接8个开关,利用单片机串行方式0将开关的状态串行输入单片机,并在LED上显示。,ORG0000H;0000H单元存放转移指令AJMPSTART;跳转到主程序ORG0030H;主程序从0030H开始存放START:MOVSCON,#10H;设定串行口为方式0,并允许接收LOOP:CLRP3.2;并行输入数据SETBP3.2;允许串行移位操作JNBRI,$;等待接收完毕CLRRI;标志位清零MOVA,SBUF;接受数据MOVP2,A;送P2口显示LCALLDELAY;调用延时程序AJMPLOOP;循环,DELAY:MOVR6,#10;延时程序D1:MOVR7,#248DJNZR7,$DJNZR6,D1RETEND,工作方式8位异步通信接口,一帧有1O位信息,1位起始位(低电平信号),8位数据位(先低位后高位),1位停止位(高电平信号)。波特率可变,由定时器/计数器T1的溢出率和SMOD(PCON.7)决定。其格式如下:,波特率=(2SMOD/32)T1溢出率,定时器T1的溢出率计算定时器的溢出率是指在1秒钟内产生溢出的次数。定时器T1在工作方式2时,定时器T1的溢出一次所需要的时间为:(28N)12时钟周期=(28N)12/fosc(秒)于是,定时器每秒所溢出的次数为:定时器T1的溢出率=fosc/(12(28N)式中的N为时间常数,即T1的初值。,波特率与计数初值的关系,设波特率用B表示,计数初值用N表示,则波特率B与T1计数初值N之间的关系可以表示为:,【例7.3-2】双机通信。设甲乙两机以串行方式1进行数据传送,fosc=11.0592MHz,波特率为1200b/s。甲机发送的1、2、3、4、5、6、7、8八个数字,存在内部RAM40H4FH单元中,乙机接收后在数码管上显示。编程思路:T1的设置。设SMOD=0,T1工作在方式2。T0不用,则TMOD=20H,T1的计数初值为:X=256-(2011059200)/(32121200)=232=E8H由于T1用于波特率发生器,故禁止中断,TR1=1启动。串口设置。工作方式1(M0M1=01),其他位均为0,可得SCON=40H。查询方式传送,禁止串口中断。甲乙两机设置相同。,ORG0000H;在0000H单元存放转移指令LJMPTXDA;转移到主程序ORG0100H;主程序从0100H开始TXDA:MOV40H,#01H;40H单元存入01HMOV41H,#02H;41H单元存入02HMOV42H,#03H;42H单元存入03HMOV43H,#04H;43H单元存入04HMOV44H,#05H;44H单元存入05HMOV45H,#06H;45H单元存入06HMOV46H,#07H;46H单元存入07HMOV47H,#08H;47H单元存入08HMOVTMOD,#20H;置T1定时方式2,MOVTL1,#0E8H;T1初值.MOVTH1,#0E8HCLRET1;禁止T1中断SETBTR1;T1启动MOVSCON,#40H;串行方式1,禁止接收MOVPCON,#00H;SMOD=0CLRES;禁止串行中断MOVR0,#40H;发送数据区首地址MOVR2,#8;发送数据长度TRSA:MOVA,R0;读一个数据MOVSBUF,A;发送JNBTI,$;等待一帧数据发送完毕CLRTI;清发送中断标志INCR0;指向下一字节单元DJNZR2,TRSA;判8个数据发完否?未完继续SJMP$;循环等待END,乙机接收程序:ORG0000H;在0000H单元存放转移指令LJMPRXDB;转移到主程序ORG0100H;主程序从0100H开始RXDB:MOVTMOD,#20H;T1定时方式2MOVTL1,#0E8H;T1计数初值MOVTH1,#0E8H;T1计数重装值CLRET1;禁止T1中断SETBTR1;T1启动MOVSCON,#40H;置串行方式1,禁止接收MOVPCON,#00H;置SMOD=0CLRES;禁止串行中断MOVR0,#50H;置接收数据区首地址MOVR2,#8;置接收数据长度SETBREN;启动接收,RDSB:JNBRI,$;等待一帧数据接收完毕CLRRI;清接收中断标志MOVA,SBUF;读接收数据MOVR0,A;存接收数据INCR0;指向下一数据存储单元DJNZR2,RDSB;判8个数据接收完否?START1:MOVR1,#50H;显示数据首地址LOOP4:MOVA,R1;取显示数据MOVDPTR,#TAB;置共阳字段码表首址MOVCA,A+DPTR;查段码表MOVP2,A;送P2口显示LCALLDELAY;调用延时程序INCR1;显示内容加1CJNER1,#58H,LOOP4;判断循环是否结束AJMPSTART1;跳转到START1,DELAY:MOVR5,#10;延时程序,给R5赋值DEL1:MOVR6,#100;中循环控制DEL2:MOVR7,#150;内循环控制DEL3:DJNZR7,DEL3;内循环体DJNZR6,DEL2;中循环体DJNZR5,DEL1;外循环体RETTAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;段码表END,工作方式9位异步通信接口,一帧有11位,1位起始位(低电平信号),8位数据位(先低位后高位),1位可编程位,1位停止位(高电平信号)。其格式如下:,在工作方式2下,波特率只有二种:SMOD0时,波特率为f0SC/64,SMOD1时,波特率为f0SC/32。波特率=(2SMOD/64)fosc,工作方式串行接口工作方式3也是9位异步通信接口,一帧信息有11位,1位起始位(低电平信号),8位数据位(先低位后高位),1位可编程位,1位停止位(高电平信号)。但波特率与工作方式1相同,由定时器/计数器T1的溢出率和SMOD(PCON.7)决定。也就是说方式3的工作机制与方式2相同,波特率与方式1相同,它是方式1和方式2的综合运用。,5多机通信,MCS-51单片机工作在串行方式2、3时,具有多机通信功能,可以实现一台主机与多台从机的信息交流。,图,从机:SM2=1表示接收地址状态,SM2=0表示接收数据状态TB8=1表示发送的信息是地址,TB8=0表示发送的信息是数据,主从多机通信的过程如下:使所有的从机工作在方式2或方式3,且SM2位置1,REN=1,以便接收主机发来的地址。主机发出要寻址的从机的一帧地址信息,其中包括8位需要与之通信的从机地址,第9位TB8=1。所有从机接收到地址帧后,置RI=1。各从机相应中断,进入中断服务程序,进行地址比较。对于地址相同的从机,使SM20,准备接收主机随后发来的数据信息;对于地址不符合的从机,仍保持SM2=1的状态,对主机随后发来的数据不予理睬,直至发送新的地址帧。主机给已被寻址到的从机发送控制指令和数据(数据帧的第9位TB8=0)实现主从通信。,总结,串行口应用的6个问题:1.工作方式:设定SCON的SM0、SM12.接收/发送:接收时REN=13.数据格式:方式2或3,设置TB84.波特率加倍:若工作方式不是模式0,设定SMOD5.波特率选择:方式0:固定,方式1,3计算T1初值,设置工作方式。方式2,2选1,选SMOD=0/1.6.中断设置:EA、ES、PS设置,为节省单片机并口资源,全自动洗衣机时间显示用串口驱动。全自动洗衣机一次洗衣时间一般不会超过99分钟,用2位LED数码管显示时间。用串口扩展并口的时间向仿真电路如下图所示。,7.6洗衣机串行方式时间显示电路Proteus仿真,图中用AT89C51单片机串行口扩展2个并行口接2位数码管组成显示电路。串行口工作于方式0,与外接的2片移位寄存器74LS164连接。74LS164是一个8位串入并出的移位寄存器,功能是接收AT89C51单片机串行通信口输出的串行数据并转换成并行数据输出,从而驱动LED数码管显示。两只LED数码管采用静态扫描显示方式,数码管为共阴极。使用串行口进行LED通信,程序编写相当简单,用户只需将需显示的数据直接送串口发送缓冲器,等待串行中断即可。,汇编语言参考程序:ORG0000H;在0000H单元存放转移指令LJMPNAIN;转移到主程序ORG000BH;定时器T0的中断入口地址LJMPINTERRUPT;转移到中断子程序ORG0200H;主程序从0200H开始MAIN:MOVTMOD,#01H;使用定时器T0,工作方式1MOVTH0,#3CH;置初T0值50msMOVTL0,#0B0HHMOVR0,#0;用于存1秒的计数次数SETBEA;开中断总允许SETBET0;允许T0中断SETBTR0;启动计时,LOOP:LCALLDisplay;循环调用显示子程序SJMPLOOPTAB:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,

温馨提示

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

评论

0/150

提交评论