我正在编写代码,使 MC9S08JM60 能够读取 MODBUS RTU 保持寄存器。我正在读取 15 个保持寄存器,得到一个 35 字节的帧。因此,我预期每个字节都会收到 1 个中断,但我收到的中断是帧的第一个字节,而下一个中断是下一帧的第一个字节。所以剩下的 34 字节就丢失了。请提供任何意见。
我附上了我的代码片段。
感谢您的帖子!
是否有关于S08的Modbus RTU文档?
但您遇到的问题可能与未清除 RDRF 有关。
只有在读取 SCI1S1 之后读取 SCI1D 才能清除 RDRF(接收数据寄存器已满)标志。如果在 ISR 中未读取 SCI1D,则中断触发一次,然后接收器停止运行。
请参阅 14.2.4 节MC9S08JM60 系列数据手册中的 SCI 状态寄存器 1 (SCIxS1)。
请确保你的代码能够正确清除标志位。
BR
嗨@carlos_o ,
感谢您的回复。
当程序进入中断服务例程的回调函数时,RDRF 标志将被清除。35 字节的帧通过单个中断传入。即使我使用 35 字节的缓冲区,也无法读取整个帧。
请分享您对此的看法。
BR
每次触发 RDRF 时,SCI 只能接收 1 个字节。因此,您需要触发 35 次中断才能读取您发送的 35 个字节。
您可以参考第14.3.3 节“接收器功能描述”。
SCI模块只有一个SCI数据寄存器(SCIxD),每次可以保存8位数据。
我已经将实现方式改为裸机代码,但仍然只收到 1 个字节。
欢迎提出任何意见。