2013.12.7
前へ
次へ
ホームページトップへ戻る

復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります

[第520回]


●PICサンプルプログラムの説明(変数の定義)

前回の続きです。
今回はレジスタの定義について説明をします。
前回書きましたようにPICのレジスタ名などは各PICごとに用意されているヘッダーファイルをインクルードすることで、定義せずに使用することができます。
しかしユーザーが使用するワークレジスタは、そのレジスタを置くアドレスを指定して定義しておかなければなりません。

下は[第516回]でお見せしたサンプルプログラムの、ユーザーレジスタを定義している部分です。

;
cntr equ 20
tcntr0 equ 21
tcntr1 equ 22
limit equ 23
t1Hdata equ 24
t1Ldata equ 25
udmk equ 26
;
savew equ 70
savests equ 71
;


PIC16F887でユーザーがワークレジスタとして使うことのできるRAMアドレスは、バンク0では20H〜7FHです。
下はPIC16F887のレジスタマップです。


[出典]Microchip Technology Inc. PIC16F882〜887Data Sheet

表の中でGeneral Purpose Registersと書いてある範囲がユーザーがワークエリアとして使用できるエリアです。
通常はバンク0の20Hから順に割り当てて使っていきます。
このうち70H〜7FHはちょっと特殊なエリアになっています。
この範囲だけはバンク0だけではなくて、バンク1〜バンク3でも同じアドレスとして共通にアクセスすることができます。
この範囲はZ8S180のメモリバンクのコモンエリアと同じような扱いになっています。
そこでこの70H〜7FHは、特殊な用途のレジスタとして使います。
勿論そのような必要が無い場合に普通のレジスタとして使っていけないことはありません。
サンプルプログラムではsavewとsavestsという名前のワークレジスタをこのエリアに割り当てています。
これは割込みプログラムで必要なWレジスタとSTATUSレジスタの一時退避用のレジスタです。
その具体的な使い方については割込みプログラムのところで説明をいたします。

本日は時間がなくなってしまいました。
この続きはまた次回にすることにいたします。

ワンボードマイコンでCP/Mを![第520回]
2013.12.7upload

前へ
次へ
ホームページトップへ戻る