概要

PIC18F46K22のIOポートRB5に接続されたLEDを約0.5秒おきに点滅させる。
配線の都合で0出力時に点灯、1出力時に消灯となっている。
秋月電子 PIC18F46K22使用 マイコンボードをベースとし半田付けされている水晶20MHzをH8/3048ボードの16MHzと交換し64MHzで動作可能としたものにLEDを接続した。このボードはICSP端子を備えておりPICKIT 3で書き込みができ、電源はミニUSBで供給可能である。またユニバーサル基板になっているので簡単に回路を追加することができる。
約0.5秒の時間はソフトウェアによるディレイ(クロック周波数に依存)で対応。ちなみに水晶が20MHzの場合は、点滅が遅くなるだけである。
回路は次のとおりである。
cir.svg
回路図(PDF) 回路図(DXF)

プログラムの説明

ソースファイル

以下のファイルで構成されている
lde1a.asm ・・・ メインプログラム

ソースファイルのダウンロード led1a.zip


; RB5に接続されたLEDを0.5秒置きに点滅するアセンブラプログラム 2014/01/21 22: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

bank0       UDATA   ; 変数の定義 バンク0
Tcount1  RES     1
Tcount2  RES     1
Tcount3  RES     1

        CODE
        org 0
        goto   start
start
        movlb   d'15'

        clrf    PORTB
        clrf    LATB
        movlw   b'00011111'     ;   RB5をIO
        movwf   ANSELB,BANKED   ;   bank 0Fh
        movlw   b'00011111'     ;   RB5をIO
        movwf   TRISB
        movlw   b'00100000'     ;   RB5を出力
        movwf   PORTB
loop
        call    wait500
        movlw   b'00100000'
        xorwf   PORTB   ; RB5を反転させる
        goto    loop

wait500                 ; 0.5秒Wait
        movlw   d'50'  ; 9.98ms*50=0.5s
        movwf   Tcount1
dloop1
        movlw   d'208'	; 48μs*208=9.98ms
        movwf   Tcount2
dloop2                   ; t=(12+12*count3)/64MHz 48μs
        movlw   d'0'
        movwf   Tcount3
        nop
dloop3
        decfsz  Tcount3
        goto    dloop3
        decfsz  Tcount2
        goto    dloop2
        decfsz  Tcount1
        goto    dloop1
        return

        END