找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1577|回復(fù): 10
打印 上一主題 下一主題
收起左側(cè)

MCU串口通信首字母亂碼問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:705846 發(fā)表于 2024-5-7 11:20 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

standby首字母亂碼,注釋掉下面的發(fā)送語句就不會亂碼,請問是什么問題。


        while(1)
        {
        
                set1=249;                        
                SendString("standby");
                delay(2000);
                        
                SendByte(set1);   //注釋這行,就沒有亂碼
                delay(5000);

        }        

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:883242 發(fā)表于 2024-5-7 14:20 | 只看該作者
SendString()函數(shù)有bug。
回復(fù)

使用道具 舉報

板凳
ID:23640 發(fā)表于 2024-5-7 15:36 | 只看該作者
題主可試下把249改成48,249沒在ASCII碼范圍內(nèi)
回復(fù)

使用道具 舉報

地板
ID:705846 發(fā)表于 2024-5-7 17:18 | 只看該作者
Hephaestus 發(fā)表于 2024-5-7 14:20
SendString()函數(shù)有bug。

void SendByte(BYTE dat)
{
        SBUF=dat;
        while(!TI);
        TI=0;
}

void SendString(unsigned char *str)
{
        while(*str!='\0')
        {
                _nop_();
                SendByte(*str);
                str++;       
        }
}
回復(fù)

使用道具 舉報

5#
ID:705846 發(fā)表于 2024-5-7 17:28 | 只看該作者
yaosongjin 發(fā)表于 2024-5-7 15:36
題主可試下把249改成48,249沒在ASCII碼范圍內(nèi)

改成48可以,請問有什么辦法解決呢
回復(fù)

使用道具 舉報

6#
ID:705846 發(fā)表于 2024-5-7 18:03 | 只看該作者

回復(fù)

使用道具 舉報

7#
ID:192020 發(fā)表于 2024-5-8 11:00 | 只看該作者

因為249不在ASCII碼表內(nèi),編碼會把249和你首位的S合在一起當(dāng)成漢字來顯示,但是這漢字可能也沒有就亂碼了。第一次打印應(yīng)該是正常顯示standby的,解決辦法是要不就一起發(fā)送ascii碼,要不就一起發(fā)hex格式,一樣發(fā)一個顯示亂碼正常
回復(fù)

使用道具 舉報

8#
ID:705846 發(fā)表于 2024-5-8 12:44 | 只看該作者
qq475878026 發(fā)表于 2024-5-8 11:00
因為249不在ASCII碼表內(nèi),編碼會把249和你首位的S合在一起當(dāng)成漢字來顯示,但是這漢字可能也沒有就亂碼了 ...

確實如你所說,第一個字符串是沒有亂碼。 如果用hex格式,接收端需要用額外的函數(shù)把hex格式轉(zhuǎn)換成字符和10進制數(shù)嗎。還是說可以直接處理接收到的數(shù)。
回復(fù)

使用道具 舉報

9#
ID:192020 發(fā)表于 2024-5-8 13:47 | 只看該作者
samxon 發(fā)表于 2024-5-8 12:44
確實如你所說,第一個字符串是沒有亂碼。 如果用hex格式,接收端需要用額外的函數(shù)把hex格式轉(zhuǎn)換成字符和1 ...

你需要的應(yīng)該是文本顯示,接收端是電腦,發(fā)送端是MCU,你需要在發(fā)送端加函數(shù)把set1轉(zhuǎn)成ascii就行。
就好像要acsii碼顯示249,就要發(fā)送三位byte,SendByte('2'),SendByte('4'),SendByte('9'),寫個這樣的轉(zhuǎn)換函數(shù)發(fā)送。
回復(fù)

使用道具 舉報

10#
ID:883242 發(fā)表于 2024-5-8 20:49 | 只看該作者
你們都沒看樓主在6樓的圖的細(xì)節(jié)嗎?是串口助手出錯了,樓主換一個。
回復(fù)

使用道具 舉報

11#
ID:705846 發(fā)表于 2024-5-8 21:24 來自觸屏版 | 只看該作者
Hephaestus 發(fā)表于 2024-5-8 20:49
你們都沒看樓主在6樓的圖的細(xì)節(jié)嗎?是串口助手出錯了,樓主換一個。

你的意思是換一個助手程序?
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表