;タイマ0による割り込みプログラム

	INCLUDE"P16F88.INC"
	list p=16F88

	__CONFIG   _CONFIG1,  _HS_OSC & _WDT_OFF & _PWRTE_OFF & _CP_OFF & _LVP_OFF
	__CONFIG   _CONFIG2,  _FCMEN_OFF & _IESO_OFF

	ORG	0                       ;電源が入るとこの番地からプログラム実行を開始する．
	GOTO	START

	ORG	4                       ;割り込みがかかるとこの番地から開始する．
	CALL    Timer0_interrupt
	RETFIE				;割り込み処理ルーチンからメインプログラムへ復帰

START

;ポートBの設定
	BSF	STATUS,RP0
	BCF	STATUS,RP1		;バンク1の選択
	MOVLW	B'00000000'
	MOVWF	TRISB			;RB0-7を出力ポートに設定

;タイマ0の設定
	BCF	OPTION_REG, T0CS	;システムクロック(FOSC)を選択．実際には　FOSC/4 = 4MHz/4 = 1MHz
	BCF	OPTION_REG, PSA		;プリスケーラをタイマ0用に設定．（PSA = 1とすると，プリスケーラはWDT専用となる．）
	BSF	OPTION_REG, PS2		;
	BSF	OPTION_REG, PS1		;
	BSF	OPTION_REG, PS0		;PS2 PS1 PS0 = 111 とすることでタイマ0のクロックをFOSC/4/256 と設定．

;割込みの設定
	BSF	INTCON, GIE		;マスクされていない全ての割込みを可とする．
	BSF	INTCON, PEIE		;マスクされていない全ての周辺モジュールからの割込みを可とする．
	BSF	INTCON, TMR0IE		;タイマ0の割込みを可とする．
	BCF	INTCON, TMR0IF		;タイマ0の割込みフラグをクリアする．

	BCF	STATUS,RP0
	BCF	STATUS,RP1		;バンク0の選択


;メインルーチン
STEP1	GOTO	STEP1			;STEP1にジャンプすることを繰り返す永久ループ


;サブルーチン
Timer0_interrupt
	MOVLW	B'00000001'		;'00000001' -> (W)
	MOVWF	PORTB			;(W) -> (PORTB)
	MOVLW	B'00000000'
	MOVWF	PORTB

	MOVLW	B'11100000'		;11100000 ->(W)
					;タイマ0はこの値を初期値としてカウントアップする．
					;（次の割り込みは11111111 -> 00000000 となるタイミング）
	MOVWF	TMR0			;(W) -> TMR0

	BCF	INTCON, TMR0IF		;TMR0による再割り込みを可能とする．

	RETURN


	END
