|
void UartInit(void) //115200bps@11.0592MHz 獨(dú)立波特率發(fā)生器
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位數(shù)據(jù),可變波特率
AUXR |= 0x04; //獨(dú)立波特率發(fā)生器時(shí)鐘為Fosc,即1T
BRT = 0xFD; //設(shè)定獨(dú)立波特率發(fā)生器重裝值
AUXR |= 0x01; //串口1選擇獨(dú)立波特率發(fā)生器為波特率發(fā)生器
AUXR |= 0x10; //啟動(dòng)獨(dú)立波特率發(fā)生器
ES=1;
}
void Timer0Init(void) //5000微秒@11.0592MHz
{
AUXR |= 0x80; //定時(shí)器時(shí)鐘1T模式
TMOD &= 0xF0; //設(shè)置定時(shí)器模式
TMOD |= 0x01; //設(shè)置定時(shí)器模式
TL0 = 0x00; //設(shè)置定時(shí)初值
TH0 = 0x28; //設(shè)置定時(shí)初值
TF0 = 0; //清除TF0標(biāo)志
TR0 = 0; //定時(shí)器0開始計(jì)時(shí)
ET0=1;
EA=1;
}
oid Timer0Interrupt(void) interrupt 1 //定時(shí)計(jì)數(shù)器0中斷 跑夠5ms 即引發(fā)此中斷 此中斷用于對(duì)消息數(shù)據(jù)的處理
{//unsigned char i;
TR0=0; //關(guān)閉定時(shí)器0
TL0 = 0x00; //設(shè)置定時(shí)初值
TH0 = 0x28; //設(shè)置定時(shí)初值
receive_time++;
if(receive_time>500) //20ms的時(shí)間到了
{
P1=~P1;
EA=0;
ly_SendOneByte('0'); //2S發(fā)送一個(gè)心跳包
EA=1;
receive_time=0; //定時(shí)時(shí)間清0
receive_x=0; //接收位置清0
if(receive_mode==1) //模式來自于手機(jī)消息
{
receive_order=receive_date[1]; //取出指令碼
receive_mode=0; //關(guān)閉控制模式
}
else; //否則啥都不執(zhí)行。
}
TR0=1; //打開定時(shí)器0
}
進(jìn)入定時(shí)器0中斷后。receive_time>500這個(gè)條件滿足后。就不在返回main里。。而是一直在定時(shí)中斷里循環(huán)。 重復(fù)發(fā)送'0'
麻煩遇到的大神指點(diǎn)一下唄。。困擾兩天了。。各種想不明白。
|
|