標題: 單片機波特率設置的9600,但只有在串口波特率配置4800時才能收到數(shù)據(jù) [打印本頁]

作者: 791310    時間: 2021-12-2 10:57
標題: 單片機波特率設置的9600,但只有在串口波特率配置4800時才能收到數(shù)據(jù)
波特率設置的9600,但只有在串口波特率配置4800時才能收到數(shù)據(jù),不知道為什么,附源代碼,我單片機用的是STC15W4K56S4
void UART_init(void)
{                  
        // 下面代碼設置定時器2
        T2H  = 0xFD;        // 波特率:9600
        T2L  = 0xC0;        // 波特率:9600
        AUXR = 0x15;    // 0001 0101,T2R=1啟動T2運行,T2x12=1,定時器2按1T計數(shù),S1ST2=1
        // 下面代碼設置定串口1
        SCON = 0x50;         // 0101 0000 SM0.SM1=01(最普遍的8位通信),REN=1(允許接收)
        // 下面代碼設置中斷
        ES   = 1;                // 開串口1中斷
        EA   = 1;                // 開總中斷
}



作者: 188610329    時間: 2021-12-2 13:14
波特率不是獨立存在的,牽涉的時鐘頻率, 你用11.0592的時鐘,波特率自然只有4800了……
作者: 791310    時間: 2021-12-2 13:23
188610329 發(fā)表于 2021-12-2 13:14
波特率不是獨立存在的,牽涉的時鐘頻率, 你用11.0592的時鐘,波特率自然只有4800了……

謝謝回復,我想請問這個是怎么計算的呢,我不知道我算的對不對,我把T2H改成0XFA波特率也不對,也不是9600,如果我想要9600的波特率該怎么做呢,盼望解答,非常感謝!
作者: 188610329    時間: 2021-12-2 13:52
如果,你的晶振頻率 是: 11.0592  你要 9600 波特率
則:
        T2L = 0xE0;                //設置定時初始值
        T2H = 0xFE;                //設置定時初始值


作者: happy2058    時間: 2021-12-2 13:55
791310 發(fā)表于 2021-12-2 13:23
謝謝回復,我想請問這個是怎么計算的呢,我不知道我算的對不對,我把T2H改成0XFA波特率也不對,也不是960 ...

系統(tǒng)頻率是分頻后的時鐘。


作者: 791310    時間: 2021-12-2 14:03
happy2058 發(fā)表于 2021-12-2 13:55
系統(tǒng)頻率是分頻后的時鐘。

明白了,真的是太感謝了!
作者: adelaidee    時間: 2021-12-13 21:23
stc-isp里有波特率計算器,輸入單片機型號,波特率什么的就可以自動生成代碼
作者: 保持微笑    時間: 2021-12-13 22:06
有一個綠色軟件叫單片機小精靈,波特率啊延時啊定時器啊什么的都可以計算到




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