|
#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;//關(guān)中斷
TMOD=0x20;//定時(shí)器工作方式2,8位自動(dòng)重裝模式,用于產(chǎn)生波特率
TH1=0xfd;//波特率位9600.晶振位11.059
TL1=0xfd;
SCON=0x50;//REN=1允許串行接受狀態(tài),串口口工作方式1
PCON=0x00;//波特率不加倍
TR1=1;//定時(shí)器1開始工作,產(chǎn)生波特率
// TI=0;//發(fā)送標(biāo)志位置0
// RI=0;//接受標(biāo)志位置0
EA=1;
ES=1;//開串口中斷
led1=0;
led2=0;
led3=0;
}
void send(uchar a)//單字節(jié)數(shù)據(jù)發(fā)送
{
TI=0;
SBUF=a;
while(TI==0);
TI=0;
if(c%2)
led3=1; //發(fā)送指示燈標(biāo)志,每接收一次,此燈亮滅交替
else
led3=0;
c++;
}
void ctrl()//接收處理函數(shù)
{
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)//是否有數(shù)據(jù)到來(lái)
// {
// RI=0;
// temp=SBUF; //暫存接收到的數(shù)據(jù)
ctrl();
// }
}
}
void ser() interrupt 4
{
RI=0;
temp=SBUF; //暫存接收到的數(shù)據(jù)
}
|
|