free性丰满hd毛多多,久久综合给合久久狠狠狠97色69 ,欧美成人乱码一区二区三区,国产美女久久久亚洲综合,7777久久亚洲中文字幕

0
問答首頁 最新問題 熱門問題 等待回答標(biāo)簽廣場
我要提問

單片機(jī)

單片機(jī)串口通信中文時(shí)易出現(xiàn)亂碼

/***************************************************************************************/

#include "reg52.h"

#define uchar unsigned char

#define uint unsigned int

#define error 0

uchar flag;

uchar temp;                                       

/***************************/

void delay(uint z)

{

        uint x,y;

        for(x=0;x<110;x++)

                for(y=0;y}

/*********串口初始化*******/

void Uart_Init(void)                //9600bps@12.000MHz

{

        PCON &= 0x7F;                //波特率不倍速

        SCON = 0xD0;                //8位數(shù)據(jù),可變波特率

        TMOD &= 0x0F;                //清除定時(shí)器1模式位

        TMOD |= 0x20;                //設(shè)定定時(shí)器1為8位自動重裝方式

        TL1 = 0xFD;                //設(shè)定定時(shí)初值

        TH1 = 0xFD;                //設(shè)定定時(shí)器重裝值

        ET1 = 0;                //禁止定時(shí)器1中斷

        TR1 = 1;                //啟動定時(shí)器1

}

/********發(fā)送一個(gè)字節(jié)****/

void Uart_SendByte(uchar dat)   //9位 (1校驗(yàn)位)

{

        ACC=dat;

        TB8=P;

        SBUF=dat;

        while(TI==0);

        TI=0;       

}

/**************************/

void Uart_SendStr(uchar *s)

{       

        uchar i;

        for(i=0;s[i]!='\0';i++)

        {

                ACC=s[i];

                TB8=P;

                SBUF=s[i];

                while(TI==0);

                TI=0;

        }

        delay(800);

}

/*************************/

uchar Uart_Receive()

{

        uchar dat,buf;

        if(RI==1)

        {       

                dat=SBUF;

                ACC=dat;

                if(RB8==P)

                {

                        buf=dat;

                        RI=0;

                        return buf;

                }

                else

                {

                    RI=0;

                    return error;

                 }

        }

}

/*******************/

void main()

{       

    Uart_Init();

        ES=1;

        EA=1;

        while(1)

        {

                Uart_SendStr("狂奔的蝸牛哥 !");

                Uart_SendStr("\n");

                delay(5000);

                Uart_SendStr("START.......");

                delay(5000);

        }

}

/************串口中斷*****************/

void Uart_ser()interrupt 4

{

                temp=Uart_Receive();;

}

單片機(jī)串口通信中文時(shí)易出現(xiàn)亂碼?求大神指點(diǎn)!

提問者:szoldman 地點(diǎn):- 瀏覽次數(shù):4557 提問時(shí)間:10-22 17:40
我有更好的答案
提 交
6條回答
cmh14 06-07 17:29
波特率精度不夠,換11.0592MHz的晶體。
Lotus_Ching 06-11 13:49
換個(gè)串口助手,略微修改下波特率的設(shè)置參數(shù)試試~
臥聽桃花雨 06-06 10:43
都是串口調(diào)試助手惹的禍。
發(fā)英文數(shù)字是單個(gè)字節(jié)的,中文是雙字節(jié)的。發(fā)中文時(shí)識別到頭尾就能看到正常的文字,沒識別到就亂碼了。
沒玩上位機(jī)編程,上面如何識別就不知道了。
jenny042 06-12 12:40
如果是中文偶然總會有幾個(gè)亂碼,那或許是波特率誤差,但如果是凡是中文就亂碼,那是字符集問題。簡單的文本,也蘊(yùn)含著復(fù)雜的關(guān)系,文本不簡單。

當(dāng)你在keil中輸入文字的時(shí)候,雙引號中的字符串,根據(jù)你在keil里的字符集設(shè)置而不同。你在編輯器里看到的相同的中文,字符集不同,它在內(nèi)存中存放的實(shí)際數(shù)據(jù)也就不同。轉(zhuǎn)到別的東西上顯示的時(shí)候,如果沒有用對應(yīng)的字符集來解釋,那就是亂碼。

所以,你可以看看你用的串口助手能不能支持你的字符集。好的串口工具是可以設(shè)置字符集。

而偶爾亂碼的,我估計(jì),是誤差率問題,時(shí)鐘頻率不是波特率整數(shù)的,在n個(gè)波特之后會發(fā)生錯位,周期性失衡。
schumi_LYQ 06-06 07:50
每一行的尾部加二個(gè)回車符。
路交匯處 06-10 17:21
串口只是單個(gè)字節(jié)奇偶校驗(yàn),不能保證100%正確??茨隳康氖鞘裁?,可以數(shù)據(jù)包加校驗(yàn)來保證傳輸質(zhì)量,錯誤的丟棄
撰寫答案
提 交
1 / 3
1 / 3
相關(guān)單片機(jī)
具有音調(diào)控制的單片機(jī)立體聲前置放大器
用于單片機(jī)與電子裝置中的開關(guān)電源
單片機(jī)軟硬件復(fù)位的條件都有啥
電動機(jī)的單片機(jī)控制
單片機(jī)應(yīng)用系統(tǒng)開發(fā)實(shí)例導(dǎo)航