cdust 发表于 2020-7-26 14:31:43

请教STC8串口2发送的第一个数据错误问题

程序直接使用下载软件的例子稍微修改了下,但是发送的数据第一个居然不对。
#include "reg51.h"
#include "intrins.h"

#define FOSC            11059200UL
#define BRT             (65536 - FOSC / 115200 / 4)

sfr   AUXR      =   0x8e;
sfr   T2H         =   0xd6;
sfr   T2L         =   0xd7;
sfr   S2CON       =   0x9a;
sfr   S2BUF       =   0x9b;
sfr   IE2         =   0xaf;

bit busy;
char wptr;
char rptr;
char buffer= {0x02,0x01,0x01,0x02,0xb8,0x0b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x34};

void Uart2Isr() interrupt 8
{
    if (S2CON & 0x02)
    {
      S2CON &= ~0x02;
      busy = 0;
    }
    if (S2CON & 0x01)
    {
      S2CON &= ~0x01;
      buffer = S2BUF;
      wptr &= 0x0f;
    }
}

void Uart2Init()
{
    S2CON = 0x10;
    T2L = BRT;
    T2H = BRT >> 8;
    AUXR = 0x14;
    wptr = 0x00;
    rptr = 0x00;
    busy = 0;
}

void Uart2Send(char dat)
{
    while (busy);
    busy = 1;
    S2BUF = dat;
}

void Uart2SendStr(char *p)
{
    while (*p)
    {
      Uart2Send(*p++);
    }
}


void Delay8000ms()                //@11.0592MHz
{
    unsigned char i, j, k;

    i = 193;
    j = 212;
    k = 154;
    do
    {
      do
      {
            while (--k);
      } while (--j);
    } while (--i);
}

void main()
{
    Uart2Init();
    IE2 = 0x01;
    EA = 1;
    Delay8000ms();
    //Uart2SendStr("Uart Test !\r\n");

    rptr=0x10;
    while (1)
    {
      if (rptr != wptr)
      {
            Uart2Send(buffer);
            rptr &= 0x0f;
      }
      if(rptr==0x00)
      {   Delay8000ms();
            rptr=0x10;
      }
    }
}
串口接收到的是00 01 01 02 B8 0B 00 00 00 00 00 00 00 00 03 34,第一个应该是02,找不到哪里出的问题

XTXB 发表于 2020-7-26 21:25:14

本帖最后由 XTXB 于 2020-7-27 15:51 编辑

加这两行代码ok:

1a2b3c 发表于 2020-7-26 22:09:32

软件不好找原因能不能直接上示波器看下出错字节的波形,人肉看一下每个bit对不对,

小李非刀 发表于 2020-7-27 22:08:06

可以直接下载STC-ISP里的范例程序,串口初始化后会发送一串字符串,没问题的。
第一个字节不对,也有可能是串口线的问题。

XTXB 发表于 2020-7-28 12:21:13

小李非刀 发表于 2020-7-27 22:08
可以直接下载STC-ISP里的范例程序,串口初始化后会发送一串字符串,没问题的。
第一个字节不对,也有可能是 ...

代码有BUG,   char buffer[16].......Uart2Send(buffe[rptr++])...... rptr=0x10;

armok. 发表于 2020-8-2 09:15:41

打赏!

庆祝论坛“打赏”功能实施, 现在开始发技术主题,可以获得打赏
https://www.amobbs.com/thread-5735948-1-1.html
页: [1]
查看完整版本: 请教STC8串口2发送的第一个数据错误问题