標(biāo)題: 單片機(jī)UART串口通信問題 波特率4800時(shí)ok,9600錯(cuò)誤 [打印本頁]

作者: 花貓ccccc    時(shí)間: 2019-2-8 12:41
標(biāo)題: 單片機(jī)UART串口通信問題 波特率4800時(shí)ok,9600錯(cuò)誤
12M的晶振,為什么波特率為4800的時(shí)候正常,為9600的時(shí)候就發(fā)回來錯(cuò)誤呢,求大佬解答

/*波特率為9600*/
#include "reg52.h"                        

typedef unsigned int u16;        
typedef unsigned char u8;



void UsartInit()
{
        SCON=0X50;               
        TMOD=0X20;                        
        TH1=0XFD;               
        TL1=0XFD;
        ES=1;                                                
        EA=1;                                                
        TR1=1;                                       
}


void main()
{        
        UsartInit();
        while(1)
        {
               
        }               
}


void Usart() interrupt 4
{
        u8 receiveData;

        receiveData=SBUF;
        
        RI = 0;
        SBUF=receiveData;
        while(!TI);                        
        TI=0;                                                
}

/*波特率為4800的時(shí)候,設(shè)置波特率加倍*/


#include "reg52.h"               

typedef unsigned int u16;        
typedef unsigned char u8;

void UsartInit()
{
        SCON=0X50;               
        TMOD=0X20;               
        PCON=0X80;               
        TH1=0XF3;               
        TL1=0XF3;
        ES=1;                                
        EA=1;                                
        TR1=1;                        
}

void main()
{        
        UsartInit()
        while(1)
        {
               
        }               
}


void Usart() interrupt 4
{
        u8 receiveData;

        receiveData=SBUF;
                RI = 0
        SBUF=receiveData
        while(!TI);               
        TI=0;                                       
}

QQ圖片20190208123640.png (183.22 KB, 下載次數(shù): 34)

QQ圖片20190208123640.png

1.png (64.99 KB, 下載次數(shù): 32)

1.png

作者: wulin    時(shí)間: 2019-2-9 08:03
使用12M的晶振,波特率不要超過4800,否則誤差會(huì)很大,不能正常通訊。建議使用11.0592MHz的晶振。
作者: yaoji123    時(shí)間: 2019-2-9 08:33
晶振12MHZ,波特率9600時(shí)誤差為8.51%,4800時(shí)誤差為6.99%,一般超過7%時(shí)通訊質(zhì)量較差,可改用晶振11.0592MHz,通訊波特率可達(dá)115200以上質(zhì)量也很好。
作者: 海洋漁業(yè)    時(shí)間: 2019-2-9 15:42
唉!你的波特率有問題。12Mhz的晶振把T作為波特率發(fā)生器,按照波特率計(jì)算公式不能整除,很難計(jì)算出合理的波特率。
但是天無絕人之路,8052內(nèi)核的單片機(jī)有T2寄存器,它的溢出率計(jì)算公式為:晶振頻率除以【2乘(65536-RCAP2H RCAP2L)],波特率計(jì)算公式為:2的SMOD的次方除以T2溢出率;
我把你的程序改了改:
void UsartInit()
{
        SCON=0X50;               
        T2CON=0X34;//設(shè)置T2為波特率發(fā)生裝置               
        PCON=0X80;               
        RCAP2H=(65536-39)/256;               
        RCAP2L=(65536-39)%256;
        ES=1;                                
        EA=1;                                                      
}
對于T2寄存器的詳細(xì)信息你可以去單片機(jī)的查器件手冊。希望這些對你有幫助
作者: HC6800-ES-V2.0    時(shí)間: 2019-2-9 21:04
看看這個(gè)就知道了:




12M晶振下,不論加不加倍,誤差都很大


12M晶振下,4800波特率,不加倍時(shí),誤差也是很大的


12M晶振下,4800波特率,加倍時(shí),誤差就小了
你自己或以試的,2400波特率下,加倍或不加倍,誤差都一樣,可以正常使用。

作者: 海洋漁業(yè)    時(shí)間: 2019-2-10 18:49
HC6800-ES-V2.0 發(fā)表于 2019-2-9 21:04
看看這個(gè)就知道了:

咳咳,用這個(gè)必須是STC公司的單片機(jī)吧,而且還要包含STC公司自己的頭文件(STC-ISP軟件里有)。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1