在本教程中,我們將介紹如何使用虛擬串口讓PIC和PC相互通信。
串口示意圖
先決條件
由于涵蓋了很多主題本教程中,您熟悉一般電子和微控制器非常重要。以下是您在嘗試此項目之前應該熟悉的主題的簡短列表:
微控制器 - PIC18
PIC UART模塊
Visual Studio
FTDI:串行通信仍然有效
過去的計算機具有并行和串行端口,允許它們與外部硬件通信。與使用起來非常復雜的較新USB端口不同,串行和并行端口是業(yè)余愛好者最好的朋友。
然而,技術(shù)已經(jīng)轉(zhuǎn)移并讓我們陷入黑暗,沒有更多用戶友好的端口可以玩FTDI(Future Technology Devices International)是一家成立于1992年的半導體設(shè)備公司。自那時起,它們在電子產(chǎn)品界(尤其是業(yè)余愛好者)中聲名鵲起。因為他們生產(chǎn)的IC可以通過串口橋接USB端口。換句話說,他們的IC將處理USB端,并為用戶提供IC上的物理串行端口連接,以及計算機上的虛擬串行端口。
在本教程中,我們將使用VB.net生成一個可以使用虛擬串口與PIC通信的表單程序。
這個項目選擇了VB.net,因為根據(jù)作者的觀點和經(jīng)驗,VB.net是處理串口時更加用戶友好。與C ++和C#不同,VB.net更寬容,使代碼更容易理解。可以在幾行簡短的代碼中在VB.net中設(shè)置串口。相比之下,在C ++或C#中,只需要更多的行來初始化端口。這并不意味著VB.net整體語言更好;它只是一種非常適合業(yè)余愛好的PIC-to-PC通信語言。
PIC串行通信
該項目的第一步是配置PIC單片機,以便我們可以使用UART模塊。該初始化代碼可在setup.h中找到,它將UART模塊配置為在異步模式下運行,使用8位,并以10417波特的速度運行。它還配置PIC以在通過UART接收字節(jié)時觸發(fā)中斷;這樣我們就可以立即處理輸入數(shù)據(jù)以防止數(shù)據(jù)丟失。
這里的PIC代碼也有一些OLED例程,因此我們可以顯示當前存儲在temp_text數(shù)組中的文本。每當觸發(fā)接收中斷時,UART字節(jié)都存儲在temp_text中,并且strPos會遞增。
主循環(huán)將不斷清除OLED屏幕,打印temp_text數(shù)組中的數(shù)據(jù),然后運行一個小延遲(這可以提高OLED性能)。主循環(huán)還掃描B0輸入引腳,如果引腳打開,則PIC會將temp_text中的數(shù)據(jù)發(fā)送到UART,通過串口發(fā)送。
VB.net表單應用程序
要使Windows識別FTDI,相應的驅(qū)動程序需要安裝(這些驅(qū)動程序可以在FTDI網(wǎng)站上找到)。
VB.net表單程序分兩個階段創(chuàng)建。第一階段是設(shè)計表單本身,第二階段是對表單進行編碼。
無論您對Microsoft的看法是什么,在制作GUI應用程序時,VS Express都必須是其中之一。最神奇的IDE曾經(jīng)構(gòu)思過。您可以直接在表單中拖動所需的對象,定位它們,并更改其外觀和屬性,而不是逐行編碼按鈕和元素。但是,您應該已經(jīng)知道這一點,因為這是一個預先請求!因此,使用新表單,添加您在下面的圖像中看到的所有功能,或者只需打開附加的VB.net項目并復制您想要的內(nèi)容。雖然布局和對象名稱不是很重要,但是必須拖入一個串口對象,該對象可以在工具箱中找到。
下一步是將程序編碼為向表單中的對象添加功能并使串行端口正常工作。第一個重要功能是獲取可用的當前串行端口列表。單擊刷新按鈕時,將清除包含所有串行端口名稱的組合框。然后循環(huán)遍歷所有可用的串行端口,將每個串行端口名稱添加到組合框。
找到串口后,打開時間將在PIC和PC之間建立連接的虛擬端口。單擊打開端口按鈕時,將串行端口配置為使用波特率10417(必須與PIC波特率相同),不使用奇偶校驗位,并使用一個停止位。然后,通過首先將端口名稱設(shè)置為組合框中的選定項目并打開open()函數(shù)來打開串行端口。請注意,此函數(shù)會執(zhí)行try/catch中的所有操作,因為IO可能會出現(xiàn)許多錯誤。
那么,既然我們已經(jīng)打開了一個端口,我們需要開始向PIC發(fā)送數(shù)據(jù)。這就是VB.net串口的美妙之處。我們可以使用的第一個函數(shù)是WriteLine,它基本上寫一個字符串行并用一個新行終止它(通常是回車換行符)。但PIC通常不希望接收字符串,而可能更喜歡字節(jié)數(shù)據(jù)。再次,這在VB.net中是微不足道的,只需使用Write()函數(shù)完成,其中第一個參數(shù)是要發(fā)送的字節(jié)數(shù)組,第二個參數(shù)是從數(shù)組開始的位置,最后一個參數(shù)是數(shù)字要發(fā)送的字節(jié)數(shù)。
表單應用程序中的最后一個重要功能是通過串口接收數(shù)據(jù)。同樣,與許多VB.net函數(shù)一樣,這是微不足道的,可以使用以下兩個函數(shù)之一來完成:ReadLine()和Read()。 ReadLine在接收以新行終止的字符串時很有用,但它可能導致程序掛起,因為它會等待直到收到整行。第二個讀取函數(shù)是Read(),其工作方式與Write相同,其中第一個參數(shù)是用于存儲數(shù)據(jù)的數(shù)組,第二個參數(shù)是從數(shù)據(jù)開始存儲數(shù)據(jù)的位置,最后一個參數(shù)是從緩沖區(qū)讀取的字節(jié)數(shù)。
可以使用大多數(shù)電路構(gòu)造技術(shù)制作PIC電路,但最好使用臨時電路。
-
PC
+關(guān)注
關(guān)注
9文章
2107瀏覽量
154759 -
PIC
+關(guān)注
關(guān)注
8文章
507瀏覽量
87872 -
串行端口
+關(guān)注
關(guān)注
0文章
34瀏覽量
11725
發(fā)布評論請先 登錄
相關(guān)推薦
串行接口的工作方式有幾種,串行接口的RXD1和TXD1是什么端口
如何實現(xiàn)51單片機與PC機的串行通信
![](https://file1.elecfans.com/web2/M00/00/53/wKgaomaoq0CAPG7HAAUXQT5FCH0622.png)
EN8F1823E完全替代PIC16F883,PIC16F1883,PIC16F1936,PIC16F1937
如何讓兩個ESP8266可以連續(xù)地相互通信?
TUSB2036通用串行總線的2或3端口集線器數(shù)據(jù)表
![TUSB2036通<b class='flag-5'>用串行</b>總線的2或3<b class='flag-5'>端口</b>集線器數(shù)據(jù)表](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
ESP32 WIFI SOFTAP模式可以有多個STA連接到它并讓STA相互通信嗎?
兩塊esp32-c3如何實現(xiàn)藍牙相互通信?
使用USBUART組件與主機PC通信,如果在串行端口打開的情況下終止固件,主機端為什么會報錯?
stm32f100怎樣用重映射功能?
在嵌入式設(shè)計中擴展串行端口的入門知識
![在嵌入式設(shè)計中擴展<b class='flag-5'>串行</b><b class='flag-5'>端口</b>的入門知識](https://file1.elecfans.com/web2/M00/D2/45/wKgaomYjGnmAQF-3AADqKe7Rp-Y977.png)
STM32 USB虛擬串口正常通信但PC提示無法識別的原因?
STM32F412G-DISCO怎樣用MX生成fatfs的代碼?
常見串行通信協(xié)議 串行通信和并行通信的區(qū)別
![常見<b class='flag-5'>串行</b><b class='flag-5'>通信</b>協(xié)議 <b class='flag-5'>串行</b><b class='flag-5'>通信</b>和并行<b class='flag-5'>通信</b>的區(qū)別](https://file1.elecfans.com/web2/M00/C3/A2/wKgaomXm2n2AUl2SAAAZG18rxOE183.png)
評論