概要

フルカラーLEDを0.5秒置きに順番点灯させてみる。RB4 RB5 RB6にLEDを接続する。
クロックはUSB-IOで接続済みの12MHzのセラミック振動子を使用する。USB-IO2(AKI)のプログラムを書き換えて使用する。プログラムを書き込むことにより購入時付属のサンプルプログラムでIO操作はできなくなるので注意。書込みはPICKit3を前提とする。

回路は次のとおりである。
回路図(PNG) 回路図(PDF) 回路図(DXF)

プログラムの説明

外部クロックの設定

USB2.0を動作させるには内部クロック48MHzが必要である。本プログラムでは0.5秒置きにLEDを点滅させるだけなので、クロックの種類は問わないので、48MHzをクロックとして使用することにする。アセンブラソースのCONFIGで指定する。

使用する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

ページのトップへ戻る