PIC单片机做RS-485通讯时遇到的问题,急请高手指教!!

andycai88 2009-01-17 02:26:51
我以前用过MEGA64和51做RS485通讯效果都很好,但是这次用PIC16F877A就遇到比较麻烦的问题,请各位高手指点!!

应用要求:一个主控板,通过轮询方式访问多个子节点。轮询时间间隔是0.5s

硬件:MAX487,用光耦TLP521隔离,单片机是PIC16F877A

问题:主控板连续发送数据时(不切换到接收状态,只是发送状态),子节点接收正常。但是,当主控板发送完数据,从发送状态切换到接收状态时,子节点的接收就报错,而且数据接收失败!!

曾试过的方法:读取TXIF和TRMT标志位判断发送完,然后切换到接收状态;
读取TXIF和TRMT标志位判断发送完,再加延时,然后再切换到接收状态。但是无论延时有多长,还是出现同样的问题。

代码如下:用C写的
RCIE=0; //禁止接收中断
RD6=0; //允许发送(RD6为MAX487的控制引脚:0为发送;1为接收)
for(i=0;i<10;i++);

TXREG=TXdata;

TXEN=1; //使能发送

for(i=0;i<250;i++);
TXEN=0; //禁止发送

while(TXEN==1||TRMT==0)
{;}

RCIE=1;
RD6=1; //问题就在这命令,如果不执行这命令,子节点的接收完全正常
//如果执行这命令,子节点的接收就报错,而且接收不到数据

也试过在中断中发送
if(TXIE&&TXIF)
{
char i;

TXREG=TXdata;
for(i=0;i<10;i++);

TXIE=0;

while(TRMT==0&&TXIF==0)
{;}
RCIE=1;
RD6=1;
}

请问各位大侠有什么好建议和好方法呢?
请各位大侠指点!!小弟急!!先谢过各位的仗义!!


...全文
707 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wgt860527 2009-10-28
  • 打赏
  • 举报
回复
不懂,顶一个!
lgy198612 2009-10-28
  • 打赏
  • 举报
回复
485简单,但你程序有点问题,后面的几句就不妥
andycai88 2009-01-21
  • 打赏
  • 举报
回复
嗯,先别沉啊……
问题还没能解决……
请问还有没大侠说说啊?
请问有做过485的吗?
急……
zyzhang365 2009-01-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zyzhang365 的回复:]
没用过,随便说说。

好像是判断一个字节发送完成有问题。你可以看看MCU的datasheet,
-----
for(i=0;i <250;i++);
TXEN=0; //禁止发送

while(TXEN==1||TRMT==0)
{;}
-----
这样能确保一个字节发送结束了吗?

另外,接收的MCU配置是否正确。
[/Quote]

TXEN=1; // Enable transmitter
TXREG=TXdata; // Write data to the buffer
while(TRMT==0) // Spin while transmitting
{;}

TXEN=0; // Disable transmitter

for(i=0;i <250;i++); // Idle for a while
RD6=1; // Switch the mode to RX

RCIE=1; // Enable Rx Interrupt


zyzhang365 2009-01-20
  • 打赏
  • 举报
回复
没用过,随便说说。

好像是判断一个字节发送完成有问题。你可以看看MCU的datasheet,
-----
for(i=0;i <250;i++);
TXEN=0; //禁止发送

while(TXEN==1||TRMT==0)
{;}
-----

这样能确保一个字节发送结束了吗?

另外,接收的MCU配置是否正确。
andycai88 2009-01-20
  • 打赏
  • 举报
回复
先谢谢大侠回复!!
这段代码是主控板上的
先往子节点发送命令,然后切换到接收状态,准备接收子节点的数据。
但是一旦切换就会出现问题
dlwlmlj 2009-01-20
  • 打赏
  • 举报
回复
你单片机到底是主的还是从的

RD6=1; //问题就在这命令,如果不执行这命令,子节点的接收完全正常
//如果执行这命令,子节点的接收就报错,而且接收不到数据
andycai88 2009-01-20
  • 打赏
  • 举报
回复
怎么没人回啊……都沉了……
请各位大侠帮帮忙吧!!
andycai88 2009-01-20
  • 打赏
  • 举报
回复
另外,接收的MCU配置是否正确。

如果主控板不切换状态,子节点的接收是没问题的,子节点的配置应该不会有问题吧

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