;24小時循環(huán)定時器
;*************************************
LIST P=PIC16F84A
#INCLUDE P16F84A.INC ;選定芯片型號
;*************************************
COUNTER1 EQU 1FH ;選定RAM內部地址用作計時的儲存器
COUNTER2 EQU 1EH ;命名為計數器
COUNTER3 EQU 1DH
COUNTER4 EQU 1CH
COUNTER5 EQU 1BH
COUNTER6 EQU 1AH
COUNTER7 EQU 19H
ORG 0 ;復位矢量
GOTO START
ORG D'12' ;從地址12開始存放程序
START MOVLW 0
BSF STATUS,RP0 ;選體1
MOVWF TRISB ;設B口為輸出
MOVLW B'00000001' ;設A口的0位為輸入
MOVWF TRISA
BCF STATUS,RP0 ;恢復到體0
CLRF PORTB
CLRW
CLRF COUNTER1
CLRF COUNTER2 ;選定的計數器清零
CLRF COUNTER3
CLRF COUNTER4
CLRF COUNTER5
CLRF COUNTER6
CLRF COUNTER7
;*********************************
LOOP0 BTFSC PORTA,0 ;按鍵按下,24小時定時開始
GOTO LOOP0
LOOPE CLRF COUNTER5 ;24小時定時一到,一次清零
MOVLW D'24'
MOVWF COUNTER6 ;設定24小時定時量
CLRF PORTB
HOUR CLRW
MOVLW D'60'
MOVWF COUNTER4 ;每小時的定時值
LOOPD MOVLW D'60'
MOVWF COUNTER7 ;每分的定時值
MIN CALL SECOND ;調用秒計時子程序
DECFSZ COUNTER7,1 ;積60秒(1分)
GOTO MIN
DECFSZ COUNTER4,1 ;積60分(1小時)
GOTO LOOPD
INCF COUNTER5,1 ;小時2進制計數
MOVF COUNTER5,0
MOVWF PORTB ;送B口LED顯示
DECFSZ COUNTER6,1
GOTO HOUR ;B口小時循環(huán)
GOTO LOOPE ;24小時到,跳到標號處從新循環(huán)
;*************************************
SECOND ORG D'80' ;秒定時子程序
BSF PORTB,7
LOOPT DECFSZ COUNTER1,1
GOTO LOOPT
DECFSZ COUNTER2,1
GOTO LOOPT
BCF PORTB,7
LOOPF INCFSZ COUNTER1,1
GOTO LOOPF
INCFSZ COUNTER2,1
GOTO LOOPF
CLRW
MOVLW 0X89
MOVWF COUNTER3
LOOPN INCFSZ COUNTER1,1
GOTO LOOPN
INCFSZ COUNTER3,1
GOTO LOOPN
MOVLW D'82'
MOVWF COUNTER1
LOOPV DECFSZ COUNTER1,1
GOTO LOOPV
RETURN
END