英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流

标题: [求助]延时问题 [打印本页]

作者: min    时间: 2012-8-18 17:18
标题: [求助]延时问题
  LIST P=12F675
  INCLUDE "P12F675.INC"
  __config(0x31DC)
;------------------------------------------------------------------------------------------
S_TEMP   EQU   31H
W_TEMP      EQU   32H
STATUS_TEM EQU   33H
FLAG1   EQU  34H
FLAG2   EQU  35H
W    EQU  0
F    EQU  1
;COUNT1   EQU   21H            ; 延时量
RTCC   EQU  1
;RA    EQU  5
;RB    EQU  6
;F8    EQU  8
F9    EQU  9
;*********************************************************************************
    ORG     00H
    NOP
    GOTO    START
;------------------------------------------------------------------------------------------
;中断服务程序
;------------------------------------------------------------------------------------------
    ORG     04H  
  MOVWF   W_TEMP
    SWAPF   STATUS,W
    MOVWF   S_TEMP

    BTFSS   GPIO,GPIO5          ;GPIO5是否按下?
    CALL    DELAY     ;去抖
    BTFSS   GPIO,GPIO5
    GOTO    RB0         
RE        ;还原中断现场
SWAPF   S_TEMP,W  ;中断返回
    MOVWF   STATUS
    SWAPF   W_TEMP,F
    SWAPF   W_TEMP,W
    MOVF    GPIO,W   ; 唤醒标志清零 必须读取!!!
    BCF     INTCON,GPIF         ;清除RB中断标志位
    RETFIE                  
RB0   
INCF    FLAG2,F
RBB        
BTFSS   GPIO,GPIO5          ;等待GPIO5释放
    GOTO    RBB   
    GOTO    RE
;------------------------------------------------------------------------------------------

;主程序
;------------------------------------------------------------------------------------------
START         
BCF  STATUS,RP0  
    CLRF    GPIO
    MOVLW   07h
    MOVWF   CMCON
    MOVLW   0c8H
    MOVWF   INTCON           ;总中断和GPIO电平变化中断使能
   
    BSF     STATUS,RP0       ;选择数据存储器体1
    MOVLW   0FH
    MOVWF   OPTION_REG       ;开启内部弱上拉
    MOVLW   38H
    MOVWF   TRISIO           ;GPIO端口方向设定
    BSF  WPU,5
    movlw   20h
    movwf   IOC
    CLRF    ANSEL
    BCF     STATUS,RP0       ;选择数据存储器体0
    BCF     GPIO,GPIO2
; BCF     GPIO,GPIO1
    ;CLRF    FLAG2       ; 清除FLAG2
LOOP1
    BTFSS   FLAG2,0    ;判断FLAG2的标志位是否为0
    GOTO    LOP1
    BSF     GPIO,GPIO2  ;点亮(GPI2口的LED)
; BSF     GPIO,GPIO1  ;点亮(GPI1口的LED)
    CALL    DELAY2   ;调延时8S
   ; GOTO    OUT
GOTO LOP1
LOP1
BCF     GPIO,GPIO2
; BCF     GPIO,GPIO1  ;关闭(GPI1口的LED)
CLRF    FLAG2       ; 清除FLAG2
SLEEP     ;睡眠
    NOP
OUT       ;唤醒
    GOTO    LOOP1

;------------------------------------------------------------------------------------------
;延时子程序
;------------------------------------------------------------------------------------------
DELAY
MOVLW   .10
MOVWF   22H
D1
MOVLW   0FFH
MOVWF   23H
D2
DECFSZ  23H,1
GOTO    D2
DECFSZ  22H,1
GOTO    D1
RETURN

DELAY1
    MOVLW   3FH              ;外循环常数
    MOVWF   20H              ;外循环寄存器
L1
MOVLW   02H              ;内循环常数
    MOVWF   21H              ;内循环寄存器
L2         
DECFSZ  21H,1            ;内循环寄存器递减
    GOTO    L2               ;继续内循环
    DECFSZ  20H,1            ;外循环寄存器递减
    GOTO    L1               ;继续外循环
    RETURN                   ;子程序返回

;---------延时8s-------------
DELAY2
     MOVLW    D'20'
     MOVWF     20H
P1
   MOVLW     0EBH
     MOVWF     21H
P2   
  MOVLW     0ECH
     MOVWF     22H
P3        
  DECFSZ    22H,F
     GOTO      P3
     DECFSZ    21H,F
     GOTO      P2
     DECFSZ    20H,F
     GOTO      P1
     RETURN
  END
;-------------------------------------------

红色部分,为什么延时8秒程序就会跑飞了,而1秒就可以

作者: star    时间: 2012-8-18 17:36
不知道有没有设置看门狗的呢,程序不完整,可以打个包,全部上传上来才好看




欢迎光临 英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 (http://enroobbs.com/) Powered by Discuz! X3.2