Honsiti 发表于 2024-1-11 15:33:13

串口 配置求助

bit busy;
char wptr;
char rptr;
char buffer;




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 = SBUF;
//      wptr &= 0x0f;
//    }
}


void main(void)
{

      

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


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

                        UART_SendByte(2);
    }

}

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

社区闲人 发表于 2024-1-11 15:53:02

应该是串口求助,而不是ADC求助.

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


Honsiti 发表于 2024-1-11 16:43:35

社区闲人 发表于 2024-1-11 15:53
应该是串口求助,而不是ADC求助.

void UART_SendByte(u8 Data)


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

社区闲人 发表于 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);
}

ulvtkb126 发表于 2024-1-11 17:14:26

ADC配置 可以参考手册上的程序

_奶咖君_ 发表于 2024-1-11 17:43:59


你这从那淘来的程序,,,定时器的初值有问题

_奶咖君_ 发表于 2024-1-11 17:45:27

本帖最后由 _奶咖君_ 于 2024-1-11 17:51 编辑

还有一件事,你这里发送的2是数值2不是字符2
你在串口接收的时候也要注意以什么显示

wangxiangtan 发表于 2024-1-11 18:40:26

https://www.stcaimcu.com/forum.php?mod=viewthread&tid=6178&page=1#pid52274

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

Honsiti 发表于 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

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

感谢指导 明天我试一试

Honsiti 发表于 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码所对应的字符
页: [1] 2
查看完整版本: 串口 配置求助