问题描述 本人做modbus协议,使用串口5,迪文屏做主机,下发一帧报文发现,报文错误,进行数据发送测试,发现以下三种现象,没有头绪,希望各位大哥帮忙看看。
1.代码1 发数组
u8 testbuff[8]={0x01,0x04,0x00,0x00,0x00,0x03,0xB0,0x0B};
void main(void)
{
u8 len2 = 0;
sys_init();
//系统初始化
uart_init();
u5_send_byte(1);
while(1)
{
sys_delay_ms(1000);//精确延时1秒
u5_send_byte(0x55);
for(len2=0;len2<8;len2++)
{
u5_send_byte(testbuff[len2]);
}
u5_send_byte(0x5A);
}
}
发送报文:55 F2 1E E6 2E 76 A0 20 44 5A
只有头和尾的数据正确,其他数据错误。
2.代码2发间隔数组
u8 testbuff[8]={0x01,0x04,0x00,0x00,0x00,0x03,0xB0,0x0B};
void main(void)
{
u8 len2 = 0;
u8 testbuff[8]={1};
sys_init();//系统初始化
uart_init();
u5_send_byte(1);
while(1)
{
sys_delay_ms(1000);//精确延时1秒
for(len2=0;len2<8;len2++)
{
u5_send_byte(0x55);
u5_send_byte(testbuff[len2]);
} u5_send_byte(0x5A);
}
}发送报文:55 A6 55 2E 55 76 55 20 55 20 55 45 55 BC 55 28 5A 中间间隔发送固定0x55正确,数组其他数据错误。
3.代码3 用函数发送
void test(void)
{
u8 len;
u8 testbuff[8]={0x01,0x04,0x00,0x00,0x00,0x03,0xB0,0x0B};
for(len=0;len<8;len++)
{
u5_send_byte(testbuff[len]);
}
}
void main(void)
{
sys_init();//系统初始化
uart_init();
num = 0;
u5_send_byte(1);
while(1)
{
sys_delay_ms(1000);//精确延时1秒
u5_send_byte(0x55);
test();
u5_send_byte(0x5A);
}
}
发送报文:55 01 04 00 00 00 03 B0 0B 5A
发送正确
|