;=========================================================================
;     電子マスカット:青いデジタルアラームクロック ver.1.0
;     いしづかやすゆき:2006.11.01
;=========================================================================

;-----使用デバイス------------------------------------------------------------
	LIST	P=PIC16F873A
	INCLUDE	"P16F873A.INC"

;-----コンフィグ設定------------------------------------------------------------
	;発振回路=HSモード
	;コードプロテクト=無効
	;パワーオンリセット=有効
	;ウォッチドッグタイマー=無効
	;デバッグモード=無効
	__CONFIG _HS_OSC & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF

;-----レジスタ定義(Bank0:20h〜7Fh)--------------------------------------------------
SAVE_W		EQU	H'0020'	;割込み用Wレジスタセーブ用
SAVE_S		EQU	H'0021'	;割込み用STATUSレジスタセーブ用
SCNT_U		EQU	H'0022'	;1秒カウンタ（上位）
SCNT_D		EQU	H'0023'	;1秒カウンタ（下位）
TSCNT_U		EQU	H'0024'	;タイマー用1秒カウンタ（上位）
TSCNT_D		EQU	H'0025'	;タイマー用1秒カウンタ（下位）

CSTATU		EQU	H'0026'	;各種ステイタス
				;bit7=アラーム調整中		:1で調整中
				;bit6=アラームフラグ		:1でアラーム有効
				;bit5=アラーム動作フラグ	;1で動作中
				;bit4=タイマーモード		:1でタイマーモード
				;bit3=12/24モード		:1で24時間モード
				;bit2=コロンフラグ		:1で点灯
				;bit1=タイマーモードコロンフラグ	:1で点灯
				;bit0=未使用

C_DIG_S		EQU	H'0027'	;クロック（秒）HEX
C_DIG_ML	EQU	H'0028'	;クロック（*分）BCD
C_DIG_MH	EQU	H'0029'	;クロック（**分）BCD
C_DIG_H		EQU	H'002A'	;クロック（時）HEX

T_DIG_SL	EQU	H'002B'	;タイマー（*秒）BCD
T_DIG_SH	EQU	H'002C'	;タイマー（**秒）BCD
T_DIG_ML	EQU	H'002D'	;タイマー（*分）BCD
T_DIG_MH	EQU	H'002E'	;タイマー（**分）BCD

A_DIG_ML	EQU	H'002F'	;アラーム（*分）BCD
A_DIG_MH	EQU	H'0030'	;アラーム（**分）BCD
A_DIG_H		EQU	H'0031'	;アラーム（時）HEX

CO_1		EQU	H'0032'	;タイムディレイ用
CO_2		EQU	H'0033'	;タイムディレイ用
CO_3		EQU	H'0034'	;各種カウンタ用
CO_4		EQU	H'0035'	;各種カウンタ用
CO_5		EQU	H'0036'	;各種カウンタ用
CO_6		EQU	H'0037'	;アラーム動作時間カウンタ

IN7SEG		EQU	H'0038'
OUT7SEG		EQU	H'0039'

TIM_SET_T1	EQU	H'0040'	;時刻調整モードを抜けるまでの時間
TIM_SET_T2	EQU	H'0007'	;時刻調整モード時の表示点滅時間
SW_REP		EQU	H'000F'	;調整モード時のスイッチリピート時間
ALARM_TIME	EQU	H'000A'	;アラーム動作時間（分）

;-----プログラムスタート---------------------------------------------------------
	ORG	H'0000'
	GOTO	STRAT
	ORG	H'0004'
	GOTO	INT

;-----イニシャル設定-----------------------------------------------------------
STRAT
	BCF	INTCON,GIE	;全割込み禁止
	BSF	STATUS,RP0	;Bank1へ移行
	MOVLW	H'0006'
	MOVWF	ADCON1		;ポートAは全てデジタルI/O使用
	MOVLW	B'00011111'
	MOVWF	TRISA		;ポートAはBIT4-0を入力端子で使用
	CLRF	TRISB		;ポートBは全て出力端子で使用
	CLRF	TRISC		;ポートCは全て出力端子で使用
	MOVLW	B'00000001'
	MOVWF	OPTION_REG	;タイマー0におけるプリスケーラを4
	BCF	STATUS,RP0	;Bank0へ移行
	BSF	INTCON,T0IE	;タイマ0の割込み有効

	CLRF	PORTB
	CLRF	PORTC
	CLRF	CSTATU

	CLRF	C_DIG_S
	CLRF	C_DIG_ML
	CLRF	C_DIG_MH
	CLRF	C_DIG_H

	CLRF	T_DIG_SL
	CLRF	T_DIG_SH
	CLRF	T_DIG_ML
	CLRF	T_DIG_MH

	CLRF	A_DIG_ML
	CLRF	A_DIG_MH
	CLRF	A_DIG_H

	BCF	PORTA,5

	GOTO	TEIDEN

;-----メインルーチン----------------------------------------------------------------
MAIN
	CALL	CKDISP
	BTFSS	PORTA,0		;現在時刻調整キーが押された
	CALL	CKSET
	BTFSS	PORTA,1		;SET00キーが押された
	CALL	SET00
	BTFSS	PORTA,2		;タイマーモードキーが押された
	CALL	TIMER
	BTFSS	PORTA,3		;12/24表示切替キーが押された
	CALL	SW24
	BTFSS	PORTA,4		;アラームキーが押された
	CALL	ALARM
	GOTO	MAIN

;-----アラームモード----------------------------------------------------------------
ALARM
	BSF	CSTATU,7	;アラーム調整中フラグON
	BSF	CSTATU,7
	CALL	CKDISP
	BTFSC	PORTA,4		;ちゃんとスイッチが押下されているか確認
	GOTO	ALARM_5
	BTFSC	CSTATU,6	;アラームフラグ確認
	GOTO	ALARM_4		;アラーム解除へ
	BSF	CSTATU,6	;アラームフラグセット
ALARM_1
	MOVLW	TIM_SET_T1
	MOVWF	CO_3
ALARM_2
	MOVLW	TIM_SET_T2
	MOVWF	CO_4
ALARM_3
	BTFSS	PORTA,2		;「時送り」が押下された
	CALL	ALHSET
	BTFSS	PORTA,3		;「分送り」が押下された
	CALL	ALMSET
	CALL	TIM5
	DECFSZ	CO_4
	GOTO	ALARM_3
	CALL	ALDISP
	DECFSZ	CO_3
	GOTO	ALARM_2
	GOTO	ALARM_6
ALARM_4
	BCF	CSTATU,6	;アラームフラグクリア
	BCF	CSTATU,5	;アラーム動作フラグクリア
	BCF	PORTC,0		;アラーム出力OFF
ALARM_5
	CALL	TIM1
	CALL	CKDISP
	BTFSS	PORTA,4		;タイマースイッチが離されるまで待つ
	GOTO	ALARM_5
