找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1559|回复: 3
打印 上一主题 下一主题
收起左侧

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;
}


图一






分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
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 单片机教程网

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