打印

从 STC8H1Kxx 升级到 STC8A8K64D4 串口乱码

[复制链接]
5629|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jrcsh|  楼主 | 2021-12-13 03:35 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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;
        }
    }
}

      
      下载视频         

使用特权

评论回复

相关帖子

沙发
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 | 只看该作者
养成代码注释的好习惯!

代码.png (408.27 KB )

代码.png

使用特权

评论回复
5
coody| | 2021-12-13 21:28 | 只看该作者
STC8H1Kxx与STC8A8K64D4的串口1、串口2完全兼容,不需要任何修改,就可以分别正常运行。

P1口语P3口无关的。

使用特权

评论回复
6
jrcsh|  楼主 | 2021-12-14 03:07 | 只看该作者
和厂家沟通 厂家哪边测试没有出现这个问题,提示是否 PCB 有问题,

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

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

使用特权

评论回复
评论
fpgamcudsp 2021-12-16 11:40 回复TA
测试一下电阻,再用示波器看看即可。 
7
jrcsh|  楼主 | 2021-12-14 03:08 | 只看该作者
henangongda123 发表于 2021-12-13 20:41
养成代码注释的好习惯!

  这个看心情~~~~~   

使用特权

评论回复
8
jrcsh|  楼主 | 2021-12-14 03:10 | 只看该作者
coody 发表于 2021-12-13 21:28
STC8H1Kxx与STC8A8K64D4的串口1、串口2完全兼容,不需要任何修改,就可以分别正常运行。

P1口语P3口无关的 ...

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

使用特权

评论回复
9
logan0279| | 2021-12-14 16:59 | 只看该作者
用STC几年了。这种问题不大可能的。
前段时间有个产品更换MCU型号以后出现问题,也一度怀疑是MCU的问题,最后反复排查才发现是最初的硬件电路就有问题。
你这个最好也是先排查一下你的代码、硬件电路等。

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

使用特权

评论回复
10
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 。。。。 真晕 )

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

228

主题

2350

帖子

18

粉丝