微控制器串列埠收發字元資料的型別

2021-08-20 14:32:59 字數 837 閱讀 9473

今天在用51微控制器進行串列埠收發資料的時候遇到了這樣乙個問題,上位機給微控制器的字元資料是什麼型別的,微控制器又是怎樣儲存的?

串列埠中斷如下

/* uart中斷服務函式 */

void interruptuart() interrupt 4

else //位元組傳送完畢

}

問題1:

微控制器將接收到的資料放到sbuf中儲存,但這個sbuf只能儲存8位資料(1個位元組),那麼就有了第乙個問題:如何接收多位資料?

答:我是定義了乙個table1陣列,將每個接收到的8位資料放到陣列裡,然後指標自加1,在另乙個中斷裡判斷一共接收到了幾個資料(j起自加和計數作用),然後延時1s後,將接收到的每個元素輸出(1s足夠接收到幾個位元組的資料了)。

問題2那麼table1裡的資料是什麼型別的呢?

答:它是乙個二進位制資料,是接收到位元組的二進位制ascii碼,如果再用sbuf傳送出去,也是傳送的二進位制資料,不過上位機接收的時候自動轉換成位元組了。

問題三如何將接收到的二進位制ascii碼進行十進位制運算呢?

答:其實二進位制與十進位制計算方法、過程、結果都一樣。但是用字元型別傳給微控制器的數字的二進位制與對應十進位制的二進位制是不一樣的,比如說上位機字元格式傳送過來乙個資料2,微控制器接收到的二進位制ascii碼0011 0010,而十進位制的2對應的二進位制是 0000 0010,所以不能直接對字元格式的數字進行運算,所以我用了

table1[j] = table1[j]&0x0f;
將高四位都清0,與十進位制的2對應起來,然後就可以進行運算了。(但是上位機傳送乙個大寫字母r與字元2是一樣的,因為r的ascii碼是 0000 0010)

兩個微控制器串列埠收發資料

使用兩個微控制器開發版,串列埠3.0與3.1交叉互接,兩個開發版分別燒寫串列埠接收,串列埠傳送的微控制器程式觀察p0埠輸出值的變化 接收串列埠的微控制器程式 include define uchar unsigned char define uint unsigned int uchar recie...

微控制器(一)51微控制器串列埠接收 傳送通訊

這次做課設整體不太順利,因為學校的開發板真的是 一言難盡 這裡就選擇性的分享一點 方面,有據可循,不那麼玄學的問題。只要開了中斷,一點要寫中斷函式,可以是 void timer0 interrupt 4 可以是這樣,先放乙個空函式,不會有什麼玄學問題 不信,嘿嘿?你試試 這是個串列埠收發暫存器,教科...

微控制器串列埠配置

串列埠引數配置 usart initstructure.usart baudrate 115200 設定波特率為115200 usart initstructure.usart wordlength usart wordlength 8b 設定資料位為8位 usart initstructure.u...