freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于組態(tài)的pc機(jī)串口通信程序設(shè)計(jì)(參考版)

2024-11-11 21:18本頁(yè)面
  

【正文】 謹(jǐn)以此文獻(xiàn)給所有關(guān)心和幫助過(guò)我的人們。 最后要深深地感謝父母、親戚和朋友。董 老師為人熱情,做學(xué)問(wèn)嚴(yán)謹(jǐn)求實(shí)、一絲不茍,工作腳踏實(shí)地。 本文的工作也是在董守田 老師的悉心指導(dǎo)下完 成的。他們不但熱心,也很敬業(yè),讓我在這近兩年的學(xué)習(xí)過(guò)程中受益很深 ! 感謝我的導(dǎo)師 董守田 教授,從 2020 年入學(xué)到如今即將畢業(yè) ,我一直在他的精心指導(dǎo)和嚴(yán)格要求下成長(zhǎng)。這樣就可以通過(guò)輸出的列碼和讀取的行碼來(lái)判斷按下的是什么鍵了,由于在建的閉合和斷開(kāi)過(guò)程中有一個(gè)抖動(dòng)期 ,抖動(dòng)時(shí)間長(zhǎng)短和開(kāi)關(guān)的機(jī)械特性有關(guān),一般為 5~ 10ms,為了保證 CPU 對(duì)鍵的閉合做一次且僅一次的處理,在編程時(shí)要有一定的延時(shí),本設(shè)計(jì)設(shè)定了 30ms的延時(shí)來(lái)防止按鍵抖動(dòng)。 鍵盤掃描中,向列掃描碼地址逐列輸出低電平,然后從行碼地址讀回。 ② 顯示模塊:將顯示單元的內(nèi)容在顯示器上動(dòng)態(tài)顯示。程序可分為三個(gè)模塊。本設(shè)計(jì)中采用事件驅(qū)動(dòng)方式,即接收緩沖區(qū)每接受規(guī)定字符數(shù)產(chǎn)生一次 MSCOMM— OnC0Mm 事件,發(fā)送時(shí)設(shè)置不產(chǎn)生該事件。 PC 機(jī)通信的設(shè)計(jì) MSC0MM控件不需要用戶對(duì)通訊底層進(jìn)行操作。 ? 使用串口中斷方式時(shí),開(kāi) CPU和中斷源 —— 寫 IE寄存器。 ? 啟動(dòng)定時(shí)器 1—— 寫 TCON中的 TR1位。 ? 確定定時(shí)器 1的工作方式 —— 寫 TMOD寄存器。 ② 串口初始化 串口初始化主要是設(shè)置產(chǎn)生波特率的定時(shí)器 串行口控制和串口的中斷控制。 ① 串口波特率的設(shè)定 通常使用單片機(jī)的串口 時(shí),選用的晶振比較固定,常用于何微機(jī)通信的波特率也相對(duì)固定。設(shè)計(jì)中 使用 LED數(shù)碼管顯示發(fā)送或接收到數(shù)據(jù);使用 4? 6的矩陣式鍵盤 發(fā)送數(shù)據(jù)。在單片機(jī)方面,使用匯編語(yǔ)言,用中斷方式接收和發(fā)送數(shù)據(jù)。該程序在實(shí)際應(yīng)用中具有良好效果。 AVR單片機(jī)的內(nèi)部又有硬件看門狗電路即看門狗定時(shí)器和看門狗定時(shí)器的控制寄存器 WDTTP相應(yīng)的看門狗指令控制,大大提高了系統(tǒng)的可靠性及安全性。 以上軟、硬件已經(jīng)在體溫 HOLTER 項(xiàng)目開(kāi)發(fā)中加以應(yīng)用,同時(shí)對(duì) AT908515, AT90S2313等其它型號(hào) AVR單片機(jī)也完全通用。 串口通信技術(shù)在體溫檢測(cè)中的應(yīng)用 體溫檢測(cè)的硬件電路構(gòu)成為: AT90S8535 與一線數(shù)字溫度傳感器 DS18B20連接,檢測(cè)體溫?cái)?shù)據(jù) AT90S8535 與上位 PC機(jī)通信采用 RS232 總線,使用 MAXIM公司的 MAX232CPE 芯片,為提高系統(tǒng)可靠性,在 MAX232與 CPU之間還可增加光電禍合 器,更好地與上位機(jī)電氣隔離。實(shí)踐表明:通過(guò)這種處理方式,可使被測(cè)信號(hào)的頻率值誤差在百分之三以內(nèi)。( 4)顯示部分,主要程序代碼如圖二所示根據(jù)需要進(jìn)行圖形及表格顯示。具體執(zhí)行時(shí)間可由 LabVIEW 工具菜中欄下的 advanced 下的 profile來(lái)確定程序運(yùn)行時(shí)間。( 3)延時(shí)因涉及在操作系統(tǒng)的幾層間傳遞信息,加之從主機(jī)發(fā)送命令到單片機(jī),單片機(jī)判斷為正確命令后返回?cái)?shù)據(jù)給主機(jī)是需要一定的時(shí)間的,故這一步進(jìn)行延時(shí)等待。因雙方約定單片機(jī)輸入的命令字為 }一六進(jìn)制的 55 ( ASC Ⅱ碼字符表示為 U),故在程序框圖中輸入的字串若用 ASC Ⅱ碼字符表示為 U,用 HI; X進(jìn)制表示為 55。初始化成功后,退出第一楨,進(jìn)入第二楨。據(jù)實(shí)際需要選擇并打開(kāi) 口,打開(kāi)串口時(shí)根據(jù)雙方協(xié)議設(shè)置波特率、數(shù)據(jù)位、奇偶校驗(yàn)位、停止位、緩沖區(qū)大小等。使用虛擬儀器產(chǎn)品,用戶可以根據(jù)實(shí)際生產(chǎn)需要重新構(gòu)筑新的儀器系統(tǒng)。由于 LabVIEW能夠?yàn)橛脩籼峁┖?jiǎn)明、直觀、易用的圖形編程方式,能夠?qū)⒎爆崗?fù)雜的語(yǔ)言編程簡(jiǎn)化成為以菜中提示方式選擇功能,并且用線條將各種功能連接起來(lái),十分省時(shí)簡(jiǎn)便。在產(chǎn)品生產(chǎn)過(guò)程中,工程 師們也可以利用 LabVIEW 進(jìn)行生產(chǎn)測(cè)試,監(jiān)控各個(gè)產(chǎn)品生產(chǎn)過(guò)程。因此, LabVIEW 通過(guò)降低應(yīng)用系統(tǒng)開(kāi)發(fā)時(shí)間與項(xiàng)目籌建成本幫助科學(xué)家與工程師們提高工作效率。 需要注意一下的是如果正常顯示的字符串并不是 2的整數(shù)倍,那么上圖的轉(zhuǎn)換程序就會(huì)少轉(zhuǎn)換一個(gè)字符,可以用程序動(dòng)態(tài)判斷一下這個(gè)字符串的長(zhǎng)度,如果是奇數(shù)的話在它最左邊補(bǔ)一個(gè) “0” 再使用上面的程序就正常了。 圖 10 正常顯示字符串轉(zhuǎn)換為相同的十六進(jìn)制顯示的字符串 由于十六進(jìn)制數(shù)據(jù)由二個(gè)字節(jié)構(gòu)成,而字符只有一個(gè)字符,所以每二個(gè)字符表示一個(gè)十六進(jìn)制數(shù)據(jù),如果字符多于二個(gè)的話要先進(jìn)行截取, 每二個(gè)字符轉(zhuǎn)換為一個(gè)十六進(jìn)制數(shù)據(jù)。 這個(gè)轉(zhuǎn)換過(guò)程首先將字符串轉(zhuǎn)換為十六進(jìn)制數(shù)值型,然后再通過(guò)將這個(gè)十六進(jìn)制數(shù)值創(chuàng)基于組態(tài)的 PC 機(jī)串口通信程序設(shè)計(jì) 17 建為一個(gè)數(shù)組,最后再使用 “ 字節(jié)數(shù)組至字符串轉(zhuǎn)換 ” 這個(gè)函數(shù)轉(zhuǎn)換為字符串即可,實(shí)際上就是圖 5字符串轉(zhuǎn)換為 U8字節(jié)的反向操作,只不過(guò)是這個(gè)十六進(jìn)制的值初始類型是十六進(jìn)制,要先轉(zhuǎn)換為數(shù)值類型。 由于轉(zhuǎn)換目標(biāo)(十六進(jìn)制顯示的字符串)的數(shù)據(jù)類型是十六進(jìn)制,要想十六進(jìn)制顯示的字符串跟正常顯示的字符串一樣,這個(gè)正常顯示的字符串必須都是十六進(jìn)制的字符,即只能由 09,AF 這十六個(gè)字母中的字母組合而成 。 由于在 LabVIEW 中字符串直接有十六進(jìn)制的顯示方式,所以發(fā)送十六進(jìn)制的數(shù)據(jù)比較方便,比如要發(fā)送十六進(jìn)制數(shù)值類型的 “0xAF” ,那么在 VISA Write 的寫入緩沖區(qū)字符串常量上右鍵 十六進(jìn)制顯示,如圖 1,直接輸入 “A F” 即可,那么下位機(jī)接收到的就是正確的數(shù)據(jù)(十六進(jìn)制數(shù)值類型)了。 使用 LabVIEW 發(fā)送數(shù)據(jù) 還有一個(gè)問(wèn)題是使用 LabVIEW發(fā)送數(shù)據(jù)的問(wèn)題 ① 如果下 位機(jī)接收的是字符串?dāng)?shù)據(jù)類型的話,直接用 VISA寫入對(duì)應(yīng)的字符串就行了,現(xiàn)在的儀器一般都是接收字符串的,所以可以直接使用 VISA發(fā)送而不需要轉(zhuǎn)換。 如果明白這里面的轉(zhuǎn)換關(guān)系,那么要進(jìn)行數(shù)據(jù)轉(zhuǎn)換時(shí)就很容易了,比如上面的例子中,如果LabVIEW中接收到的是字符串 “1234” ,而原本下位機(jī)傳送的是數(shù)值型數(shù)據(jù),只需要將“1234” 字符串轉(zhuǎn)換為對(duì)應(yīng)的 ASCII值就是實(shí)際上下位機(jī)傳上來(lái)的數(shù)據(jù)了,就是 “49 , 50,51, LabVIEW中將字符串轉(zhuǎn)換為對(duì)應(yīng)的 ASCII值的函數(shù)是 “ 字符串至字節(jié)數(shù)組轉(zhuǎn)換 ” 這個(gè)函數(shù) 基于組態(tài)的 PC 機(jī)串口通信程序設(shè)計(jì) 16 圖 9 字符串轉(zhuǎn)換為字節(jié)數(shù)組 上 面說(shuō)的是下位機(jī)發(fā)送的是數(shù)值類型的數(shù)據(jù)的,使用 “ 字符串至字節(jié)數(shù)組轉(zhuǎn)換 ” 這個(gè)函數(shù) . ② 如果是下位面發(fā)送的是字符串類型的數(shù)據(jù),那么 LabVIEW 已經(jīng)直接轉(zhuǎn)換好了。 LabVIEW 從串口接受數(shù)據(jù) ① 假設(shè) LabVIEW 從串口接收到的數(shù)據(jù)為 “1234” (正常顯示模式下),那么這個(gè)數(shù)據(jù)在串口底層的時(shí)候其實(shí)是這樣的二進(jìn)制數(shù)據(jù): 00110001 00110010 00110011 00110100 只是在 LabVIEW 中,這些二進(jìn)制數(shù)據(jù)是以字符串形式顯示出來(lái)的,它們的實(shí)質(zhì)還是二進(jìn)制數(shù)據(jù),這幾個(gè)二進(jìn)制 數(shù)據(jù)轉(zhuǎn)換為十進(jìn)制數(shù)據(jù)分別是 “49 , 50, 51, 52” ,由于字符串都是以 ASCII碼形式保存在計(jì)算機(jī)中的,那么 49, 50, 51, 52這幾個(gè)數(shù)在 ASCII表中就表示是字符串 “1 , 2, 3, 4” 。串口線上傳輸 的也是高低,串口接收到的也是二進(jìn)制數(shù)據(jù),只是到 LabVIEW 后被轉(zhuǎn)換為字符串格式了。 串口數(shù)據(jù)類型的轉(zhuǎn)換 由于 LabVIEW中 VISA Read/Write 這二個(gè)函數(shù)都是只能讀取 /寫入字符串類型的數(shù)據(jù)的,而有時(shí)候需要接收 /寫入的數(shù)據(jù)類型不一定是字符串,導(dǎo)致在剛開(kāi)始接觸的時(shí)候會(huì)有一點(diǎn)困惑。去掉已經(jīng)處理的數(shù)據(jù)可以使用 “ 刪除數(shù)組元素 ” 這個(gè)函數(shù)來(lái)實(shí)現(xiàn)。 另外有可能接收的數(shù)據(jù)長(zhǎng)度比較長(zhǎng),可能就不止包含了一幀的數(shù)據(jù)在里面,所以在程序中也要判斷一下剩下的數(shù)據(jù)還夠不夠一幀的數(shù)據(jù)長(zhǎng)度,如果夠則可以根據(jù)上一次查找的幀頭位置+數(shù)據(jù)幀長(zhǎng)度來(lái)確定下一個(gè)數(shù)據(jù)幀的幀頭位置了,不需要使用搜索的方法。如果是沒(méi)什么特殊的要求的話,這里應(yīng)該也算到一段落了,有一些對(duì)測(cè)試時(shí)間有要求的地方,就會(huì)要求在最短的時(shí)間內(nèi)得到最多的信息 。 基于組態(tài)的 PC 機(jī)串口通信程序設(shè)計(jì) 15 另外幀格式中定義了最后一個(gè)字節(jié)為狀態(tài)標(biāo)志位,所以提取數(shù)據(jù)前還要檢查一下這個(gè)標(biāo)志位是否正常,不正常時(shí)要進(jìn)行相應(yīng)的處理,這里不再詳細(xì)描述。 這是一個(gè)程序的算法問(wèn)題,具體實(shí)現(xiàn)的程序如下圖所示: 圖 7 幀頭查找程序 幀頭查找到以后,再找數(shù)據(jù)就容易了,根據(jù)之前的定義,第 6個(gè)字節(jié)是才是我們要的數(shù)據(jù),所以直接使用索引號(hào)進(jìn)行索引輸出即可。 首先是要看從哪里開(kāi)始才是完整的第一幀,從上面十六進(jìn)制顯示的數(shù)組中我們可以看到,并不是第一個(gè)字節(jié)就是我們需要的幀頭 ,因?yàn)橄挛粰C(jī)是一直處于發(fā)送數(shù)據(jù)的狀態(tài),很可能在串口發(fā)送一幀數(shù)據(jù)的過(guò)程中串口就被初始化或者被清空了一次緩沖區(qū),那么這一幀數(shù)據(jù)的前面部分?jǐn)?shù)據(jù)可能就會(huì)丟失,只留下后面一部分?jǐn)?shù)據(jù) 。 由于 LabVIEW 中接收到的數(shù)據(jù)都是以字符串的形式顯示出來(lái)的,所以需要將字符串轉(zhuǎn)換為基于組態(tài)的 PC 機(jī)串口通信程序設(shè)計(jì) 13 ASCII碼,一般可以直接 使用 “ 轉(zhuǎn)換為 U8數(shù)組 ” 這個(gè)函數(shù),如下圖所示: 圖 5 字符串轉(zhuǎn)換為 U8 字節(jié) 轉(zhuǎn)換為 U8 字節(jié)后,得到的是所傳輸字符的 ASCII 碼,我們就很容易進(jìn)行數(shù)據(jù)幀的判斷了,現(xiàn)收到以下的字符串?dāng)?shù)據(jù): , 圖 6 實(shí)際接收到的字符串 上圖中下半部分顯示的數(shù)組是使用 “ 字符串轉(zhuǎn)換為 U8數(shù)組 ” 的函數(shù)轉(zhuǎn)換之后得到的數(shù)組,一個(gè)是十六進(jìn)制顯示,另一個(gè)為十進(jìn)制顯示。下面以例子來(lái)說(shuō)明數(shù)據(jù)幀格式的通信。 由于 VISA READ 的輸出是字符串,所以一般使用 “ 連接字符串 ” 這個(gè)函數(shù)將它們連接起來(lái),然后接到循環(huán)結(jié)構(gòu)中的移位寄存器中進(jìn)行保存,當(dāng)移位寄存器中的數(shù)據(jù)量達(dá)到一定時(shí)或滿足數(shù)據(jù)處理的條件時(shí),才停止這個(gè)循環(huán)輸出讀取到的數(shù)據(jù)。 由于被動(dòng)方式中串口的緩沖區(qū)中一直會(huì)有數(shù)據(jù)在,為了保持?jǐn)?shù)據(jù)的連續(xù)性,在讀取數(shù)據(jù)時(shí)跟第一種儀器控制類型不一樣。 其中校驗(yàn)字節(jié)是為了檢查數(shù)據(jù)在傳輸過(guò)程中有沒(méi)有出錯(cuò)的,跟串口的校驗(yàn)位要區(qū)分清
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1