与Pic 16F913进行通信

时间:2010-07-18 16:28:26

标签: microcontroller pic microchip

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

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

以下是我看到的选项,也许其他人有更好的想法,我只是遗漏了。

  1. 以某种方式设置一个时间方案,每次我获取数据时都会在SPI和RS232之间切换,
  2. - 这似乎并不难,应该有效,但假设我不想错过一条消息,如果在写入RS232时写入消息怎么办,我有可能会错过它吗?

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

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

    必须有更好的方法。或者有吗?

    非常感谢任何帮助。

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

3 个答案:

答案 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。

  1. 更新
  2. 是削片机
  3. 使用EUART和MSSP模块。
  4. MCU架构不受影响。
  5. PIC16F913 MCU将在未来几年内淘汰!