编辑代码

#include <reg51.h>

typedef unsigned int u8;

void initimer(){
    //定时器
    TMOD=0x20;//定时器1开8位
    EA=1;//开启中断
   // ET1=1;//开启定时器1中断,但是串行通信不需要中断
    TR1=1;//开启定时器1程序
    TH1=0xf4;//2400波特率,初始值244
    TR1=0xf4;

    ES=1;//开启串行中断
    
	PCON = 0x80 ;  //1000 0000 波特率加倍(SMOD = 1)
    SCON=0x50;//01010000:SM0=0,SM1=1,sbuf缓存开启8位;SM2=0缓存接受数据
}

void timer1() interrupt 4{//串行中断

u8 a;
a=SBUF;//接收:一边缓存的值给变量
RI=0;//接收中断标志位;接收完第8位数据后,RI=1表示帧接收完成。要手动将RI位清零。(即Data=SBUF)

SBUF=a;//发送:变量的值给另一边缓存
while(!TI);//TI发送完之前,都是0,!0=1;当TI=1,!1=0表示发送完成结束
TI=0;//TI发送位=1表示帧发送结束,TI可由软件清“0”(即SBUF=Data)

} 



void main () {
 
 initimer();
 while(1);

}