;
; 割り込み動作のテスト
;
;
;                                      2001/11/16 作成
;
; 秋月アセンブラ用



	.16c84				; デバイスの設定（省略できません）
	.osc	HS			; 発振タイプの設定
	.wdt	off			; ウォッチドックタイマの有効・無効の設定
	.pwrt	on			; パワーアップタイマの有効・無効の設定
	.protect	off		; プロテクトの設定

; -----------------------------------------------------------------------------

;	システムレジスタにラベル付け
TMR0		equ		01h		; タイマ

STATUS		equ		03h		; ステータスレジスタ(BANK0)
C			equ		0		; STATUS,C   キャリーフラグ
DC			equ		1		; STATUS,DC  DCフラグ
Z			equ		2		; STATUS,Z   ゼロフラグ
PD			equ		3		; STATUS,PD  パワーダウンフラグ
TO			equ		4		; STATUS,TO  タイムアウトフラグ
RP0			equ		5		; STATUS,RP0 RAMのバンク切り替え

PORTA		equ		05h		; I/OポートA(BANK0)
PORTB		equ		06h		; I/OポートB(BANK0)

INTCON		equ		0bh		; 割り込み制御レジスタ
RBIF		equ		0		; RB<4:7>ポートチェンジ割り込みフラグ
INTF		equ		1		; INT(RA4)割り込みフラグ
T0IF		equ		2		; TMR0オーバーフロー割り込みフラグ
RBIE		equ		3		; RBIF割り込み許可
INTE		equ		4		; INTF割り込み許可
T0IE		equ		5		; TMR0割り込み許可
EEIE		equ		6		; データEEPROM書き込み終了割り込み許可
GIE			equ		7		; 全体割り込み許可

OPTION		equ		01h		; オプションレジスタ(BANK1)
RBPU		equ		7		; OPTION,RBPU ポートBのプルアップ 0:行う 1:行わない
TRISA		equ		05h		; ポートA出力/入力設定 0:出力 1:入力(BANK1)
TRISB		equ		06h		; ポートB出力/入力設定 0:出力 1:入力(BANK1)

; -----------------------------------------------------------------------------

;	変数を宣言
		org		0ch
temp1		ds		1
temp2		ds		1
temp3		ds		1
temp4		ds		1
temp5		ds		1
int_temp1	ds		1		; 割り込み処理での汎用変数
int_w		ds		1		; 割り込み処理での退避用
int_status	ds		1		; 割り込み処理での退避用

; -----------------------------------------------------------------------------

		org		000h
		goto	start

; -----------------------------------------------------------------------------

;	割り込み処理

		org		004h

		movwf	int_w			; wレジスタを退避
		movf	STATUS,0
		movwf	int_status		; ステータスレジスタを退避

		movlw	125
		movwf	TMR0			; TMR0プリセット

		btfsc	temp1,0			; 割り込み動作のテスト
		goto	int_portclr		; 割り込みが入るたびにポートBを反転する
		goto	int_portset
int_portclr
		clrf	temp1			;
		clrf	PORTB			;
		goto int_return
int_portset
		decf	temp1,1
		movlw	0ffh			
		movwf	PORTB			

;	割り込み処理の終了
int_return
		bcf		INTCON,T0IF		; TMR0オーバーフロー割り込みフラグをクリア
		movf	int_status,0
		movwf	STATUS			; ステータスレジスタを元に戻す
		movf	int_w,0			; wレジスタを元に戻す
		retfie					; 割り込みを許可してリターン

; -----------------------------------------------------------------------------

start
		bsf		STATUS,RP0	; bank1

		movlw	11000000b			; プリスケーラを使用、分周比1:2
		;		|||||||+----- PS0		-+
		;		||||||+------ PS1		 +- プリスケーラ分周比
		;		|||||+------- PS2		-+
		;		||||+-------- PSA		プリスケーラ設定		0:TMR0	1:WDT
		;		|||+--------- RTE		TMR0信号のエッジ		0:↑	1:↓
		;		||+---------- RTS		TMR0信号のソース		0:内部	1:外部
		;		|+----------- INTEDG	INT 割り込みのエッジ	0:↓	1:↑
		;		+------------ /RBPU		ポートBのプルアップ		0:行う	1:行わない
		movwf	OPTION

;	I/Oポートの設定
		movlw	00000000b
		movwf	TRISA
		movwf	TRISB		; 全部出力

		bcf		STATUS,RP0	; bank0

;	割り込み許可
		movlw	10100000b
		movwf	INTCON			; TMR0割り込み許可

; -----------------------------------------------------------------------------

loop
		goto	loop
