150 likes | 289 Views
第七章 MCS-51 的串行口. 一 、 串行口的应用举例. 二 、串口的多机通信. 一、 串行口的应用举例. 9 位共偶数个 1 ,通过 TB8 补 0 或补 1 来实现. 什么是偶校验?. 2 、串行口方式 2 的应用. 例 7-1 方式 2 发送在双机通讯中的应用。 下面的 发送中断 服务程序,是在双机通讯中,以 TB8 作为奇偶校验位,处理方法为数据写入 SBUF 之前,先将数据的奇偶校验位写入 TB8 ,以保证采用偶校验发送。.
E N D
第七章 MCS-51的串行口 一、 串行口的应用举例 二、串口的多机通信
一、 串行口的应用举例 9位共偶数个1,通过TB8补0或补1来实现 什么是偶校验? 2、串行口方式2的应用 例7-1方式2发送在双机通讯中的应用。 下面的发送中断服务程序,是在双机通讯中,以TB8作为奇偶校验位,处理方法为数据写入SBUF之前,先将数据的奇偶校验位写入TB8,以保证采用偶校验发送。 当数据本身为偶数个1时(P=0)补0;当数据本身为奇数个1时(P=1)补1;结论:令TB8=P
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 ;中断返回
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为数据缓冲器指针。
补充两个数据块的发送接收例题 补例7-3:编制一个发送程序,将片内RAM中50H~5FH的数据串行发送。串行口设定为工作方式2,TB8作奇偶校验位。 • 解:在数据写入发送SBUF之前,先将数据的奇偶标志P写入TB8,此时,第9位数据便可作奇偶校验用。分别采用查询和中断两种方式发送。 返回
(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 返回
(2)采用中断方式的流程图 开 始 中断入口 写写看! 清中断标志 初始化串口 发送下一个数据 初始化数据区 中断初始化 数据发送完? 是 发送第一个数据 关中断 等待中断 返回 ; 发送一个数据 MOV A ,@R0 MOV C ,PSW.0 ;P→C MOV TB8 ,C MOV SBUF ,A ; 中断服务子程序 主程序
(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 $ 返回
补例7-4:编制一个接收程序,将接收的16B数据送入片内RAM的5OH—5FH单元中。设串行口工作于方式 3,波特率为2400b/s。 • 解:方式3为11位异步通信方式,波特率取决于TI的溢出率。查 表7-2(P148)可知,当晶振为11.059MHz,波特率为2400b/s时,可取SMOD=0,定时器选择模式2: 初值为F4H 返回
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 返回
二、串口的多机通信 一个多机通信的例子
二、串口的多机通信 主机与从机,每个从机有一个唯一的地址码。 主机可与每个从机通信,从机之间不能通信。 主机每一时段只能与一个从机通信。 先叫地址,然后再通信。 主机的RXD与从机的TXD相连,主机TXD与从机的RXD端相连。从机地址分别为00H、01H、02H。
要保证主机与所选择的从机实现可靠地通讯,必须保证串口具有识别功能。 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不能置位
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,真正收到数据。
2009-11-12作业 • 读P154~156例7-5 • P157 12、14