000B ;设置串口为方式1,接收允许 SETB?TR1 ;启动定时器1 AGAIN:?ACALLIN ;接收字符子程序 ACALL?OUT ;回送字符子程序 AJMP?AGAIN ;循环 out: mov?sbuf,a ;发送字符子程序wait: jbc?ti,end1 ;发送完毕返回 sjmp?wait ;否则等待TI=1end1:?retin: jbc?ri,end2 ;接收到字符(RI=1)时启动接收 sjmp?in ;否则查询是否接收到字符end2?:?mov?a,sbuf ;启动接收 ret END ;程序结束程序清单(C51):#include<reg51.h>#include<intrins.h>typedefunsignedcharByte;Byte?data?AA;void?OUT(void){?SBUF=AA;/*发送字符子程序*/wait:?if(TI==1)?{ TI=0; gotoend1;?}/*发送完毕返回*/?goto?wait;/*否则等待TI=1*/end1:_nop_();}voidIN(void){in1:?if(RI==1)?{ RI=0; gotoend2;?}/*接收到字符(RI=1)时启动接收*/?gotoin1;/*否则查询是否接收到字符*/end2:?AA=SBUF;/*启动接收*/}void?main(void){?TH1=0xF3;/*设置波特率为2400*/?TL1=0xF3;/*设置波特率为2400*/?TMOD=0x20;/*选择计时器1方式2产生波特率*/?IE=0;/*禁止所有的中断,采用查询方式*/?SCON=0x50;/*设置串口为方式1,接收允许*/?TR1=1;/*启动定时器1*/ AGAIN:?IN();/*接收字符子程序*/?OUT();/*回送字符子程序*/?gotoAGAIN;/*循环*/}