日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]在工業(yè)控制中,常需要將單片機(jī)采集到的數(shù)據(jù)傳送給PC機(jī)處理、顯示,并且根據(jù)處理結(jié)果給單片機(jī)發(fā)送控制命令。串行通信雖然傳送速度相對(duì)較慢,但是傳送成本低,對(duì)實(shí)現(xiàn)監(jiān)視和控制,具有足夠的帶寬,并且沒(méi)有過(guò)于復(fù)雜的編

在工業(yè)控制中,常需要將單片機(jī)采集到的數(shù)據(jù)傳送給PC機(jī)處理、顯示,并且根據(jù)處理結(jié)果給單片機(jī)發(fā)送控制命令。串行通信雖然傳送速度相對(duì)較慢,但是傳送成本低,對(duì)實(shí)現(xiàn)監(jiān)視和控制,具有足夠的帶寬,并且沒(méi)有過(guò)于復(fù)雜的編解碼,實(shí)現(xiàn)自定義的協(xié)議也不復(fù)雜,因而在工業(yè)自動(dòng)化、通信和軍事等領(lǐng)域的應(yīng)用十分廣泛。隨著Windows CE嵌入式操作系統(tǒng)在工業(yè)控制中的廣泛應(yīng)用,設(shè)計(jì)和實(shí)現(xiàn)Windows CE下PC與單片機(jī)的串行通信具有重要的意義。

1Windows CE.NET 4.2簡(jiǎn)介

Windows CE 是一個(gè)面向移動(dòng)計(jì)算和嵌入式應(yīng)用的操作系統(tǒng),其突出優(yōu)點(diǎn)是模塊化、可定制性、完備性、實(shí)時(shí)性、通信能力強(qiáng)大和基于Win32應(yīng)用程序編程接口。 Windows CE.N ET 4.2是為嵌入式市場(chǎng)重新設(shè)計(jì)的Windows CE 3.0的后繼產(chǎn)品,為快速建立下一代智能移動(dòng)和小內(nèi)存占用的設(shè)備提供了一個(gè)健壯的實(shí)時(shí)操作系統(tǒng)。他包括創(chuàng)建一個(gè)基于定制設(shè)備的Wi ndows CE所需的一切。?

2Windows CE.NET 4.2下的串行通信技術(shù)

 串行端口在Windows CE.NET 4.2(以下簡(jiǎn)稱(chēng)Windows CE)下屬于流接口設(shè)備,他是串行設(shè)備接口常規(guī)I/O驅(qū)動(dòng)程序的調(diào)用與通信相關(guān)的具體函數(shù)的結(jié)合。串行設(shè)備被視為用于打開(kāi)、關(guān)閉和讀寫(xiě)串行端口的常規(guī)的可安裝的流設(shè)備。Windows CE的串口函數(shù)和Windows的串口函數(shù)基本相同,但有幾點(diǎn)值得注意:

 (1)Windows CE只支持Unicode字符集,在編程時(shí)必須特別注意。

 (2) Windows CE不支持重疊的I/O操作。

2.1打開(kāi)和關(guān)閉串行端口

在所有的流設(shè)備驅(qū)動(dòng)程序中,均使用CreateFile來(lái)打開(kāi)串行端口設(shè)備,如果這個(gè)端口不存在,CreateFile返回 ERROR_FILE_NOT_FOUND。因此,用戶(hù)指定的端口必須是存在并且可用的,而且要遵循Windows CE流接口設(shè)備驅(qū)動(dòng)程序的命名規(guī)則,即COM后接要打開(kāi)的端口號(hào)再緊跟一個(gè)冒號(hào)。
    HANDLE hPort = CreateFile (_T("COM1:"),
    GENERIC_READ|GENERIC_WRITE, 0,NULL,
    OPEN_EXISTING,0,NULL);

關(guān)閉串行端口比較簡(jiǎn)單,調(diào)用CloseHandle函數(shù)就能關(guān)閉一個(gè)打開(kāi)的串行端口。CloseHandle只有一個(gè)參數(shù),即調(diào)用CreateFile函數(shù)打開(kāi)端口時(shí)返回的句柄,方法如下:

CloseHandle (hPort);

2.2讀寫(xiě)串行端口

正如使用CreateFile打開(kāi)串行端口一樣,可以使用ReadFile和WriteFile函數(shù)來(lái)讀寫(xiě)串行端 口。假設(shè)已經(jīng)調(diào)用CreateFile成功地打開(kāi)了串行端口,那么只需調(diào)用ReadFile即可從串行端口讀取數(shù)據(jù):

