微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PIC16 和 EUSART

如何解决PIC16 和 EUSART

我正在尝试在 PIC16F 上通过 RS485 进行 EUSART 设置。对于 RS485,我有一个外部电路 MAX3430 来转换为 RS485。我能够发送和接收数据。我遇到的问题是,当我在 TX 事务后切换回 RO 时,我注意到最后两个字节没有被发送。看起来,如果我按照下面的方式做(我使用 RB6 引脚作为 RO/TX 之间的开关),它会很快,最后两个字节永远不会被传输。这里的最佳做法是什么?我猜在上次发送 TX 后会增加一些延迟,但我不想为此停止我的整个程序,除非这是一般建议?我也在探索一个计时器作为一种可能的解决方案,只需要一种方法来重置计时器,所以在这种情况下我总是得到相同的延迟,目前正在研究这个替代方案。任何想法表示赞赏。

IO_RB6_SetHigh(); // Enable TX mode
for(uint8_t i = 0; i < sizeof(msg); i++)
{
         EUSART1_Write(msg[i]);
}
IO_RB6_SetLow(); // Enable Read mode

谢谢, 马库斯

解决方法

您正在传输完成前切换到 RX。您需要在调用 IO_RB6_SetLow() 之前等待两个符号时间,或者(更好)检查 USART Tx 缓冲区的状态以查看它是否已完成传输。有一个叫做“发送移位寄存器状态位”的位,在PIC16F877A中叫做TXSTA.TRMT

EUSART1_Write 会在发送下一个字符之前执行此检查,您可能需要查看源代码以了解它是如何完成的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。