解:设数据串行发送采用中断方式,显示延迟通过延迟程序DELAY来实现。程序清单: ORG0000HLJMPMAIN ORG 0023H AJMP SBR ORG 2000HMAIN:MOV SCON,#00H;串行口方式0初始化 MOV A,#80H;最左一位发光二极管先亮 CLR P1.0;关闭并行输出 MOV SBUF,A;开始串行输出LOOP:SJMP $;等待中断SBR: SETB P1.0;启动并行输出 ACALLDELAY;显示延迟一段时间 CLR TI;清发送中断标志 RR A;准备右移一位显示 CLR P1.0;关闭并行输出 MOV SBUF,A;再一次串行输出 RETI第30页,共74页,星期日,2025年,2月5日串行口工作方式110位通用异步串行口UART(UniversalAsynchronousReceiver/Transmitter),1位起始位、8位数据、1位停止位。波特率可调,由定时器T1的溢出率(定时时间)决定。当一帧数据接收完毕后,必须同时满足以下条件,这次接收才真正有效:REN=1RI=0,SBUF为空SM2=0或SM2=1时,收到停止位为1,收到的数据才能装到SBUF里。第31页,共74页,星期日,2025年,2月5日串行口工作方式1波特率(定时器T1的溢出速率)PCON.7波特率选择位第32页,共74页,星期日,2025年,2月5日7位ASCII码+1位奇偶校验位=8A中1的个数为奇数,P=1,如果最高位为为P的值,则A的1的个数编程偶数,因此,要把P的值取反以后放入ASCII码最高位,才是奇校验。设发送数据区的首地址为20H,接收首地址为40H例89C51串行口按双工方式收发ASCII字符,最高位用作奇校验,要求传送码率为1200b/s,fosc=11.059MHz。奇偶校验位:数据位和奇偶位中1的个数偶校验:以上1的个数为偶数奇校验:以上1的个数为奇数第33页,共74页,星期日,2025年,2月5日MOV TMOD,#20H;MOV TL1,#0E8H;MOV TH1,#0E8H;SETB TR1;MOV SCON,#50H;MOV R0,#20H;MOV R1,#40H;SETB ES;SETB EA;LCALL SOUT;SJMP $;T1为模式2时间常数,见表7-2重装时常启动T1串行口方式1,允许接收发送数据区首址接收数据区首址串行口开中断CPU开中断发送一个字符等待中断表ORG 0000HLJMP MAINORG 0050HMAIN:第34页,共74页,星期日,2025年,2月5日中断服务程序ORG 0023HLJMP SBR1ORG 0100HPUSH ACCPUSH PSWJNB RI,SENDLCALL SINSJMP NEXTLCALL SOUTPOP PSWPOP ACCRETISBR1:SEND:NEXT:第35页,共74页,星期日,2025年,2月5日发送子程序CLR TIMOV A,@R0MOV C,PCPL CMOV ACC.7,CMOVSBUF,AINCR0RETSOUT:;若奇数个1,P=1;取要发送的数据;A中的ASCII码为奇校验;发送;修改发送数据区指针第36页,共74页,星期日,2025年,2月5日接收子程序CLR RIMOVA,SBUFJNB P,ERANL A,#7FHMOV@R1,AINC R1RET……SIN:;若偶数个1,出错;读接收到的数据;数据存入接收区;修改接收数据区指针;若奇数个1,ACC.7清0ER:;处理出错程序第37页,共74页,星期日,2025年,2月5日串行口工作方式2和方式3每帧11位:1位起始位,9位数据(D8~D0),1位