![第十八章MCS51串行通信_第1页](http://file4.renrendoc.com/view/eb5299b5185e5f598614749d19f0fc4f/eb5299b5185e5f598614749d19f0fc4f1.gif)
![第十八章MCS51串行通信_第2页](http://file4.renrendoc.com/view/eb5299b5185e5f598614749d19f0fc4f/eb5299b5185e5f598614749d19f0fc4f2.gif)
![第十八章MCS51串行通信_第3页](http://file4.renrendoc.com/view/eb5299b5185e5f598614749d19f0fc4f/eb5299b5185e5f598614749d19f0fc4f3.gif)
![第十八章MCS51串行通信_第4页](http://file4.renrendoc.com/view/eb5299b5185e5f598614749d19f0fc4f/eb5299b5185e5f598614749d19f0fc4f4.gif)
![第十八章MCS51串行通信_第5页](http://file4.renrendoc.com/view/eb5299b5185e5f598614749d19f0fc4f/eb5299b5185e5f598614749d19f0fc4f5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第十八章
MCS-51的串行通信1MCS-51串行口结构
发送电路由“SBUF(发送)”、“零检测器”和“发送控制器”等电路组成,用于串行口的发送;
接收电路由“SBUF(接收)”、“接收移位寄存器”和“接收控制器”等组成,用于串行口的接收。
SBUF(发送)和SBUF(接收)8位缓冲寄存器共用一个端口地址99HSBUF(发送)存放将要发送的字符数据SBUF(接收)存放串行口接收到的字符数据MOVSBUF,A(发送)产生写SBUF脉冲MOVA,SBUF(接收)产生读SBUF脉冲
发送和接收都是在发送时钟和接收时钟控制下进行的,发送时钟和接收时钟都必须同字符位数的波特率保持一致。主机频率fosc经过分频后提供内部定时器T1或T2的溢出率经过16分频后提供
定时器T1的溢出率受SMOD触发器状态的控制,SMOD位于电源控制寄存器PCON的最高位串行口的发送
MOVSBUF,A自动在发送字符前后添加起始位、停止位和其它控制位
“三中取二”决定所检测的值是“0”还是“1”
抑制干扰和提高信号的传输可靠性采样信号总是在每个接收位的中间位置,避开信号两端的边沿失真,防止接收时钟和发送时钟不完全同步所引起的接收错误。
接收电路连续接收到一帧字符后就自动的去掉起始位并使RI=1,向CPU提出中断请求(设串行口中断是开放的)。CPU响应中断MOVA,SBUF2.串行口的工作方式控制串行口工作方式的设置和控制是通过SCON(98H)和PCON(87H)实现。SM0和SM1:串行口方式控制位,设定串行口的工作方式
SM2:多机通信控制位,方式2、3使用。方式0、1不用,应设置为0状态。REN:允许接收控制位。REN=0,则禁止串行口接收REN=1,则允许串行口接收TB8:发送数据第9位,方式2、3时存放发送数据第9位。TB8由软件置位或复位。RB8:接收数据第9位,方式2、3时存放接收数据第9位。在方式1下,若SM2=0,RB8存放接收到的停止位。方式0下,不使用RB8TI:发送中断标志位,用于指示一帧数据发送完否?在方式0下,发送电路发送完第8位数据时,TI由硬件置位;在其它方式下,TI在发送电路开始发送停止位时置位。TI在发送前必须由软件复位,发送完一帧后由硬件置位的。TI位也可供CPU查询。RI:为接收中断标志位,用于指示一帧信息是否接收完。在方式0下,RI在接收电路接收到第8位数据时由硬件置位;在其它方式下,RI是在接收电路接收到停止位的中间位置时置位的。RI也可供CPU查询,以决定CPU是否需要从“SBUF(接收)”中提取接收到的字符或数据。RI也由软件复位。发送(TI=0)MOVSBUF,AA数据送入SBUF(发送)RxD线发出8位数据,TxD线发送同步脉冲。8位数据发送完后,TI由硬件置位,向CPU请求中断(若中断开放)。CPU响应中断后先用软件使TI清零,然后再给“SBUF(发送)”送下一个欲发送字符。工作方式的工作过程及应用举例
①方式0SM2、TB8、RB8不起作用,应设置“0”态接收(RI=0和REN=1)串行数据由RxD线输入,TxD线输出同步脉冲。接收电路接收到8位数据后,RI自动置“1”并发出串行口中断请求。CPU查询到RI=1或响应中断后便可通过MOVA,SBUFSBUF(接收)数据送入A。波特率是固定的,;由RxD引脚做数据的输入和输出;由于信号的衰减,传输距离一般不超过2米。[例1]请编出发光二极管自左至右以一定速度显示的程序。设发光二极管为共阴极接法。主程序ORG2000HMOVSCON,#00H;串行口初始化为方式0CLRP1.0;禁止CD4094并行输出MOVA,#80H;起始显示码送AMOVSBUF,A;8031串行输出LOOP:SJMPLOOP;等待串行口输出完中断服务程序ORG0023HLJMPSBV;转SBVORG0100HSBV:SETBP1.0;点亮发光二极管LCALLDELAY;点亮一段时间CLRTI;清发送中断标志RRA;准备点亮下一位CLRP1.0;灭显示MOVSBUF,A;串行口输出RETI;中断返回DELAY:…;延时程序END[例2]根据图电路,编出MCS-51串行输入开关量把它存入20H单元的程序。要求控制开关KC断开(KC=1)时,8031处于等待状态,KC合上(KC=0)时8031开始输入和进行模拟。
ORG2000HSTART:JBP1.0,$;若KC断开,则等待SETBP1.1;令CD4014并行输入开关量CLRP1.1;CD4014开始串行输出MOVSCON,#10H;令串行口方式为0,启动接收JNBRI,$;等待接收CLRRI;若接收已完,则清RIMOVA,SBUF;开关量送累加器AMOV20H,A;存入内存SJMPSTART;准备下次开关量输入END②方式1双机异步通信方式。字符帧格式为10位(8位数据位、一位起始位和一位停止位),波特率由定时器T1的溢出率决定。SMOD:波特率倍增选择,由PCON寄存器的最高位设置。SMOD的选择与波特率误差有关。
fosc:51单片机主时钟。一般选6MHz~12MHz。K:定时器T1的计数器长度,T1若选工作方式2,则K=8。N:定时器定时常数的初值。在方式1下,串行口设定为10位异步通信方式。8位数据位,1位起始位,1停止位。发送(TI=0)MOVSBUF,A发送电路自动在8位发送字符前后分别添加1位起始位和停止位,并在移位脉冲的作用下在TxD线上依次发送一帧信息,发送完后自动维持TxD线为高电平。TI由硬件在发送停止位时置位,由软件将它复位。接收(RI=0和REN=1)接收电路对RxD线采样,连续8次采样到RxD线为低电平时,确认RxD线上有了起始位。此后,接收电路就改为对第7、8、9三个脉冲采样到的值进行位检测,并以三中取二原则来确定所采样数据的值。在接收到有效停止位时,接收电路必须同时满足以下两个条件:RI=0和SM2=0,才能把接收到的8位字符存入“SBUF(接收)”中,把停止位送入RB8中,并使RI=1和发出串行口中断请求。[例3]请用中断法编出串行口方式1下的发送程序。设单片机主频为6MHz,定时器T1用作波特率发生器,波特率为2400bps,被发送字符块在内部RAM的地址为TBLOCK单元,字符块长度为LEN。要求奇校验位在数据第8位发送,字符块长度LEN率先发送。波特率为2400bps,取SMOD=1,由表查得TH1和TL1的时间常数初值为F4H。主程序ORG2100HTBLOCKDATA20HLENDATA14HSTART:MOVTMOD,#20H;定时器T1为方式2MOVTL1,#0F4H;波特率为2400bpsMOVTH1,#0F4H;给TH1送重装初值MOVPCON,#80H;令SMOD=1SETBTR1;启动T1MOVSCON,#40H;串行口为方式1MOVR0,#TBLOCK;字符块始址送R0MOVA,#LENMOVR2,A;字符块长度字节送R2MOVSBUF,A;发送LEN字节SETBEA;开CPU中断WAIT:SETBES;允许串行口中断SJMPWAIT;等待中断中断服务程序ORG0023HLJMPTXSVE;转发送服务程序ORG2150HTXSVE:CLRTI;清TIMOVA,@R0;发送字符送AMOVC,PSW.0;奇偶校验位送CCPLC;形成奇偶校验位送CMOVACC.7,C;使A中成为奇数个1MOVSBUF,A;启动发送DJNZR2,NEXT;若字符块未发完,则NEXTCLRES;关串行口中断SJMPSTOP;停止发送NEXT:INCR0;字符块指针加1STOP:RETI;中断返回END③方式2和方式3方式2和方式3为11位异步通信,比方式1多一个第9位既可双机之间通信,也可多机通信。方式3的波特率同方式1。方式2的波特率=多机通信时,SM2=0、REN=1、TB8/RB8做多机通信控制位。双机之间通信时,SM2=0、REN=1、TB8/RB8可做奇偶位发送(TI=0)发送前要求把第9位数据位预先装入SCON的TB8,由用户安排,可以是奇偶校验位或其他控制位。SETBTB8CLRTB8MOVSBUF,ATI由硬件在发送停止位时置位,由软件将它复位。接收(RI=0和REN=1)方式1RB8存停止位方式2、3RB8存放第9数据位接收有效字符的条件:RI=0SM2=0或RB8=1
同时满足两条件,执行MOVA,SBUF;使RI=1,否则接收无效,RI=0。RI=0,SBUF空SM2或RB8
共同控制接收
RB8奇偶校验,SM2=0
SM2=1,RB8=1,多机通信[例4]请用查询法编出串行口在方式2下的发送程序。设单片机主频为6MHz,波特率为fosc/32,发送数据区始址为TBLOCK(内部RAM),接收数据块长度为LEN。要求采用累加和校验,以空出第9位它用。累加和是指累加所有需要发送或接收的数据(字符)字节后得到的低字节和(大于255部分舍去)。累加和校验要求发送端在发送完数据后把累加和也发送出去,接收端除要计算接收数据的累加和外,还必须接收发送端发来是累加和,并把它同求得的累加和比较。若比较相同,则数据传送正确;否则,数据传送有错。主程序ORG1000HTBLOCKDATA20HLENDATA1EHSTART:MOVSCON,#80H;方式2MOVPCON,#80H;令SMOD=1MOVR0,#TBLOCK;字符块始址送R0MOVR2,#LEN;字符块长度字节送R2MOVR3,#LEN;存入累加和寄存器R3ACALLTXSUB;调用发送子程序SJMP$;停机发送子程序ORG1100HTXSUB:PUSHACC;保护A中的内容PUSHPSWCLRTI;清TITXLEN:MOVA,R2;发送字符块长度MOVSBUF,AJNBTI,$;等待发完CLRTI;发完后清TITXD:MOVA,@R0;发送字符送AMOVSBUF,A;启动发送JNBTI,$;等待发完
TXSUM:MOVA,R3;若已发完则发累加和MOVSBUF,AJNBTI,$;等待发完CLRTI;发完后清TIMOVR3,#00H;清累加和寄存器POPPSW;恢复现场POPACC
RETEND
CLRTI;发完后清TIADDA,R3;求累加和MOVR3,A;存入R3INCR0;字符块指针加1DJNZR2,TXD;若字符未全发完,则继续[例5]请用查询法编出串行口在方式3下的接收程序。设单片机主频为6MHz,波特率为2400bps,接收数据区始址为RBLOCK(内部RAM),接收数据块长度字节由始发端发送来。要求采用累加和校验,若传输有错,转出错处理程序。本程序有主程序、接收子程序和出错处理程序组成主程序:ORG1000HRBLOCKDATA30HSTART:MOVTMOD,#20H;T1工作于方式2MOVTH1,#OF4H;设置时间常数初值MOVTL1,#0F4HSETBTR1;启动T1MOVSCON,#0D0H;串行口工作于方式3接收MOVPCON,#80H;使SMOD=1MOVR0,#RBLOCK;接收数据区始址送R0MOVR3,#00H;累加和寄存器清零ACALLRXSUB;转接收子程序…SJMP$;停机接收子程序:RXSUB:CLRRI;清RIRXLEN:JNBRI,$;等待接收数据块长度字节CLRRI;接收完后清RIMOVA,SBUF;数据块长度字节送AMOVR2,A;存入R2ADDA,R3;开始求累加和MOVR3,A;累加和存入R3
RxD:JNBRI,$;等待接收字符CLRRI;接收完后清RIMOVA,SBUFMOV@R0,A;接收字符存入内存ADDA,R3;求累加和MOVR3,A;存入R3INCR0;接收数据区指针加1DJNZR2,RxD;若数据块未收完,则继续RXSUM:JNBRI,$;等待接收累加和CLRRI;接收完后清RIMOVA,SBUF;接收到的累加和送AXRLA,R3;比较两个累加和JNZERROR;若不等,则转出错处理RET;若相等,则返回4.主从式多机通信MCS-51使用于多机通信时必须在方式2或方式3下工作。⑴主机的SM2=0;所有从机的SM2=1,以便接收主机发来的地址;主从机的REN=1。⑵主机给从机发送地址时,第9数据位上发送1,以指示从机接收这个地址。⑶所有从机在SM2=1、RB8=1和RI=0时,接收主机发来的从机地址,进入相应中断服务程序,并和本机地址比较以确认是否为被寻址从机。⑷被寻址从机通过指令清除SM2,以正常接收数据,并向主机发回接收到的从机地址,供主机核对。未被寻址的从机保持SM2=1,并退出各自中断服务程序。⑸完成主机和被寻址从机之间的数据通信,被寻址从机在通信完成后重新使SM2=1,并退出中断服务程序,等待下次通信。在多机通信中,主机通常把从机地址作为为8位数据(第9数据位为1)发送的。因此,MCS-51构成的多机通信系统最多允许255台从机(地址为00H-FEH),FFH作为一条控制命令由主机发送给从机,以便使被寻址从机的SM2=1。[例]主机和从机的通信程序,要求波特率为1200bps。本题程序由主机程序和从机程序组成。
在多机通信中,主从机之间除传送从机地址和数据(由发送数据第9位指示)外,还应当传送一些供主机或从机识别的命令或状态字。①两条控制命令为:00H-主机发送从机接收命令01H-从机发送主机接收命令两条命令均以数据形式发送(既第9数据位为0)5主从式多机通信实例②从机状态字。该状态字由被寻址从机发送,为主机所接收,用于指示从机的工作状态。主机程序:由主机程序和主机通信子程序组成。主机主程序用于定时器T1初始化、串行口初始化和传递主机通信子程序所需入口参数。主机通信子程序用于主机和从机间一个数据块的传送。程序中所用寄存器分配如下:R0:存放主机发送数据块始址R1:存放主机接收数据块始址R2:存放被寻址的从机地址R3:存放主机发出的命令R4:存放发送数据块长度R5:存放接收数据块长度主机程序流程图主机主程序ORG2000HSTART:MOVTMOD,#20H;定时器T1为方式2MOVTH1,#0F4H;波特率为1200bpsMOVTL1,#0F4HSETBTR1;启动T1工作MOVSCON,#0D8H;串行口为方式3,允许接收,SM2=0;TB8=1,REN=1MOVPCON,#00H;
MOVR0,#40H;发送数据块始址送R0MOVR1,#20H;接收数据块始址送R1MOVR2,#SLAVE;被寻址从机地址送R2
MOVR3,#00H/01H
;若为00H,则主机发从机收命令;若为01H,则从机发主机收命令MOVR4,#20;发送数据块长度送R4MOVR5,#20;接收数据块长度送R5LCALLMCOMMU;调用主机通信子程序SJMP$;停机
ORG2100HMCOMMU:MOVA,R2;从机地址送AMOVSBUF,A;发送从机地址JNBRI,$;等待接收从机应答地址CLRRI;从机应答后清RIMOVA,SBUF;从机应答地址送AXRLA,R2;核对两个地址JZMTXD2;相符,则转MTXD2MTXD1:MOVSBUF,#0FFH;发送从机复位信号SETBTB8;地址帧标志送TB8SJMPMCOMMU;重发从机地址MTXD2:CLRTB8;准备发送命令MOVSBUF,R3;送出命令JNBRI,$;等待从机应答CLRRI;从机应答后清RIMOVA,SBUF;从机应答命令送AJNBACC.7,MTXD3;核对命令后无错,则命令分类SJMPMTXD1;若命令收错,则重新联络
MTXD3:CJNER3,#00H,MRXD;若为从机发送主机接收命令,则MRXDJNBACC.0,MTXD1;若从机接收未就绪,则重新联络MTXD4:MOVSBUF,@R0;若从机接收就绪,则开始发送JNBTI,$;等待发送结束CLRTI;发送结束后清TIINCR0;R0指向下一发送数据DJNZR4,MTXD4;若数据未发完,则继续RETMRXD:JNBACC.1,MTXD1;若为从机发送未就绪,则重新联络MRXD1:JNBRI,$;等待接收完毕CLRRI;接收到一帧后清RIMOVA,SBUF;收到的数据送AMOV@R1,A;存入内存INCR1;接收数据区指针加1DJNZR5,MRXD1;若未接收完,则继续RETEND
从机程序从机程序有从机主程序和从机中断服务程序组成。从机主程序用于定时器T1初始化、串行口初始化和中断初始化。从机中断服务程序用于对主机的通信。从机主程序框图
从机子程序为:ORG1000HSTART:MOVTMOD,#20H;定时器T1为方式2MOVTH1,#0F4H;波特率为1200bpsMOVTL1,#0F4HSETBTR1;启动T1工作MOVSCON,#0F8H;串行口为方式3,允许接收,SM2=1,;TB8=1,REN=1MOVPCON,#00HMOVR0,#20H;R0指向发送数据块始址MOVR1,#40H;R1指向接收数据区始址MOVR2,#20;发送数据块长度送R2MOVR3,#20;接收数据块长度送R3SETBEA;开CPU中断SETBES;允许串行口中断CLRRI;清RISJMP$;等接收中断申请信号
由于从机串行口设定为方式3、SM2=1和RI=0,且串行口中断已经开放,因此从机的接收中断总能被响应(主机发送地址时)。在中断服务程序中,SLAVE是从机的本机地址,F0H(即PSW.5)为本机发送就绪位地址(即:PSW.1=1为本机已准备好接收)。寄存器分配为:R0:存放发送数据块始址R1:存放接收数据块始址R2:存放发送数据块长度R3:存放接收数据块长度
ORG0023HSJMPSINTSBV;转入从机中断服务程序ORG0100HSINTSBV:CLRRI;接收到地址后清RIPUSHACC;保护A于堆栈PUSHPSW;保护PSW于堆栈MOVA,SBUF;接收的从机地址送AXRLA,#SLAVE;和本机地址核对JZSRXD1;若是呼叫本机,则继续RETURN:POPPSW;若不是呼叫本机,则恢复PSWPOPACC;恢复ACCRETI;中断返回SRXD1:CLRSM2;准备接收数据/命令MOVSBUF,#SLAVE;发回本机地址,供核对JNBRI,$;等待接收主机发来的数据/命令CLRRI;接收到后清RIJNBRB8,SRXD2;若是数据/命令,则继续SETBSM2;若是复位信号,则令SM2=1SJMPRETURN;返回主程序
SRXD2:MOVA,SBUF;接收命令送ACJNEA,#02H,NEXT;命令合法?NEXT:JCSRXD3
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- xsteel高级教程之xsteel图形手册
- 生物多样性与生态系统服务的创新管理
- 环卫一体化服务模式与运营方案
- 现代企业制度下管理模式创新实践
- 解读中国网约车政策
- 目标驱动的时间管理提升工作效率的秘诀
- 暑假大学安全
- 水厂建设社会影响评估
- 社会福利养老院项目实施进度安排
- 公司述职分析报告
- TSGD7002-2023-压力管道元件型式试验规则
- 教师读书分享《给教师的建议》课件
- 人民警察纪律条令试卷含答案
- 湖南省长郡中学2023-2024学年高二下学期寒假检测(开学考试)物理 含解析
- 婚姻矛盾纠纷调解培训课件
- 了不起的狐狸爸爸-全文打印
- 初中物理各单元思维导图
- 氧化还原反应和氧化还原平衡--ppt课件
- 2022年北京市专升本英语真题
- 锗的提取方法
- 大学物理光学练习
评论
0/150
提交评论