BCD CLOCK PIC 16F84A

ネットで見かけたので同様なもの作ってみたが、実用的ではなかった。

<iframe width="560" height="315" src="https://www.youtube.com/embed/5baVJprnXCU?si=TFe23tkK74ww3B5f" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

例)16:35:35
![P1120749.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821882/c0af5c18-bdab-b1e2-9538-db04083e2db9.jpeg)
![P1120713.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821882/78cbfb0f-5b78-8412-dffb-a24d4040001f.jpeg)

![1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821882/770c1816-ea45-4271-83b3-3992b8b8a8e2.jpeg)


- 分アップボタンで秒がリセットされる仕様。
- ポート数の制限で秒設定ボタンが設置出来ないため。
- 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
```