modbus 发表于 2018-5-31 21:59:10

STC8的PCA是不是有BUG?

STC8的PCA(P2.2、P2.3)用作高速输出功能,当用指令置位或复位P2上的其他非PCA功能的端口(比如P2.7)时,PCA高速输出端口P2.2和P2.3状态会乱

health 发表于 2018-5-31 23:36:49

之前很老的型号存在这个问题,数据手册中有提到。
后来新出的型号,就没有这方面的描述了,应该是不存在这个问题了。
难道现在最新的STC8还有这个问题?

modbus 发表于 2018-6-1 10:03:10

health 发表于 2018-5-31 23:36
之前很老的型号存在这个问题,数据手册中有提到。
后来新出的型号,就没有这方面的描述了,应该是不存在这 ...

实测还是有这问题,是不是STC觉得这个功能用的人少,压根就没管这个BUG

小李非刀 发表于 2018-6-1 16:29:59

STC8A8K64S4A12,我手上有D版本、E版本、F版本、G版本,按楼主工能要求测试,没发现楼主说的问题,IO之间并无干涉,各自独立工作。

modbus 发表于 2018-6-1 17:12:06

小李非刀 发表于 2018-6-1 16:29
STC8A8K64S4A12,我手上有D版本、E版本、F版本、G版本,按楼主工能要求测试,没发现楼主说的问题,IO之间并 ...

你用PCA的高速脉冲输出功能(P2.3~P2.6)实现一个PWM,占空比20%,周期几ms,然后在主程序中不断的置位和复位P2.7,看看占空比是不是一会20%,一会80%,但如果只把主程序中的操作P2.7的指令都去掉,占空比就一直是20%

modbus 发表于 2018-6-1 17:12:47

我用的是STC8A4K32S2A12

su33691 发表于 2018-6-1 17:14:35

楼主放代码出来,我手头也有STC8A的D,F版,测试一下,看有无问题。

modbus 发表于 2018-6-1 17:44:20

su33691 发表于 2018-6-1 17:14
楼主放代码出来,我手头也有STC8A的D,F版,测试一下,看有无问题。

下周放代码,现在代码不在手头,真希望不是芯片BUG,如果是就麻烦了,我们已经批量了的产品

modbus 发表于 2018-6-4 11:53:06

su33691 发表于 2018-6-1 17:14
楼主放代码出来,我手头也有STC8A的D,F版,测试一下,看有无问题。

      CCAP3H EQU 0FDH
        CCAP3L EQU 0EDH
        CCAPM3 EQU 0DDH
        CH EQU 0F9H
        CL EQU 0E9H
        CCON EQU 0D8H
        CMOD EQU 0D9H
        P1M0 EQU 92H
        P1M1 EQU 91H
        RSTCFG EQU 0FFH
        P_SW1 EQU 0A2H
        P_SW2 EQU 0BAH
        CLKDIV EQU 0FE01H
;==============================================================
        ORG 0000H
        LJMP MAIN
;==============================================================
        ORG 003BH
;PCA中断服务程序
IPCA:        JBC CCON.3,IPCA0
        RETI
IPCA0:        PUSH ACC
        PUSH PSW
        JBC 00H,IPCA1        ;PWM输出
        SETB 00H                ;输出为高电平
        MOV A,#LOW(16000)
        ADD A,CCAP3L
        MOV CCAP3L,A
        MOV A,#HIGH(16000)
        ADDC A,CCAP3H
        MOV CCAP3H,A
        SJMP IPCA2
IPCA1:        MOV A,#LOW(4000)        ;输出为低电平
        ADD A,CCAP3L
        MOV CCAP3L,A
        MOV A,#HIGH(4000)
        ADDC A,CCAP3H
        MOV CCAP3H,A
IPCA2:        POP PSW
        POP ACC
        RETI
;======================================================================================================================
MAIN:   MOV RSTCFG,#43H        ;低压复位电压3.0V
      MOV P1M1,#80H
      MOV P1M0,#07H
      MOV SP,#80H
      MOV P_SW2,#80H
      MOV DPTR,#CLKDIV
        CLR A
        MOVX @DPTR,A
        MOV P_SW2,#00H
      MOV P_SW1,#50H
      MOV CMOD,#0CH        ;PCA时钟为4MHz
      MOV CCAPM3,A
      SETB 00H
        SETB P2.6        ;PCA模块3高速输出
        MOV A,#5
        ADD A,CL
        MOV CCAP3L,A
        CLR A
        ADDC A,CH
        MOV CCAP3H,A
        MOV CCAPM3,#4DH
        MOV IE,#80H
      MOV CCON,#40H

LBL1:        NOP
        SETB P2.7
        NOP
        NOP
        NOP
        CLR P2.7
        SJMP LBL1
;===========================================================
        END

modbus 发表于 2018-6-4 11:57:31

把操作P2.7的指令去掉,输出脉冲的高电平80%,低电平20%,频率200Hz,脉冲很好不抖动,也符合程序的结果,把操作P2.7的指令加上脉冲就乱了

饭桶 发表于 2018-6-4 12:45:10

一个经验:中断程序中别放太长的代码。应该进行散转或者其它办法。

modbus 发表于 2018-6-4 13:04:58

饭桶 发表于 2018-6-4 12:45
一个经验:中断程序中别放太长的代码。应该进行散转或者其它办法。

中断程序执行最长只需要21个时钟也叫长?

饭桶 发表于 2018-6-4 13:25:30

不止和执行周期长度有关,和代码长度也有关,因为后面是其它中断的入口地址。

小李非刀 发表于 2018-6-6 22:11:44

感谢楼主,经过测试,楼主说的问题确实存在,已告知STC公司。我个人分析,应该是多级流水线与“读-修改-写”指令的协调问题,我也在等STC官方的核查回复。
页: [1]
查看完整版本: STC8的PCA是不是有BUG?