編寫串口通信協議時,發送已經被成功接收,但是一直無法正確接收數據,另一塊通信板協議已經是確定OK的,所以肯定是自己編寫的程序出現了問題,請高手幫忙分析一下。接收函數.C
void Uart2() interrupt 8 using 1
{
unsigned char dat; //串口二數據接收緩存
EA=0; //禁止中斷,防止數據接收出錯。
if(S2CON&0x01) //發送和接收共用一個中斷向量,需在程序中判斷
{
if(Rece_1==1)
{
dat=S2BUF; //從串口緩沖區讀取數據
Rece_Buf_1[Rece_Cnt_1]=dat;
Rece_Cnt_1++;
In_Send_1=0;
if(Rece_Cnt_1>=Rece_Len1)
{
CheckSum();
if(HaveData_S2_RxD==1)
{
DataProcess_R2();
}
}
}
else if(S2BUF==DEVICENO1)
{
Rece_1=1;
Rece_Buf_1[0]=DEVICENO1;
Rece_Cnt_1=1;
}
else
Rece_Cnt_1=0;
// S2CON&=~S2RI; //串口接收中斷標記需軟件清零
S2CON=S2CON & 0xfe; //串口接收中斷標記需軟件清零
}
EA=1; //使能中斷
}
void CheckSum()
{
int i;
unsigned char CheckSum=0;
for (i=0;i<=Rece_Len1-2;i++)
{
CheckSum=CheckSum+Rece_Buf_1;
}
if(CheckSum==Rece_Buf_1[Rece_Len1-1])
{
HaveData_S2_RxD=1; //接收到數據標記有效
Rece_Wait_1=0;
S2_COMERRT=0;
}
else
HaveData_S2_RxD=0;
}
發送函數.C
void Uart2_Send(Udat)
{
In_Send_1=0;
In_Rece_1=0;
S2BUF=Udat; //將要發送的數據放入串口數據緩沖區
In_Send_1=1;
while(!(S2CON&0x02)); //等待發送完成
S2CON&=~S2TI; //清零S2TI
}
void Uart2_SendString()
{
int i,j;
unsigned char CheckSum=0;
Rece_1=0;
Send_Buf_1[0]=DEVICENO2;
Send_Buf_1[1]=(Request_rpm+1000)%256;
Send_Buf_1[2]=(Request_rpm+1000)/256;
Send_Buf_1[3]=85;
Send_Buf_1[4]=85;
for(j=0;j<=Send_Len1-2;j++)
{
CheckSum=CheckSum+Send_Buf_1[j];
}
Send_Buf_1[Send_Len1-1]=CheckSum;
for(i=0;i<Send_Len1;i++)
{
Uart2_Send(Send_Buf_1);
}
In_Rece_1=0;
}
|