某某机械有限公司
www.d88-尊龙d88.com | Tel : | E-mail:
关于我们 产品中心 新闻中心 客户案例 在线留言 联系我们
公司新闻 行业新闻 科技创新
怎样用虚拟串行端口使PIC和PC相互通信
发布者:浏览次数:

在本教程中,我们将介绍如何使用虚拟串口让PIC和PC相互通信。

怎样用虚拟串行端口使PIC和PC相互通信

串口示意图

先决条件

由于涵盖了很多主题本教程中,您熟悉一般电子和微控制器非常重要。以下是您在尝试此项目之前应该熟悉的主题的简短列表:

微控制器 - PIC18

PIC UART模块

Visual Studio

FTDI:串行通信仍然有效

过去的计算机具有并行和串行www.d88端口,允许它们与外部硬件通信。与使用起来非常复杂的较新USB端口不同,串行和并行端口是业余爱好者最好的朋友。

然而,技术已经转移并让我们陷入黑暗,没有更多用户友好的端口可以玩FTDI(Future Technology Devices International)是一家成立于1992年的半导体设备公司。自那时起,它们在电子产品界(尤其是业余爱好者)中声名鹊起。因为他们生产的IC可以通过串口桥接USB端口。换句话说,他们的IC将处理USB端,并为用户提供IC上的物理串行端口连接,以及计算机上的虚拟串行端口。

在本教程中,我们将使用VB.net生成一个可以使用虚拟串口与PIC通信的表单程序。

这个项目选择了VB.net,因为根据作者的观点和经验,VB.net是处理串口时更加用户友好。与C ++和C#不同,VB.net更宽容,使代码更容易理解。可以在几行简短的代码中在VB.net中设置串口。相比之下,在C ++或C#中,只需要更多的行来初始化端口。这并不意味着VB.net整体语言更好;它只是一种非常适合业余爱好的PIC-to-PC通信语言。

PIC串行通信

该项目的第一步是配置PIC单片机,以便我们可以使用UART模块。该初始化代码可在setup.h中找到,它将UART模块配置为在异步模式下运行,使用8位,并以10417波特的速度运行。它还配置PIC以在通过UART接收字节时触发中断;这样我们就可以立即处理输入数据以防止数据丢失。

这里的PIC代码也有一些OLED例程,因此我们可以显示当前存储在temp_text数组中的文本。每当触发接收中断时,UART字节都存储在temp_text中,并且strPos会递增。

主循环将不断清除OLED屏幕,打印temp_text数组中的数据,然后运行一个小延迟(这可以提高OLED性能)。主循环还扫描B0输入引脚,如果引脚打开,则PIC会将temp_text中的数据发送到UART,通过串口发送。

VB.net表单应用程序

要使Windows识别FTDI,相应的驱动程序需要安装(这些驱动程序可以在FTDI网站上找到)。

VB.net表单程序分两个阶段创建。第一阶段是设计表单本身,第二阶段是对表单进行编码。

无论您对Microsoft的看法是什么,在制作GUI应用程序时,VS Express都必须是其中之一。最神奇的IDE曾经构思过。您可以直接在表单中拖动所需的对象,定位它们,并更改其外观和属性,而不是逐行编码按钮和元素。但是,您应该已经知道这一点,因为这是一个预先请求!因此,使用新表单,添加您在下面的图像中看到的所有功能,或者只需打开附加的VB.net项目并复制您想要的内容。虽然布局和对象名称不是很重要,但是必须拖入一个串口对象,该对象可以在工具箱中找到。

下一步是将程序编码为向表单中的对象添加功能并使串行端口正常工作。第一个重要功能是获取可用的当前串行端口列表。单击刷新按钮时,将清除包含所有串行端口名称的组合框。然后循环遍历所有可用的串行端口,将每个串行端口名称添加到组合框。

找到串口后,打开时间将在PIC和PC之间建立连接的虚拟端口。单击打开端口按钮时,将串行端口配置为使用波特率10417(必须与PIC波特率相同),不使用奇偶校验位,并使用一个停止位。然后,通过首先将端口名称设置为组合框中的选定项目并打开open()函数来打开串行端口。请注意,此函数会执行try/catch中的所有操作,因为IO可能会出现许多错误。

那么,既然我们已经打开了一个端口,我们需要开始向PIC发送数据。这就是VB.net串口的美妙之处。我们可以使用的第一个函数是WriteLine,它基本上写一个字符串行并用一个新行终止它(通常是回车换行符)。但PIC通常不希望接收字符串,而可能更喜欢字节数据。再次,这在VB.net中是微不足道的,只需使用Write()函数完成,其中第一个参数是要发送的字节数组,第二个参数是从数组开始的位置,最后一个参数是数字要发送的字节数。

表单应用程序中的最后一个重要功能是通过串口接收数据。同样,与许多VB.net函数一样,这是微不足道的,可以使用以下两个函数之一来完成:ReadLine()和Read()。 ReadLine在接收以新行终止的字符串时很有用,但它可能导致程序挂起,因为它会等待直到收到整行。第二个读取函数是Read(),其工作方式与Write相同,其中第一个参数是用于存储数据的数组,第二个参数是从数据开始存储数据的位置,最后一个参数是从缓冲区读取的字节数。

可以使用大多数电路构造技术制作PIC电路,但最好使用临时电路。