山本ワールド
PIC18F46K22でtimer1による割り込みを使用したLEDの0.5秒間隔の点滅サンプル(アセンブラ)
概要
PIC18F46K22 のTimer1で25ms置きに割り込みを発生させ割り込みが20回発生したらLEDを点滅させる。
          回路はPIC18F46K22でLEDを点滅(アセンブラ)のとおりである。
          Timer1の設定方法は、PIC18 TIMER1計算を参照されたい。
プログラムの説明
          メインプログラムでタイマー設定を行い、無限ループとする。 25m秒後に割り込みによりinth割り込みルーチンが起動される。 周期的に割り込ませるためにinth割り込みルーチンの中で再度タイマー値の初期値の設定を行う。
          
プリスケーラ 1:8
初期時及びオーバーフロー割り込み(タイマー値が65535から0になった時発生)時に下記の値を設定すると
TMR1=65536-(16000000/8)*0.025=15536
15536から65535までカウントされオーバーフローごとに割り込みが発生する。すなわち65536-15536=50000周期となる。
TMR1を設定しない場合は、0~65535までカウントされるので、1/(16000000/8)*65536=0.032768秒ごとの割り込みとなる。
          
          
        
        
      タイマー設定値
FOSC/4=16MHzプリスケーラ 1:8
初期時及びオーバーフロー割り込み(タイマー値が65535から0になった時発生)時に下記の値を設定すると
TMR1=65536-(16000000/8)*0.025=15536
15536から65535までカウントされオーバーフローごとに割り込みが発生する。すなわち65536-15536=50000周期となる。
TMR1を設定しない場合は、0~65535までカウントされるので、1/(16000000/8)*65536=0.032768秒ごとの割り込みとなる。
ソースファイル
以下のファイルで構成されているtimer1a1.asm ・・・ メインプログラムと割り込み処理プログラム
ソースファイルのダウンロード timer1a1.zip
; timer1による割り込みを使用した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
TMR1HSET EQU     d'60' ;3c
TMR1LSET EQU     d'176' ;b0
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'00110011'     ;   16bit FOSC/4 1:8
        movwf   T1CON
        movlw   TMR1HSET
        movwf   TMR1H
        movlw   TMR1LSET
        movwf   TMR1L
        bsf     PIE1,TMR1IE
        bsf     INTCON,PEIE
        bsf     INTCON,GIE
        movlw   d'20'
        movwf   Count
        bsf     LED_ADS,LED0
        goto    $
inth    ;   高位割り込み
        bcf     PIR1,TMR1IF ;   割り込みフラグクリア
        movlw   TMR1HSET
        movwf   TMR1H
        movlw   TMR1LSET
        movwf   TMR1L
        decfsz  Count
        goto    L1
        movlw   d'20'
        movwf   Count
        btg     LED_ADS,LED0
L1
        retfie  FAST
        END
      Copyright (C) 2012 山本ワールド All Rights Reserved.
    
    
  