打印

关于STC15F104E单片机中断的问题请教大家

[复制链接]
4232|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gary2009|  楼主 | 2011-9-28 10:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 gary2009 于 2011-9-28 21:06 编辑

我编了一个非常简单的汇编程序:单片机在正常情况下不断的做延时待机循环,当有外部中断INTO来得时候,跳到中断执行中断,完毕之后又回到延时待机循环。单片机加电后可以执行正常的外部随机中断,当运行了几个小时候,随机中断就不能执行了。但是单片机还能正常的执行延时待机循环非常奇诡的问题。单片机型号是所STC15F104E,程序中我也用了看门狗。
想不通为什么几个小时候中断就不能正常执行了,重启后一切又正常了。如果是干扰的话,单片机应该死机呀,为什么还能执行正常的待机循环程序。这里请请高手指点一下是什么问题,先感谢了。

程序很简单如下所示:
WDT_CONTR  DATA 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:
       CLR  P3.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
      LJMP  LOOP
     
Charging:
   
    PUSH ACC                  ;将累加器的值压入堆栈保存
    PUSH PSW                  ;将PSW的值压入堆栈保存
    SETB RS0                  ;设定工作寄存器组0
    CLR  RS1
   
    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

程序中我我没有使用看门狗

相关帖子

沙发
ayb_ice| | 2011-9-28 16:44 | 只看该作者
程序BUG
上程序

使用特权

评论回复
板凳
gary2009|  楼主 | 2011-9-30 12:53 | 只看该作者
问题一解决,是这款单片机本身有BUG,我用得是A版的

使用特权

评论回复
地板
jxhbbhbb| | 2011-9-30 15:19 | 只看该作者
这款单片机是新出的A版,它的中断是有问题的,不稳定,不能使用,在B版中做了修正,这个问题我也遇到过。

使用特权

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

本版积分规则

11

主题

30

帖子

0

粉丝