■PIC16F84と秋月ライタ付属のPA.EXEを使って割り込みを試してみる

@RB0/INT割り込み
ARB4〜RB7割り込み
Bタイマー割り込み

により個別の処理が出来るような雛形を作成してみました


▼プログラム

;---------------------------------------------------------------
		include	16f84.h

		.osc	hs
		.pwrt	on
		.wdt	off
		.protect off

;---------------------------------------------------------------
;アドレスに名前を付ける
;---------------------------------------------------------------
;割り込み時にレジスタを退避させる変数
w_temp		equ	0ch
status_temp	equ	0dh

wait_val1	equ	0eh
wait_val2	equ	0fh

;***************************************************************
;リセットベクタ
;***************************************************************
		org	0
		goto	start
;***************************************************************
;割り込みベクタ
;***************************************************************
		org	4

		;レジスタの退避
		movwf	w_temp
		movf	status,w
		clrf	status
		movwf	status_temp
		
		;各割り込みに対して適切なアドレスにジャンプさせる
		btfsc	intcon,0
		goto	int0
		btfsc	intcon,1
		goto	int1
		btfsc	intcon,2
		goto	int2
intret
		;レジスタの復帰
		clrf	status
		movf	status_temp,w
		movwf	status
		swapf	w_temp,w
		swapf	w_temp,w
		retfie			;割り込みから復帰

;---------------------------------------------------------------
;RB0/INT割り込みにより実行
;---------------------------------------------------------------
int0					;RB4~RB7割り込み

		;割り込み時の処理をここに記述

		bcf	intcon,0		;RB4~RB7割り込みフラグリセット
		goto intret
;---------------------------------------------------------------
;RB4〜RB7割り込みにより実行
;---------------------------------------------------------------
int1					;RB0/INT割り込み

		;割り込み時の処理をここに記述

		bcf	intcon,1		;RB0/INT割り込みフラグリセット
		goto intret
;---------------------------------------------------------------
;タイマー割り込みにより実行
;---------------------------------------------------------------
int2					;タイマー割り込み

		;割り込み時の処理をここに記述

;		mov tmr0,#0h		;タイマー値リセット
		bcf	intcon,2		;タイマー割り込みフラグリセット
		goto intret
;***************************************************************
;スタート
;***************************************************************
start
;---------------------------------------------------------------
;ポートの設定
;---------------------------------------------------------------
		clr	ra
		clr	rb
		mov	!ra,#0h		;portAを出力に設定
	;	mov	!rb,#0h		;portBを出力に設定
		mov	!rb,#0FFh		;portBを入力に設定
		mov	ra,#0h		;portAに出力
	;	mov	rb,#0h		;portBに出力
;---------------------------------------------------------------
;RB0/INT割り込みの設定
;---------------------------------------------------------------
		bsf	status,5		;ページを1に切り替え
		bcf	option,6		;RB0のエッジ設定は立ち上がり
		bcf	status,5		;ページを0に切り替え
		bsf     intcon,4		;RB0/INT割り込み発生許可
;---------------------------------------------------------------
;RB4〜RB7割り込みの設定
;---------------------------------------------------------------
		bsf	intcon,3		;RB4〜RB7割り込み発生許可
;---------------------------------------------------------------
;タイマー割り込みの設定
;---------------------------------------------------------------
		;mov tmr0,#0h		;タイマー値リセット
		bsf	status,5		;ページを1に切り替え
		bsf	option,0		;PS0	プリスケーラの設定
		bsf	option,1		;PS1
		bsf	option,2		;PS2
		bcf	option,3		;PSA
		bcf	option,5		;T0CS タイマ0の入力先 0でクロック4/1
		bcf	status,5		;ページを0に切り替え
		bsf	intcon,5		;タイマ割り込み発生許可
;---------------------------------------------------------------
;割り込みの開始
;---------------------------------------------------------------
		bsf     intcon,7		;割り込み許可

;***************************************************************
;メイン
;***************************************************************
main

		goto	main

;---------------------------------------------------------------
;ウエイト
;---------------------------------------------------------------
wait_loop
wait_loop2
		decfsz	wait_val2
		goto wait_loop2
		decfsz	wait_val1
		goto wait_loop

		return





▲トップページ > マイコンなど