標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第641回]

●PIC18F14K50のHIDプログラム(その初期設定部分その2)

前回はPIC18F14K50を使ったUSB通信プログラムのCONFIGの設定について書きました。
今回はいよいよプログラムの本体、命令部分の記述に取りかかります。

	org 00
;
	clrf ANSEL
	clrf ANSELH
	movlw 0b
	movwf TRISA
	movlw 0
	movwf TRISC
	movwf PORTB
;

前回説明しましたCONFIGと、上のプログラムの書き出しの部分との間に、本当はワークレジスタの定義をする部分が入るのですが、そこはちょっと後回しということにいたします。

プログラムは、org 00 から書いていきます。
まず最初にI/Oの設定をします。
PICの入出力ポートはいろんな機能が多重に割りつけられています。
ポートをアナログではなくてデジタルとして使う場合には、この例のようにANSEL、ANSELHレジスタをクリアしておきます。
アナログとデジタルを混合して使う場合には、それぞれの端子がアナログかデジタルかを、ANSEL、ANSELHレジスタに設定する値によって定義します。
I/Oポートの向き(入力か出力か)はTRISA、TRISB、TRISCに入力のビットは1、出力のビットは0で定義します。
PIC18F14K50のPORTAのビット0、ビット1、ビット3は入力専用端子になっています。

いよいよUSBのための設定部分に入ります。

        clrf uaddr
;
usbreset
        lfsr 2,0f5c;UADDR
        clrf INDF2;     
        movlw 16
        lfsr 2,0f53;UEP0
        movwf INDF2
        movlw 15;ping-pong buffer set for EP0(out) only 
        movwf UCFG
        movlw 1e;in,out enable
        lfsr 2,0f54;UEP1
        movwf INDF2
;


最初のuaddrは一時保存用のワークレジスタです。
USBホストコントローラによってUSB端末として認識されると、固有のUSBアドレスが与えられます。
それまではadrs=0でホストと通信します。
ホストと通信を行うときのアドレス番号はシステムレジスタのUADDRに入れます。
[第520回]で書きましたように、PIC18F14K50では、UADDRとUEP0〜UEP7レジスタがとんでもないアドレスに割り付けられているために、普通のアクセス方法ではアクセスできません。
clrf UADDR のように書くためには、メモリバンクを切り換える必要があります。

好みの問題で、私はそうする代りに、上のリストのように、INDFレジスタを使った間接アドレッシングによって、UADDRやEP0、EP1にアクセスしています。
UADDRはアドレスF5C、UEP0はF53、UEP1はF54にあります。

UEP0、UEP1、UCFGについては[第637回]とそれ以後の回で説明をしていますのでご参照願います。

時間が無くなってしまいましたので今回はここまでといたします。
2010.10.19upload

前へ
次へ
ホームページトップへ戻る