串口1 有2個命令一個是ZZAE(發送后 回傳數據)和 ZZBE (停止回傳數據)
目前的情況是 反復ZZAE ZZBE 發送后 會將單片機卡死。。。 求幫助啊
下面是 我的串口設置 串口中斷程序
void InitUART(void)
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位數據,可變波特率
AUXR |= 0x40; //定時器1時鐘為Fosc,即1T
AUXR &= 0xFE; //串口1選擇定時器1為波特率發生器
TMOD &= 0x0F; //清除定時器1模式位
TMOD |= 0x20; //設定定時器1為8位自動重裝方式
TL1 = 0xDC; //設定定時初值 115200--FA 57600--F4 19200--DC
TH1 = 0xDC; //設定定時器重裝值
ET1 = 0; //禁止定時器1中斷
TR1 = 1; //啟動定時器1
ES=1;
AUXR &= 0xF7; //波特率不倍速
S2CON = 0x50; //8位數據,可變波特率
AUXR |= 0x04; //獨立波特率發生器時鐘為Fosc,即1T
BRT = 0xFA; //設定獨立波特率發生器重裝值
AUXR |= 0x10; //啟動獨立波特率發生器
EA =1; //開總中斷
IE2 =0x01; //開串口2中斷 ES2=1
}
/****************串行口1發送****************/
void sendbyte(uchar c)
{
SBUF=c;
while(!TI); //等待發送完成
TI=0;
}
/****************串行口1字符串地址發送****************/
void SendString1(uchar *string)//此處*string相當于數組
{
while(*string!='\0')//判斷是否到字符串末尾
{
sendbyte(*string);
string++;
}
}
串口1中斷
void Uart_Isr() interrupt 4 using 2{
if(RI == 1)
{
RI=0;
rbuf[Digit]=SBUF;
if(rbuf[Digit]==0x45)
{
if(rbuf[Digit-3]==0x5a&&rbuf[Digit-2]==0x5a&&rbuf[Digit-1]==0x41&&rbuf[Digit]==0x45) //ZZAE
{
ret_flag=1;
Digit=0;
lockzzabe=1;
}
else if(rbuf[Digit-3]==0x5a&&rbuf[Digit-2]==0x5a&&rbuf[Digit-1]==0x42&&rbuf[Digit]==0x45&&lockzzabe==1) //ZZBE
{
ret_flag=2;
ES = 0;
Digit=0;
}
// ES = 0;
Digit=0;
}
else //其他輸出為錯
{
ret_flag=99;
Digit=0;
}
}
Digit++;
}
if (TI)
{
TI = 0;
busy = 0;
}
}
|