大家帮忙看一下,这是我的
[mw_shl_code=c,true]void USART1_IRQHandler(void) //?®??1????·??????ò
{
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //????????
{
Rcv_Data=USART_ReceiveData(USART1); //????????????????
HaveMes=1;//±í??????????????
if(Comu_Busy==0)//??????????????????????????
{
TIM_Cmd(TIM3,DISABLE); //??±??¨?±?÷2???¨???®?????????????????¨?±?÷
TIM_SetCounter(TIM3,0); //?????÷????
if((Tim_Out==1)&&(Rcv_Data==Mod_Id))//?????????±??????3.5??×?·??????±??????×?????×????????????????ò????????????
{
Rcv_Complete=0;//±í????????????????
Rcv_Num=0;//??????????????????
Rcv_Num++;//???±????????
}
if((0==Tim_Out)&&(0==Rcv_Complete))//????????????????????????????
{
if(Rcv_Num<10)
{
Rcv_Buffer[Rcv_Num+1]=Rcv_Data;//??????·?????????×é??
Rcv_Num++;//???±????????
}
else
{
Rcv_Complete=1;
Comu_Busy=1;
Rcv_Buffer[0]=Rcv_Num;
*(PointToSendBuf+2)=*(PointToRcvBuf+2);//??????????
ErrorHandle(6,PointToSendBuf);//±í????????×??????¨???ú?è±??????©
Rcv_Num=0;
}
}
Tim_Out=0;
TIM_Cmd(TIM3, ENABLE);//?????¨?±?÷??????????4.5ms???±?¨????°?×?·???±????????©
}
}
if(USART_GetITStatus(USART1,USART_IT_TC)!=RESET) //·???????
{
Send_Data=*(PointToSendBuf+Send_Num);
USART_SendData(USART1,Send_Data);
Send_Num++;
if(Send_Num>(*PointToSendBuf))//·????????ê??
{
Comu_Busy=0;
*PointToSendBuf=0;
Rcv_Num=0;
Send_Num=1;
//????????·???
USART_ITConfig(USART1, USART_IT_TC, DISABLE);//??±?????·???????
}
}
}
#endif
void MessageHandle(u8 *pointer_in,u8 *pointer_out)
{
u16 CalKey;//?????????????é??
u16 RcvKey;//???????????é??
HaveMes=0;//??????????
//???????????????é??
RcvKey=(u16)*(pointer_in+(*pointer_in-1));
RcvKey=RcvKey<<8;
RcvKey=RcvKey|(u16)*(pointer_in+(*pointer_in));
CalKey=CRC16(pointer_in+1,*pointer_in-2);
if(CalKey==RcvKey)
{
switch(*(pointer_in+2))//??????×???????????
{
case 0x01:ReadOutputBit(pointer_in,pointer_out);//??????????
break;
case 0x03:ReadHoldingReg(pointer_in,pointer_out);//??±????????÷
break;
default:
{
*(pointer_out+2)=*(pointer_in+2);//??????????
ErrorHandle(1,pointer_out);//???????í?ó
}
break;
}
}
else
{
Comu_Busy=0;
}
} [/mw_shl_code]
工程代码,编程实现了,为何用modbus调试精灵实现不了呢? |