标题: 51单片机串口调试,发送一个字符“Y”,出现了如图一显示是哪里出了问题 [打印本页]

作者: 博蒗    时间: 2020-9-4 17:15
标题: 51单片机串口调试,发送一个字符“Y”,出现了如图一显示是哪里出了问题
#include  <reg51.h>
void uart_init(void);

void uart_send_byte(unsigned char c);

void delay1s(void)   //误差 -0.00000000024us
{
    unsigned char a,b,c;
    for(c=95;c>0;c--)
        for(b=26;b>0;b--)
            for(a=185;a>0;a--);
}


void main(void)
{
  uart_init();
  uart_send_byte('Y');
  delay1s( );
}

void uart_init(void)
{
        // 波特率9600
        SCON = 0x50;           // 串口工作在模式1(8位串口)、允许接收
        PCON = 0x00;        // 波特率不加倍

        // 通信波特率相关的设置
        TMOD = 0x20;        // 设置T1为模式2
        TH1 = 253;
        TL1 = 253;                   // 8位自动重装,意思就是TH1用完了之后下一个周期TL1会
                                        // 自动重装到TH1去

        TR1 = 1;                // 开启T1让它开始工作
        ES = 1;
        EA = 1;
}

// 通过串口发送1个字节出去
void uart_send_byte(unsigned char c)
{
   // 第1步,发送一个字节
   SBUF = c;

   // 第2步,先确认串口发送部分没有在忙
   while (!TI);

   // 第3步,软件复位TI标志位
   TI = 0;
}


图一







作者: 陈润源home    时间: 2020-9-4 20:41
波特率不对 ,用11.0592M 的晶振 9600波特率的值是0xfd
作者: wulin    时间: 2020-9-4 21:03
主程序没有while(1)约束,串口被不断重复初始化。造成串口波特率不稳定。
void main(void)
{
        uart_init();
        while(1)
        {
                uart_send_byte('Y');
                delay1s( );
        }
}
作者: 博蒗    时间: 2020-9-6 14:21
查验了一下,问题确实是出在波特率上,谢谢大家的指正





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