ページとプログラムメモリ

PIC プログラムメモリ

 プログラムメモリはプログラムした命令が実際に格納されるメモリです。PICは起動するとプログラムカウンタの値を参照しながらそのプログラムメモリの命令を順に実行していきます。そしてページはプログラムメモリ空間にアクセスする時の概念です。2kワードを超えるプログラムを組む場合や、テーブル参照などで直接プログラムカウンタを操作する時以外は、特にプログラムメモリ意識する必要はありません。

 まず大前提として、ミッドレンジPICのプログラムメモリは14bit幅のメモリで、2k(2048)ワードを格納可能なページを最大で4ページ持っています。そして、2進数で2kワードを表現するためには11桁が必要です。
(B'11111111111' = D'2047')

プログラムカウンタについて
 PICはプログラムカウンタが指し示すアドレスのプログラムを実行します。よって、ページとプログラムメモリの使い方を理解する為には、プログラムカウンタ(以下PC)の動作も同時に理解する必要があります。

 PCの中身は下位8bitはSFRのPCLに、上位5bitはPCHに対応します。PCHの上位2bitはページ指定のために用意されていてるビットです。PCLはSFRのひとつで、プログラムから直接アクセスできるのに対して、PCHは直接アクセスすることはできずに、SFRのPCLATCHの下位5bitが対応していて、このPCLATCHを通してアクセスすることができます。

ページの切り替え
PIC Page PCLATH  ページの切り替えはPC<12:11>のビットを操作することで行います。
その為にはPCLATH<4:3>に目的のページを指定します。このPCLATHがPCHに転送されるタイミングはPCLが書き換えられる次の命令が実行される時です。これはプログラム的にPCを操作する時、PCHを設定しておいて、PCLを設定する時PCの値が一辺に書換えられるようにする為にこのようなタイミングになっているのだと思われます。

 ところでPCLATH<2:0>もPCHへ転送されます。PCLATH<2:0>にはひとつ手前の命令のプログラムアドレスが記憶されています。従って、プログラムで新しいページの任意のアドレスに移動する場合には、この値も新しいページに合わせて書き換えておかなければなりません。或は書き換えなくても良いように、プログラムのアドレスを揃えておくなどの工夫をしておかなければなりません。テーブル参照を行なう場合などは、このPCLATHの操作を行なう必要が出てきます。但しCALL, GOTOのジャンプ命令でページをまたぐ時はもう少し話が簡単です。

ページをまたぐCALL, GOTO
 GOTOとCALLといったジャンプ命令でページをまたぐ場合に限っては、PCLATCHの下位5bitは全てPCHに転送されずに、PCLATH<4:3>のページ指定部分だけがPCHに転送されます。その代わりにジャンプ命令の下位11bitがページ内のアドレス指定に使用されます。11bitは2kワードの範囲で指定可能ですので、ページ内を自由にジャンプできます。つまりCALLやGOTOを行なう前にPCLATH<4:3>のビットを必要なビットにセットするだけで、CALLやGOTOが通常通り行なえます。
PIC Page GOTO CALL
 CALL命令がRETURNで元の場所にプログラムが戻る時、13ビットのスタックメモリによってPCが戻されるので、PCLATHを参照せずに元の場所(PC+1)に戻ります。但しPCLATHの値はそのままなので、次のジャンプ命令に備えてどこかでPCLATHを戻しておく必要があります。

PICマイコンと電子工作 HOME


inserted by FC2 system