void interrupt UART_ISR() // interrupt 4 , ?????,????
{
uchar tt;
if(1 == RCIF)
{
if(recei_over_flag==0) //允许接收下条命令
{
tt = RCREG;
RCIF = 0;
switch(recei_count)
{
case 0:
{
rxdata[0]=RCREG;
if(rxdata[0]=='@')
{
recei_count++;
}
else
{
recei_count=0;
}
}
break;
case 1:
{
rxdata[1]=RCREG;
if(rxdata[1]=='C'||rxdata[1]=='A'||rxdata[1]=='R')
{
recei_count++;
}
else
{
recei_count=0;
}
}
break;
case 2:
{
rxdata[2]=RCREG;
if(rxdata[2]==InstrAdr0)//判断接收到的第二个字符是不是地址高位InstrAdr0
{
recei_count++;//如果是InstrAdr0,则继续接收
}
else if (rxdata[1]=='A' && rxdata[2]==0x0d)//判断接收到的是不是@A(cr),即读取设备地址
{
recei_over_flag=1;
//INTCONbits.GIE = 0;
//recei_count=0;//如果是,则接收到@A(cr)设备读取的命令
}
else
{
recei_count=0;//?????InstrAdr0???????????????
}
}
break;
case 3:
{
rxdata[3]=RCREG;
if(rxdata[3]==InstrAdr1 && rxdata[2]==InstrAdr0)
{
recei_count++;
}
else
{
recei_count=0;
}
}
break;
default:
rxdata[recei_count]=RCREG;
if(recei_count>7) //最多7个字符
{
recei_count=0;
}
else if(rxdata[recei_count]==0x0d)
{
recei_over_flag=1; //??????
//INTCONbits.PEIE = 0; // ??????
//recei_count=0;
}
else
{
recei_count++;
}
break;
}
}
}
}
|