方式2、方式3发送和接收时序只有当REN=1时,才能对RXD进行检测。第30页,共70页,星期日,2025年,2月5日发送前,先根据通信协议由软件设置TB8(如作奇偶校验位或地址/数据标志位),然后将要发送的数据写入SBUF,即可启动发送过程。串行口能自动把TB8取出,并装入到第9位数据位的位置,再逐一发送出去。发送完毕,使TI=1。发送过程第31页,共70页,星期日,2025年,2月5日接收时,使SCON中的REN=1,允许接收。当检测到RXD(P3.0)端有1→0的跳变(起始位)时,开始接收9位数据,送入移位寄存器(9位)。当满足RI=0且SM2=0,或接收到的第9位数据为1时,前8位数据送入SBUF,附加的第9位数据送入SCON中的RB8,置RI为1;否则,这次接收无效,也不置位RI。接收过程第32页,共70页,星期日,2025年,2月5日例:编制一个发送程序,将片内RAM中50H—5FH的数据串行发送。串行口设定为工作方式2,TB8作奇偶校验位。发送波特率375kb/s,晶振为12MHz,SMOD=1。解:在数据写入发送SBUF之前,先将数据的奇偶标志P写入TB8,此时,第9位数据便可作奇偶校验用。可采用查询和中断两种方式发送。第33页,共70页,星期日,2025年,2月5日 ORG0000H AJMPMAIN ;上电,转向主程序 ORG0100H ;主程序MAIN: MOVSCON,#80H;设工作方式2 MOVPCON,#80H;取波特率为fosc/32 MOVR0,#50H ;首址50H送R0 MOVR7,#10H ;数值长度送R7LOOP: MOVA,@R0 ;取数据 MOVC,P ;P→C MOVTB8,C ;奇偶标志送TB8 MOVSBUF,A ;发送数据WAIT: JBCTI,CONT AJMPWAIT;等待中断标志TI=1CONT: INCR0 DJNZR7,LOOP;数值尚未发送完,继续发送下一个数据 SJMP$ END第34页,共70页,星期日,2025年,2月5日例:编制一个接收程序,将接收的16B数据送入片内RAM的50H-5FH单元中。设串行口工作在方式2,波特率为375bps。解:第35页,共70页,星期日,2025年,2月5日源程序如下:MAIN:MOVSCON,#080H;串行口工作于方2;REN=1,可接收MOVPCON,#80H ;设SMOD=1MOVR0,#50H ;首址50H送R0MOVR7,#10H ;数值长度送R7SETBREN ;启动接收WAIT:JBCRI,PR1 ;接收完一帧数据,清RI,转PR1SJMPWAIT ;否则等待PR1:MOVA,SBUF;读入数据 JNBP,PNP;P=0,转PNP JNBRB8,ERR;P=1,RB8=0,转出错处理 SJMPRIGHTPNP:JBRB8,ERR;P=0,RB8=1,转出错处理RIGHT:MOV@R0,A;数据送内存INCR0;修改地址指针DJNZR7,WAIT;数据未接收完,;继续接收下一个数据CLRF0 ;置正确接收完毕标志F0=0SJMPENDTERR:SETBF0ENDT: