;
; デジタル I/O LED On/Off
; File:     main.s
; 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
;
    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

;
; Main application data
;
    PSECT   MainData,global,class=RAM,space=1,delta=1,noexec
    global  count_1,count_2
count_1:  DS      1               ;遅延 count
count_2:  DS      1               ;遅延 count
;
; Main application code
;
    PSECT   MainCode,global,class=CODE,delta=2
;
; 遅延関数 256 x 256 (789 ms)
;
Count64k:
    BANKSEL count_1
    clrf    BANKMASK(count_1)
    clrf    BANKMASK(count_2)
Count64kLoop:
    decfsz  BANKMASK(count_1),F
    bra     Count64kLoop
    decfsz  BANKMASK(count_2),F
    bra     Count64kLoop
    return
;
; PORTC RC5 を出力に設定する
; RC5を Count64k (789ms) 毎に 反転させる
;
Start:
    BANKSEL TRISC
    bcf     BANKMASK(TRISC),5   ; PORTC RC5 output
    banksel ANSELC              ; 入力ピンを全てデジタル I/O
    clrf    ANSELC

loop:
    BANKSEL PORTC
    bsf     BANKMASK(PORTC),PORTC_RC5_POSITION  ; PORTC bit RC5 HIGH
    call    Count64k                            ; 遅延 789 ms
    bcf     BANKMASK(PORTC),PORTC_RC5_POSITION  ; PORTC bit RC5 LOW
    call    Count64k                            ; 遅延 789 ms
    bra     loop                                ; Loopに戻る
;
; 電源ONリセット 開始番地の宣言
;
    END     resetVec