ALARM_6
	BCF	CSTATU,7	;アラーム調整中フラグOFF
	RETURN

;-----アラーム時刻調整「分」------------------------------------------------------
ALMSET
	CALL	ALDISP
	BTFSC	PORTA,3		;確実に「分送り」が押下されているか
	GOTO	ALMSET_4
ALMSET_1
	INCF	A_DIG_ML	;「*0分」加算
	MOVLW	D'10'
	SUBWF	A_DIG_ML,W
	BTFSS	STATUS,C
	GOTO	ALMSET_2
	CLRF	A_DIG_ML	;「10分」なら0にする
	INCF	A_DIG_MH	;「0*分」加算
	MOVLW	D'6'
	SUBWF	A_DIG_MH,W
	BTFSS	STATUS,C
	GOTO	ALMSET_2
	CLRF	A_DIG_MH	;「60分」なら0にする
ALMSET_2
	MOVLW	SW_REP
	MOVWF	CO_5
ALMSET_3
	CALL	ALDISP
	DECFSZ	CO_5
	GOTO	ALMSET_3
	BTFSS	PORTA,3		;「分送り」が押下され続けているか
	GOTO	ALMSET_1
ALMSET_4
	MOVLW	TIM_SET_T1	;時刻調整モード時間延長
	MOVWF	CO_3
	RETURN

;-----アラーム時刻調整「時」------------------------------------------------------
ALHSET
	CALL	ALDISP
	BTFSC	PORTA,2		;確実に「時送り」が押下されているか
	GOTO	ALHSET_4
ALHSET_1
	INCF	A_DIG_H		;「時」加算
	MOVLW	D'24'
	SUBWF	A_DIG_H,W
	BTFSS	STATUS,C
	GOTO	ALHSET_2
	CLRF	A_DIG_H		;「24時」なら0にする
ALHSET_2
	MOVLW	SW_REP
	MOVWF	CO_5
ALHSET_3
	CALL	ALDISP
	DECFSZ	CO_5
	GOTO	ALHSET_3
	BTFSS	PORTA,2		;「時送り」が押下され続けているか
	GOTO	ALHSET_1
ALHSET_4
	MOVLW	TIM_SET_T1	;時刻調整モード時間延長
	MOVWF	CO_3
	RETURN

;-----アラーム時刻表示-------------------------------------------------------------
ALDISP
	BSF	PORTC,3		;コロン点灯
	BTFSC	CSTATU,6	;アラームフラグ確認
	BSF	PORTC,1		;アラームランプ点灯
;------------------------------
	BTFSC	CSTATU,3	;12/24モード確認
	GOTO	ALDISP_1	;24時間表示へ
	MOVLW	D'12'
	SUBWF	A_DIG_H,W
	BTFSS	STATUS,C
	GOTO	ALDISP_0	;午前
	BSF	PORTC,2		;午後,PMランプ点灯
	GOTO	ALDISP_2
ALDISP_0
	BSF	PORTA,5		;AMランプ点灯
	GOTO	ALDISP_2
;------------------------------
ALDISP_1
	BSF	PORTC,7		;時上位の表示24時間表示
	MOVF	A_DIG_H,W
	CALL	HEX24H7SEG
	BCF	PORTC,7
;------------------------------
	BSF	PORTC,6		;時下位の表示24時間表示
	MOVF	A_DIG_H,W
	CALL	HEX24L7SEG
	BCF	PORTC,6
	GOTO	ALDISP_3	;分の表示へ
;------------------------------
ALDISP_2
	BSF	PORTC,7		;時上位の表示12時間表示
	MOVF	A_DIG_H,W
	CALL	HEX12H7SEG
	BCF	PORTC,7
;------------------------------
	BSF	PORTC,6		;時下位の表示12時間表示
	MOVF	A_DIG_H,W
	CALL	HEX12L7SEG
	BCF	PORTC,6
;------------------------------
ALDISP_3
	BSF	PORTC,5		;分上位の表示
	MOVF	A_DIG_MH,W
	CALL	BCD7SEG
	BCF	PORTC,5
;------------------------------
	BSF	PORTC,4		;分下位の表示
	MOVF	A_DIG_ML,W
	CALL	BCD7SEG
	BCF	PORTC,4
;------------------------------
	BCF	PORTC,3		;コロン消灯
	BCF	PORTA,5		;AMランプ消灯
	BCF	PORTC,2		;PMランプ消灯
	BCF	PORTC,1		;アラームランプ消灯
	RETURN

;-----タイマーモード----------------------------------------------------------------
TIMER
	CALL	CKDISP
	BTFSC	PORTA,2		;ちゃんとスイッチが押下されているか確認
	GOTO	TIMER_6
	BSF	CSTATU,1	;タイマーコロンフラグON
	GOTO	TIMER_2
TIMER_1
	BCF	CSTATU,4	;タイマーモードビットクリア
	BSF	CSTATU,1	;タイマーコロンフラグON
TIMER_2
	CLRF	T_DIG_SL
	CLRF	T_DIG_SH
	CLRF	T_DIG_ML
	CLRF	T_DIG_MH
	CALL	TIM1
	CALL	TIDISP
	BTFSS	PORTA,2		;タイマースイッチが離されるまで待つ
	GOTO	TIMER_2
	BTFSS	PORTA,3		;リセットスイッチが離されるまで待つ
	GOTO	TIMER_2
	MOVLW	H'000D'		;1秒カウンタ初期値セット
	MOVWF	TSCNT_U
	MOVLW	H'0035'
	MOVWF	TSCNT_D
	BSF	CSTATU,4	;タイマーモードビットセット
TIMER_3
	CALL	TIDISP

	BTFSS	PORTA,2		;タイマーキーが押された
	GOTO	TIMER_5
	BTFSS	PORTA,3		;リセットスイッチが押された
	GOTO	TIMER_1
	BTFSS	PORTA,4		;クロック表示スイッチが押された
	GOTO	TIMER_4
	BTFSS	CSTATU,4	;タイマーモードビット確認（割込みによりオーバーフローか確認）
	GOTO	TIMER_6
	GOTO	TIMER_3
TIMER_4
	CALL	TIM1
	CALL	CKDISP
	BTFSS	CSTATU,5
	GOTO	TIMER_4B
	BCF	CSTATU,6	;アラームフラグクリア
	BCF	CSTATU,5	;アラーム動作フラグクリア
	BCF	PORTC,0		;アラーム出力OFF
TIMER_4B
	BTFSS	PORTA,4		;クロック表示スイッチが離されるまで待つ
	GOTO	TIMER_4
	GOTO	TIMER_3
TIMER_5
	BCF	CSTATU,4	;タイマーモードビットクリア
TIMER_6	
	CLRF	T_DIG_SL
	CLRF	T_DIG_SH
	CLRF	T_DIG_ML
	CLRF	T_DIG_MH
