PICBASICコンパイラ
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
まるでインタプリタ。でもコンパイラです。超カンタン超シンプルです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第6回]
●サンプルプログラム(2)出力波形
前回はPICBASICのサンプルプログラムを見ていただきました。
ちょっと見にはBASICインタプリタのようですがれっきとしたコンパイラです、と書きました。
コンパイラですからソースプログラムをマシン語コードに翻訳します。
普通のコンパイラはそのマシン語コードをHEXファイルの形で作成します。
PICの場合にはPICライターでそのHEXファイルを読み込んでPICに書き込みます。
しかし当PICBASICコンパイラはPICライタを使わないでHEXコードを直接PICに書き込んでしまいます。
前回はターゲットボード(PICBS03)をPICBS01を介してUSBでWindowsマシンと接続したままでそのマシン語コードを実行するところをお見せしました。
説明としてはそのように書きましたが本当に実行しているのかどうかということについてはコマンドプロンプト画面に表示されるメッセージなどから推測するしかありません。
PICに書き込んだマシン語プログラムは実際に実行されていますからそれを確認する一番簡単な方法はPORTCの出力波形をオシロスコープで見てみることです。
前回のようにWindowsパソコンとUSB接続された状態のままでもPORTCの出力波形を見ることはできますが、せっかくPICにマシン語コードを書き込んだのですから、PICBS03ボードを単独で実行させてみることにします。
PICBSボードのPICにマシン語プログラムを書き込んだあとはPICBSコンパイラシステムと切り離してPICBSボード単独で動作させることができます。
その場合にはターゲットボード(PICBS03)に+5Vの電源をつなぐこととボード上のJ1にジャンパーピンをセットしてJ1をショートします。
J1は[第4回]のPICBS03の回路図を参照してください。
下はそのようにしてPORTCの出力波形を観測中の写真です。
右側のPICBS03は単独で動作しています。
オシロスコープの波形はRC0の波形です。
波形がはっきり見えるようにオシロスコープの部分を拡大しました。
ちょっと画面が不鮮明になってしまいましたが水平時間軸は100nsです。
Hの期間は350nsほどでLの期間は150nsほどです。
こまかいところまでは読み取れませんが1回の周期はおよそ500nsほどです。
インタプリタと違ってコンパイラですから出力波形の時間を正確に計算することができます。
と書きましたが、今回のサンプルのように簡単なプログラムでなければそういうことは難しいです。
一般にはそれができるのはアセンブラプログラムです。
今回のサンプルプログラムでは前回コンパイル後のマシン語コードを表示させましたのでそれを解読することで出力波形の周期などを計算で求めることができます。
下は前回お見せしたマシン語コードのプログラムリストです。
右側にアセンブラのニーモニックを表記しましたが、今回はさらにそこに各命令の実行クロック数を( )の中に記しました。
00 0E movlw 00
94 6E movwf TRISC
00 0E loop:movlw 00 (1) ←
82 6E movwf PORTC (1) ___L OUT
01 0E movlw 01 (1)
82 6E movwf PORTC (1) ___H OUT
02 EF goto loop (2)
10 F0 →↑
PICのマシン語命令の多くは1命令クロックで実行されますがgoto命令など一部の命令は2クロックで実行されます。
上のリストを見ながらプログラムの動作とクロックの計算について説明をします。
4行目のところでPORTCに0が出力されます。
6行目でPORTCに1が出力されます。
この間がPORTC=0の期間です。
この間の命令の実行クロック数は1+1=2クロックです。
PORTCが1になったあと7行目のGOTO命令で3行目に戻ってふたたび4行目でPORTCに0が出力されるまでがPORTC=1の期間です。
この間の実行命令クロック数は2+1+1=4クロックです。
PICBS03のCPUクロックは48MHzです。
命令クロックはその1/4の12MHzです。
1命令クロックの時間は1/12μsです。
そこでPORTCの出力波形のLの期間を計算で求めると2/12=1/6ですから約0.167μsになります。
Hの期間は4/12=1/3ですから約0.333μsになります。
オシロの波形ではHの期間とLの期間はちょっと正確には読み取りにくいのですが1回の周期は0.167+0.333=0.5μsですから計算結果と大体一致しています。
おお、そうでした。
こういうときこそ、CPLDロジアナの出番です。
Lの期間は160ns、Hの期間は340nsと読み取れます。
1回の周期は500nsです。
PICBASICコンパイラ[第6回]
2023.4.8upload
前へ
次へ
ホームページトップへ戻る