关于STC15F104E单片机中断的问题请教大家
我编了一个非常简单的汇编程序:单片机在正常情况下不断的做延时待机循环,当有外部中断INTO来得时候,跳到中断执行中断,完毕之后又回到延时待机循环。单片机加电后可以执行正常的外部随机中断,当运行了几个小时候,随机中断就不能执行了。但是单片机还能正常的执行延时待机循环非常奇诡的问题。单片机型号是所STC15F104E,程序中我也用了看门狗。想不通为什么几个小时候中断就不能正常执行了,重启后一切又正常了。如果是干扰的话,单片机应该死机呀,为什么还能执行正常的待机循环程序。这里请请高手指点一下是什么问题,先感谢了。
程序很简单如下所示:
WDT_CONTRDATA 0C1H ;STC15F看门狗标志位
org 0000H
JMP Main ;跳转到主程序MAIN
ORG 0003H ;INT0的中断服务子程序向量地址为0003H
JMP Charging
MAIN:
; MOV WDT_CONTR,#00111111B
MOV SP, #7FH ;设定堆栈指针
SETB IT0
SETB EX0
SETB EA
START:
CLR P3.3
LCALL YS5S
;MOV WDT_CONTR,#00111111B
LCALL YS5S
; MOV WDT_CONTR,#00111111B
LCALL YS5S
;MOV WDT_CONTR,#00111111B
LCALL YS5S
;MOV WDT_CONTR,#00111111B
LCALL YS5S
;MOV WDT_CONTR,#00111111B
LCALL YS5S
; MOV WDT_CONTR,#00111111B
LCALL YS5S
; MOV WDT_CONTR,#00111111B
SETB P3.3
LCALL YS5S
; MOV WDT_CONTR,#00111111B
LOOP:
CLRP3.3
LCALL YS5S
; MOV WDT_CONTR,#00111111B
LCALL YS5S
; MOV WDT_CONTR,#00111111B
LCALL YS5S
;MOV WDT_CONTR,#00111111B
SETB P3.3
LCALL YS5S
; MOV WDT_CONTR,#00111111B
LCALL YS5S
; MOV WDT_CONTR,#00111111B
LCALL YS5S
; MOV WDT_CONTR,#00111111B
LCALL YS5S
; MOV WDT_CONTR,#00111111B
LJMPLOOP
Charging:
PUSH ACC ;将累加器的值压入堆栈保存
PUSH PSW ;将PSW的值压入堆栈保存
SETB RS0 ;设定工作寄存器组0
CLRRS1
CLR P3.3
CLR P3.4
CLR P3.0
CLR P3.1
LCALL YS5S
SETB P3.4
;MOV WDT_CONTR,#00111111B
LCALL YS5S
;MOV WDT_CONTR,#00111111B
LCALL YS5S
;MOV WDT_CONTR,#00111111B
LCALL YS5S
; MOV WDT_CONTR,#00111111B
LCALL YS5S
; MOV WDT_CONTR,#00111111B
LCALL YS5S
; MOV WDT_CONTR,#00111111B
SETB P3.3
SETB P3.0
SETB P3.1
POP PSW ;从堆栈取回PSW的值
POP ACC ;从堆栈取回ACC的值
NOP
NOP
RETI
YS5S:
MOV R7,#0FEH
DL1:
MOV R6,#0E8H
DL0:
MOV R5,#0FDH
DJNZ R5,$
DJNZ R6,DL0
DJNZ R7,DL1
MOV R5,#989H
DJNZ R5,$
NOP
NOP
RET
END
程序中我我没有使用看门狗 据STC的人说,STC15F104E的中断有问题,已经在改版中了.... 看来这型号的单片机还真不能用了 STC15系列(A版)的外部中断有问题,其它中断可正常使用。
如果实在需要外部中断,可以用定时器0/1的外部计数溢出中断代替。
至于B版,仍在浮云中…… 15F系列B版难产快1年了。老妖供货不稳定也不是一时半会了,搬家怕是个失误 看来楼主搞开发都不用看技术手册了。 回复【5楼】xpxp
-----------------------------------------------------------------------
说实话,老妖的手册看得我也头大 这个程序,没有用到计数器,如果STC片有电路设计方面问题,不应该在运行几小时后才出现,可以考虑是不是硬件热稳定性不好或者其它什么原因导致的IT0、EX0被清0了。在程序的主循环中加两个IT0与EX0置1的操作看看还这样不。 stc12c5204ad 开始中断可以,测试几天后外中断不行了,外中断p3.2 I/O口还是好的,有人遇到过没有? 遇到了,解决方法同3楼所示 已经放弃 15F104E 了,各种不稳定
页:
[1]