#include<reg52.h>
unsigned char flag,a;
void main()
{
TMOD=0x20;//设置定时器1为工作方式2(自动恢复初值的8位计数器)
TH1=0xfd;//设置定时器1初值,则波特率为9600
TL1=0xfd;
TR1=1;//启动定时器1
REN=1;//启动串行口接收数据
SM0=0;//设置串行口工作方式为方式1
SM1=1;
EA=1;//打开总中断
ES=1;//打开串行口中断
while(1)
{
if(flag==1)//判断单片机是否接收完毕
{
ES=0;//关串口中断
flag=0;//标志位置零
SBUF=a;//再把a值赋给寄存器
while(!TI);//发送中断标志位,判断是否发送结束
TI=0;//必须由软件清零
ES=1;//再开串口中断
}
}
/*while(1)//查询方式
{
while(!RI);//判断是否接收结束,若接收结束则RI会自动由内部硬件置1
RI=0;//必须由软件清零
P1=SBUF;//收到的数据存储在SBUF中,然后再赋给P1
}*/
}
void ser() interrupt 4 //串行口中断程序
{
RI=0;//接收中断标志位,必须由软件清零
P1=SBUF;
a=SBUF;
flag=1;//如果单片机接收结束标志位置1
}
- 1
- 2
前往页