编写串口通信协议时,发送已经被成功接收,但是一直无法正确接收数据,另一块通信板协议已经是确定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;
}
|