目次>9章 PIC18F1320編 > 優先/非優先割込みを使う> ソース

優先/非優先割込みを使う(ソース)

更新日2009.1.25

以下のソースを取り込んで、アセンブル→PIC書き込み→実行して下さい。

; ========================== ここから ==============================
;	ファイル名	tmr0_pin.asm
;	作成日		2008.6.22
;	作成者		mit.ueno
;	バージョン	1.0
;
;	PIC		PIC18F1320
;	クロック	10MHz
;	概要
;		TMR0割込み(16ビット)でLEDを1秒毎に点滅
;		PORTBピン変化割込み処理中でもTMR0割込み発生を確認
;		IPEN=1(TMR0優先,ピン変化非優先)
;	使用ポート
;		RB0:LED
;		RB1:LED
;		RB4:プッシュボタンスイッチ
;
;	TMR0割込み(16ビットタイマ)
;		clock	10MHz
;		命令	0.4uS
;		presc	64
;		TMR0	フリーラン
;		周期	0.4uS * 64 * 65536 = 1.678S
;
;
	LIST	P=18F1320
	INCLUDE	P18F1320.INC

	__CONFIG  _CONFIG1H, _HS_OSC_1H & _IESO_OFF_1H


; ******** GPR ***********************************
	CBLOCK	0x080
	WREG_TEMP	;WREG save area
	STATUS_TEMP	;STATUS save area
	BSR_TEMP	;BSR save area
	ENDC

; ******** リセットベクタ ***************************
	ORG	0x0000
	BRA	init

; ******** 高優先度割込みベクタ (TMR0) **************
	ORG	0x0008
	BRA	int_high

; ******** 低優先度割込みベクタ (ピン変化) **********
	ORG	0x0018

	MOVFF	STATUS,STATUS_TEMP	;save STATUS
	MOVFF	WREG,WREG_TEMP		;save WREG
	MOVFF	BSR,BSR_TEMP		;save BSR

	BSF	PORTB,1		;RB1のLEDを点灯
LP_pin10
	BTFSC	PORTB,0		;RB0が0になるのを待つ
	BRA	LP_pin10	; (TMR0割込みでON/OFFする)

	BCF	PORTB,1		;RB1のLEDを消灯
	BCF	INTCON,RBIF

	MOVFF	BSR_TEMP,BSR		;restore BSR
	MOVFF	WREG_TEMP,WREG		;restore WREG
	MOVFF	STATUS_TEMP,STATUS	;restore STATUS
	RETFIE

; ******** 高優先度割込み処理 (TMR0) ****************
int_high
	BCF	INTCON,TMR0IF
	MOVLW	0x01
	XORWF	PORTB,F
	RETFIE	FAST

; ******** 初期処理 *********************************
init
	MOVLW	0xFC
	MOVWF	TRISB		;RB0,1:Output(LED)
	MOVLW	0x7F
	MOVWF	ADCON1		;A/D未使用

	MOVLW	0x01
	MOVWF	PORTB

	MOVLW	0x85
	MOVWF	T0CON		;TMR0 enable,16bit,presc64
	CLRF	TMR0H
	CLRF	TMR0L

	BSF	RCON,IPEN	;割込み優先度使用
	MOVLW	0x84
	MOVWF	INTCON2		;TMR0-優先,ピン変化-非優先

	MOVLW	0xE8
	MOVWF	INTCON		;高優先/低優先/TMR0/ピン変化割込み許可

; ******** メイン処理 *******************************
main
	BRA	main

	END
; ========================== ここまで ==============================