void UartInit(void) //115200bps@11.0592MHz 独立波特率发生器
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x04; //独立波特率发生器时钟为Fosc,即1T
BRT = 0xFD; //设定独立波特率发生器重装值
AUXR |= 0x01; //串口1选择独立波特率发生器为波特率发生器
AUXR |= 0x10; //启动独立波特率发生器
ES=1;
}
void Timer0Init(void) //5000微秒@11.0592MHz
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x00; //设置定时初值
TH0 = 0x28; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 0; //定时器0开始计时
ET0=1;
EA=1;
}
oid Timer0Interrupt(void) interrupt 1 //定时计数器0中断 跑够5ms 即引发此中断 此中断用于对消息数据的处理
{//unsigned char i;
TR0=0; //关闭定时器0
TL0 = 0x00; //设置定时初值
TH0 = 0x28; //设置定时初值
receive_time++;
if(receive_time>500) //20ms的时间到了
{
P1=~P1;
EA=0;
ly_SendOneByte('0'); //2S发送一个心跳包
EA=1;
receive_time=0; //定时时间清0
receive_x=0; //接收位置清0
if(receive_mode==1) //模式来自于手机消息
{
receive_order=receive_date[1]; //取出指令码
receive_mode=0; //关闭控制模式
}
else; //否则啥都不执行。
}
TR0=1; //打开定时器0
}
进入定时器0中断后。receive_time>500这个条件满足后。就不在返回main里。。而是一直在定时中断里循环。 重复发送'0'
麻烦遇到的大神指点一下呗。。困扰两天了。。各种想不明白。
|