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

串口 配置求助

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2024-02-22 09:29:24

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

}

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

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:514
  • 最近打卡:2025-05-02 10:18:47

24

主题

515

回帖

990

积分

荣誉版主

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

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


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2024-02-22 09:29:24

5

主题

51

回帖

285

积分

中级会员

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

void UART_SendByte(u8 Data)

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:514
  • 最近打卡:2025-05-02 10:18:47

24

主题

515

回帖

990

积分

荣誉版主

积分
990
发表于 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);
}
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:283
  • 最近打卡:2025-04-27 08:07:24

25

主题

159

回帖

304

积分

中级会员

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

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

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:513
  • 最近打卡:2025-05-02 07:32:37

21

主题

564

回帖

2678

积分

金牌会员

积分
2678
发表于 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的串口波特率计算器重新生成串口初始化代码,那几种组合都试试,
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2024-02-22 09:29:24

5

主题

51

回帖

285

积分

中级会员

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

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

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

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2024-02-22 09:29:24

5

主题

51

回帖

285

积分

中级会员

积分
285
发表于 2024-1-12 10:19:02 | 显示全部楼层
wangxi*** 发表于 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, 2025-5-2 15:48 , Processed in 0.154940 second(s), 111 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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