<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 單片機寫串口上位機時的一點心得

          單片機寫串口上位機時的一點心得

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

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

          本文引用地址:http://www.ex-cimer.com/article/201611/320294.htm

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

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

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

          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)”就是用來進行編碼轉(zhuǎn)換的,在這里我把str1轉(zhuǎn)換為用ASCII編碼的字符,并存進sendbyte()里。sendbyte是Byte型的,就和C語言中char型一樣,占用8個位(本來Byte的中文就是字節(jié)),可能大多數(shù).net愛好者對它接觸的不多,但跟單片機這些硬件打交道,是不可能不接觸Byte的。“Chr(sendbyte(i))”是用來將Byte里的數(shù)據(jù)作為一個數(shù)字,轉(zhuǎn)換為一個字符,在這里就是轉(zhuǎn)換為一個ASCII字符。不知道在這里我說清楚了沒有。如果沒有說清楚,那你也baidu一下吧。



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

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();