找回密码
 立即注册
查看: 418|回复: 12

串口 配置求助

[复制链接]
  • TA的每日心情
    慵懒
    2024-2-22 09:29
  • 签到天数: 38 天

    [LV.5]常住居民I

    5

    主题

    51

    回帖

    285

    积分

    中级会员

    积分
    285
    发表于 2024-1-11 15:33:13 | 显示全部楼层 |阅读模式
    bit busy;
    char wptr;
    char rptr;
    char buffer[16];




    void UART_Init()//9600bps@11.0592MHz
    {
    //         SCON = 0x50;
    //   TMOD = 0x00;
    //   TL1 = BRT;
    //   TH1 = BRT >> 8;
    //   TR1 = 1;
    //   AUXR = 0x40;
            

      PCON &= 0x7F;                //波特率不倍速
            SCON = 0x50;                //8位数据,可变波特率
            AUXR |= 0x40;                //定时器时钟1T模式
            AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
            TMOD &= 0x0F;                //设置定时器模式
            TMOD |= 0x20;                //设置定时器模式
            TL1 = 0xFD;                        //设置定时初始值
            TH1 = 0xFD;                        //设置定时重载值
            ET1 = 0;                        //禁止定时器中断
            TR1 = 1;                        //定时器1开始计时


       wptr = 0x00;
       rptr = 0x00;
       busy = 0;
            
    }

    void UART_SendByte(u16 Data)
    {
             while (busy);
       busy = 1;
       SBUF = Data;
                   
            
            

    }

    void UartIsr() interrupt 4
    {
        if (TI)
        {
            TI = 0;
            busy = 0;
        }
    //    if (RI)
    //    {
    //        RI = 0;
    //        buffer[wptr++] = SBUF;
    //        wptr &= 0x0f;
    //    }
    }


    void main(void)
    {

            

            Io_Init();
            UART_Init();
      ES = 1;
      EA = 1;


        while (1)
        {
    //        if (rptr != wptr)
    //        {
    //            UART_SendByte(buffer[rptr++]);
    //            rptr &= 0x0f;
    //        }

                            UART_SendByte(2);
        }

    }

    这是根据例程更改代码,原例程可以实现收发通信  但是我只需要发送数据,但是得到的是乱码 不知道是不是哪里配置有问题。我也尝试过更改初始化的配置降低 波特率但是一样是乱码。请各位大佬指点迷津

    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    前天 21:05
  • 签到天数: 168 天

    [LV.7]常住居民III

    17

    主题

    371

    回帖

    1347

    积分

    荣誉版主

    积分
    1347
    发表于 2024-1-11 15:53:02 | 显示全部楼层
    应该是串口求助,而不是ADC求助.

    void UART_SendByte(u8 Data)
    {
       SBUF = Data;   
        busy = 1;
       while (busy);
    }


    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-2-22 09:29
  • 签到天数: 38 天

    [LV.5]常住居民I

    5

    主题

    51

    回帖

    285

    积分

    中级会员

    积分
    285
     楼主| 发表于 2024-1-11 16:43:35 | 显示全部楼层
    社区闲人 发表于 2024-1-11 15:53
    应该是串口求助,而不是ADC求助.

    void UART_SendByte(u8 Data)

    是的写错标题了  不过ADC也确实有问题,现在搞串口是想借用串口查看ADC的采样数据
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    前天 21:05
  • 签到天数: 168 天

    [LV.7]常住居民III

    17

    主题

    371

    回帖

    1347

    积分

    荣誉版主

    积分
    1347
    发表于 2024-1-11 16:47:37 | 显示全部楼层
    如果要串口发送U16数据,可以这样:

    void UART_SendByte(u16 Data)
    {
       SBUF = Data >> 8;   
        busy = 1;
       while (busy);
       SBUF = (u8)Data;   
        busy = 1;
       while (busy);
    }
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    7 小时前
  • 签到天数: 81 天

    [LV.6]常住居民II

    5

    主题

    72

    回帖

    290

    积分

    中级会员

    积分
    290
    发表于 2024-1-11 17:14:26 | 显示全部楼层
    ADC配置 可以参考手册上的程序
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    郁闷
    9 小时前
  • 签到天数: 141 天

    [LV.7]常住居民III

    20

    主题

    1078

    回帖

    2565

    积分

    金牌会员

    积分
    2565
    发表于 2024-1-11 17:43:59 | 显示全部楼层
    截图202401111742217490.jpg
    你这从那淘来的程序,,,定时器的初值有问题
    参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
    技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    郁闷
    9 小时前
  • 签到天数: 141 天

    [LV.7]常住居民III

    20

    主题

    1078

    回帖

    2565

    积分

    金牌会员

    积分
    2565
    发表于 2024-1-11 17:45:27 | 显示全部楼层
    本帖最后由 _奶咖君_ 于 2024-1-11 17:51 编辑

    还有一件事,你这里发送的  2  是数值2  不是字符2
    你在串口接收的时候也要注意以什么显示
    参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
    技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    11 小时前
  • 签到天数: 172 天

    [LV.7]常住居民III

    12

    主题

    351

    回帖

    1150

    积分

    金牌会员

    积分
    1150
    发表于 2024-1-11 18:40:26 | 显示全部楼层
    https://www.stcaimcu.com/forum.p ... amp;page=1#pid52274

    我刚经历了串口通讯乱码,用的是STC11F02E,外接晶振24MHz,官方例程发送是乱码。
    乱码的原因就是MCU的波特率和上位机软件的波特率不一致导致的,昨天出现了MCU发一个字符'a',
    上位机收到三个00的情况,
    1)使用外接晶振的话,烧写程序的时候要取消勾选“使用内部IRC……”,外接晶振多少,就在程序里面修改晶振定义的数值;
    烧写后给单片机断电,给电容放电,彻底再冷启动一次;
    2)MCU和上位机的波特率设置要一致;
    3)官方例程运行不正确的话,就是串口的初始化有问题,尝试用STC-ISP的串口波特率计算器重新生成串口初始化代码,那几种组合都试试,
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-2-22 09:29
  • 签到天数: 38 天

    [LV.5]常住居民I

    5

    主题

    51

    回帖

    285

    积分

    中级会员

    积分
    285
     楼主| 发表于 2024-1-11 22:34:52 | 显示全部楼层
    wangxiangtan 发表于 2024-1-11 18:40
    https://www.stcaimcu.com/forum.php?mod=viewthread&tid=6178&page=1#pid52274

    我刚经历了串口通讯乱码, ...

    感谢指导 明天我试一试
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-2-22 09:29
  • 签到天数: 38 天

    [LV.5]常住居民I

    5

    主题

    51

    回帖

    285

    积分

    中级会员

    积分
    285
     楼主| 发表于 2024-1-12 10:19:02 | 显示全部楼层
    wangxiangtan 发表于 2024-1-11 18:40
    https://www.stcaimcu.com/forum.php?mod=viewthread&tid=6178&page=1#pid52274

    我刚经历了串口通讯乱码, ...

    有一个疑问  是不是串口发送的  0x66 或  66 这种数据类型都会转化ASCII码所对应的字符

    点评

    串口发送的数据都是无符号字符型的数据。 如果想要发送字符A,则应该写作Uart_Send('A'); 串口接收工具也分收到的hex和收到的字符串两个类型。 所以发送字符时需要调整到字符串接收模式,发送hex时不需要转换,发啥  详情 回复 发表于 2024-1-12 12:58
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-15 19:35 , Processed in 0.075734 second(s), 71 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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