这是我的问题,似乎PIC 16F913的所有通信线路都位于同一组引脚上,这很方便,因为我不必为了做通信而牺牲GPIO引脚,但问题是我现在的情况是,如果我在芯片上使用SPI,我该如何向RS232发送信息?
这个问题出现的原因是,我刚买了一个通过SPI通信的CAN总线芯片,我真的很想在RS232上看到数据,所以我可以看到消息。 (我真的对CAN还不太了解,所以谁知道这是否有意义呢。)
以下是我看到的选项,也许其他人有更好的想法,我只是遗漏了。
- 这似乎并不难,应该有效,但假设我不想错过一条消息,如果在写入RS232时写入消息怎么办,我有可能会错过它吗?
2 ..我总是可以使用SPI,但是然后在8条GPIO线上构建我自己的通信总线,再使用GPIO线构建另一台PIC 16F913,然后由于第二块PIC上的RS232线路空闲,我可以只需读取数据并吐出即可。
- 这个是可行的,但现在我们浪费了2个芯片,以及所有GPIO线,
必须有更好的方法。或者有吗?
非常感谢任何帮助。
更新:我想澄清一下,显然一个解决方案是使用一个完全不同的芯片(实际上可能是我最终做的,如果我可以得到18F编程),但是,我对最坏的情况感兴趣场景,我的资源有限,只有913的,上面介绍的方法是用这个芯片做的唯一方法,还是有更好的方法?答案 0 :(得分:4)
你可以做一个SPI总线的软件实现 - 它比UART更容易做,因为时间并不重要,你可以控制它。
大多数CAN芯片都有一些接收缓冲区,所以如果你忙着用UART做某事,那么这些消息将被缓存在CAN芯片内部。但是......你需要确保你能够快速/经常地从CAN芯片中获取信息,这样你就不会丢失一些信息。
您可能不得不为UART Tx进程使用中断 - 这样您就可以在UART上发送数据时接收CAN消息。
如果您只对某些消息感兴趣,那么大多数CAN芯片都有过滤器 - 这样就可以轻松地只接收您感兴趣的消息,通常会显着减少数据包数/秒。
答案 1 :(得分:1)
您可以使用RS232端口的软件实现。例如,来自http://mikroe.com的c编译器带有这样的库。但是将位移到输出引脚应该不会太难,rs232是一个相当简单的协议。
答案 2 :(得分:0)
我强烈建议您使用PIC16F1933更换MCU。
PIC16F913 MCU将在未来几年内淘汰!