<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 單片機寫(xiě)串口上位機時(shí)的一點(diǎn)心得

單片機寫(xiě)串口上位機時(shí)的一點(diǎn)心得

作者: 時(shí)間:2016-11-23 來(lái)源:網(wǎng)絡(luò ) 收藏
開(kāi)門(mén)見(jiàn)山地說(shuō),要注意的就是.net中無(wú)論String型還是Char型數據,字符均使用Unicode編碼而非ASCII編碼,而單片機通常只支持ASCII編碼。這就導致在電腦與單片機串口通信過(guò)程中,出現無(wú)法被識別或被錯誤識別的情況。

前一陣做星火杯的時(shí)候,由于考慮到一些性能和功能上的需求,我決定用.net做上位機,具體是用vb.net。因為以前接觸過(guò)VB,有點(diǎn)基礎,所以學(xué)起來(lái)應該不回花太多時(shí)間。在編程的時(shí)候邊編邊學(xué),進(jìn)展速度還算可以,最關(guān)鍵的數據庫查詢(xún)和操作的部分一個(gè)晚上也就搞定了。

本文引用地址:http://dyxdggzs.com/article/201611/320294.htm

但最后做好后,與單片機通信時(shí)始終無(wú)法發(fā)送正確的數據,表面上看好像是數據發(fā)送的順序不對,導致我硬件上的12864液晶上顯示的數據雖然不是亂碼,但順序好像有點(diǎn)亂。我使用的是.net提供的SeriaPort控件的SerPort.Write()方法,無(wú)論發(fā)送的是一串string型數據還是將Char型數據一個(gè)一個(gè)的發(fā)送,均出現相同的狀況,時(shí)間一分一秒的過(guò)去,這可是真是急死我了!

好在以前看書(shū)的時(shí)候不經(jīng)意間看到一句話(huà)“.net的字符均以Unicode編碼存儲”,也就是說(shuō),一個(gè)Char型數據占兩個(gè)字節。我想到這后馬上打開(kāi)MSDN,看看有什么解決方法??墒亲詈蟀l(fā)現那里也沒(méi)有什么很明確的答案。最后我又通過(guò)一系列的baidu,終于找到了解決方法,在這里就與大家分享一下。

其關(guān)鍵不在與更改串口通信的某些設置和代碼,而在于給字符串進(jìn)行編碼轉換。一下就是我寫(xiě)的一個(gè)函數:

Public Sub AsciiSend(ByVal SerPort1 As IO.Ports.SerialPort, ByVal str1 As String)
Dim i As Integer
Dim sendbyte As Byte()
sendbyte = System.Text.Encoding.ASCII.GetBytes(str1)
For i = 0 To str1.Length - 1
SerPort1.Write(Chr(sendbyte(i)))
Threading.Thread.Sleep(2)
Next
End Sub

其中“sendbyte = System.Text.Encoding.ASCII.GetBytes(str1)”就是用來(lái)進(jìn)行編碼轉換的,在這里我把str1轉換為用ASCII編碼的字符,并存進(jìn)sendbyte()里。sendbyte是Byte型的,就和C語(yǔ)言中char型一樣,占用8個(gè)位(本來(lái)Byte的中文就是字節),可能大多數.net愛(ài)好者對它接觸的不多,但跟單片機這些硬件打交道,是不可能不接觸Byte的。“Chr(sendbyte(i))”是用來(lái)將Byte里的數據作為一個(gè)數字,轉換為一個(gè)字符,在這里就是轉換為一個(gè)ASCII字符。不知道在這里我說(shuō)清楚了沒(méi)有。如果沒(méi)有說(shuō)清楚,那你也baidu一下吧。



關(guān)鍵詞: 單片機串口上位

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>