0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

454398 来源:工程师吴畏 2019-08-01 16:54 次阅读

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

串口示意图

先决条件

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

微控制器 - PIC18

PIC UART模块

Visual Studio

FTDI:串行通信仍然有效

过去的计算机具有并行和串行端口,允许它们与外部硬件通信。与使用起来非常复杂的较新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电路,但最好使用临时电路。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • PC
    PC
    +关注

    关注

    9

    文章

    1940

    浏览量

    152716
  • PIC
    PIC
    +关注

    关注

    8

    文章

    507

    浏览量

    86452
  • 串行端口
    +关注

    关注

    0

    文章

    30

    浏览量

    11456
收藏 人收藏

    评论

    相关推荐

    求助,是否可以使用PIC监控串行端口

    是否可以使用 PIC 监控串行端口
    发表于 01-22 06:28

    无线通信怎样用电磁波表示1和0

    为什么频率越高,能携带的信息就越多?以数字信号为例,信息就是一串串的1和0,所以先搞清楚怎样用电磁波表示1和0。
    发表于 12-05 14:44 510次阅读
    无线<b class='flag-5'>通信</b>:<b class='flag-5'>怎样用</b>电磁波表示1和0

    怎样用ADAU1761设计DRC的压缩/扩展?

    请问怎样用ADAU1761设计DRC的压缩/扩展。我在SigmaStudio 4.5的模块中只找到RMS。如果ADAU1761设计DRC要怎样
    发表于 11-28 06:41

    怎样用32单片机测电压?

    怎样用32单片机测电压
    发表于 10-31 07:09

    怎么PIC单片机中的USB模块和PC机进行通信

    怎么PIC单片机中的USB模块和PC机进行通信
    发表于 10-18 08:17

    怎样用单片机IO口来控制三极管的开关特性使共阳极的LED点亮?

    怎样用单片机IO口来控制三极管的开关特性使共阳极的LED点亮
    发表于 10-15 06:02

    2个esp8266 WiFi模块之间的相互通信

    本教程是关于2个esp8266 WiFi模块之间的相互通信。我将解释方法和代码两个esp8266模块之间的相互通信。我正在做一个很酷的嵌入式项目需要在两个电机之间进行无线通信,这两个电机将一个部件
    发表于 09-25 08:29

    PLC中怎样用X和Y两个轴走出直线轨迹?

    PLC中怎样用X和Y两个轴走出直线轨迹呢?那么这两个轴需要配合成速度成线性比例,位置和速度应该如何云运算呢?
    发表于 09-12 09:58 280次阅读
    PLC中<b class='flag-5'>怎样用</b>X和Y两个轴走出直线轨迹?

    串行端口收发器的作用

    串行端口收发器是一种用于串行通信的设备,它的作用是将并行数据转换为串行数据,并将串行数据转换为并
    的头像 发表于 08-19 10:51 314次阅读

    串行端口扩展器-带有PIC MCU的额外SPI和UART端口

    电子发烧友网站提供《串行端口扩展器-带有PIC MCU的额外SPI和UART端口.zip》资料免费下载
    发表于 07-12 10:48 1次下载
    <b class='flag-5'>串行</b><b class='flag-5'>端口</b>扩展器-带有<b class='flag-5'>PIC</b> MCU的额外SPI和UART<b class='flag-5'>端口</b>

    使用PC的RS-232串行端口与2线器件通信

    本应用笔记讨论了如何构建廉价的微处理器电路,允许PC使用其串行端口与2线器件通信。除了提供硬件、固件和软件设计以使PC能够与IC
    的头像 发表于 06-09 16:30 466次阅读
    使用<b class='flag-5'>PC</b>的RS-232<b class='flag-5'>串行</b><b class='flag-5'>端口</b>与2线器件<b class='flag-5'>通信</b>

    LPCXpresso55S28上虚拟COM端口上的TX数据损坏是什么原因造成的?

    板的“虚拟 COM 端口”连接到 PC,通过同时提供 CMSIS-DAP 调试接口和虚拟 COM 端口的 USB。 使用
    发表于 06-07 08:30

    怎样用FPGA实现FSK调制解调呢?

    最近想做这方面的,怎样用FPGA实现FSK调制解调?但是我一点头绪都没有,哪位高手帮帮忙,讲解一下什么的
    发表于 05-08 17:34

    怎样用FPGA实现FSK调制解调呢?

    最近想做这方面的,怎样用FPGA实现FSK调制解调?但是我一点头绪都没有,哪位高手帮帮忙,讲解一下什么的
    发表于 04-06 14:29

    请问怎样用一个脉冲使伺服电机旋转呢?

    请问怎样用一个脉冲(信号的一开一关)来从伺服驱动器位置控制上使伺服电机旋转呢?
    发表于 03-30 17:21