TIMER_7
	CALL	TIM1
	CALL	CKDISP
	BTFSS	PORTA,2		;タイマースイッチが離されるまで待つ
	GOTO	TIMER_7
	RETURN

;-----タイマーモード表示-------------------------------------------------------------
TIDISP
	BTFSC	CSTATU,6	;アラームフラグ確認
	BSF	PORTC,1		;アラームランプ点灯
	BTFSS	CSTATU,1	;タイマーコロンフラグ確認
	GOTO	TIDISP_1
	BSF	PORTC,3		;コロン点灯
	BSF	PORTA,5		;AMランプ点灯
	BSF	PORTC,2		;PMランプ点灯
;------------------------------
TIDISP_1
	BSF	PORTC,7		;分上位の表示
	MOVF	T_DIG_MH,W
	CALL	BCD7SEGZERO
	BCF	PORTC,7
;------------------------------
	BSF	PORTC,6		;分下位の表示
	MOVF	T_DIG_ML,W
	CALL	BCD7SEG
	BCF	PORTC,6
;------------------------------
	BSF	PORTC,5		;秒上位の表示
	MOVF	T_DIG_SH,W
	CALL	BCD7SEG
	BCF	PORTC,5
;------------------------------
	BSF	PORTC,4		;秒下位の表示
	MOVF	T_DIG_SL,W
	CALL	BCD7SEG
	BCF	PORTC,4
;------------------------------
	BCF	PORTC,3		;コロン消灯
	BCF	PORTA,5		;AMランプ消灯
	BCF	PORTC,2		;PMランプ消灯
	BCF	PORTC,1		;アラームランプ消灯
	RETURN

;-----00セット--------------------------------------------------------
SET00
	CALL	CKDISP
	BTFSC	PORTA,1		;ちゃんとスイッチが押下されているか確認
	GOTO	SET00_6
;------------------------------
	MOVF	C_DIG_MH,W
	SUBLW	D'5'
	BTFSC	STATUS,Z
	GOTO	SET00_2		;時刻繰上げへ
;------------------------------
	MOVF	C_DIG_MH,W
	SUBLW	D'0'
	BTFSC	STATUS,Z
	GOTO	SET00_3		;時刻繰下げへ
;------------------------------
SET00_1
	CALL	TIM1
	CALL	CKDISP
	BTFSS	PORTA,1		;スイッチが離されるまで待つ
	GOTO	SET00_1
	GOTO	SET00_6
;------------------------------
SET00_2
	BCF	INTCON,GIE	;全割込み解除
	BSF	CSTATU,2	;コロン点灯
	INCF	C_DIG_H		;「時」加算
	MOVLW	D'24'
	SUBWF	C_DIG_H,W
	BTFSS	STATUS,C
	GOTO	SET00_4
	CLRF	C_DIG_H		;「24時」なら0
;------------------------------
SET00_3
	BCF	INTCON,GIE	;全割込み解除
	BSF	CSTATU,2	;コロン点灯
SET00_4
	CLRF	C_DIG_ML
	CLRF	C_DIG_MH
;------------------------------
SET00_5
	CALL	TIM1
	CALL	CKDISP
	BTFSS	PORTA,1		;スイッチが離されるまで待つ
	GOTO	SET00_5
;------------------------------
	CLRF	C_DIG_S		;「秒」カウンタリセット
	MOVLW	H'000D'		;1秒カウンタ初期値セット
	MOVWF	SCNT_U
	MOVLW	H'0035'
	MOVWF	SCNT_D
	BSF	INTCON,GIE	;全割込み有効
SET00_6
	RETURN

;-----12/24表示切替--------------------------------------------------------
SW24
	CALL	CKDISP
	BTFSC	PORTA,3		;ちゃんとスイッチが押下されているか確認
	GOTO	SW24_3
	BTFSS	CSTATU,3	;12/24時間フラグの反転
	GOTO	SW24_1
	BCF	CSTATU,3	
	GOTO	SW24_2
SW24_1
	BSF	CSTATU,3
SW24_2
	CALL	TIM1
	CALL	CKDISP
	BTFSS	PORTA,3		;スイッチが離されるまで待つ
	GOTO	SW24_2
SW24_3
	RETURN

;-----現在時刻調整モード-------------------------------------------------------
CKSET
	CALL	CKDISP
	BTFSC	PORTA,0		;ちゃんとスイッチが押下されているか確認
	GOTO	CKSET_4
CKSET_1
	MOVLW	TIM_SET_T1
	MOVWF	CO_3
CKSET_2
	MOVLW	TIM_SET_T2
	MOVWF	CO_4
CKSET_3
	BTFSS	PORTA,2		;「時送り」が押下された
	CALL	CKHSET
	BTFSS	PORTA,3		;「分送り」が押下された
	CALL	CKMSET
	CALL	TIM5
	DECFSZ	CO_4
	GOTO	CKSET_3
	CALL	CKDISP
	DECFSZ	CO_3
	GOTO	CKSET_2
CKSET_4
	RETURN

;-----現在時刻調整「分」------------------------------------------------------
CKMSET
	CALL	CKDISP
	BTFSC	PORTA,3		;確実に「分送り」が押下されているか
	GOTO	CKMSET_4
	BCF	INTCON,GIE	;全割込み解除
	BSF	CSTATU,2	;コロン点灯
CKMSET_1
	INCF	C_DIG_ML	;「*分」加算
	MOVLW	D'10'
	SUBWF	C_DIG_ML,W
	BTFSS	STATUS,C
	GOTO	CKMSET_2
	CLRF	C_DIG_ML	;「10分」なら0にして「**分」加算へ...
	INCF	C_DIG_MH	;「**分」加算
	MOVLW	D'6'
	SUBWF	C_DIG_MH,W
	BTFSS	STATUS,C
	GOTO	CKMSET_2
	CLRF	C_DIG_MH	;「60分」なら0
CKMSET_2
	MOVLW	SW_REP
	MOVWF	CO_5
CKMSET_3
	CALL	CKDISP
	DECFSZ	CO_5
	GOTO	CKMSET_3
	BTFSS	PORTA,3		;「分送り」が押下され続けているか
	GOTO	CKMSET_1
CKMSET_4
	MOVLW	TIM_SET_T1	;時刻調整モード時間延長
	MOVWF	CO_3
	CLRF	C_DIG_S		;「秒」カウンタリセット
	MOVLW	H'000D'		;1秒カウンタ初期値セット
	MOVWF	SCNT_U
	MOVLW	H'0035'
	MOVWF	SCNT_D
	BSF	INTCON,GIE	;全割込み有効
	RETURN

;-----現在時刻調整「時」------------------------------------------------------
CKHSET
	CALL	CKDISP
	BTFSC	PORTA,2		;確実に「時送り」が押下されているか
	GOTO	CKHSET_4
	BCF	INTCON,GIE	;全割込み解除
	BSF	CSTATU,2	;コロン点灯
