STC8的PCA是不是有BUG?
STC8的PCA(P2.2、P2.3)用作高速输出功能,当用指令置位或复位P2上的其他非PCA功能的端口(比如P2.7)时,PCA高速输出端口P2.2和P2.3状态会乱 之前很老的型号存在这个问题,数据手册中有提到。后来新出的型号,就没有这方面的描述了,应该是不存在这个问题了。
难道现在最新的STC8还有这个问题?
health 发表于 2018-5-31 23:36
之前很老的型号存在这个问题,数据手册中有提到。
后来新出的型号,就没有这方面的描述了,应该是不存在这 ...
实测还是有这问题,是不是STC觉得这个功能用的人少,压根就没管这个BUG STC8A8K64S4A12,我手上有D版本、E版本、F版本、G版本,按楼主工能要求测试,没发现楼主说的问题,IO之间并无干涉,各自独立工作。 小李非刀 发表于 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% 我用的是STC8A4K32S2A12 楼主放代码出来,我手头也有STC8A的D,F版,测试一下,看有无问题。 su33691 发表于 2018-6-1 17:14
楼主放代码出来,我手头也有STC8A的D,F版,测试一下,看有无问题。
下周放代码,现在代码不在手头,真希望不是芯片BUG,如果是就麻烦了,我们已经批量了的产品 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
把操作P2.7的指令去掉,输出脉冲的高电平80%,低电平20%,频率200Hz,脉冲很好不抖动,也符合程序的结果,把操作P2.7的指令加上脉冲就乱了 一个经验:中断程序中别放太长的代码。应该进行散转或者其它办法。 饭桶 发表于 2018-6-4 12:45
一个经验:中断程序中别放太长的代码。应该进行散转或者其它办法。
中断程序执行最长只需要21个时钟也叫长? 不止和执行周期长度有关,和代码长度也有关,因为后面是其它中断的入口地址。 感谢楼主,经过测试,楼主说的问题确实存在,已告知STC公司。我个人分析,应该是多级流水线与“读-修改-写”指令的协调问题,我也在等STC官方的核查回复。
页:
[1]