標準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
前へ
次へ
ホームページトップへ戻る