//发送一个char
void SendData_1(unsigned char dat)
{
RS_1 = 1; //使能发送
SBUF = dat; //Send current data
while(!TI); //Wait for the previous data is sent 等待前一个转换结束
TI = 0; //Clear TI flag,清除TI标志位
Delay_us(1000);
RS_1 = 0; //发送完毕置位使能接收
}
//发送一个字符串
void SendString_1(unsigned char *s)
{
while(*s) //Check the end of the string
{
SendData_1(*s++); //Send current char and increment string ptr
}
}
发送完成后不能立刻把RW置为接收状态的,应该发送移位寄存器已经空了后才能。最好再加几百微秒延迟,因为不同的芯片RW转换延迟不一样。
收发切换要加延时, 延时长短和你的波特率有关!
485速度可以做得比232还快。80%原因是楼主的rw控制没做好。
发送完成后不能立刻把rw置为接收状态的,应该发送移位寄存器已经空了后才能。最好再加几百微秒延迟,因为不同的芯片rw转换延迟不一样。
-----------------------------------------------------------------------
这个是有道理的!
485速度可以做得比232还快。80%原因是楼主的rw控制没做好。
发送完成后不能立刻把rw置为接收状态的,应该发送移位寄存器已经空了后才能。最好再加几百微秒延迟,因为不同的芯片rw转换延迟不一样。
-----------------------------------------------------------------------
按照你说的做了,加了一个Delay_us(1000);的延时,485还是发送乱码,我的波特率9600,晶振11.0592MHZ,
不知道是不是这样写:
//发送一个char
void SendData_1(unsigned char dat)
{
RS_1 = 1; //使能发送
SBUF = dat; //Send current data
while(!TI); //Wait for the previous data is sent 等待前一个转换结束
TI = 0; //Clear TI flag,清除TI标志位
Delay_us(1000);
RS_1 = 0; //发送完毕置位使能接收
}
//发送一个字符串
void SendString_1(unsigned char *s)
{
while(*s) //Check the end of the string
{
SendData_1(*s++); //Send current char and increment string ptr
}
}
SendString_1("$03"); //发送本机地址
SendString_1(SendBuff); //发送数据
SendString_1(" "); //发送回车换行
一周热门 更多>