jrcsh 发表于 2021-12-13 03:35

从 STC8H1Kxx 升级到 STC8A8K64D4 串口乱码

本帖最后由 jrcsh 于 2021-12-14 03:09 编辑

从 8H1Kxx升级到 8A8K64D4   代码复制过去发现串口乱码, 花了一个晚上排查出

是配置了P1 口 引起 P3 口 的串口乱码, 有其他人也遇到这样吗?



以下代码主要引用至厂家例程:
//#include "reg51.h"                           
#include "STC8HX.h"
#include "intrins.h"

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

//s/fr   AUXR      =   0x8e;
//sfr   T2H         =   0xd6;
//sfr   T2L         =   0xd7;

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

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

      _nop_();
      _nop_();
      i = 5;
      j = 52;
      k = 195;
      do
      {
                do
                {
                        while (--k);
                } while (--j);
      } while (--i);
}

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

void UartInit()
{
    SCON = 0x50;
    T2L = BRT;
    T2H = BRT >> 8;
    AUXR = 0x15;
    wptr = 0x00;
    rptr = 0x00;
    busy = 0;
}

void UartSend(char dat)
{
    while (busy);
    busy = 1;
    SBUF = dat;
}

void UartSendStr(char *p)
{
    while (*p)
    {
      UartSend(*p++);
    }
}

void main()
{
   P1M1 = 0x00;                              //设置P1强推
   P1M0 = 0xf0;// 8H1k f0

    UartInit();
    ES = 1;
    EA = 1;
    UartSendStr("Uart Test !\r\n");

    while (1)
    {
aaa++; if(aaa>10){aaa=0;    UartSendStr("Uart Test ! #\r\n"); }

         Delay100ms();      
          UartSendStr("Uart Test !\r\n");

      if (rptr != wptr)
      {
            UartSend(buffer);
            rptr &= 0x0f;
      }
    }
}

      
      下载视频         

jrcsh 发表于 2021-12-13 13:58

本帖最后由 jrcsh 于 2021-12-13 14:01 编辑

P1M1 = 0x00;      
P1M0 = 0xf0;// 8H1k f0

设置的是p1口,影响到了P3   p30.31上的串口。 22.118400mhz9600   出来的数据,变成了乱码。

henangongda123 发表于 2021-12-13 20:40

1、头文件没有改,#include "STC8HX.h"也应该是#include "STC8H.h";
2、每一行的代码都应该注释清楚,养成好习惯,方便查找问题;
3、8A系列没用过,8H用过,可以肯定的告诉你,是你代码的问题,这类问题STC目前不会有了,十几年前用STC的时候问题还是很多,今年又用了一年,发现基本没问题了

henangongda123 发表于 2021-12-13 20:41

养成代码注释的好习惯!

coody 发表于 2021-12-13 21:28

STC8H1Kxx与STC8A8K64D4的串口1、串口2完全兼容,不需要任何修改,就可以分别正常运行。

P1口语P3口无关的。

jrcsh 发表于 2021-12-14 03:07

和厂家沟通 厂家哪边测试没有出现这个问题,提示是否 PCB 有问题,

初步排查 PCB串口线有和P1 靠近的是一个过孔距离 0.2mm 左右   

第二块 PCB 成品 测试还是有这个问题.......   看来 PCB或者这批 MCU有问题的可能性大    PCB 洗板水影响电汽绝缘的可能性有点小...不排除是助焊剂残留?

jrcsh 发表于 2021-12-14 03:08

henangongda123 发表于 2021-12-13 20:41
养成代码注释的好习惯!

这个看心情~~~~~   

jrcsh 发表于 2021-12-14 03:10

coody 发表于 2021-12-13 21:28
STC8H1Kxx与STC8A8K64D4的串口1、串口2完全兼容,不需要任何修改,就可以分别正常运行。

P1口语P3口无关的 ...

对阿~~~ 本来就无关联的~~~   P1既然影响到 P3

logan0279 发表于 2021-12-14 16:59

用STC几年了。这种问题不大可能的。
前段时间有个产品更换MCU型号以后出现问题,也一度怀疑是MCU的问题,最后反复排查才发现是最初的硬件电路就有问题。
你这个最好也是先排查一下你的代码、硬件电路等。

从你的代码和你的描述来看,两者就互相冲突了。
你描述的是MCU主频22.1184MHz,波特率9600,但你的代码里面用来计算波特率的代码部分系统主频设置是11.0592MHz,波特率115200。

jrcsh 发表于 2021-12-17 14:24

logan0279 发表于 2021-12-14 16:59
用STC几年了。这种问题不大可能的。
前段时间有个产品更换MCU型号以后出现问题,也一度怀疑是MCU的问题,最 ...

从你的代码和你的描述来看,两者就互相冲突了。
你描述的是MCU主频22.1184MHz,波特率9600,但你的代码里面用来计算波特率的代码部分系统主频设置是11.0592MHz,波特率115200。


产品的代码是22

引用 厂家代码来测试用的是 11


问题应该定位在硬件的可能性比较大概率了,   因为是新片所以BUG无限可能~~~~   

IO 口的焊接也有现有理想的疑是有短路情况(又不是这次的IO 。。。。 真晕 )
页: [1]
查看完整版本: 从 STC8H1Kxx 升级到 STC8A8K64D4 串口乱码