山本ワールド
USB-IO2.0(AKI)でフルカラーLEDを順番に点灯させる
概要
プログラムの説明
使用するLEDと電流制限抵抗
LEDは色により順方向電圧が異なるため、色ごとに抵抗値を変えた。
IOポートの設定
使用するIOポートのピンがアナログ入力と共用(ピン配置)となっているため、ANSEL、ANSELHレジスタによりピンをデジタル入出力に設定する。ピンを出力にするためTRISA、TRISB、TRISCレジスタをクリアする。
IOポートに出力する
PORTBレジスタに書き込むことにより出力することができる。
0.5秒を得る
3段ループにより約0.5秒の時間待ちを作るプログラムをサブルーチン化している。
アセンブラソース
ソースのダウンロードled2.zip
; RB6:Red LED,RB5:Green LED,RB4:Blue LED,RC0:SW 点灯テスト
#INCLUDE <p18f14k50.inc>
CONFIG FOSC = HS,CPUDIV = NOCLKDIV,PLLEN=ON,WDTEN=OFF,LVP=OFF;not WDT
Tcount1 EQU 0
Tcount2 EQU 1
Tcount3 EQU 2
org 0
goto start
start
movlw 0fh
clrf ANSEL ; RC3-RC0,RA4をデジタル入力バッファに設定
clrf ANSELH ; RB5-RB4,RC7-RC6をデジタル入力バッファに設定
clrf SLRCON ; PORTA,PORTB,PORTCをスルーレートを標準に設定
clrf TRISA ; PORTAを全部出力に設定
clrf TRISB ; RB7-RB4を出力に設定
movlw 01h ; RC0のみ入力に設定
movwf TRISC
loop
movlw b'01100000' ; Green LED
movwf PORTB
call wait500
movlw b'01010000' ; Blue LED
movwf PORTB
call wait500
movlw b'00110000' ; Red LED
movwf PORTB
call wait500
goto loop
wait500
movlw d'50' ; 10ms*50=0.5s
movwf Tcount1
dloop1
movlw d'200' ; 50μs*200=10ms
movwf Tcount2
dloop2 ; t=(12+12*count3)/48MHz 50μs
movlw d'199' ; 4clock
movwf Tcount3 ; 4clock
nop ; 4clock
dloop3
decfsz Tcount3 ; 4clock
goto dloop3 ; 8clock
decfsz Tcount2
goto dloop2
decfsz Tcount1
goto dloop1
return
END