串口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;
}
}
|