久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2386|回復: 19
打印 上一主題 下一主題
收起左側

單片機串口收發數據進制轉換問題

  [復制鏈接]
跳轉到指定樓層
樓主
大家好,摸索很久還是沒弄清楚,請教大家問題,請給予指點。謝謝大家

51單片機雙機通信,

問題一:我想發送250這個十進制數,接收端接收的是否是經過轉換的16進制數,如果我要在接收端存儲或者比較這個數大小,是否要用額外的函數把接收的16進制數轉成10進制數。

問題二:我發送的一個10進制數,接收端能否直接接收這個10進制數;
比如下面的語句是否可以正常執行。
發送端
set1=250;
SBUF=set1;

接收端
dat=SBUF;
if(dat<250){
......
}else
{
.....
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1109793 發表于 2024-5-8 15:00 | 只看該作者
發的啥收的就是啥,無論多少進制,在傳輸中都一樣,是否轉換只是你要顯示的時候才有需要。比如你要在數碼管上顯示就要轉換BCD碼送給顯示芯片或者要再查詢出對應的段碼信息送給比如595或者164這樣的。或者直接送到某個端口。
回復

使用道具 舉報

板凳
ID:192020 發表于 2024-5-8 15:17 | 只看該作者
傳輸沒有進制說法,250換成16進制是0xFA,那么以下發送函數
(1)set1=250;SBUF=set1;(2)set1=0xFA;SBUF=set1;單片機處理過程都是一樣的。
回復

使用道具 舉報

地板
ID:705846 發表于 2024-5-8 15:34 | 只看該作者
qq475878026 發表于 2024-5-8 15:17
傳輸沒有進制說法,250換成16進制是0xFA,那么以下發送函數
(1)set1=250;SBUF=set1;(2)set1=0xFA;SBUF= ...

你好,謝謝你的答復,進一步請教,
比如發送端發送的是250,接收端接收的是0xFA, 接收端要把接收到的0xFA顯示到數碼管為250,這之間是怎么轉換的。
回復

使用道具 舉報

5#
ID:161164 發表于 2024-5-8 15:48 | 只看該作者
samxon 發表于 2024-5-8 15:34
你好,謝謝你的答復,進一步請教,
比如發送端發送的是250,接收端接收的是0xFA, 接收端要把接收到的0xF ...

按位取值

RecBuff = SBUF;
DispBuff[0] = RecBuff /100%10;
DispBuff[1] = RecBuff /10%10;
DispBuff[2] = RecBuff %10;
回復

使用道具 舉報

6#
ID:705846 發表于 2024-5-8 16:02 | 只看該作者
lkc8210 發表于 2024-5-8 15:48
按位取值

RecBuff = SBUF;

謝謝你,我沒有問明白。 雖然發送端發送的是十進制250,但接收端接收的是一個16進制數。也就是0xFA, 我要把0xFA在數碼管上顯示250, 是否需要轉換,如果需要,是如何轉換的。
回復

使用道具 舉報

7#
ID:192020 發表于 2024-5-8 16:07 | 只看該作者
samxon 發表于 2024-5-8 15:34
你好,謝謝你的答復,進一步請教,
比如發送端發送的是250,接收端接收的是0xFA, 接收端要把接收到的0xF ...

就是按五樓的方法,你不用糾結接收端收到的是0xFA還是250,因為接收端接收的就是一堆0和1。數碼管需要顯示十進制,那就把set1看成十進制,然后按五樓方法把百位十位個位分開來一個個顯示。
回復

使用道具 舉報

8#
ID:106977 發表于 2024-5-8 16:26 | 只看該作者
串口通訊實際也是需要協議的,自己規定的協議。不然你發送幾個字節,另一臺接收設備怎么解讀這幾個字節?
回復

使用道具 舉報

9#
ID:192020 發表于 2024-5-8 16:31 | 只看該作者
samxon 發表于 2024-5-8 16:02
謝謝你,我沒有問明白。 雖然發送端發送的是十進制250,但接收端接收的是一個16進制數。也就是0xFA, 我要 ...

就比如set1這個變量,你可以說它是0xFA,也可以說它是250都沒錯,但它只是存在RAM里的一個數據,按11111010排列罷了
回復

使用道具 舉報

10#
ID:705846 發表于 2024-5-8 16:49 | 只看該作者
qq475878026 發表于 2024-5-8 16:31
就比如set1這個變量,你可以說它是0xFA,也可以說它是250都沒錯,但它只是存在RAM里的一個數據,按111110 ...

謝謝大家耐心指導,就是糾結進制轉換問題。我先寫個代碼試試看
回復

使用道具 舉報

11#
ID:1109793 發表于 2024-5-8 17:06 | 只看該作者
samxon 發表于 2024-5-8 16:02
謝謝你,我沒有問明白。 雖然發送端發送的是十進制250,但接收端接收的是一個16進制數。也就是0xFA, 我要 ...

接收端顯示和是否傳輸沒關系,5樓的方法可以,實際上/100后不需要%10,因為一共char除100剩下的最多就是2。這樣dispbuff[]中的三個數就是你要送到例如TM1650這種芯片的數據了。又或者別的比如查詢到段碼輸出到595上面。這要看你的顯示電路架構了。
回復

使用道具 舉報

12#
ID:1109793 發表于 2024-5-8 17:21 | 只看該作者
xiaobendan001 發表于 2024-5-8 17:06
接收端顯示和是否傳輸沒關系,5樓的方法可以,實際上/100后不需要%10,因為一共char除100剩下的最多就是2 ...

好像不對,1650也一樣要查詢段碼的,不好意思,用的少,忘記了。
回復

使用道具 舉報

13#
ID:401564 發表于 2024-5-8 17:58 | 只看該作者
在你串口程序正確的前提下:
1,串口接收到數據,250就是250,0xFA就是0xFA,沒有進制這個說法的
2,數碼管顯示是要查詢段碼再進行顯示的,這個單片機的基礎知識
3,你要先寫好一個數碼管顯示程序,調試的時候先直接顯示一個變量的值,不要管什么串口之類的,只管顯示,先保證顯示程序是OK的
4,代碼先從最小的塊寫起,最后堆積起來就是一個完整的程序了
回復

使用道具 舉報

14#
ID:705846 發表于 2024-5-8 18:01 | 只看該作者
謝謝樓上的所有大師們,是我想多的,確實是5樓方法正確。還是不要停留在想上面,要試驗實踐。現在可以正常顯示,看起來多機通信也沒有想的那么復雜。都可以同步顯示。

                SendByte(temp);
                delay(1000);
                temp++;
                if(temp>250) temp=1;                       

                num[0] = temp /100%10;
                num[1] = temp /10%10;
                num[2] = temp %10;               
               
               
                Write_DATA(0,tab[num[0]]);
                Write_DATA(2,tab[num[1]]);
                Write_DATA(4,tab[num[2]]);

回復

使用道具 舉報

15#
ID:883242 發表于 2024-5-8 18:39 | 只看該作者
samxon 發表于 2024-5-8 16:02
謝謝你,我沒有問明白。 雖然發送端發送的是十進制250,但接收端接收的是一個16進制數。也就是0xFA, 我要 ...

不要糾結進制問題,你寫的250到了單片機那里也不是十進制,一律是二進制。
回復

使用道具 舉報

16#
ID:1010435 發表于 2024-5-8 21:29 | 只看該作者
C語言中250就是十進制的250,16進制要寫成0xfa,0x就是16進制的標識,250+0xfa=500=0x01f4
回復

使用道具 舉報

17#
ID:458247 發表于 2024-5-9 08:46 | 只看該作者
samxon 發表于 2024-5-8 18:01
謝謝樓上的所有大師們,是我想多的,確實是5樓方法正確。還是不要停留在想上面,要試驗實踐。現在可以正常 ...

多機通信主要難點在解決從機沖突問題,比如我想從機a顯示200,從機b顯示130,你就要定義一個通信協議,每個從機都要有個id才能實現了,更復雜的還有很多,比如如何校驗通信數據,如何加密通信數據等
回復

使用道具 舉報

18#
ID:705846 發表于 2024-5-9 17:31 來自手機 | 只看該作者
主機發,所有從機一起收就可以。暫時沒用到這么復雜
回復

使用道具 舉報

19#
ID:343102 發表于 2024-5-9 20:07 | 只看該作者
5樓是高手,串口用ASCII碼傳送數據、字符。
回復

使用道具 舉報

20#
ID:1110945 發表于 2024-5-9 20:11 | 只看該作者
samxon 發表于 2024-5-8 16:02
謝謝你,我沒有問明白。 雖然發送端發送的是十進制250,但接收端接收的是一個16進制數。也就是0xFA, 我要 ...

雖然你寫的是十進制250,但發送端發送的不是十進制,而是0xfa,
接收端接收的是0xfa代表能正確接收,單片機可以存儲或者比較這個數的大小。
在單片機里面不需要轉成10進制數。
單片機不能理解你的“10進制數”,只有輸出到顯示設備時才要轉換成“10進制”
的格式。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 午夜精品久久久久久久 | 91在线看片 | 久久99精品久久久久蜜桃tv | 日韩精品一区二区不卡 | 亚洲成av| 波多野结衣一区二区 | 欧美日韩免费视频 | 午夜黄色| h片在线看 | 九九精品在线 | 黄色在线免费观看 | 精品免费看 | 九九亚洲 | 久操伊人| 婷婷综合在线 | 在线观看精品视频网站 | 成人网在线 | 国产精品久久二区 | 作爱视频免费看 | 欧美影院久久 | 亚洲精品一区二区三区免 | 国产成人精品网站 | 国产在线永久免费 | 日韩av高清在线 | 国产一区二区三区在线 | 成人午夜免费在线视频 | 亚洲日韩中文字幕一区 | 久久成人一区二区三区 | 91亚洲国产| 91丨九色丨国产在线 | 日韩精品一区二区三区视频播放 | 粉嫩av在线| 97狠狠干| 2019中文字幕视频 | 久久久久国产一区二区三区 | 国产一级片| 黄免费在线 | 色综合桃花网 | 国产日韩精品在线 | 亚洲欧美中文日韩在线 | 激情五月婷婷丁香 |