ORGH’10’ ;ページ 0 のH’10’番地からプログラム開始
  ↓
プログラム
  ↓
MOVF BANGO ;変換データ番号の値を W レジスタへ
注1 BSF PCLATH,4 ;PCLATH の bit4 を 1 にする
CALL CONV ;W に入れた番号の変換データを取出す
注2 BCF PCLATH,4 ;PCLATH の bit4 を 0 にして元に戻る
  ↓
続くプログラム
ORG H’1000’ ;ページ 2 の H’1000’番地から変換データ
CONV ADDWF PLC,1 ;このあとの行からが変換データ
RETLW 10 ;W=0 変換データ 10
RETLW 11 ;W=1 変換データ 11
RETLW 12 ;W=2 変換データ 12 
RETLW 13 ;W=3 変換データ 13
  ↓
RETLW nn ;W=nn 変換データ nn
 注1 : プログラムカウンタのアドレス H’1000’を 2進表記すると

  PCLATH        PLC
 0001 0000   0000 0000 ですから PCLATH レジスタの bit4 を BSF命令で 1 にします。 CALL 命令を実行するとそこまでのプログラムカウンタの値はスタックレジスタ に待避されます。

 注2 : CALL 命令が終るとスタックレジスタに待避されたプログラムカウンタの値が戻され ますが PCLATH レジスタの値を元の bit4=0 に戻してやらないとプログラムカウンタは ページ0のアドレスにならないためつぎのプログラムは動かなくなります。

               PIC目次へ          トップページへ
 

 

PCLATH の使い方


IC16F84 や PIC16F877 
はプログラムカウンタが 13 ビット幅で、下位7〜0bit だけが
PLC レジスタで読書きできます。
上位 13〜8bit は 
PCLATH(PC latch high) レジスタを使ってプログラムカウンタに指示しなければなりません。

PIC16F877 の場合プログラムメモリは ページ 0〜3 までの4つあります。変換データなどをページ(バンク)2 の H’1000’ 番地に置いて ページ 0 にあるプログラムから変換データを取出す場合を考えてみます。