微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 串口通信发送与接收信息不一致的疑问

串口通信发送与接收信息不一致的疑问

时间:10-02 整理:3721RD 点击:
大神,请教一下51单片机串口发送的问题:当我用以下代码一 以hex模式发送和接收时,信息不一致。
#include <reg52.h>

void ConfigUART(unsigned int baud);

void main()
{
    EA = 1;   //使能总中断
    ConfigUART(9600);  //配置波特率为9600
    while(1);
}
void ConfigUART(unsigned int baud)
{
    SCON  = 0x50;  //配置串口为模式1
    TMOD &= 0x0F;  //清零T1的控制位
    TMOD |= 0x20;  //配置T1为模式2
    TH1 = 256 - (11059200/12/32)/baud;  //计算T1重载值
    TL1 = TH1;     //初值等于重载值
    ET1 = 0;       //禁止T1中断
    ES  = 1;       //使能串口中断
    TR1 = 1;       //启动T1
}

void InterruptUART() interrupt 4
{
        if(RI)
        {
                RI = 0;
                SBUF = SBUF + 1;
        }
        if(TI)
        {
                TI = 0;
        }
}

当我用以下代码二 以hex模式发送和接收时,信息一致。
/*******************************************************************************
* 实验名                           : 串口实验
* 使用的IO             : P2
* 实验效果       : 将接收到发送回电脑上面。
*        注意                                         :
*******************************************************************************/
#include<reg51.h>
void UsartConfiguration();
/*******************************************************************************
* 函数名         : main
* 函数功能                   : 主函数
* 输入           : 无
* 输出                  : 无
*******************************************************************************/
void main()
{
        UsartConfiguration();
        while(1)
        {
        }
}
/*******************************************************************************
* 函数名         :UsartConfiguration()
* 函数功能                   :设置串口
* 输入           : 无
* 输出                  : 无
*******************************************************************************/
void UsartConfiguration()
{
        SCON=0X50;                        //设置为工作方式1
        TMOD=0X20;                        //设置计数器工作方式2
        PCON=0X80;                        //波特率加倍
        TH1=0XF3;                                //计数器初始值设置,注意波特率是4800的
        TL1=0XF3;
        ES=1;                                                //打开接收中断
        EA=1;                                                //打开总中断
        TR1=1;                                        //打开计数器
}
/*******************************************************************************
* 函数名         :Delay(unsigned int i)
* 函数功能                   : 延时函数
* 输入           : 无
* 输出                  : 无
*******************************************************************************/
void Usart() interrupt 4
{
        unsigned char receiveData;
        receiveData=SBUF;//出去接收到的数据
        RI = 0;//清除接收中断标志位
        SBUF=receiveData+1;//将接收到的数据放入到发送寄存器
        while(!TI);                         //等待发送数据完成
        TI=0;                                                 //清除发送完成标志位
}
请教原因,谢谢。

这个就要看看你自己了

应该是波特率没有设置好。两种方法计算出来的波特率不一致吧

谢谢

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

网站地图

Top