关于485发送延时问题
//485数据发送void send_data(unsigned char addr,unsigned char type,unsigned char len ,unsigned char *buf)//发送程序单片机---PC
{
unsigned int i;
unsigned char checksum =0;
PORTC.5=1;
putchar(0x68); //发送头
delay_ms(1);
checksum=checksum+0x68;
//发送地址
putchar(addr);
delay_ms(1);
checksum=checksum+addr;
putchar(0x68);
delay_ms(1);
checksum=checksum+0x68;
putchar(type); //命令
delay_ms(1);
checksum=checksum+type;
putchar((len+2));//长度,加2是表示2个数据标示
delay_ms(1);
checksum=checksum+(len+2);
putchar(rx_buffer);//标识
delay_ms(1);
checksum=checksum+rx_buffer;
putchar(rx_buffer);
delay_ms(1);
checksum=checksum+rx_buffer;
for(i=0;i<len;i++)
{
putchar(*buf);
delay_ms(1);
checksum=checksum+*buf;
buf++;
}
putchar(checksum);
delay_ms(1);
putchar(0x16);
delay_ms(2);
PORTC.5=0;
}
为什么每次发生一个字节都要延时?PC才收到数据? 执行putchar(0x16);后数据不是立即发送完毕的,要一定的间隔,在这个间隔中,如果没等数据发送完整,就改变485的RS位,数据会发送不全。
看你什么芯片了,有的芯片串口有FIFO缓冲,所以改变RS位只能使用发送完成中断。 波特率越小,延时时间越长,具体时间要大于一个字节发送时间,不然会缺码 你不会用中断方式发送吗? 保证串口真正发送完成之后才能动作。 HadesHe 发表于 2013-4-20 00:15 static/image/common/back.gif
你不会用中断方式发送吗?
这就是中断发送啊。
页:
[1]