やっぱりメモリ構造から

PICメモリ構造

 PICのプログラムはアセンブリ言語が基本です。アセンブリでプログラムを組む為にはどうしても対象となるコンピュータのメモリがどうなっているか、ある程度知っている必要があります。そこで、ここではミッドレンジと呼ばれる最も電子工作に使われる、PICのメモリ構造や内部処理の方法について記述したいと思います。

メモリの種類

 PICには目的別に次のようなメモリがあります。

1.ワーキングレジスタ(8bit)
2.データメモリ(8bit)
3.プログラムメモリ(14bit)
4.プログラムカウンタ(13bit)
5.スタックメモリ(13bit)

詳細
1.ワーキングレジスタ
 ワーキングレジスタはPICに1つだけ用意されている計算処理用の一時保存メモリです。プログラムの処理中に変数から値を取り出したり、変数に書き込む為に一時的に値をセットする用途に使われます。プログラムの処理で最も忙しいメモリです。W-regなどと表記されます。

2.データメモリ
 データメモリにはSFRとGPRとちょっと特殊なEEPROMというメモリがあり、これらは全て8bit幅のメモリです。実装されているメモリの数はPICの種類によって異なり、自分に必要なPICを選択する時の重要な要素の1つです。
 SFRはSpecial Function Resisterの略で、固定した機能を初めから持っているメモリです。例えばTRISAというSFRはPICの入出力ピンPORTAのそれぞれのピンを、入力に使うか出力に使うかを指定できるメモリです。対応しているbitを1にセットすると入力ピンとして、0にセットすると出力ピンとして使う事ができます。その他多くのSFRを指定する事で、PICの基本的な振る舞いを制御できます。PICのプログラミングは常にSFRを意識して組むことになります。
 GPRは変数として使用します。プログラムの処理中には値を保存しておく変数がいくつも必要です。SFRとGPRを合わせて、いわゆるパソコンの256MbyteのRAMなどと表現される部分に相当します。ミッドレンジのPICのデータメモリは機種によって68Byteから368Byteのものがあります。パソコンのメモリに比べると非常に少ないメモリです。
 EEPROMはちょっと特殊なデータメモリで、電源を切ってもデータを失わず保持してくれます。古いPICには実装されていませんが、最近のPICにはほとんど実装されています。EEPROMのデータ読み書きはGPRと異なる手順で行ないますが、起動時に定数を記憶しておきたい場合など非常に便利に使うことができます。また、EEPROMの読み書きにはmsecオーダーの時間がかかります。

3.プログラムメモリ(14bit)
 データメモリにはプログラムそのものを書き込みます。ミッドレンジシリーズのPICのメモリは14bitの幅を持っており、この14bitが1ワード(命令)に対応します。よく32bitパソコンとか、64bitのゲーム機とか表現されますが、同じ様に表現するとミッドレンジのPICは14bitマイコンという事になります。当然処理できる命令はパソコン等に比べて少ないわけです。このプログラムメモリの広さはPICの種類によって異なり、1kワードや8kワードなどと表現されます。

4.プログラムカウンタ(13bit)
 PICに限らずコンピュータは実行するプログラムをこのプログラムカウンタを元に処理を順に実行します。特にプログラミングで意識しなくても、コンピュータを1つの処理が終わったら、プログラムカウンタに1プラスし、次のプログラムを実行します。GOTOやCALLといったジャンプの命令ではコンパイラがちゃんとこのプログラムカウンタを操作し、意図した所へジャンプするように裏で働いてくれています。しかしテーブル参照(ある定数リストからデータを採ってくる)などの場合、直接プログラミングでこのプログラムカウンタを操作できます(或は、する必要に迫られる事があります)。

5.スタックメモリ(13bit)
 プログラムカウンタの値を一時的に保存するメモリです。これは8段のスタック(積み重ね)メモリで、CALLやGOTOなどのジャンプ命令を行なった時に、プログラムの戻る場所を記憶しておく為に用意されたメモリです。CALLの中で、別の場所をCALLする時などは戻りアドレスを積み重ねます。よってあまり深いネストをしないようにするのが基本です。スタックメモリはこの事以外プログラム中で意識する必要はありません。

PICマイコンと電子工作 HOME


inserted by FC2 system