【入出力ピンの制御方法】
入出力ピンに出力する場合には、2つのステップが必要です。
すなわち、モード設定をしてから、実際のデータ入出力を行います。
(1)モードの設定
まず、入出力ポートのモード設定をします。その後実際の入力や出力動作
をします。
モードの設定は、TRISA、TRISBなどと呼ばれるレジスタに書きこみます。
しかしこのレジスタはバンク1にあるのでバンク切替をする必要があります。
ではこのバンクとは何なのでしょうか。
PICの命令構造を良く見ると、レジスタを指定する f は7ビットしかありません
から、PICのレジスタファイルは最大7F番地までしか指定できません。
つまり128個までということです。
しかし、これでは、一寸大きなプログラムで変数を多く使おうとするとレジスタ
が不足し、プログラムが作りにくくなってしまいます。
そこでこれ以上のレジスタを持てるようにするため、バンクという考え方が
使われています。つまり、下図に示すように、128個のレジスタ群を最大4個
まで持てるようにして、STATUSレジスタの中にこのバンクを指定するための、
RP0,RP1と呼ぶ2ビットを用意したのです。
詳しくは「PICメモリ構造」を参照して下さい。
RP0,1でBankを
指定し、命令の
f opecodeで
場所を指定する
ことで任意の場
所をアクセスで きる。
従ってTRISA、TRISBに書きこむためには、下記の様にします。
BSF STATUS,RP0 ;STATUSレジスタのRP0ビットを1に
;してBank1に切替える
MOVLW 0FFH ;入力モード用の1をセット
MOVWF TRISA ;PORTAをすべて入力モードに設定
CLRF TRISB ;PORTBを全て出力モードに設定
BCF STATUS,RP0 ;Bank0に戻す
上記の様に、入出力ピンを入力モードにするには対応するTRISのビットを1に、
出力モードにするときには0に設定します。
(2)データ入出力
このTRISレジスタが設定完了すれば、後は、PORTAやPORTBと呼ばれる
入出力ポートのレジスタに書きこめば、実際の入出力ピンの動作をさせる
ことが出来ます。
この書きこみには、データコピー命令や、後述のビット操作命令を使います。
下記は実際の使用例となります。
MOVLW 0AH ;データ0Aを用意
MOVWF PORTB ;ポートBに出力
BSF PORTB,2 ;ポートBの3ビット目を1
MOVF PORTA,W ;ポートAから入力
MOVWF INDATA ;変数INDATAに格納
LOOP BTFSS PORTA,3 ;ポートAの4ビット目をチェック
GOTO KEYIN ;キー入力処理へジャンプ
GOTO LOOP ;繰り返し