CKHSET_1
	INCF	C_DIG_H		;「時」加算
	MOVLW	D'24'
	SUBWF	C_DIG_H,W
	BTFSS	STATUS,C
	GOTO	CKHSET_2
	CLRF	C_DIG_H		;「24時」なら0
CKHSET_2
	MOVLW	SW_REP
	MOVWF	CO_5
CKHSET_3
	CALL	CKDISP
	DECFSZ	CO_5
	GOTO	CKHSET_3
	BTFSS	PORTA,2		;「時送り」が押下され続けているか
	GOTO	CKHSET_1
CKHSET_4
	MOVLW	TIM_SET_T1	;時刻調整モード時間延長
	MOVWF	CO_3
	CLRF	C_DIG_S		;「秒」カウンタリセット
	MOVLW	H'000D'		;1秒カウンタ初期値セット
	MOVWF	SCNT_U
	MOVLW	H'0035'
	MOVWF	SCNT_D
	BSF	INTCON,GIE	;全割込み有効
	RETURN

;-----時計表示-------------------------------------------------------------
CKDISP
	BTFSC	CSTATU,2	;コロンフラグ確認
	BSF	PORTC,3		;コロン点灯
	BTFSC	CSTATU,6	;アラームフラグ確認
	BSF	PORTC,1		;アラームランプ点灯
;------------------------------
	BTFSC	CSTATU,3	;12/24モード確認
	GOTO	CKDISP_1	;24時間表示へ
	MOVLW	D'12'
	SUBWF	C_DIG_H,W
	BTFSS	STATUS,C
	GOTO	CKDISP_0	;午前
	BSF	PORTC,2		;午後,PMランプ点灯
	GOTO	CKDISP_2
CKDISP_0
	BSF	PORTA,5		;AMランプ点灯
	GOTO	CKDISP_2
;------------------------------
CKDISP_1
	BSF	PORTC,7		;時上位の表示24時間表示
	MOVF	C_DIG_H,W
	CALL	HEX24H7SEG
	BCF	PORTC,7
;------------------------------
	BSF	PORTC,6		;時下位の表示24時間表示
	MOVF	C_DIG_H,W
	CALL	HEX24L7SEG
	BCF	PORTC,6
	GOTO	CKDISP_3	;分の表示へ
;------------------------------
CKDISP_2
	BSF	PORTC,7		;時上位の表示12時間表示
	MOVF	C_DIG_H,W
	CALL	HEX12H7SEG
	BCF	PORTC,7
;------------------------------
	BSF	PORTC,6		;時下位の表示12時間表示
	MOVF	C_DIG_H,W
	CALL	HEX12L7SEG
	BCF	PORTC,6
;------------------------------
CKDISP_3
	BSF	PORTC,5		;分上位の表示
	MOVF	C_DIG_MH,W
	CALL	BCD7SEG
	BCF	PORTC,5
;------------------------------
	BSF	PORTC,4		;分下位の表示
	MOVF	C_DIG_ML,W
	CALL	BCD7SEG
	BCF	PORTC,4
;------------------------------
	BCF	PORTC,3		;コロン消灯
	BCF	PORTA,5		;AMランプ消灯
	BCF	PORTC,2		;PMランプ消灯
	BCF	PORTC,1		;アラームランプ消灯
	RETURN

;-----停電サイン-----------------------------------------------------------------------
TEIDEN
	MOVLW	H'00FF'
	MOVWF	CO_3
TEIDEN_1
	MOVLW	H'00FF'
	MOVWF	CO_4
TEIDEN_2
	BSF	PORTC,2
	BCF	PORTA,5
	BTFSS	PORTA,0
	GOTO	TEIDEN_5	;時刻調整キーが押下された
	DECFSZ	CO_4,F
	GOTO	TEIDEN_2
	DECFSZ	CO_3,F
	GOTO	TEIDEN_1
;------------------------------
	MOVLW	H'00FF'
	MOVWF	CO_3
TEIDEN_3
	MOVLW	H'00FF'
	MOVWF	CO_4
TEIDEN_4
	BCF	PORTC,2
	BSF	PORTA,5
	BTFSS	PORTA,0
	GOTO	TEIDEN_5	;時刻調整キーが押下された
	DECFSZ	CO_4,F
	GOTO	TEIDEN_4
	DECFSZ	CO_3,F
	GOTO	TEIDEN_3
	GOTO	TEIDEN
;------------------------------
TEIDEN_5
	CALL	TIM5
	BTFSC	PORTA,0		;確実に時刻調整キーが押下された
	GOTO	TEIDEN
	BCF	PORTC,2
	BCF	PORTA,5
TEIDEN_6
	CALL	TIM1
	CALL	CKDISP
	BTFSS	PORTA,0		;時刻調整キーが離されるのを待つ
	GOTO	TEIDEN_6
	MOVLW	H'000D'		;1秒カウンタ初期値セット
	MOVWF	SCNT_U
	MOVLW	H'0035'
	MOVWF	SCNT_D
	BSF	INTCON,GIE	;全割込み有効
	GOTO	MAIN		;メインルーチンへ

;-----タイムディレイライブラリ------------------------------------------------------
TIM1	;-----約1ミリ秒---------------------------------------------------------
	MOVLW	H'0005'
	MOVWF	CO_1
TIM1_1
	MOVLW	H'00D3'
	MOVWF	CO_2
TIM1_2
	DECFSZ	CO_2,F
	GOTO	TIM1_2
	DECFSZ	CO_1,F
	GOTO	TIM1_1
	RETURN

TIM5	;-----約5ミリ秒---------------------------------------------------------
	MOVLW	H'0019'		;19
	MOVWF	CO_1
TIM5_1
	MOVLW	H'00D3'
	MOVWF	CO_2
TIM5_2
	DECFSZ	CO_2,F
	GOTO	TIM5_2
	DECFSZ	CO_1,F
	GOTO	TIM5_1
	RETURN

;-----割込-----------------------------------------------------------------
INT
	MOVWF	SAVE_W		;Wレジスタ一時保存
	SWAPF	STATUS,W
	MOVWF	SAVE_S		;STATUSレジスタ一時保存
	BCF	INTCON,T0IF	;タイマ0割込みフラグクリア
;------------------------------
	DECFSZ	SCNT_D,F
	GOTO	INT_1
	DECFSZ	SCNT_U,F
	GOTO	INT_1
;------------------------------	
	BSF	CSTATU,2	;コロンフラグON
	MOVLW	H'000D'		;1秒カウンタ初期値セット
	MOVWF	SCNT_U
	MOVLW	H'0035'
	MOVWF	SCNT_D
