|
|
串口1 有2個(gè)命令一個(gè)是ZZAE(發(fā)送后 回傳數(shù)據(jù))和 ZZBE (停止回傳數(shù)據(jù))
目前的情況是 反復(fù)ZZAE ZZBE 發(fā)送后 會(huì)將單片機(jī)卡死。。。 求幫助啊
下面是 我的串口設(shè)置 串口中斷程序
void InitUART(void)
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位數(shù)據(jù),可變波特率
AUXR |= 0x40; //定時(shí)器1時(shí)鐘為Fosc,即1T
AUXR &= 0xFE; //串口1選擇定時(shí)器1為波特率發(fā)生器
TMOD &= 0x0F; //清除定時(shí)器1模式位
TMOD |= 0x20; //設(shè)定定時(shí)器1為8位自動(dòng)重裝方式
TL1 = 0xDC; //設(shè)定定時(shí)初值 115200--FA 57600--F4 19200--DC
TH1 = 0xDC; //設(shè)定定時(shí)器重裝值
ET1 = 0; //禁止定時(shí)器1中斷
TR1 = 1; //啟動(dòng)定時(shí)器1
ES=1;
AUXR &= 0xF7; //波特率不倍速
S2CON = 0x50; //8位數(shù)據(jù),可變波特率
AUXR |= 0x04; //獨(dú)立波特率發(fā)生器時(shí)鐘為Fosc,即1T
BRT = 0xFA; //設(shè)定獨(dú)立波特率發(fā)生器重裝值
AUXR |= 0x10; //啟動(dòng)獨(dú)立波特率發(fā)生器
EA =1; //開(kāi)總中斷
IE2 =0x01; //開(kāi)串口2中斷 ES2=1
}
/****************串行口1發(fā)送****************/
void sendbyte(uchar c)
{
SBUF=c;
while(!TI); //等待發(fā)送完成
TI=0;
}
/****************串行口1字符串地址發(fā)送****************/
void SendString1(uchar *string)//此處*string相當(dāng)于數(shù)組
{
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 //其他輸出為錯(cuò)
{
ret_flag=99;
Digit=0;
}
}
Digit++;
}
if (TI)
{
TI = 0;
busy = 0;
}
}
|
|