1 / 15

二 、串口的多机通信

第七章 MCS-51 的串行口. 一 、 串行口的应用举例. 二 、串口的多机通信. 一、 串行口的应用举例. 9 位共偶数个 1 ,通过 TB8 补 0 或补 1 来实现. 什么是偶校验?. 2 、串行口方式 2 的应用. 例 7-1 方式 2 发送在双机通讯中的应用。 下面的 发送中断 服务程序,是在双机通讯中,以 TB8 作为奇偶校验位,处理方法为数据写入 SBUF 之前,先将数据的奇偶校验位写入 TB8 ,以保证采用偶校验发送。.

jerry
Download Presentation

二 、串口的多机通信

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第七章 MCS-51的串行口 一、 串行口的应用举例 二、串口的多机通信

  2. 一、 串行口的应用举例 9位共偶数个1,通过TB8补0或补1来实现 什么是偶校验? 2、串行口方式2的应用 例7-1方式2发送在双机通讯中的应用。 下面的发送中断服务程序,是在双机通讯中,以TB8作为奇偶校验位,处理方法为数据写入SBUF之前,先将数据的奇偶校验位写入TB8,以保证采用偶校验发送。 当数据本身为偶数个1时(P=0)补0;当数据本身为奇数个1时(P=1)补1;结论:令TB8=P

  3. PIPTI: PUSH PSW ;现场保护 PUSH Acc SETB RS1 ;选择第2组工作寄存器区 CLR RS0 CLR TI ;发送中断标志清“0” MOV A,@R0;取数据 MOV C,P ;校验位送TB8,采用偶校验 MOV TB8 ,C MOV SBUF ,A ;启动发送 INC R0 ;数据指针加1 POP Acc ;恢复现场 POP PSW RETI ;中断返回

  4. N P=0? Y Y Y RB8=1? RB8=0? Y N ERP 例7-2方式2接收在双机通讯中的应用 PIRI: PUSH PSW PUSH Acc SETB RS0 ;选择1组寄存器区 CLR RS1 CLR RI MOV A,SBUF ;收到数据送A MOV C,P JNC L1 ;C=0。跳L1 JNB RB8,ERP ;ERP为出错处理程序 AJMP L2 L1: JB RB8,ERP ;RB8=1,跳ERP L2: MOV @R0,A INC R0 POP Acc POP PSW ERP: ……… ;出错处理程序段 ……… RETI 本例与上例相对应。若第9位数据为校验位,在接收程序中作偶校验处理,设1组寄存器区的R0为数据缓冲器指针。

  5. 补充两个数据块的发送接收例题 补例7-3:编制一个发送程序,将片内RAM中50H~5FH的数据串行发送。串行口设定为工作方式2,TB8作奇偶校验位。 • 解:在数据写入发送SBUF之前,先将数据的奇偶标志P写入TB8,此时,第9位数据便可作奇偶校验用。分别采用查询和中断两种方式发送。 返回

  6. (1)采用查询方式的程序段 ORG 0000H AJMP MAIN ;上电,转向主程序 ORG 0100H ;主程序 MAIN: MOV SCON ,#80H ;设工作方式2 MOV PCON ,#80H ;取波特率为fosc/32 MOV R0 ,#50H ;首址50H送R0 MOV R7 ,#10H ;数值长度送R7 LOOP: MOV A ,@R0 ;取数据 MOV C ,PSW.0 ;P→C MOV TB8 ,C ;奇偶标志送TB8 MOV SBUF ,A ;发送数据 WAIT: JBC TI ,CONT AJMP WAIT ;等待中断标志TI=1 CONT: INC R0 DJNZ R7 ,LOOP ;数值尚未发送完, 继续发送下一个数据 SJMP $ END 返回

  7. (2)采用中断方式的流程图 开 始 中断入口 写写看! 清中断标志 初始化串口 发送下一个数据 初始化数据区 中断初始化 数据发送完? 是 发送第一个数据 关中断 等待中断 返回 ; 发送一个数据 MOV A ,@R0 MOV C ,PSW.0 ;P→C MOV TB8 ,C MOV SBUF ,A ; 中断服务子程序 主程序

  8. (2)采用中断方式的程序段 SERVE: CLR TI ;清除发送中断标志 INC R0 ;修改数据地址 MOV A ,@R0 MOV C ,PSW.0 ;P→C MOV TB8 ,C MOV SBUF ,A ;发送数据 DJNZ R7 ,ENDT ;判断数据块发送完否 ;若未发 送完, 则转ENDT CLR ES ;若发送完,则禁止串行口中断 ENDT: RETI ;中断返回 END ORG 0000H AJMP MAIN ;上电,转向主程序 ORG 0023H ;串行口的中断入口地址 AJMP SERVE ;转向中断服务程序 ORG 0100H ;主程序 MAIN: MOV SCON ,#80H MOV PCON ,#80H MOV R0 ,#50H MOV R7 ,#0FH; ?够吗 SETB ES ;允许串行口中断 SETB EA ;CPU允许中断 MOV A ,@R0 MOV C ,PSW.0 ;P→C MOV TB8 ,C MOV SBUF ,A ;发送第一个数据 SJMP $ 返回

  9. 补例7-4:编制一个接收程序,将接收的16B数据送入片内RAM的5OH—5FH单元中。设串行口工作于方式 3,波特率为2400b/s。 • 解:方式3为11位异步通信方式,波特率取决于TI的溢出率。查 表7-2(P148)可知,当晶振为11.059MHz,波特率为2400b/s时,可取SMOD=0,定时器选择模式2: 初值为F4H 返回

  10. N P=0? Y Y Y RB8=1? Y N ERP RB8=0? 源程序如下: MAIN: MOV TMOD ,#20H ;设TI工作于模式2 MOV TH1 ,#0F4H ;赋循环计数初值 MOV TL1 ,#0F4H ;赋计数值 SETB TR1 ;启动定时器TI MOV R0 ,#50H ;首地址送R0 MOV R7 ,#10H ;数据长度送R7 MOV SCON ,#0D0H ;串行口工作与方式3,可接收 MOV PCON ,#00H ;设SMOD=0 WAIT: JBC RI ,PR1 ;接收完一帧数据,清RI,转PR1 SJMP WAIT ;否则等待 PR1: MOV A ,SBUF ;读入数据 JNB P ,PNP ;P=0,转PNP JNB RB8 ,PER ;P=1,RB8=0,转出错处理 SJMP RIGHT PNP: JB RB8 ,PER ;P=0,RB8=1,转出错处理 RIGHT: MOV @R0 ,A ;数据送内存 INC R0 ;修改地址指针 DJNZ R7 ,WAIT ;数据未接收完,继续接收下一个数据 CLR PSW.5 ;置正确接收完毕标志F0=0 RET PER: SETB PSW.5 RET 返回

  11. 二、串口的多机通信 一个多机通信的例子

  12. 二、串口的多机通信 主机与从机,每个从机有一个唯一的地址码。 主机可与每个从机通信,从机之间不能通信。 主机每一时段只能与一个从机通信。 先叫地址,然后再通信。 主机的RXD与从机的TXD相连,主机TXD与从机的RXD端相连。从机地址分别为00H、01H、02H。

  13. 要保证主机与所选择的从机实现可靠地通讯,必须保证串口具有识别功能。 SCON中的SM2位就是满足这一条件而设置的多机通讯控制位。 原理:在串行口以方式2(或方式3)接收时,SM2与RB8共同作用,影响着RI的置位。也就是说,接收到一个数据时,RI 置位与否还要看SM2和RB8的组合。而RI不能有效置位,意味着并没有收到这一个数据。 SM2=0、RB8=0 RB8=1 RI可以置位才可以接收到数据 RI可以置位 SM2=1、RB8=1 RI可以置位 读P138 SM2=1、RB8=0 RI不能置位

  14. SM2=0、RB8=0 RB8=1 RI可以置位 被叫 应用这些特性来安排多机通讯的工作过程: SM2=1、RB8=1 RI可以置位 SM2=1、RB8=0 RI不能置位 未被叫 (1)主机先将从机地址(即准备接收数据的从机)发给各从机,希望每个从机都能收到。主机发出的地址信息,以第9位为1为特征。 (2)从机串行口编程为方式2或方式3接收,且置“1”SM2和REN位,使从机只处于多机通讯且接收地址帧的状态。 (3)各从机接收到地址后,判断是否和本机地址相符合。相符则该从机清“0”SM2位,准备接收主机的数据或命令;若不符,则保持SM2=1状态。 (4)接着主机发送数据帧,以第9位为0为特征.此时各从机串行口接收到 的RB8=0,只有地址相符合的从机系统(即已清“0”SM2位的从机)才能激活RI,真正收到数据。

  15. 2009-11-12作业 • 读P154~156例7-5 • P157 12、14

More Related