;------------------------------
INT_SEC_UP
	INCF	C_DIG_S		;「秒」加算
	MOVLW	D'60'
	SUBWF	C_DIG_S,W
	BTFSS	STATUS,C
	GOTO	INT_1
	CLRF	C_DIG_S		;「60秒」なら0にする
;------------------------------
ALARM_TIM
	BTFSS	CSTATU,5	;アラーム動作フラグ確認
	GOTO	INT_MINL_UP	;動作していなければスキップ
	DECFSZ	CO_6		;1分毎にアラーム動作時間レジスタから-1
	GOTO	INT_MINL_UP	;レジスタが0でなければスキップ
	BCF	CSTATU,6	;アラームフラグクリア
	BCF	CSTATU,5	;アラーム動作フラグクリア
	BCF	PORTC,0		;アラーム出力OFF
INT_MINL_UP	
	INCF	C_DIG_ML	;「*0分」加算
	MOVLW	D'10'
	SUBWF	C_DIG_ML,W
	BTFSS	STATUS,C
	GOTO	INT_1
	CLRF	C_DIG_ML	;「10分」なら0にする
INT_MINH_UP
	INCF	C_DIG_MH	;「0*分」加算
	MOVLW	D'6'
	SUBWF	C_DIG_MH,W
	BTFSS	STATUS,C
	GOTO	INT_1
	CLRF	C_DIG_MH	;「60分」なら0にする
INT_HOR_UP
	INCF	C_DIG_H		;「時」加算
	MOVLW	D'24'
	SUBWF	C_DIG_H,W
	BTFSS	STATUS,C
	GOTO	INT_1
	CLRF	C_DIG_H		;「24時」なら0にする
;------------------------------
INT_1
	BTFSS	SCNT_U,2
	GOTO	INT_2
	BTFSC	SCNT_U,1
	BCF	CSTATU,2	;約0.5秒でコロンフラグOFF
;------------------------------
INT_2
	BTFSC	CSTATU,7	;アラーム調整中フラグ確認
	GOTO	INT_TIM_0	;アラーム調整中はアラーム確認しない
	BTFSS	CSTATU,6	;アラームビット検査
	GOTO	INT_TIM_0	;アラームが無効の場合はアラーム確認しない
	BTFSC	CSTATU,5	;アラーム動作フラグ確認
	GOTO	INT_TIM_0	;既にアラームが動作していればアラーム確認しない
	MOVF	C_DIG_H,W
	SUBWF	A_DIG_H,W
	BTFSS	STATUS,Z	;「時」が一致しているか確認
	GOTO	INT_TIM_0	;不一致
	MOVF	C_DIG_MH,W
	SUBWF	A_DIG_MH,W
	BTFSS	STATUS,Z	;「0*分」が一致しているか確認
	GOTO	INT_TIM_0	;不一致
	MOVF	C_DIG_ML,W
	SUBWF	A_DIG_ML,W
	BTFSS	STATUS,Z	;「*0分」が一致しているか確認
	GOTO	INT_TIM_0	;不一致
	BSF	CSTATU,5	;アラーム動作フラグON
	BSF	PORTC,0		;アラーム出力ON
	MOVLW	ALARM_TIME	;アラーム動作時間をセット
	MOVWF	CO_6
;------------------------------
INT_TIM_0
	BTFSS	CSTATU,4	;タイマーモードフラグ確認
	GOTO	INT_END		;タイマーモードでなければスキップ
;------------------------------
	DECFSZ	TSCNT_D,F	;1秒カウンタ-1
	GOTO	INT_TIM_1
	DECFSZ	TSCNT_U,F
	GOTO	INT_TIM_1
;------------------------------
	BSF	CSTATU,1	;タイマーコロンフラグON
	MOVLW	H'000D'		;1秒カウンタ初期値セット
	MOVWF	TSCNT_U
	MOVLW	H'0035'
	MOVWF	TSCNT_D
;------------------------------
INT_TIM_SECL_UP	
	INCF	T_DIG_SL	;「*0秒」加算
	MOVLW	D'10'
	SUBWF	T_DIG_SL,W
	BTFSS	STATUS,C
	GOTO	INT_TIM_1
	CLRF	T_DIG_SL	;「10秒」なら0にする
INT_TIM_SECH_UP
	INCF	T_DIG_SH	;「0*秒」加算
	MOVLW	D'6'
	SUBWF	T_DIG_SH,W
	BTFSS	STATUS,C
	GOTO	INT_TIM_1
	CLRF	T_DIG_SH	;「60秒」なら0にする
INT_TIM_MINL_UP	
	INCF	T_DIG_ML	;「*0分」加算
	MOVLW	D'10'
	SUBWF	T_DIG_ML,W
	BTFSS	STATUS,C
	GOTO	INT_TIM_1
	CLRF	T_DIG_ML	;「10分」なら0にする
INT_TIM_MINH_UP
	INCF	T_DIG_MH	;「0*分」加算
	MOVLW	D'6'
	SUBWF	T_DIG_MH,W
	BTFSS	STATUS,C
	GOTO	INT_TIM_1
	CLRF	T_DIG_MH	;「60分」なら0にしてタイマーモード強制終了（オーバーフロー）
	BCF	CSTATU,4	;タイマーモードフラグOFF
;------------------------------
INT_TIM_1
	BTFSS	TSCNT_U,2
	GOTO	INT_END
	BTFSC	TSCNT_U,1
	BCF	CSTATU,1	;約0.5秒でタイマーコロンフラグOFF
;------------------------------
INT_END
	SWAPF	SAVE_S,W
	MOVWF	STATUS		;STATUSレジスタ復帰
	SWAPF	SAVE_W,F	;SAVE_Wレジスタ反転上書き
	SWAPF	SAVE_W,W	;SAVE_Wレジスタを反転してWレジスタへ転送
	RETFIE

;-----7セグメント出力データ（BCD用）---------------------------------------------------
BCD7SEG
	MOVWF	IN7SEG
	SUBLW	D'0'
	BTFSC	STATUS,Z	
	GOTO	BCD7SEG_0
	MOVF	IN7SEG,W
	SUBLW	D'1'
	BTFSC	STATUS,Z	
	GOTO	BCD7SEG_1
	MOVF	IN7SEG,W
	SUBLW	D'2'
	BTFSC	STATUS,Z	
	GOTO	BCD7SEG_2
	MOVF	IN7SEG,W
	SUBLW	D'3'
	BTFSC	STATUS,Z	
	GOTO	BCD7SEG_3
	MOVF	IN7SEG,W
	SUBLW	D'4'
	BTFSC	STATUS,Z	
	GOTO	BCD7SEG_4
	MOVF	IN7SEG,W
	SUBLW	D'5'
	BTFSC	STATUS,Z	
	GOTO	BCD7SEG_5
	MOVF	IN7SEG,W
	SUBLW	D'6'
	BTFSC	STATUS,Z	
	GOTO	BCD7SEG_6
	MOVF	IN7SEG,W
	SUBLW	D'7'
	BTFSC	STATUS,Z	
	GOTO	BCD7SEG_7
	MOVF	IN7SEG,W
	SUBLW	D'8'
	BTFSC	STATUS,Z	
	GOTO	BCD7SEG_8
	MOVF	IN7SEG,W
	SUBLW	D'9'
	BTFSC	STATUS,Z	
	GOTO	BCD7SEG_9
	GOTO	BCD7SEG_90
