#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);
}