;
; File:     main.s        ==== Timer 1 割り込み ====
; Target:   PIC16F18346
; Date:     2021-11-01
; Compiler: pic-as(v2.32)
; IDE:      MPLABX v5.50
;
; LED:      RC5
;
; MPLAB X 設定の追加:
;     project properties ダイアログ pic-as Global Options の
;     Additional options 行に以下の一文を追加する
;        -Wl,-DCODE=2 -Wl,-pPor_Vec=0h,-pIsr_Vec=4h
;
    PROCESSOR 16F18346
    PAGEWIDTH   132
    RADIX       DEC

#include <xc.inc>

; PIC16F18346 Configuration Bit
config FEXTOSC = OFF, RSTOSC = HFINT1, CLKOUTEN = OFF
config CSWEN = ON   , FCMEN = ON     , MCLRE = ON
config PWRTE = OFF  , WDTE = OFF     , LPBOREN = OFF
config BOREN = OFF  , BORV = LOW     , PPS1WAY = OFF
config STVREN = ON  , DEBUG = OFF    , WRT = OFF
config LVP = ON     , CP = OFF       , CPD = OFF
;
; 電源ONリセット 開始番地の設定
;
    PSECT   Por_Vec,global,class=CODE,delta=2
    global  resetVec

resetVec:
    PAGESEL Start
    goto    Start
;
;   割込み発生時に ここから実行
;
    PSECT   Isr_Vec,global,class=CODE,delta=2
    GLOBAL  IsrVec
;
IsrVec:
       ; Timer0カウントアップなら、TMR0IF クリアして
       ; LED4(RA5)を反転 する
       banksel PIR1
       btfss   PIR1, PIR1_TMR1IF_POSITION
       bra     IsrExit
       bcf     PIR1, PIR1_TMR1IF_POSITION

       movlw   0x20      ; LED(RC5)のビット
       banksel LATC
       xorwf   LATC, F   ; LED ON/OFF 反転
IsrExit:
       retfie            ; Return from interrupt


;
; Main
;
    PSECT   MainCode,global,class=CODE,delta=2

Start:
       banksel TRISC         ; BANK 1 に設定
       bcf     TRISC, 0x5    ; RC5を出力に設定

;    // --------------------------------------------
;    // Timer1 は、Fosc/4を16bitモードでカウント
;    // --------------------------------------------
       movlw   0x01            ; Fosc/4 Sync PreS 1/1
       banksel T1CON
       movwf   T1CON          ; T0 設定
       clrf    T1GCON          ; T0 設定
       bcf   PIR1, PIR1_TMR1IF_POSITION     ; TMR0IF=0;
       banksel PIE1
       bsf   PIE1, PIE1_TMR1IE_POSITION     ; TMR0IE=1;

       banksel INTCON
       bsf   INTCON, INTCON_PEIE_POSITION    ; PEIE=1;
       bsf   INTCON, INTCON_GIE_POSITION     ; GIE=1;
LOOP:
       bra     LOOP            ; LOOPに戻る
;
; 電源ONリセット 開始番地の宣言
;
    END     resetVec