BCD7SEG_0
	MOVLW	B'11111100'	;「0」
	MOVWF	PORTB
	GOTO	BCD7SEG_90
BCD7SEG_1
	MOVLW	B'01100000'	;「1」
	MOVWF	PORTB
	GOTO	BCD7SEG_90
BCD7SEG_2
	MOVLW	B'11011010'	;「2」
	MOVWF	PORTB
	GOTO	BCD7SEG_90
BCD7SEG_3
	MOVLW	B'11110010'	;「3」
	MOVWF	PORTB
	GOTO	BCD7SEG_90
BCD7SEG_4
	MOVLW	B'01100110'	;「4」
	MOVWF	PORTB
	GOTO	BCD7SEG_90
BCD7SEG_5
	MOVLW	B'10110110'	;「5」
	MOVWF	PORTB
	GOTO	BCD7SEG_90
BCD7SEG_6
	MOVLW	B'10111110'	;「6」
	MOVWF	PORTB
	GOTO	BCD7SEG_90
BCD7SEG_7
	MOVLW	B'11100100'	;「7」
	MOVWF	PORTB
	GOTO	BCD7SEG_90
BCD7SEG_8
	MOVLW	B'11111110'	;「8」
	MOVWF	PORTB
	GOTO	BCD7SEG_90
BCD7SEG_9
	MOVLW	B'11110110'	;「9」
	MOVWF	PORTB
	GOTO	BCD7SEG_90
BCD7SEG_90
	CALL	TIM5
	CLRF	PORTB
	RETURN

;-----7セグメント出力データ（BCD用：ゼロサプレス）---------------------------------------------------
BCD7SEGZERO
	MOVWF	IN7SEG
	SUBLW	D'0'
	BTFSC	STATUS,Z	
	GOTO	BCD7SEGZERO_0
	MOVF	IN7SEG,W
	SUBLW	D'1'
	BTFSC	STATUS,Z	
	GOTO	BCD7SEGZERO_1
	MOVF	IN7SEG,W
	SUBLW	D'2'
	BTFSC	STATUS,Z	
	GOTO	BCD7SEGZERO_2
	MOVF	IN7SEG,W
	SUBLW	D'3'
	BTFSC	STATUS,Z	
	GOTO	BCD7SEGZERO_3
	MOVF	IN7SEG,W
	SUBLW	D'4'
	BTFSC	STATUS,Z	
	GOTO	BCD7SEGZERO_4
	MOVF	IN7SEG,W
	SUBLW	D'5'
	BTFSC	STATUS,Z	
	GOTO	BCD7SEGZERO_5
	MOVF	IN7SEG,W
	SUBLW	D'6'
	BTFSC	STATUS,Z	
	GOTO	BCD7SEGZERO_6
	MOVF	IN7SEG,W
	SUBLW	D'7'
	BTFSC	STATUS,Z	
	GOTO	BCD7SEGZERO_7
	MOVF	IN7SEG,W
	SUBLW	D'8'
	BTFSC	STATUS,Z	
	GOTO	BCD7SEGZERO_8
	MOVF	IN7SEG,W
	SUBLW	D'9'
	BTFSC	STATUS,Z	
	GOTO	BCD7SEGZERO_9
	GOTO	BCD7SEGZERO_90
BCD7SEGZERO_0
	MOVLW	B'00000000'	;「-」
	MOVWF	PORTB
	GOTO	BCD7SEGZERO_90
BCD7SEGZERO_1
	MOVLW	B'01100000'	;「1」
	MOVWF	PORTB
	GOTO	BCD7SEGZERO_90
BCD7SEGZERO_2
	MOVLW	B'11011010'	;「2」
	MOVWF	PORTB
	GOTO	BCD7SEGZERO_90
BCD7SEGZERO_3
	MOVLW	B'11110010'	;「3」
	MOVWF	PORTB
	GOTO	BCD7SEGZERO_90
BCD7SEGZERO_4
	MOVLW	B'01100110'	;「4」
	MOVWF	PORTB
	GOTO	BCD7SEGZERO_90
BCD7SEGZERO_5
	MOVLW	B'10110110'	;「5」
	MOVWF	PORTB
	GOTO	BCD7SEGZERO_90
BCD7SEGZERO_6
	MOVLW	B'10111110'	;「6」
	MOVWF	PORTB
	GOTO	BCD7SEGZERO_90
BCD7SEGZERO_7
	MOVLW	B'11100100'	;「7」
	MOVWF	PORTB
	GOTO	BCD7SEGZERO_90
BCD7SEGZERO_8
	MOVLW	B'11111110'	;「8」
	MOVWF	PORTB
	GOTO	BCD7SEGZERO_90
BCD7SEGZERO_9
	MOVLW	B'11110110'	;「9」
	MOVWF	PORTB
	GOTO	BCD7SEGZERO_90
BCD7SEGZERO_90
	CALL	TIM5
	CLRF	PORTB
	RETURN

