#include<reg52.h>
#include <intrins.h>
#define uchar unsigned int
#define uint unsigned char
sbit led1=P1^0;
sbit led2=P1^1;
sbit led3=P1^2;
uchar temp,c;
void init() //串口初始化
{
ES=0;//关中断
TMOD=0x20;//定时器工作方式2,8位自动重装模式,用于产生波特率
TH1=0xfd;//波特率位9600.晶振位11.059
TL1=0xfd;
SCON=0x50;//REN=1允许串行接受状态,串口口工作方式1
PCON=0x00;//波特率不加倍
TR1=1;//定时器1开始工作,产生波特率
// TI=0;//发送标志位置0
// RI=0;//接受标志位置0
EA=1;
ES=1;//开串口中断
led1=0;
led2=0;
led3=0;
}
void send(uchar a)//单字节数据发送
{
TI=0;
SBUF=a;
while(TI==0);
TI=0;
if(c%2)
led3=1; //发送指示灯标志,每接收一次,此灯亮灭交替
else
led3=0;
c++;
}
void ctrl()//接收处理函数
{
switch(temp)
{
case '1':led1=1;
send(temp);
break;
case '2':led2=1;
send(temp);
break;
case '3':led1=0;led2=0;
send(temp);
break;
case '4':led1=1;led2=1;
send(temp);
break;
case '5':led3=0;
send(temp);
break;
default:
led1=1;
led2=1;
led3=1;
send(temp);
}
}
void main()
{
// led1=0;
// led2=0;
// led3=0;
init();
while(1)
{
// if(RI==1)//是否有数据到来
// {
// RI=0;
// temp=SBUF; //暂存接收到的数据
ctrl();
// }
}
}
void ser() interrupt 4
{
RI=0;
temp=SBUF; //暂存接收到的数据
}
|