下面以一485接口的传感器通信为例:
float Task_Read_485Senor(void)
{
unsigned char RS485[11]={0x01,0x04,0x00,0x00,0x00,0x03,0,0};
unsigned char num=6;
u16 CRC_RES=0,temp;
RS485_Init(9600); //初始化485
Get_CRC(RS485,num,&CRC_RES); //获取命令CRC
RS485[6]=CRC_RES%256; //CRC低位
RS485[7]=CRC_RES/256; //CRC高位
RS485_Send_Data(RS485,8); //发送8个字节读取命令
delay_ms(2000); //延时一定时间,确保接收完成了
RS485_Receive_Data(RS485,&num); //接收结果写入数组
Get_CRC(RS485,num,&CRC_RES); //接收结果CRC校验
if( CRC_RES == 0 ){ //有效数据
//return 读数;
}
else{ //无效
MyPrintf("CRC校验错误\r\n");
return 0xff; //返回失败
}
return 0xff;
}
|