■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
▲トップページ
>
マイコンなど