标题: UART通信问题 [打印本页]

作者: shenyoutx    时间: 2014-8-17 12:00
标题: UART通信问题
通过串口调试助手以十六进制发送和接受数据,按原数据返回。但接受的数据和发送的数据不一致,不知道是哪里出问题了,帮忙看下。谢谢!
代码截图如下:
#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
程序是吧发送过来的数据立即返回去是吧?
作者: 明白    时间: 2014-8-21 23:42
不能都用 SBUF = SBUF ;
必须分开写
串口输入用:
存放的变量 = SBUF ;
输出用:
SBUF = 输出数据地址 ;

作者: hujia    时间: 2014-8-22 00:24
明白 发表于 2014-8-21 23:42
不能都用 SBUF = SBUF ;
必须分开写
串口输入用:

果然是高手啊
作者: shenyoutx    时间: 2014-8-23 00:03
hkccd 发表于 2014-8-17 16:06
会不会是晶体震荡器用错了

晶振没有错的
作者: shenyoutx    时间: 2014-8-23 00:28
明白 发表于 2014-8-21 23:42
不能都用 SBUF = SBUF ;
必须分开写
串口输入用:

分开使用效果是一样的,还在研究是哪里处理问题,非常感谢你的帮助
作者: hujia    时间: 2014-8-23 02:07
一起研究
作者: shenyoutx    时间: 2014-8-24 20:06
hkccd 发表于 2014-8-17 16:06
会不会是晶体震荡器用错了

问题我找出来了,非常感谢你,确实是用错了,我板子上的晶振用的是12M的,这个晶振用9600误差有点大,最好使用2400,谢谢你的帮助。
作者: hujia    时间: 2014-8-24 20:53
就是  看程序怎么看也没问题
作者: 13776055589    时间: 2015-9-20 16:59
shenyoutx 发表于 2014-8-24 20:06
问题我找出来了,非常感谢你,确实是用错了,我板子上的晶振用的是12M的,这个晶振用9600误差有点大,最 ...


作者: we167527    时间: 2015-9-23 11:55
明白 发表于 2014-8-21 23:42
不能都用 SBUF = SBUF ;
必须分开写
串口输入用:

请问为什么?




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1