標題: UART通信問題 [打印本頁]

作者: shenyoutx    時間: 2014-8-17 12:00
標題: UART通信問題
通過串口調(diào)試助手以十六進制發(fā)送和接受數(shù)據(jù),按原數(shù)據(jù)返回。但接受的數(shù)據(jù)和發(fā)送的數(shù)據(jù)不一致,不知道是哪里出問題了,幫忙看下。謝謝!
代碼截圖如下:
#include<reg52.h>
void ConfigUART(unsigned int baud);

void main()
{
        ConfigUART(9600);

        while(1)
        {
                while(!RI);
                RI = 0;
                SBUF = SBUF ;
                while(!TI);
                TI = 0;               
        }
}

void ConfigUART(unsigned int baud)
{
        SCON = 0x50;
        TMOD &= 0X0F;
        TMOD |= 0x20;
        TH1 = 256 - (11059200/12/32)/baud;
        TL1 = TH1;
        ET1 = 0;
        TR1 = 1;
}





作者: hkccd    時間: 2014-8-17 16:06
會不會是晶體震蕩器用錯了
作者: a110    時間: 2014-8-21 22:25
程序是吧發(fā)送過來的數(shù)據(jù)立即返回去是吧?
作者: 明白    時間: 2014-8-21 23:42
不能都用 SBUF = SBUF ;
必須分開寫
串口輸入用:
存放的變量 = SBUF ;
輸出用:
SBUF = 輸出數(shù)據(jù)地址 ;

作者: hujia    時間: 2014-8-22 00:24
明白 發(fā)表于 2014-8-21 23:42
不能都用 SBUF = SBUF ;
必須分開寫
串口輸入用:

果然是高手啊
作者: shenyoutx    時間: 2014-8-23 00:03
hkccd 發(fā)表于 2014-8-17 16:06
會不會是晶體震蕩器用錯了

晶振沒有錯的
作者: shenyoutx    時間: 2014-8-23 00:28
明白 發(fā)表于 2014-8-21 23:42
不能都用 SBUF = SBUF ;
必須分開寫
串口輸入用:

分開使用效果是一樣的,還在研究是哪里處理問題,非常感謝你的幫助
作者: hujia    時間: 2014-8-23 02:07
一起研究
作者: shenyoutx    時間: 2014-8-24 20:06
hkccd 發(fā)表于 2014-8-17 16:06
會不會是晶體震蕩器用錯了

問題我找出來了,非常感謝你,確實是用錯了,我板子上的晶振用的是12M的,這個晶振用9600誤差有點大,最好使用2400,謝謝你的幫助。
作者: hujia    時間: 2014-8-24 20:53
就是  看程序怎么看也沒問題
作者: 13776055589    時間: 2015-9-20 16:59
shenyoutx 發(fā)表于 2014-8-24 20:06
問題我找出來了,非常感謝你,確實是用錯了,我板子上的晶振用的是12M的,這個晶振用9600誤差有點大,最 ...


作者: we167527    時間: 2015-9-23 11:55
明白 發(fā)表于 2014-8-21 23:42
不能都用 SBUF = SBUF ;
必須分開寫
串口輸入用:

請問為什么?




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