;-----7セグメント出力データ（HEX用）12時間用・1の位---------------------------------------
HEX12L7SEG
	MOVWF	IN7SEG
	SUBLW	D'0'
	BTFSC	STATUS,Z	
	GOTO	HEX12L7SEG_2
	MOVF	IN7SEG,W
	SUBLW	D'1'
	BTFSC	STATUS,Z	
	GOTO	HEX12L7SEG_1
	MOVF	IN7SEG,W
	SUBLW	D'2'
	BTFSC	STATUS,Z	
	GOTO	HEX12L7SEG_2
	MOVF	IN7SEG,W
	SUBLW	D'3'
	BTFSC	STATUS,Z	
	GOTO	HEX12L7SEG_3
	MOVF	IN7SEG,W
	SUBLW	D'4'
	BTFSC	STATUS,Z	
	GOTO	HEX12L7SEG_4
	MOVF	IN7SEG,W
	SUBLW	D'5'
	BTFSC	STATUS,Z	
	GOTO	HEX12L7SEG_5
	MOVF	IN7SEG,W
	SUBLW	D'6'
	BTFSC	STATUS,Z	
	GOTO	HEX12L7SEG_6
	MOVF	IN7SEG,W
	SUBLW	D'7'
	BTFSC	STATUS,Z	
	GOTO	HEX12L7SEG_7
	MOVF	IN7SEG,W
	SUBLW	D'8'
	BTFSC	STATUS,Z	
	GOTO	HEX12L7SEG_8
	MOVF	IN7SEG,W
	SUBLW	D'9'
	BTFSC	STATUS,Z	
	GOTO	HEX12L7SEG_9
	MOVF	IN7SEG,W
	SUBLW	D'10'
	BTFSC	STATUS,Z	
	GOTO	HEX12L7SEG_0
	MOVF	IN7SEG,W
	SUBLW	D'11'
	BTFSC	STATUS,Z	
	GOTO	HEX12L7SEG_1
	MOVF	IN7SEG,W
	SUBLW	D'12'
	BTFSC	STATUS,Z	
	GOTO	HEX12L7SEG_2
	MOVF	IN7SEG,W
	SUBLW	D'13'
	BTFSC	STATUS,Z	
	GOTO	HEX12L7SEG_1
	MOVF	IN7SEG,W
	SUBLW	D'14'
	BTFSC	STATUS,Z	
	GOTO	HEX12L7SEG_2
	MOVF	IN7SEG,W
	SUBLW	D'15'
	BTFSC	STATUS,Z	
	GOTO	HEX12L7SEG_3
	MOVF	IN7SEG,W
	SUBLW	D'16'
	BTFSC	STATUS,Z	
	GOTO	HEX12L7SEG_4
	MOVF	IN7SEG,W
	SUBLW	D'17'
	BTFSC	STATUS,Z	
	GOTO	HEX12L7SEG_5
	MOVF	IN7SEG,W
	SUBLW	D'18'
	BTFSC	STATUS,Z	
	GOTO	HEX12L7SEG_6
	MOVF	IN7SEG,W
	SUBLW	D'19'
	BTFSC	STATUS,Z	
	GOTO	HEX12L7SEG_7
	MOVF	IN7SEG,W
	SUBLW	D'20'
	BTFSC	STATUS,Z	
	GOTO	HEX12L7SEG_8
	MOVF	IN7SEG,W
	SUBLW	D'21'
	BTFSC	STATUS,Z	
	GOTO	HEX12L7SEG_9
	MOVF	IN7SEG,W
	SUBLW	D'22'
	BTFSC	STATUS,Z	
	GOTO	HEX12L7SEG_0
	MOVF	IN7SEG,W
	SUBLW	D'23'
	BTFSC	STATUS,Z	
	GOTO	HEX12L7SEG_1
	GOTO	HEX12L7SEG_90
HEX12L7SEG_0
	MOVLW	B'11111100'	;「0」
	MOVWF	PORTB
	GOTO	HEX12L7SEG_90
HEX12L7SEG_1
	MOVLW	B'01100000'	;「1」
	MOVWF	PORTB
	GOTO	HEX12L7SEG_90
HEX12L7SEG_2
	MOVLW	B'11011010'	;「2」
	MOVWF	PORTB
	GOTO	HEX12L7SEG_90
HEX12L7SEG_3
	MOVLW	B'11110010'	;「3」
	MOVWF	PORTB
	GOTO	HEX12L7SEG_90
HEX12L7SEG_4
	MOVLW	B'01100110'	;「4」
	MOVWF	PORTB
	GOTO	HEX12L7SEG_90
HEX12L7SEG_5
	MOVLW	B'10110110'	;「5」
	MOVWF	PORTB
	GOTO	HEX12L7SEG_90
HEX12L7SEG_6
	MOVLW	B'10111110'	;「6」
	MOVWF	PORTB
	GOTO	HEX12L7SEG_90
HEX12L7SEG_7
	MOVLW	B'11100100'	;「7」
	MOVWF	PORTB
	GOTO	HEX12L7SEG_90
HEX12L7SEG_8
	MOVLW	B'11111110'	;「8」
	MOVWF	PORTB
	GOTO	HEX12L7SEG_90
HEX12L7SEG_9
	MOVLW	B'11110110'	;「9」
	MOVWF	PORTB
	GOTO	HEX12L7SEG_90
HEX12L7SEG_90
	CALL	TIM5
	CLRF	PORTB
	RETURN

;-----7セグメント出力データ（HEX用）12時間用・10の位---------------------------------------
HEX12H7SEG
	MOVWF	IN7SEG
	SUBLW	D'0'
	BTFSC	STATUS,Z	
	GOTO	HEX12H7SEG_1
	MOVF	IN7SEG,W
	SUBLW	D'10'
	BTFSC	STATUS,Z	
	GOTO	HEX12H7SEG_1
	MOVF	IN7SEG,W
	SUBLW	D'11'
	BTFSC	STATUS,Z	
	GOTO	HEX12H7SEG_1
	MOVF	IN7SEG,W
	SUBLW	D'12'
	BTFSC	STATUS,Z	
	GOTO	HEX12H7SEG_1
	MOVF	IN7SEG,W
	SUBLW	D'22'
	BTFSC	STATUS,Z	
	GOTO	HEX12H7SEG_1
	MOVF	IN7SEG,W
	SUBLW	D'23'
	BTFSC	STATUS,Z	
	GOTO	HEX12H7SEG_1
	GOTO	HEX12H7SEG_B
HEX12H7SEG_1
	MOVLW	B'01100000'	;「1」
	MOVWF	PORTB
	GOTO	HEX12H7SEG_90
HEX12H7SEG_B
	MOVLW	B'00000000'	;「-」
	MOVWF	PORTB
	GOTO	HEX12H7SEG_90
HEX12H7SEG_90
	CALL	TIM5
	CLRF	PORTB
	RETURN

