微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求指点UART通信的问题。

求指点UART通信的问题。

时间:10-02 整理:3721RD 点击:
#include<reg52.h>
void ConfigUART(unsigned int Baud);
void main()
{
       
        ConfigUART(9600);
        while(1)
        {
                while(!RI);
                RI = 0;
                SBUF = SBUF+1;
                while(!TI);
                TI = 0;
        }
}
void ConfigUART(unsigned int Baud)
{
        SCON = 0x50;
        TMOD &= 0x0f;
        TMOD |= 0x20;
        TH1 = 256-(11059200/12/32)/Baud;
        TL1 = TH1;
    TR1 = 1;
}
为什么这段代码扫进单片机后用串口助手返回的信息是81开始呢?不应该是传说0,返回为01么?
串口截图在2楼,请大家不吝赐教~~~

波特率设置可能有问题,再仔细计算一下
检查SMOD位是否为1,你程序中是按加倍来计算的

串口截图~~~~~~~~~~


波特率用的是TI配置9600和串口助手设置的是一直的,应该不是这个问题吧。

PCON=0x80有没有,发送速率加倍
用示波器量一下,1分钟内可以解决

重新设置波特率

大神,我没有示波器耶,还有我没有用PCON = 0x80,这个波特率翻倍我知道。你的意思是波特率出错到这数据传输出错造成的么?但是UART是单片机内部的一个通信模块,不考虑外围电路吧,这个程序我对照了小宋老师的然后改成跟他一样的,可是结果还是不对。

波特率公式不是TH1 = 256-(11059200/12/2/16)/Baud;TL1 = TH1;这个应该没错吧?

PCON 的最高位为1表示波特率翻倍,使用公式256-(11059200/12/32)/Baud
如果PCON的最高位没有设置,为0的话使用公式256-(11059200/12/16)/Baud

反了吧?书上是翻倍为256-(11059200/12/16)/baud;我照你说的改变了波特率为这个后串口显示是从06开始了

是说反了
初始化加一句TI = 1;
清空发送寄存器试试看,因为发送寄存器里面可能有一个初值
或者写成SCON = 0x52
TH = 0xFD  //虽然能整除,改一下试试
TL = 0xFD

好的,非常感谢您的指导,谢谢哈

终于决解了,一直以为我的板子用的是11.059200的晶振,刚才看原理图才发现用的是12M的,切12M只能配置1200波特率误差才不会影响到传输出错,所以串口助手也要设置为1200波特率。怪我粗心了,谢谢您能耐心指导,祝您及您的家人生活幸福愉快。谢谢。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top