/*串口接收*/
#include<reg52.h>
sbit led1=P1^0;
sbit led2=P1^1;
sbit led3=P1^2;
sbit led4=P1^3;
static unsigned char dat,dat0,countT0;
void delay(int t)
{
unsigned int i;
while(t--)
{
for(i=0;i<100;i++);
}
}
void timerinit()
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
//TMOD &= 0x0F; //清除定时器1模式位
TMOD = 0x22; //设定定时器1、定时器0为8位自动重装方式
TL1 = 0xe8; //设定定时初值 //1200
TH1 = 0xe8; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
ET0 = 1; //允许定时器0中断
TR0 = 1; //timer0 start
TL0 = 0xe8; //设定定时0初值 //0.1ms
TH0 = 0xe8; //设定定时器0重装值
ES=1;
EA=1;
}
void qianjing()
{
if(countT0<50)
{
led1=0;
}
if(countT0>50)
{
led1=1;
}
}
void houtui()
{
if(countT0<50)
{
led2=0;
}
if(countT0>50)
{
led2=1;
}
}
void left()
{
led3=1;
}
void right()
{
led4=1;
}
void jieshou()
{
switch(dat)
{
case 0xaa:qianjing();break;
case 0x77:houtui();break;
case 0x7a:left();break;
case 0xa7:right();break;
default:P1=0x00;break;
}
}
void main()
{
dat=0x00;
P1=0xff;
timerinit();
delay(1);
while(1)
{
jieshou();
}
}
/*串口接收*/
void uart() interrupt 4
{
if(RI) //接收中断
{
dat0=SBUF;
RI=0; //读取接受到的数据
}
switch(dat0)
{
case 0xaa:dat=dat0;break;
case 0x77:dat=dat0;break;
case 0x7a:dat=dat0;break;
case 0xa7:dat=dat0;break;
case 0xa0:dat=dat0;break;
default:P1=0x00;break;
}
}
void timer0() interrupt 1
{
countT0++;
if(countT0>99)countT0=0;
}
|