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


PICBASICコンパイラ

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

[第10回]



●サンプルプログラム(6)I/Oポートへの出力(4)R++

前回はI/Oポートの出力を+1ずつ加算していくプログラムを作りました。
R=R+1
という文はBASICでの定番です。
この形式はCでも用いられています。
Cでは加算値が1のときに限って使うことのできる簡易な形式があります。
それが今回のテーマ、R++命令です。
私はCは嫌いなのですがこれは便利な命令だと思います。
便利なものはできる限り取り入れるべきです。
スタンダードにこだわる必要はありません。
ということでPICBASICコンパイラでも実装することにしました。

こちらがサンプルプログラムです。

レジスタ名の後ろに‘++‘をつけるだけです。
Cではありませんから文末に’;’をつける必要はありません。
またCのように最初に変数名などを記述する必要もありません。
いかかでしょうか。
めっちゃ簡単でありましょう。
PICBASICコンパイラの変数名は半角英数字で表記します(最初の1文字はアルファベットに限定)。
小文字でも大文字でも使えますが、当PICBASICコンパイラのルールとしてPICの特殊関数レジスタ(SFR、Special Function Register)は大文字で表記することにしましたからそれと区別する意味で通常の変数名は小文字で表記したほうがよいでしょう。
TRISC、PORTCがPICのSFRです。

[訂正]
23.4.29追記
通常の変数名は英小文字と数字で表記することとしました。
通常の変数名では英大文字は使えません。
SFRの誤記を検出できるようにするためです。
[第16回]をお読みください。

ついでに説明しますと命令、コマンドも大文字、小文字のどちらでも使えます。
昔のBASICは大体大文字で表記することが多かったと思います。
しかしPICBASICではSFRに働きかけていることがすぐにわかるほうがよいと思いますから、こちらも小文字を使うほうがよいかと思います。
’goto’がBASICの命令です(’GOTO’も使えます)。

/runで実行したあと[Ctrl][B]を入力してブレークしました。

20行と30行を繰り返し実行するプログラムですから「break before line#=20」というのは20行の実行直前(30行の実行直後)にブレークしたことを示しています。
今までと同じように/PMRDコマンドでPIC18F14K50に書き込んだプログラムコードを表示させました。
いつもならここでPICのアセンブラニーモニックを併記したリストを書いてお見せするところですが今回はちょいとわけがあってそこは省略します。
そのわけは次回説明の予定です。

PORTCの出力をCPLDロジアナで観測しました。
サンプリング周波数は100MHzです。

R++はR=R+1よりも短いマシン語プログラムにコンパイルされます。
そのため前回のプログラムよりも高速で実行されます。
ビット0(RC0、PROBE0)の出力波形はHが270nsでLは230nsです。
H期間とL期間で若干パルス幅に差異があるようです。
1回の周期は500nsでこれは計算通りの値です(次回説明の予定)。

サンプリングクロック10MHzです。

RC1(PROBE1)から上のビットの1回の周期を見るとRC1〜RC4(PROBE4)はきっかり1μs、2μs、4μs、8μsになっています。

サンプリングクロック1MHzです。

RC5(PROBE5)=16μs、RC6(PROBE6)=32μs、RC7(PROBE7)=64μsになっています。

PICBASICコンパイラ[第10回]
2023.4.16upload

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