源代码(C语言)
#include
//#include
//#include
#define u16 unsigned int
#define u8 unsigned char
u8 flag,temp;
void Usart_Init()
{
TMOD=0x20;//定时器1方式2自动重装 0010 0000(方式2)高四位启动定时器1
TH1=0xf3;//4800倍频,12Mhz//倍频之后串口调试还是选择4800波特率
TL1=0xf3;//高四位的值一直会往低四位送
PCON=0x80;//倍频
SCON=0x50;//工作方式1 0101 0000
//ET1=1; //可不开,此开关打开,led初始全亮
EA=1; //打开总中断
TR1=1;//打开计数器
ES=1;//打开接收中断
}
void main()
{
Usart_Init();//初始化
while(1)
{
if(flag==1)
{
ES=0;//关闭接收中断
flag=0;
SBUF=temp;//接受缓存器
while(!TI); //等待发送数据完成
TI=0; //清除发送完成标志位
ES=1;
}
}
}
void Usart()interrupt 4
{
RI=0;//清除接收中断标志位
P2=SBUF;//发送缓存器,两个地址一样 不同的缓存器
temp=SBUF;
flag=1;
}
如果pc向单片机发送了数据则进入中断flag被置1 if判定进去关闭接收中断防止单个数据在while里一直被发送
下面展示while里ES没有被关闭的情况
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)