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