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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機串口如何接受7位數的數據(10進制)

  [復制鏈接]
跳轉到指定樓層
樓主
ID:149043 發表于 2023-5-23 16:50 來自手機 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
麻煩大佬給個程序參考下
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:161164 發表于 2023-5-23 17:04 | 只看該作者
1. 用聯合體
2. 用字符串
回復

使用道具 舉報

板凳
ID:94031 發表于 2023-5-23 17:07 | 只看該作者
雙方定義收發浮點數,串口4個字節就可實現7位10進制數收發。
回復

使用道具 舉報

地板
ID:744809 發表于 2023-5-23 17:19 | 只看該作者
3個字節就可以了,比如1234567,你放到一個unsigned long的變量中,將右邊24位分別放入一個3字節的buf中,buf[0] = temp_long >> 16;buf[1] = temp_long >> 8; buf[2] = temp_long & 0xFF;
然后發送這個數組就好了。接收到數據后通過左移操作還原成unsigned long變量即可
回復

使用道具 舉報

5#
ID:824490 發表于 2023-5-23 17:22 | 只看該作者
串口收發的都是數據,都是“16進制”,“10進制'也是當成"16進制"來收發,其實對串口來說都是2進制,根本沒有x進制這個說法,有的只是后數據的處理才出現什么10進制之類的
回復

使用道具 舉報

6#
ID:824490 發表于 2023-5-23 17:25 | 只看該作者
卡住你的不是什么10進制,而是7位數。你可以開個緩存(7字節),收到第一個字節存入緩存第一個地址中,,,第7個存入7中。。。
回復

使用道具 舉報

7#
ID:65956 發表于 2023-5-24 08:28 | 只看該作者
把接收到的數據屏蔽最高位(&07F),這樣不就是把8位當7位接收了,不過這種在51單片機中是不得以的方法,在高級單片機就能設置相應的接收位數
回復

使用道具 舉報

8#
ID:213173 發表于 2023-5-24 09:52 | 只看該作者
樓主語焉不詳,地板回復應該是樓主想要的,但樓主未必能看明白。
回復

使用道具 舉報

9#
ID:123289 發表于 2023-5-24 10:40 | 只看該作者
串口總是按字節一個一個的接收二進制數,它可不管什么這個數那個數的花花定義。
至于7位數據什么的,關鍵在于你如何將這個7位數據,按字節拆分(發送時)、組合(接收時,復原)。
回復

使用道具 舉報

10#
ID:526543 發表于 2023-5-24 12:31 | 只看該作者
#include <reg52.h>

#define uchar unsigned char
#define uint unsigned int

sbit RX = P3^0;   // 串口接收引腳

uchar receivedData = 0;  // 存儲接收到的數據

// 串口初始化函數
void InitUART() {
    TMOD = 0x20;    // 設置定時器1為模式2(8位自動重裝)
    SCON = 0x50;    // 設置串口工作在模式1(8位數據,可變波特率)
    TH1 = 0xFD;     // 設置波特率為9600,晶振頻率11.0592MHz
    TR1 = 1;        // 啟動定時器1
}

// 串口接收中斷處理函數
void UART_ISR() interrupt 4 {
    if (RI) {  // 接收到數據
        RI = 0;  // 清除接收中斷標志

        // 獲取接收到的數據
        uchar data = SBUF;

        // 忽略最高位的數據位(第8位)
        receivedData = data & 0x7F;
    }
}

// 延時函數
void Delay(uint del) {
    uint i, j;
    for (i = 0; i < del; i++) {
        for (j = 0; j < 1827; j++) {
            // 空循環
        }
    }
}

void main() {
    InitUART();  // 初始化串口

    // 啟用全局中斷
    EA = 1;
    // 啟用串口接收中斷
    ES = 1;

    while (1) {
        // 在這里可以使用 receivedData 變量進行處理,比如打印到LCD等
        // 這里只是簡單的延時示例,可根據需要修改
        Delay(100);
    }
}
回復

使用道具 舉報

11#
ID:149043 發表于 2023-5-25 09:00 來自手機 | 只看該作者
123456ZXC1 發表于 2023-5-24 12:31
#include

#define uchar unsigned char

這個是7位數啊
,怎么能uchar
回復

使用道具 舉報

12#
ID:149043 發表于 2024-6-6 11:40 來自手機 | 只看該作者
wulin 發表于 2023-5-24 09:52
樓主語焉不詳,地板回復應該是樓主想要的,但樓主未必能看明白。

努力看明白
回復

使用道具 舉報

13#
ID:149043 發表于 2024-6-6 16:37 來自手機 | 只看該作者
123156fsadf 發表于 2023-5-23 17:19
3個字節就可以了,比如1234567,你放到一個unsigned long的變量中,將右邊24位分別放入一個3字節的buf中,b ...

數據收到了,接收到的數據是應該相加還是怎么做,前兩位數據都是00H ,后兩位數據如下圖

image.jpg (695.98 KB, 下載次數: 22)

image.jpg

image.jpg (1.1 MB, 下載次數: 23)

image.jpg
回復

使用道具 舉報

14#
ID:619259 發表于 2024-6-6 20:23 | 只看該作者
用數組,多少位都可以
回復

使用道具 舉報

15#
ID:69038 發表于 2024-6-6 20:55 | 只看該作者
是7位數,還是7bit?兩者是不同概念的。
前者開一個緩存,依次接收趣入即可,后者自定義數據類型,按需要處理后再存入。
回復

使用道具 舉報

16#
ID:149043 發表于 2024-6-7 08:56 來自手機 | 只看該作者
格式化無悔 發表于 2024-6-6 16:37
數據收到了,接收到的數據是應該相加還是怎么做,前兩位數據都是00H ,后兩位數據如下圖

我現在數據接收到了(4個字節),一個字節一個字節的收到的,但是不知道怎么組合起來,是應該相加還是怎么辦,怎么把這四個字節的數據組合成10進制的數
回復

使用道具 舉報

17#
ID:149043 發表于 2024-6-7 09:15 來自手機 | 只看該作者
123156fsadf 發表于 2023-5-23 17:19
3個字節就可以了,比如1234567,你放到一個unsigned long的變量中,將右邊24位分別放入一個3字節的buf中,b ...

謝謝大佬,已解決
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91精品91久久久 | 精产国产伦理一二三区 | 亚洲不卡在线观看 | 日本黄色影片在线观看 | 四虎永久| 国产xxxx岁13xxxxhd | 在线播放一区二区三区 | 国产精品黄视频 | 欧美一级免费观看 | 欧美日韩综合一区 | 色婷婷av99xx| 91精品国产91久久久久久最新 | 亚洲aⅴ| 亚洲天堂一区二区 | 青青草在线播放 | 成年网站在线观看 | 欧美成年网站 | 日韩中文一区二区三区 | 亚洲视频一区在线播放 | 免费在线观看一区二区 | 成人妇女免费播放久久久 | 国产精品成人在线 | 久久99精品视频 | 国产精品亚洲成在人线 | 在线亚洲欧美 | 天天射天天操天天干 | 国精久久| 日韩三级在线 | 久久视频免费观看 | 欧美在线视频网 | 97免费在线观看视频 | 无码国模国产在线观看 | 国产在线观看一区二区 | 在线观看视频福利 | 国内毛片毛片毛片毛片 | 国产一二三区精品视频 | 日本一二区视频 | 日本一区二区三区四区 | av网站在线播放 | www.亚洲精品 | 五月天天丁香婷婷在线中 |