2

这是我的问题,PIC 16F913 的所有通信线路似乎都位于同一组引脚上,这很方便,因为我不必为了通信而牺牲 GPIO 引脚,但是我遇到的问题现在是如果我在芯片上使用 SPI,我怎样才能将信息发送到 RS232?

出现这个问题的原因是我刚买了一个通过 SPI 通信的 CAN 总线芯片,我很想看到 RS232 上的数据,所以我可以看到消息。(我真的对 CAN 了解不多,所以谁知道这是否有意义)。

这是我看到的选项,也许其他人有更好的想法,而我只是错过了。

  1. 不知何故设置了一个时间方案,每次我获取数据时都会在 SPI 和 RS232 之间切换,

-- 这似乎并不难,应该可以工作,但是假设我不想错过一条消息,如果我在写 RS232 时写了一条消息,我会不会错过它?

2 ..我总是可以使用 SPI,但是然后通过 8 条 GPIO 线构建我自己的通信总线,到另一个 PIC 16F913,只使用 GPIO 线,然后由于 RS232 线在第二个 PIC 上是空闲的,我可以简单地读取数据并吐出。

-- 这个是可行的,但现在我们浪费了 2 个芯片和所有的 GPIO 线,

一定有更好的方法。或者有吗?

任何帮助是极大的赞赏。

更新:我想澄清一下,显然一种解决方案是使用完全不同的芯片(如果我可以对 18F 进行编程,这实际上可能是我最终要做的),但是,我对最坏的情况感兴趣,在我资源有限,只有一些913,上面描述的方法是用这个芯片做的唯一方法,还是有更好的方法?

4

3 回答 3

4

您可以对 SPI 总线进行软件实现 - 它比 UART 更容易实现,因为时序并不重要,您可以控制它。

大多数 CAN 芯片都有一些接收缓冲区,因此如果您正忙于使用 UART 做一些事情,那么消息将被缓冲在 CAN 芯片内。但是......你需要确保你可以足够快/经常地从 CAN 芯片中获取信息,这样你就不会丢失一些信息。

您可能必须对 UART Tx 进程使用中断 - 这样您就可以在 UART 上发送数据时接收 CAN 消息。

如果您只对某些消息感兴趣,大多数 CAN 芯片都有过滤器 - 这使得只接收您感兴趣的消息变得容易,通常会显着降低每秒数据包的数量。

于 2010-07-19T07:28:20.540 回答
1

您可以使用 RS232 端口的软件实现。例如,来自http://mikroe.com的 c 编译器就带有这样的库。但是将位转移到输出引脚应该不会太难,rs232是一个相当简单的协议。

于 2010-07-19T07:18:38.850 回答
1

我强烈建议您使用 PIC16F1933 更改 MCU。

  1. 它较新
  2. 这更便宜
  3. 带有 EUART 和 MSSP 模块。
  4. MCU 架构被改进。

PIC16F913 MCU 将在未来几年内过时!

于 2010-07-19T13:39:51.403 回答