我最近完成了一个电子琴控制板,采用2个MCU,一个是STC15作扫描键盘用(12X8),得到的音符送给STC12再处理,一切妥当,
但开机时偶尔会出现怪现象,我的程序开始时会有一段延迟程序,指示灯会闪,几秒后就进入主程序,但偶尔会开机后得等一段长
时间(约半分钟)再进入主程序,但不会死机,操作也正常,这条虫困扰了一段时间,而且是无解的,我因此怀疑是STC12的复位出现问题。
我的STC12的晶振频率是18M,根据手册:
复位电路:时钟频率低于12M时,可以不用C1,R1接1K电阻到地时钟频率高于12M时,建议使用第二复位功能。
我因为一开始就用11M的晶振,所以就用1K接地,后来改用18M了,还是1K接地,好像也没事,如今到了定型了,就出现这个问题,而且似乎
没有解决之道,改回11M的话,所有UART的定时器都得改,红外线程序的定时LOOP得重新测定,更何况也不确定用11M之后问题就得到解决,
最要命的是那个RST2的脚已经给触摸IC用了,无法使用第二复位功能。
我以前写程序曾经用到这个软重置命令:MOV 0C7H, #00100000B ;RESET TO AP 去重置STC12,发现偶尔会失败,所以每次都用两次命令,
算是成功了,但也发现一些寄存器或RAM并没有归零,所以都在开始处先来个CLEAN RAM的动作:
MAIN:
CLEANRAM: ;THIS CLEAR INTERNAL RAM FFH TO 00H
MOV A, #0
MOV R0, #0FFH
CLEANRAM1:
MOV @R0, A
DJNZ R0, CLEANRAM1
总之我对STC12的复位充满疑惑,不知道各位前辈是否有这方面的经验可以分享,我现在设计电路都开始用STC8了,连那颗1K电阻也免了,
就不明白为何当年的STC12内建了什么MAX810的复位电路还会留下1K的尾巴,现在的STC15和STC8都割掉了,感恩啊!
至于我这片电子琴控制板该怎么善后呢?那天走街看风景忽然灵机一动,这上面不是有另一颗STC15吗?开机后就让STC15输出一个高电位
去复位STC12不就得了,还没去做,应该可以啦。
|