使用51微控制器與PC進行串列埠通訊時,怎麼將溫度值(帶兩位小數)傳送到VB編寫的上位機介面上顯示

2021-06-25 02:56:50 字數 1496 閱讀 2625

1樓:匿名使用者

可以啊,你自己定個協議,然後pc解包就可以了,打個比方說

你發aa 00 xx,aa表示幀頭,00表示溫度高位,xx寫溫度高位數值

aa 01 yy,aa表示幀頭,01表示溫度低位,yy寫溫度低位數值當然這只是比較簡單的說法,還有字長啊,檢驗啊等等問題需要考慮

2樓:匿名使用者

使用51微控制器與pc進行串列埠通訊時,需將一個溫度值(帶兩位小數)按通訊協議規範組成的資料幀傳送到pc機,vb則按通訊協議規範組成的資料幀編寫的上位機程式,接收和處理資料幀,並顯示於執行程式介面或控制元件上。

資料幀組成:分幀長、幀首、資料和幀尾等。

資料:帶兩位小數的溫度值傳送需要制定好合適的資料約定,假釋溫度值是在1000攝氏度以內。

可以使將實際溫度值乘100倍取整,以兩位元組的整形變數傳送。

也可以使將實際溫度值乘100倍取整,以5個ascii字元直接傳送。

51微控制器按上述方案取一組成資料幀傳送給上位機串列埠。

vb編寫的上位機串列埠接收程式的資料接收處理**,按下位機採取的資料約定和資料幀格式接收和處理資料,取出資料除以100,獲得所需的帶兩位小數在程式介面顯示。

需要注意的是整形變數方式接收需要按二進位制模式接收,字串方式接收以文字模式接收。

3樓:匿名使用者

不需要分2次傳送,把小數點忽略,一般微控制器裡是二進位制數,你就全部作為一個整數傳送,上位機接收到後再分解加入小數點。你也可以微控制器裡轉化為ascii,就可以有小數點,再傳送。但很麻煩的,不如pc機接收到再處理。

4樓:匿名使用者

你可以移位,轉換成整數

然後再發。

5樓:匿名使用者

你問度本身開始就是數字量,為什麼你要先轉換成小數再發呢?還有,帶兩位小數,你可以先擴大100倍再發啊,位數不夠肯定得分兩次發了,辦法有很多,挑最簡便易行的就好了,只要得到正確結果就ok

51微控制器與vb通過串列埠通訊,微控制器為什麼只能傳送0至255的數?然後怎麼解決(發大於255的數)???

6樓:匿名使用者

傳送大數,你只能多次傳送,一次只能傳送一幀,而串列埠傳送的一幀可能是7、8、9位,由你設定而定。

7樓:

51微控制器是8位的,一次只能處理8位資料,也就是一個位元組,一個位元組只能表示0-255的大小的資料。

8樓:匿名使用者

一個位元組確實只能是0-255,但你可以連續發兩個位元組然後在vb裡面組成一個大於255的數。

比如發257就是0x01,0x01

9樓:匿名使用者

資料型別是char型只能是0-255

發int就會大了

串列埠最大一個資料是8位的,可以用多個位元組表示一個資料啊

10樓:匿名使用者

可以傳送多次,分別發這個數的個十百千萬位。然後用程式組合

51微控制器怎麼通過串列埠傳送小數,51微控制器怎麼通過串列埠傳送小數?

方法多的去了,把數字37.5轉換為字串 37.5 傳送可以,用壓縮bcd碼0x37 0x05傳送也可以,多得是。不一定一定要浮點處理。你自己定一個協議,1次發6個資料,選擇其中的2個作為資料,其他作為驗證碼,另一個微控制器接收到就演算法處理 微控制器不支援浮點運算的,你可以申請兩個變數,把整數和小數...

51微控制器串列埠接收資料十進位制,51微控制器在串列埠問題,我們從串列埠上傳送資料是以16進位制的,在微控制器上接收是10進位制的,

即便是傳送ascii碼形式的字元,也可以傳送數字啊,如1234,mcu將收到4個ascii值,然後在mcu端判斷每個是否 0 9 以確保是數字的ascii碼,如果是就將收到的ascii值減去 0 不就得到它的十進位制值了麼。可以這樣 向微控制器傳送非壓縮bcd碼0x01,0x02,0x03,0x04...

51微控制器,通過串列埠助手向微控制器傳送字串,微控制器將字串逆序傳送回計算機,用C語言程式設計

電腦通過串列埠助手向微控制器傳送字串,微控制器定義一個可以儲存7個字元的陣列,依次儲存接收的字串,當接收到7個字串後,就可以從陣列的最後一個字元向前傳送每一個字元給電腦就可以了。剩下的就是串列埠初始化,串列埠接收和傳送程式了,就比較好寫了。其實,電腦傳送任意的7個字元的字串都可以,微控制器收到後就可...