问答

汇集网友智慧,解决技术难题

21ic问答首页 - 从 STC8H1Kxx 升级到 STC8A8K64D4 串口乱码

stc

从 STC8H1Kxx 升级到 STC8A8K64D4 串口乱码

jrcsh2021-12-13
本帖最后由 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[16];
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[wptr++] = 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++]);
            rptr &= 0x0f;
        }
    }
}

      
      下载视频         
回答 +关注 15
5674人浏览 9人回答问题 分享 举报
9 个回答
  • logan0279 发表于 2021-12-14 16:59
    用STC几年了。这种问题不大可能的。
    前段时间有个产品更换MCU型号以后出现问题,也一度怀疑是MCU的问题,最 ...

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


    产品的代码是  22  

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


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

    IO 口的焊接也有现有理想的疑是有短路情况(又不是这次的IO 。。。。 真晕 )
  • 用STC几年了。这种问题不大可能的。
    前段时间有个产品更换MCU型号以后出现问题,也一度怀疑是MCU的问题,最后反复排查才发现是最初的硬件电路就有问题。
    你这个最好也是先排查一下你的代码、硬件电路等。

    从你的代码和你的描述来看,两者就互相冲突了。
    你描述的是MCU主频22.1184MHz,波特率9600,但你的代码里面用来计算波特率的代码部分系统主频设置是11.0592MHz,波特率115200。
  • coody 发表于 2021-12-13 21:28
    STC8H1Kxx与STC8A8K64D4的串口1、串口2完全兼容,不需要任何修改,就可以分别正常运行。

    P1口语P3口无关的 ...

    对阿~~~ 本来就无关联的~~~   P1  既然影响到 P3
  • henangongda123 发表于 2021-12-13 20:41
    养成代码注释的好习惯!

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

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

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

    fpgamcudsp 2021-12-16 11:40 回复TA
    测试一下电阻,再用示波器看看即可。 
  • STC8H1Kxx与STC8A8K64D4的串口1、串口2完全兼容,不需要任何修改,就可以分别正常运行。

    P1口语P3口无关的。
  • 养成代码注释的好习惯!
  • 1、头文件没有改,#include "STC8HX.h"也应该是#include "STC8H.h";
    2、每一行的代码都应该注释清楚,养成好习惯,方便查找问题;
    3、8A系列没用过,8H用过,可以肯定的告诉你,是你代码的问题,这类问题STC目前不会有了,十几年前用STC的时候问题还是很多,今年又用了一年,发现基本没问题了
  • 本帖最后由 jrcsh 于 2021-12-13 14:01 编辑

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

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

您需要登录后才可以回复 登录 | 注册