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