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


PICBASICコンパイラ

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
まるでインタプリタ。でもコンパイラです。超カンタン超シンプルです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第142回]



●PICBASICコンパイラの文法(3)変数(3)R変数

R変数についてはどこかに書いたと思ったのですがどこだったのか思い出せません。
あらためて書くことにします。
普通の変数については前回書きました。
a〜zで始まる最長14桁の変数名を使います。
プログラム中でその変数が書かれた順にPICのDATA MEMORYエリアに割り当てられます。
PIC18F2550/PIC18F4550の場合DATA MEMORYエリアはアドレス000〜7FFの2KBですがPICのマシン語でアクセスできる範囲は8ビットでアクセスできる範囲なので256バイトになります。
そこで2KBを256バイトごとに区切ってBANK0〜BANK7に分けてアクセスするようになっています。
PICBASICコンパイラではそこへの割り当てはシステムが行ないますからユーザーはそのアドレスを意識する必要はありません。
今回説明するR変数はそのアドレスを直接指定してアクセスすることを可能にするものです。
現行の試作版ではR変数はRxxの表記です。
xxは00〜FFの16進数2桁でそのままBANK0のアドレス00〜FFを示します。
たとえばR1FはDATA MEMORYのアドレス01Fを示します。
PICマシン語プログラムではDATA MEMORYのアクセスをするためのアドレス指定は8ビットでしか行なえません。
そこで事前にBANKを切り替えるための命令を実行して現在のBANKを指定しておいてからメモリアクセスを行ないます。
現行試作版ではアクセスをBANK0に固定しています。
さらに言うとそのBANK0へのアクセスはACCESS BANKという特殊なアクセス方式を指定しています。
PICではユーザーが自由に使えるフリーなメモリエリアのほかにPICのI/O機能のための特別なレジスタを割り付けたメモリブロックがあります。
そのメモリブロックはBANK15(F00〜FFF)にあってそこに割り当てられた特殊なレジスタをSFR(Special Function Register)と言います。
PIC18F2550/PIC18F4550ではそのうちのF60〜FFFが実際にアクセス可能なレジスタになっています(前回のレジスタマップ参照)。
ACCESS BANKではアドレス000〜05Fをバンクアドレスの00〜5Fに割り当て、SFRのF60〜FFFを60〜FFに割り当てることでユーザーのワークレジスタのうちの先頭の000〜05FとSFRの両方をアクセス可能にします。
PICBASICコンパイラではSFRのアクセスには通常はPICのレジスタ名を指定します。
下はPIC18F2550/PIC18F4550のSFRマップです。

[出典]Microchip Technology Inc.PIC18F2455/2550/4455/4550 Data Sheet

たとえばPORTCにデータ01を出力するには
out PORTC,1
という文を書きます。
それが普通の使い方なのですがその代わりに
out R82,1
という文も書けるようにしたのがR変数です。
R変数でFSRをアクセスするというのは余り一般的ではありませんがR変数を理解するための説明として書きました。
通常はユーザー用のワークレジスタに対するアクセスに使います。
現行のPICBASICコンパイラ試作版ではDATA MEMORYへのアクセスはACCESS BANKモードで行いますから変数の割付はアドレス00〜5Fの範囲に限られます。
実際にはPIC側のシステムプログラムでも自身のためのワークのためにACCESS BANKのレジスタを使います。
その範囲は当初はアドレス00〜2Fの予定でしたがプログラム作業が進むなかで現在は00〜3Fまで拡大しています。
すると変数エリアとして使えるのはわずかにアドレス40〜5Fのみになってしまいます。
これでは余りに少ないのでここはアクセス方法を再検討するべきと考えています。
ACCESS BANK方式を止めてBANK0〜BANK7にアクセスするようにしなければなりません。
実はR変数は当初はACCESS BANKのアドレスを直接アクセスするための機能として考え出したものでした。
そもそもの目的はデバッグ用の機能でした。
変数エリアをBANK0〜BANK7に拡大することを思い付きましたのでそれならばR変数もそれに合わせて機能拡張ができるはずと考えました。
R変数の表記をR0( )〜R7( )とすることで配列の機能を持たせることができます。
( )の中に00〜FFの定数またはその値を持つ変数名を記述できるようにします。
実のところ実際のプログラム作業から半年以上も離れていたのでそのための作業にかかるのはちょっとホネですがせっかく思いついた以上なんとかやってみるつもりです。

PICBASICコンパイラ[第142回]
2024.8.18 upload

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