山本ワールド
RC2とRE2に接続されたLEDを0.5秒置きに交互に点灯するアセンブラプログラム
概要
PIC18F46K22のIOポートRC2,RE2に接続されたLEDを約0.5秒おきに点滅させる。 今回は赤と青の2色LED OSRB5131Aを使用しました。
0出力時に消灯、1出力時に点灯となっている。
秋月電子 PIC18F46K22使用 マイコンボードをベースとし半田付けされている水晶20MHzをH8/3048ボードの16MHzと交換し64MHzで動作可能としたものにLEDを接続した。このボードはICSP端子を備えておりPICKIT 3で書き込みができ、電源はミニUSBで供給可能である。またユニバーサル基板になっているので簡単に回路を追加することができる。
約0.5秒の時間はソフトウェアによるディレイ(クロック周波数に依存)で対応。ちなみに水晶が20MHzの場合は、点滅が遅くなるだけである。
ディレイを設けるためにメモリ上にカウンターをアクセスバンク内に設けている。
使用メモリは以下のサイズです。
プログラムサイズ 79byte
アクセスバンク 3byte使用
回路は次のとおりである。
回路図(PDF)
プログラムの説明
ソースファイル
以下のファイルで構成されているlde4a.asm ・・・ メインプログラム
ソースファイルのダウンロード led4a.zip
; 動作確認済み 2017/01/05 22:17
; RC2とRE2に接続されたLEDを0.5秒置きに交互に点灯するアセンブラプログラム 2017/01/05
; 慈渓博瑞テクノロジー株式会社 PIC18F46K22 マイコンキット Ver2013.12.08用
; http://akizukidenshi.com/catalog/g/gK-07231/
; 水晶は16MHzに交換してPICを64MHzで駆動
; MPLAB X IDE v3.45 Microchip MPASM(v5.70)
; PicKit 3
; RC2/CCP1 Blue LED
; RE2/CCP5 Red LED
#INCLUDE <p18f46k22.inc>
; 水晶発振(16MHz) クロック分周無 PLL有効(*4) プライマリクロック有効 ウォッチドッグタイマ無効 低電圧プログラム書き込みモード無効
CONFIG FOSC = HSHP,PLLCFG=ON,PRICLKEN=ON,WDTEN=OFF,LVP=OFF
bank0 UDATA_ACS ; 変数の定義 アクセスバンク
Tcount1 RES 1
Tcount2 RES 1
Tcount3 RES 1
CODE
org 0
goto start
start
BANKSEL ANSELC
movlw b'11111000' ; RC2をIO
movwf ANSELC,BANKED ; bank 0Fh
movlw b'11111011' ; RC2をOUT
movwf TRISC
movlw b'00000100' ; RC2=onを出力
movwf PORTC
movlw b'00000011' ; RE2をIO
movwf ANSELE,BANKED ; bank 0Fh
movlw b'00000011' ; RE2をIO
movwf TRISE
movlw b'00000000' ; RE2=offを出力
movwf PORTE
loop
call wait500
movlw b'00000100'
xorwf PORTC ; RC2を反転させる
xorwf PORTE ; RE2を反転させる
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.