11. BSR切替について(18xx)
 16F88にはなかったバンク・セレクト・レジスタ(BSR)が新設されました。 16F88ではSTATUSレジスタの2ビットを使い4個のバンクを切替ていたものがBSRレジスタの5ビットにより
32個のバンクを切替えるように変更されました。 それに伴い、各レジスタの配置が大幅に変更され、すっきりしましたが考え方は変わっていません。
 まず、使いたいレジスタをBSRで選択し、命令を実行した後、通常のバンクに戻すやり方です。
 16F88と比較すると、
16F88の場合 16F18xxの場合
BSF STATUS,RP0 バンク1に切替 MOVLB .1 バンク1に切替
BCF STATUS,RP1
MOVLW 01H データ01をOSCCONレジスタに書き込む
MOVLW 01H データ01をOSCCONレジスタに書き込む MOVWF OSCCON
MOVWF OSCCON CLRF BSR バンク0に戻す
BCF STATUS,RP0 バンク0に戻す
 16F18xxの場合は新設されたMOVLB命令を使えば1命令で0〜32のバンクに切替られます。
 もっと確実に間違いなく切り替たい場合は擬似命令のBANKSEL命令を使えば簡単に切替できます。
BANKSEL OSCCON OSCCONレジスタのあるバンク1に切替
 他にも切り替える方法がありますが、以下の方法を使うと、Wレジスタのデータを壊す結果になる悪い例です。
MOVLW 0AAH transmit pre-amble(AA)
CALL SENDD
;*******************************************
;  Send data to DSM via EUSART 
;*******************************************
SENDD
MOVLW .3 select bank3
MOVWF BSR
SENDD1
BTFSS TXSTA,TRMT check ready
GOTO SENDD1
MOVWF TXREG send data
CLRF BSR select bank0
RETURN ;
;
;*******************************************
 あとがき
 16F18xxでは大幅にバンクが増えた分だけ頻繁にバンク切替が必要となり、確実に切り替えないと暴走やループの要因になります。 従って、BANKSEL命令を利用することをお勧めします。