由于Windows CE不支持重疊的I/O操作,所以第5個(gè)參數(shù)必須設(shè)置為NULL。寫(xiě)串行端口也很 簡(jiǎn)單。調(diào)用過(guò)程如下:

如果從主線(xiàn)程讀、寫(xiě)大量的串行數(shù)據(jù),主線(xiàn)程就會(huì)因?yàn)榈却鄬?duì)較慢的串行讀或串行寫(xiě)操作而阻塞,不能即時(shí)處理其他的消息。因此最好用單獨(dú)的線(xiàn)程來(lái)讀寫(xiě)串行端口。

2.3配置串行端口

讀和寫(xiě)串行端口比較簡(jiǎn)單,但是還需要對(duì)端口配置好正確的波特率、字符長(zhǎng)度、奇偶校驗(yàn)、傳輸模式等,端口才能正確通信??梢哉{(diào)用I/O設(shè)備控制(IOCTL)來(lái)配置串行驅(qū)動(dòng)程序,但此操作需要一些底層的知識(shí),并且要有相應(yīng)的“嵌入工具包”(ETK),而SDK不能實(shí)現(xiàn)該操作。除此之外,還有一種更簡(jiǎn)單的方法,就是調(diào)用GetCommState和SetCommState函數(shù)配置串行端口。由于配置端口的DCB結(jié)構(gòu)內(nèi)容較多,所以使用起來(lái)比較麻煩。錯(cuò)誤地初始化 DCB結(jié)構(gòu)是配置串行端口常見(jiàn)的問(wèn)題。如果一個(gè)串行通信函數(shù)沒(méi)有產(chǎn)生預(yù)期的效果,那么錯(cuò)誤很可能是在DCB結(jié)構(gòu)體的賦值。在與單片機(jī)實(shí)現(xiàn)串行通信的時(shí)候,由于只用到了RS 232串行口的RXD,TXD和GND三個(gè)引腳,而其他的引腳均舍棄不用,所以DCB的成員變量應(yīng)該如下設(shè)置,否則不能正常通信:

2.4設(shè)置超時(shí)值

對(duì)于串行端口來(lái)說(shuō),還必須配置超時(shí)值,否則程序可能陷入到一個(gè)等待來(lái)自串口字符的死循環(huán)。通常,配置超時(shí)值和配置串口類(lèi)似。首先用 GetCommTimeouts函數(shù)獲取當(dāng)前串口的超時(shí)值,然后修改CommTimeouts成員變量的值,最后用SetCommTimeouts設(shè)置新的超時(shí)值。

2.5異步多線(xiàn)程通信

雖然Windows CE不支持重疊I/O,但還是可以使用多個(gè)線(xiàn)程來(lái)實(shí)現(xiàn)同樣的操作。當(dāng)主線(xiàn)程正忙時(shí),需要做的就是運(yùn)行單獨(dú)的線(xiàn)程來(lái)處理同步I/O操作。除了使用用于讀和寫(xiě)的單獨(dú)線(xiàn)程以外,Windows CE還支持Win32的WaitCommEvent函數(shù),該函數(shù)將線(xiàn)程阻塞,直到預(yù)先設(shè)定的串行通信事件中的一個(gè)發(fā)生。該函數(shù)一般和函數(shù) SetCommMask配合起來(lái)使用,SetCommMask設(shè)置WaitCommEvent要等待的串口事件。一般的使用方法是:

先調(diào)用SetCommMask函數(shù)設(shè)定要等待的串口事件,例如串口有數(shù)據(jù)到來(lái)(EV_RXCHAR)事件;然后在讀串口線(xiàn)程中調(diào)用WaitCommEvent阻塞線(xiàn)程,等待EV_RXCHAR事件的發(fā)生。當(dāng)?shù)?/p>

待的EV_RXCHAR事件發(fā)生時(shí),調(diào)用ClearCommError函數(shù)清除通信錯(cuò)誤信息,并且獲取串口的當(dāng)前狀態(tài),主要是獲取串口接收緩沖區(qū)中的字節(jié)數(shù),然后調(diào)用ReadFile函數(shù)將接收緩沖區(qū)的數(shù)據(jù)全部讀出。最后調(diào)用PostMessage函數(shù)將這些數(shù)據(jù)發(fā)送給主線(xiàn)程進(jìn)行處理。

