找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2149|回复: 3
收起左侧

51单片机串口调试,发送一个字符“Y”,出现了如图一显示是哪里出了问题

[复制链接]
ID:512883 发表于 2020-9-4 17:15 | 显示全部楼层 |阅读模式
#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;
}


图一
IMG_20200904_170440.jpg


1599210761107.jpg


回复

使用道具 举报

ID:293363 发表于 2020-9-4 20:41 | 显示全部楼层
波特率不对 ,用11.0592M 的晶振 9600波特率的值是0xfd
回复

使用道具 举报

ID:213173 发表于 2020-9-4 21:03 | 显示全部楼层
主程序没有while(1)约束,串口被不断重复初始化。造成串口波特率不稳定。
void main(void)
{
        uart_init();
        while(1)
        {
                uart_send_byte('Y');
                delay1s( );
        }
}
回复

使用道具 举报

ID:512883 发表于 2020-9-6 14:21 | 显示全部楼层
查验了一下,问题确实是出在波特率上,谢谢大家的指正
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表