;-----7セグメント出力データ（HEX用）24時間用・1の位---------------------------------------
HEX24L7SEG
	MOVWF	IN7SEG
	SUBLW	D'0'
	BTFSC	STATUS,Z	
	GOTO	HEX24L7SEG_0
	MOVF	IN7SEG,W
	SUBLW	D'1'
	BTFSC	STATUS,Z	
	GOTO	HEX24L7SEG_1
	MOVF	IN7SEG,W
	SUBLW	D'2'
	BTFSC	STATUS,Z	
	GOTO	HEX24L7SEG_2
	MOVF	IN7SEG,W
	SUBLW	D'3'
	BTFSC	STATUS,Z	
	GOTO	HEX24L7SEG_3
	MOVF	IN7SEG,W
	SUBLW	D'4'
	BTFSC	STATUS,Z	
	GOTO	HEX24L7SEG_4
	MOVF	IN7SEG,W
	SUBLW	D'5'
	BTFSC	STATUS,Z	
	GOTO	HEX24L7SEG_5
	MOVF	IN7SEG,W
	SUBLW	D'6'
	BTFSC	STATUS,Z	
	GOTO	HEX24L7SEG_6
	MOVF	IN7SEG,W
	SUBLW	D'7'
	BTFSC	STATUS,Z	
	GOTO	HEX24L7SEG_7
	MOVF	IN7SEG,W
	SUBLW	D'8'
	BTFSC	STATUS,Z	
	GOTO	HEX24L7SEG_8
	MOVF	IN7SEG,W
	SUBLW	D'9'
	BTFSC	STATUS,Z	
	GOTO	HEX24L7SEG_9
	MOVF	IN7SEG,W
	SUBLW	D'10'
	BTFSC	STATUS,Z	
	GOTO	HEX24L7SEG_0
	MOVF	IN7SEG,W
	SUBLW	D'11'
	BTFSC	STATUS,Z	
	GOTO	HEX24L7SEG_1
	MOVF	IN7SEG,W
	SUBLW	D'12'
	BTFSC	STATUS,Z	
	GOTO	HEX24L7SEG_2
	MOVF	IN7SEG,W
	SUBLW	D'13'
	BTFSC	STATUS,Z	
	GOTO	HEX24L7SEG_3
	MOVF	IN7SEG,W
	SUBLW	D'14'
	BTFSC	STATUS,Z	
	GOTO	HEX24L7SEG_4
	MOVF	IN7SEG,W
	SUBLW	D'15'
	BTFSC	STATUS,Z	
	GOTO	HEX24L7SEG_5
	MOVF	IN7SEG,W
	SUBLW	D'16'
	BTFSC	STATUS,Z	
	GOTO	HEX24L7SEG_6
	MOVF	IN7SEG,W
	SUBLW	D'17'
	BTFSC	STATUS,Z	
	GOTO	HEX24L7SEG_7
	MOVF	IN7SEG,W
	SUBLW	D'18'
	BTFSC	STATUS,Z	
	GOTO	HEX24L7SEG_8
	MOVF	IN7SEG,W
	SUBLW	D'19'
	BTFSC	STATUS,Z	
	GOTO	HEX24L7SEG_9
	MOVF	IN7SEG,W
	SUBLW	D'20'
	BTFSC	STATUS,Z	
	GOTO	HEX24L7SEG_0
	MOVF	IN7SEG,W
	SUBLW	D'21'
	BTFSC	STATUS,Z	
	GOTO	HEX24L7SEG_1
	MOVF	IN7SEG,W
	SUBLW	D'22'
	BTFSC	STATUS,Z	
	GOTO	HEX24L7SEG_2
	MOVF	IN7SEG,W
	SUBLW	D'23'
	BTFSC	STATUS,Z	
	GOTO	HEX24L7SEG_3
	GOTO	HEX24L7SEG_90
HEX24L7SEG_0
	MOVLW	B'11111100'	;「0」
	MOVWF	PORTB
	GOTO	HEX24L7SEG_90
HEX24L7SEG_1
	MOVLW	B'01100000'	;「1」
	MOVWF	PORTB
	GOTO	HEX24L7SEG_90
HEX24L7SEG_2
	MOVLW	B'11011010'	;「2」
	MOVWF	PORTB
	GOTO	HEX24L7SEG_90
HEX24L7SEG_3
	MOVLW	B'11110010'	;「3」
	MOVWF	PORTB
	GOTO	HEX24L7SEG_90
HEX24L7SEG_4
	MOVLW	B'01100110'	;「4」
	MOVWF	PORTB
	GOTO	HEX24L7SEG_90
HEX24L7SEG_5
	MOVLW	B'10110110'	;「5」
	MOVWF	PORTB
	GOTO	HEX24L7SEG_90
HEX24L7SEG_6
	MOVLW	B'10111110'	;「6」
	MOVWF	PORTB
	GOTO	HEX24L7SEG_90
HEX24L7SEG_7
	MOVLW	B'11100100'	;「7」
	MOVWF	PORTB
	GOTO	HEX24L7SEG_90
HEX24L7SEG_8
	MOVLW	B'11111110'	;「8」
	MOVWF	PORTB
	GOTO	HEX24L7SEG_90
HEX24L7SEG_9
	MOVLW	B'11110110'	;「9」
	MOVWF	PORTB
	GOTO	HEX24L7SEG_90
HEX24L7SEG_90
	CALL	TIM5
	CLRF	PORTB
	RETURN

;-----7セグメント出力データ（HEX用）24時間用・10の位---------------------------------------
HEX24H7SEG
	MOVWF	IN7SEG
	SUBLW	D'10'
	BTFSC	STATUS,Z	
	GOTO	HEX24H7SEG_1
	MOVF	IN7SEG,W
	SUBLW	D'11'
	BTFSC	STATUS,Z	
	GOTO	HEX24H7SEG_1
	MOVF	IN7SEG,W
	SUBLW	D'12'
	BTFSC	STATUS,Z	
	GOTO	HEX24H7SEG_1
	MOVF	IN7SEG,W
	SUBLW	D'13'
	BTFSC	STATUS,Z	
	GOTO	HEX24H7SEG_1
	MOVF	IN7SEG,W
	SUBLW	D'14'
	BTFSC	STATUS,Z	
	GOTO	HEX24H7SEG_1
	MOVF	IN7SEG,W
	SUBLW	D'15'
	BTFSC	STATUS,Z	
	GOTO	HEX24H7SEG_1
	MOVF	IN7SEG,W
	SUBLW	D'16'
	BTFSC	STATUS,Z	
	GOTO	HEX24H7SEG_1
	MOVF	IN7SEG,W
	SUBLW	D'17'
	BTFSC	STATUS,Z	
	GOTO	HEX24H7SEG_1
	MOVF	IN7SEG,W
	SUBLW	D'18'
	BTFSC	STATUS,Z	
	GOTO	HEX24H7SEG_1
	MOVF	IN7SEG,W
	SUBLW	D'19'
	BTFSC	STATUS,Z	
	GOTO	HEX24H7SEG_1
	MOVF	IN7SEG,W
	SUBLW	D'20'
	BTFSC	STATUS,Z	
	GOTO	HEX24H7SEG_2
	MOVF	IN7SEG,W
	SUBLW	D'21'
	BTFSC	STATUS,Z	
	GOTO	HEX24H7SEG_2
	MOVF	IN7SEG,W
	SUBLW	D'22'
	BTFSC	STATUS,Z	
	GOTO	HEX24H7SEG_2
	MOVF	IN7SEG,W
	SUBLW	D'23'
	BTFSC	STATUS,Z	
	GOTO	HEX24H7SEG_2
	GOTO	HEX24H7SEG_B
HEX24H7SEG_1
	MOVLW	B'01100000'	;「1」
	MOVWF	PORTB
	GOTO	HEX24H7SEG_90
HEX24H7SEG_2
	MOVLW	B'11011010'	;「2」
	MOVWF	PORTB
	GOTO	HEX24H7SEG_90
HEX24H7SEG_B
	MOVLW	B'00000000'	;「-」
	MOVWF	PORTB
	GOTO	HEX24H7SEG_90
HEX24H7SEG_90
	CALL	TIM5
	CLRF	PORTB
	RETURN

	END