這里存在一個(gè)問(wèn)題:讀串口數(shù)據(jù)操作是在讀串口線(xiàn)程中進(jìn)行的,而處理數(shù)據(jù)操作是在主線(xiàn)程中進(jìn)行的,如果上次接收的數(shù)據(jù)還沒(méi)處理完,下次的數(shù)據(jù)又發(fā)送給了主線(xiàn)程處理,勢(shì)必造成混亂。這個(gè)問(wèn)題的解決,涉及到線(xiàn)程間的同步機(jī)制。

2.6線(xiàn)程間的同步

在Windows CE中采用同步對(duì)象的方法來(lái)協(xié)調(diào)多線(xiàn)程的執(zhí)行。一個(gè)線(xiàn)程監(jiān)視一個(gè)同步對(duì)象,當(dāng)用信號(hào)通知該對(duì)象時(shí),解除正在阻塞的線(xiàn)程并調(diào)度該線(xiàn)程。同步對(duì)象包括事件和互斥體兩種方式。本文只介紹事件方式。

事件對(duì)象是一種有兩種信號(hào)狀態(tài)有信號(hào)和無(wú)信號(hào)的同步對(duì)象,創(chuàng)建的事件對(duì)象可以被不同的線(xiàn)程共享。Windows CE常用等待函數(shù)阻塞線(xiàn)程自身的執(zhí)行,等待其監(jiān)視的對(duì)象產(chǎn)生一定的信號(hào)才停止阻塞,繼續(xù)線(xiàn)程的執(zhí)行。常用的等待函數(shù)有監(jiān)視單個(gè)同步對(duì)象的 WaitForSingleObject,和監(jiān)視多個(gè)同步對(duì)象的WaitForMultipleObjects。在Windows CE串口通信中,用CreateEvent函數(shù)創(chuàng)建事件時(shí),手動(dòng)設(shè)置為有信號(hào)狀態(tài),以便程序在第一次能夠順利地進(jìn)入到WaitCommEvent函數(shù)處等待串口數(shù)據(jù)的到來(lái),等到程序讀取了串口的數(shù)據(jù)并發(fā)送給主線(xiàn)程處理后,調(diào)用ResetEvent函數(shù)將事件狀態(tài)設(shè)置成無(wú)信號(hào)狀態(tài),線(xiàn)程就阻塞在 WaitForSingleObject函數(shù)處,一直等到主線(xiàn)程把接收到的數(shù)據(jù)處理完后,再將事件狀態(tài)用SetEvent函數(shù)設(shè)置成有信號(hào)狀態(tài),釋放 WaitForSingleObject函數(shù)對(duì)線(xiàn)程的阻塞,重新進(jìn)入WaitCommEvent函數(shù)處等待串口數(shù)據(jù)的到來(lái)。循環(huán)接收、處理串口數(shù)據(jù)的流程如圖1所示。

3完整的串行通信程序

頭文件定義: 

4結(jié)語(yǔ)

為了實(shí)現(xiàn)Windows CE下PC與單片機(jī)的串行通信,本串口通信程序采用自定義的通信協(xié)議,在運(yùn)行Windows 2000的PC機(jī)上,用Embedded Visual C++4.0編寫(xiě),在PC機(jī)上編譯、調(diào)試成功后,下載到運(yùn)行Windows CE.NET 4.2的工控機(jī)上運(yùn)行,實(shí)現(xiàn)了和單片機(jī)的正確通信,獲得了很好的效果。本程序也能夠應(yīng)用于其他類(lèi)似的測(cè)控應(yīng)用場(chǎng)合。?

參考文獻(xiàn)?
[1]傅曦,齊宇.嵌入式系統(tǒng)Windows CE開(kāi)發(fā)技巧與實(shí)例[M].北京:化學(xué)工業(yè)出版社,2003
[2]田東風(fēng).Windows CE應(yīng)用程序設(shè)計(jì)[M].北京:機(jī)械工業(yè)出版社,2003
[3][美]Douglas Boling.Microsoft Windows CE程序設(shè)計(jì)[M].北京博彥科技發(fā)展有限公司譯.北京:北京大學(xué)出版社,1999
[4][美]Chris Muench. Windows CE權(quán)威指南[M].精英科技譯.北京:中國(guó)電力出版社,2001.
 

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過(guò)流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問(wèn)題卻十分常見(jiàn),不僅增加了維護(hù)成本,還影響了用戶(hù)體驗(yàn)。要解決這一問(wèn)題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(chē)(EV)作為新能源汽車(chē)的重要代表,正逐漸成為全球汽車(chē)產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車(chē)的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車(chē)的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車(chē) 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車(chē)場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問(wèn)題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周?chē)娮釉O(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來(lái)解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開(kāi)關(guān)電源具有效率高的特性,而且開(kāi)關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開(kāi)關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