ネットで見かけたので同様なもの作ってみたが、実用的ではなかった。
- 分アップボタンで秒がリセットされる仕様。
- ポート数の制限で秒設定ボタンが設置出来ないため。
- 1Hz生成回路は別途作成して下さい。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;PIC 16F84A FOR BCD CLOCK. Rel1.00 inf102 S.H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INCLUDE "P16F84A.INC"
LIST p=16F84A
__CONFIG _LP_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MEM EQU 0X0C
C1S EQU MEM+0
C5mS EQU MEM+1
C02mS EQU MEM+2
CODEA EQU MEM+4
CODEB EQU MEM+5
CODEC EQU MEM+6
CODED EQU MEM+7
CODEE EQU MEM+8
CODEF EQU MEM+9
TMP EQU MEM+D'10'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 0
GOTO INIT
ORG 4H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INIT
BSF STATUS,RP0
CLRF TRISA
MOVLW B'01110000'
MOVWF TRISB
BCF STATUS,RP0
CLRF CODEA ;SEC1
CLRF CODEB ;SEC2
CLRF CODEC ;MIN1
CLRF CODED ;MIN2
CLRF CODEE ;HOUR1
CLRF CODEF ;HOUR2
CLRF TMP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; MOVLW 0 ; TEST CODE
; MOVWF CODEC
; MOVLW 0
; MOVWF CODED
; MOVLW 0
; MOVWF CODEF
; MOVLW 8
; MOVWF CODEE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LOOP ; MAIN LOOP
; MIN UP BUTTON;
BTFSC PORTB,4
GOTO NE2
CALL T1AS
INCF CODEC,F ; MIN UP
CLRF CODEA ; SEC CLEAR
CLRF CODEB ; SEC CLEAR
MOVF CODEC,W
SUBLW D'10'
BTFSS STATUS,Z
GOTO NE3
CLRF CODEC
INCF CODED
MOVF CODED,W
SUBLW D'6'
BTFSS STATUS,Z
GOTO NE3
CLRF CODED
NE2 ; HOUR UP BUTTON;
BTFSC PORTB,6
GOTO NE3
CALL T1AS
INCF CODEE
GOTO HOUR
NE3
;;;;;;;;;;;;;;;;;;;;;;;;; SEC 1桁目;
MOVLW 0XFF
MOVWF PORTB
MOVLW B'11111110'
MOVWF PORTA
MOVF CODEA,W
COMF CODEA,W
MOVWF PORTB
CALL T5mS
;;;;;;;;;;;;;;;;;;;;;;;;; SEC 2桁目;
MOVLW 0XFF
MOVWF PORTB
MOVLW B'11111101'
MOVWF PORTA
MOVF CODEB,W
COMF CODEB,W
MOVWF PORTB
CALL T5mS
;;;;;;;;;;;;;;;;;;;;;;;;; MIN 1桁目;
MOVLW 0XFF
MOVWF PORTB
MOVLW B'11111011'
MOVWF PORTA
MOVF CODEC,W
COMF CODEC,W
MOVWF PORTB
CALL T5mS
;;;;;;;;;;;;;;;;;;;;;;;;; MIN 2桁目;
MOVLW 0XFF
MOVWF PORTB
MOVLW B'11110111'
MOVWF PORTA
MOVF CODED,W
COMF CODED,W
MOVWF PORTB
CALL T5mS
;;;;;;;;;;;;;;;;;;;;;;;;; HOUR 1桁目;
MOVLW 0XFF
MOVWF PORTB
MOVLW B'11101111' ;PORTA で切り替え;;
MOVWF PORTA
MOVF CODEE,W
COMF CODEE,W
MOVWF PORTB
CALL T5mS
;;;;;;;;;;;;;;;;;;;;;;;;; HOUR 2桁目;;
MOVLW 0XFF
MOVWF PORTA
BSF CODEF,7
MOVF CODEF,W
COMF CODEF,W
MOVWF PORTB ;PORTB で切り替えとデータ出力;;
BCF CODEF,7
CALL T5mS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BTFSS PORTB,5
GOTO CNTUPCHK
CLRF TMP
GOTO LOOP
CNTUPCHK
BTFSC TMP,0
GOTO LOOP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INC ; SEC COUNT UP
MOVLW 1
MOVWF TMP
; SEC=SEC+1
INCF CODEA,F
; SEC 1桁目;;;;;;;;;;;;;;;;;;;;;;;;;
MOVF CODEA,W
SUBLW D'10'
BTFSS STATUS,Z
GOTO LOOP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INCF CODEB ; SEC 2桁目+1;;
CLRF CODEA ; SEC 1桁目クリア;;
; SEC 2桁目;;;;;;;;;;;;;;;;;;;;;;;;;
MOVF CODEB,W
SUBLW D'6'
BTFSS STATUS,Z
GOTO LOOP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CLRF CODEB
INCF CODEC,F
; MIN 1桁目;;;;;;;;;;;;;;;;;;;;;;;;;
MOVF CODEC,W
SUBLW D'10'
BTFSS STATUS,Z
GOTO LOOP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CLRF CODEC
INCF CODED,F
; MIN 2桁目;;;;;;;;;;;;;;;;;;;;;;;;;
MOVF CODED,W
SUBLW D'6'
BTFSS STATUS,Z
GOTO LOOP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CLRF CODED
INCF CODEE,F
HOUR ; HOUR ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOVF CODEE,W
SUBLW D'4'
BTFSC STATUS,Z
GOTO CHK2
; 下が4ではないので下が10になったか;;
MOVF CODEE,W
SUBLW D'10'
BTFSS STATUS,Z
GOTO LOOP
; 10 なのでクリアと桁上げ;;
INCF CODEF,F
CLRF CODEE
GOTO LOOP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CHK2 ; HOUR上が2確認;;
MOVF CODEF,W
SUBLW D'2'
BTFSS STATUS,Z
GOTO LOOP
; 24時だったのでHOUR クリア;;
CLRF CODEE
CLRF CODEF
GOTO LOOP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
T1AS
MOVLW d'250'
MOVWF C1S
T1SLP2
CALL T5mS
DECFSZ C1S,F
GOTO T1SLP2
RETURN
T5mS MOVLW d'10'
MOVWF C5mS
T5mLP
CALL T02mS
DECFSZ C5mS,F
GOTO T5mLP
RETURN
T02mS
MOVLW d'10'
MOVWF C02mS
T02mLP NOP
DECFSZ C02mS,F
GOTO T02mLP
RETURN
END