山本ワールド
PIC18F46K22でtimer2による割り込みを使用したLEDの0.5秒間隔の点滅サンプル(アセンブラ)
概要
PIC18F46K22 のTimer2で4ms置きに割り込みを発生させ割り込みが125回発生したらLEDを点滅させる。
回路はPIC18F46K22でLEDを点滅(アセンブラ)のとおりである。
Timer1の設定方法は、PIC18 TIMER2計算を参照されたい。
プログラムの説明
メインプログラムでタイマー設定を行いPRレジスタに周期を設定し、無限ループとする。 4m秒後にPRレジスタとタイマー値が一致し割り込みによりinth割り込み処理ルーチンが起動される。 周期的に割り込ませるためにのinth割り込み処理ルーチン中で再度タイマー値の設定は必要ない。
プリスケーラ 1:16
ポストスケーラ 1:16
PR2=(16000000/16/16)*0.004=250
0から250までカウントされPRレジスタとカウント値が一致した場合割り込みが発生する。
PR2レジスタを設定せず他のタイマーと同様にTMR2レジスタで初期設定もできる。
タイマー設定値
FOSC/4=16MHzプリスケーラ 1:16
ポストスケーラ 1:16
PR2=(16000000/16/16)*0.004=250
0から250までカウントされPRレジスタとカウント値が一致した場合割り込みが発生する。
PR2レジスタを設定せず他のタイマーと同様にTMR2レジスタで初期設定もできる。
ソースファイル
以下のファイルで構成されているtimer2a1.asm ・・・ メインプログラムと割り込み処理プログラム
ソースファイルのダウンロード timer2a1.zip
; timer2による割り込みを使用したLEDの0.5秒間隔の点滅サンプル 2014/02/22 11:00
; 慈渓博瑞テクノロジー株式会社 PIC18F46K22 マイコンキット Ver2013.12.08用
; http://akizukidenshi.com/catalog/g/gK-07231/
; 水晶は16MHzに交換してPICを64MHzで駆動
; MPLAB X IDE v1.85 Microchip MPASM(v5.51)
; PicKit 3
#INCLUDE <p18f46k22.inc>
; 水晶発振(16MHz) クロック分周無 PLL有効(*4) プライマリクロック有効 ウォッチドッグタイマ無効 低電圧プログラム書き込みモード無効
CONFIG FOSC = HSHP,PLLCFG=ON,PRICLKEN=ON,WDTEN=OFF,LVP=OFF
LED_ADS EQU PORTB
LED0 EQU RB5
TMR2SET EQU d'250'
bank0 UDATA ; 変数の定義 バンク0
Count RES 1
CODE
ORG 0
goto start ; リセット時
org 08h
goto inth ; 割り込み
start
movlb d'15'
movlw b'00011111' ; RB5をIO
movwf ANSELB,BANKED ; bank 0Fh
movlw b'00011111' ; RB5をIO
movwf TRISB
movlw b'00100000' ; RB5を出力
movwf PORTB
movlw b'01111110' ; 1:16 1:16
movwf T2CON
movlw TMR2SET
movwf PR2
bsf PIE1,TMR2IE
bsf INTCON,PEIE
bsf INTCON,GIE
movlw d'125'
movwf Count
bsf LED_ADS,LED0
goto $
inth ; 高位割り込み
bcf PIR1,TMR2IF ; 割り込みフラグクリア
decfsz Count
goto L1
movlw d'125'
movwf Count
btg LED_ADS,LED0
L1
retfie FAST
END
Copyright (C) 2012 山本ワールド All Rights Reserved.