您好,欢迎访问三七文档
182多机通信举例:例8—4现有1台主机与10台从机进行双向通信。从机地址为:00H——09H。设主、从机以方式3进行串行通信,波特率为1200,F晶振为6MHZ。下面以主机发送数据,从机接收数据为例说明。主机设定有关寄存器的内容如下:R1——存放主机发送的数据块首地址R2——存放寻址的从机地址R3——存放主机发送数据块的长度通信命令约定:“01H”:表示主机发送数据,从机接收数据;“02H”:表示主机接收数据,从机发送数据。主机通信程序流程图如图8—8所示:NY图8—8主机通信程序流程图定时器T1初始化串行口初始化向从机发送地址向从机发送命令发送数据块从机地址相符?开始结束延时接收从机返回的地址发送无效地址FFH183由图8—8流程图可得主机通信程序清单如下:MAIN:MOVTMOD,#20H;定时器T1设置工作方式2。MOVTL1,#0F3H;T1置初值。MOVTH1,#0F3HSETBTR1;启动T1。MOVPCON,#00H;波特率不倍增。MOVSCON,#0D8H;串行口设置工作方式3,TB8置1,表示发送地址。SADDR:MOVA,R2;取出从机地址。MOVSBUF,A;发送从机地址。JNBRI,$;等待从机应答。CLRRI;接收到从机应答,RI清零。MOVA,SBUF;取出从机应答数据(从机地址)。XRLA,R2;核对应答地址。JZMSEND;若地址相符转发送命令。SETBTB8;地址不相符,置地址标志,以便重发地址。CLRTIMOVSBUF,#0FFH;发送无效地址,使所有从机SM2置1。SJMPSADDR;重发地址。MSEND:CLRTB8;地址相符,准备发送命令、数据等。MOVSBUF,#01H;发送命令,要求从机接收数据。LCALLDELAY10;延迟10MS。MAGAIN:MOVSBUF,@R1;主机发送数据。JNBTI,$;等待一个字符发送完。CLRTI;本字符发送完毕,准备发送下一个字符。INCR1;发送数据区地址指针加一,指向下一单元。DJNZR3,MAGAIN;数据快未发送完,继续发送。RET;发送完毕,返回。以#08H号从机接收为例,设定:R1:存放从机接收数据块首地址;R2:存放从机接收数据块长度。184从机通信程序流程图如图8—9所示:NYNYNY图8—9从机通信程序流程图由图8—9可得从机通信程序清单如下:定时器T1初始化串行口初始化接收数据块开始接收主机发送的地址本机SM2位清零接收主机命令命令识别主机发送,从机接收?主机接收,从机发送?发送数据块(略)结束是本机地址?本机SM2置1185MOVTMOD,#20H;T1设置工作方式2。MOVTL1,#0F3H;置初值。MOVTH1,#0F3HSETBTR1;启动T1。MOVPCON,#00H;波特率不倍增。MOVSCON,#0F0H;本机串行口设置工作方式3,SM2置1,准备接收地址信息。WAIT:JNBRI,$;等待主机联络。CLRRI;接收到主机地址信息,清RI,准备接收下一数据。MOVA,SBUF;取出接收到的地址信息。XRLA,#08H;与本机比较。JZSADDR;是本机地址,转发送本机地址程序。SETBSM2;本机SM2置1,以便重新接收地址。AJMPWAIT;不是本机地址,再重新联络。SADDR:MOVSBUF,#08H;发送本地址,供主机核对。CLRTICLRSM2;准备接收命令。JNBRI,$;接收主机发送的命令。CLRRIMOV70H,SBUFMOVA,70H;取出命令。XRLA,#01H;检查命令。JZRECIV;若为本机接收数据命令,转接收程序。XRLA,#02H;再次检查命令。JZSEND;若为本机发送数据命令,转发送程序。AJMPWAIT;命令无效,返回待命状态。RECIV:JNBRI,$;接收一个字符。CLRRI;准备下次接收。MOV@R1,SBUF;存接收数据。INCR1;修改接收数据区指针。DJNZR2,RECIV;若数据接收未完,继续接收。SETBSM2;数据接收完毕,SM2重新置1。LJMPWAIT;返回待命状态。SEND:(略)186应当指出,以上介绍了多机通信的一个简单示例,实际应用时还应考虑命令校核、数据校核等问题,以求提高通信的可靠性。同时波特率的设定还要考虑所选择的通信介质等,篇幅有限,不再细述。187思考题与习题8—1什么是串行通信的波特率?8—2若8051单片机F晶振=11.059MHZ,需用波特率2400,试计算定时器T1的记数初值。8—3MCS—51单片机的串行口四种工作方式各有哪些特点?8—4MCS—51单片机串行口四种工作方式的波特率如何确定?8—5试用8051串行口工作方式0与移位寄存器组成6位LED静态电路,并编程输出字符”89C51P”。8—6试编写程序,设串行口为工作方式1,波特率为1200,禁止中断,用查询法将甲机从外部RAM2000H开始的10个数传送到乙机从2000H开始的外部RAM中去,已知晶振频率F晶振=11.0592MHZ。8—7甲乙两机进行串行通信,数据区均为内部RAM的50H—5FH,串行口以方式2工作,要求用TB8作奇偶校验位一起传送,波特率为1200,F晶振=11.059MHZ,试设计流程图并编程。8—88051向外部设备传送数据,串行口工作在方式3,单片机和外设之间采用9位异步通信方式,波特率为2400。F晶振为11.0592MHZ。现设从内部RAM的60H—70H中数据从串行口输出,试设计流程图并编程。8—9简述单片机多机通信的原理。8—10若将例8—4该成主机接收数据,#08号从机发送数据,试设计流程图并编程。
本文标题:多机通信举例
链接地址:https://www.777doc.com/doc-315742 .html