min 发表于 2012-8-18 17:18:16

[求助]延时问题

LIST P=12F675
INCLUDE "P12F675.INC"
__config(0x31DC)
;------------------------------------------------------------------------------------------
S_TEMP   EQU   31H
W_TEMP      EQU   32H
STATUS_TEM EQU   33H
FLAG1   EQU34H
FLAG2   EQU35H
W    EQU0
F    EQU1
;COUNT1   EQU   21H            ; 延时量
RTCC   EQU1
;RA    EQU5
;RB    EQU6
;F8    EQU8
F9    EQU9
;*********************************************************************************
    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         
BCFSTATUS,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端口方向设定
    BSFWPU,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
DECFSZ23H,1
GOTO    D2
DECFSZ22H,1
GOTO    D1
RETURN
DELAY1
    MOVLW   3FH            ;外循环常数
    MOVWF   20H            ;外循环寄存器
L1
MOVLW   02H            ;内循环常数
    MOVWF   21H            ;内循环寄存器
L2         
DECFSZ21H,1            ;内循环寄存器递减
    GOTO    L2               ;继续内循环
    DECFSZ20H,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:10

不知道有没有设置看门狗的呢,程序不完整,可以打个包,全部上传上来才好看
页: [1]
查看完整版本: [求助]延时问题