[求助]延时问题
LIST P=12F675INCLUDE "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秒就可以
不知道有没有设置看门狗的呢,程序不完整,可以打个包,全部上传上来才好看
页:
[1]