#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; //暫存接收到的數據
}
|