PICBASICコンパイラ
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
まるでインタプリタ。でもコンパイラです。超カンタン超シンプルです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第56回]
●PICBASICコンパイラサンプルプログラム
前回は「PICアセンブラ in BASIC」の説明をするために簡単なサンプルプログラムを作成して動作テストを行いました。
プログラムを実行してI/Oポートの出力波形をオシロスコープで観測し写真を撮りました。
実はその折についでだからということでアセンブラではない通常のBASICコンパイラプログラムも作成して同じように実行してI/Oポートの出力波形も写真に撮りました。
せっかくプログラムを書いて写真まで撮りましたので今回はそれをお見せすることにいたします。
こちらがそのときに書いたPICBASICコンパイラのソースプログラム(テキストプログラム)です。
10 TRISC=0 20 *bsloop 30 PORTC=a 40 a=a+1 50 goto *bsloop |
前回のPICアセンブラのサンプルプログラムと同じ動作をするプログラムです。
変数aの値を+1ずつ増加させてその値をPORTCから出力します。
PICBASICコンパイラは今のところ数値は8ビットですからaの値の範囲は0〜255($FF)です。
255に+1を加えると結果は0になります。
そこからまた+1ずつ加算されていきます。
下は上のBASICソースプログラムがPICBASICコンパイラによって読み込まれてその結果作成されたPICアセンブラプログラムリストです。
2040 ; 10 TRISC=0 2040 000e movlw D'0' 2042 946e movwf TRISC 2044 ; 20 *bsloop 2044 bsloop 2044 ; 30 PORTC=a 2044 3050 movf a,w 2046 826e movwf PORTC 2048 ; 40 a=a+1 2048 3050 movf a,w 204a 22ec call 44 204c 00f0 204e 010e movlw D'1' 2050 24ec call 48 2052 00f0 2054 1c24 addwf R1c,w 2056 306e movwf a 2058 ; 50 goto *bsloop 2058 22ef goto bsloop 205a 10f0 |
このサンプルプログラムの計算式は簡単なものですがもっと複雑な式にも対応するためにあらかじめターゲットボードのPICに書き込み済みのサブルーチンをCALLしています。
PICBASICコンパイラによって生成されたPICマシン語プログラムを実行してPORTCから出力された波形です。
上側(CH1)がPORTCのビット1(RC1)の出力波形で下側(CH2)がPORTCのビット0(RC0)の出力波形です。
水平時間軸を拡大しました。
この波形からプログラムのGOTOループの1回の実行時間が3μsであることがわかります。
前回のアセンブラプログラムから生成されたマシン語プログラムでは1回のループの実行時間は250nsでした。
アセンブラでプログラムを書くのは大変ですがより高速で実行されるプログラムになります。
上のBASICプログラムはI/Oポートに値を出力するときに普通に使われる書き方ですがPICの場合にはI/Oポートそのものが一般的な変数と同じレジスタとして扱われます。
ですから向きを「出力」に指定したI/Oポートの出力値を読むことができます。
下はPORTCそのものをレジスタ(変数)として扱ったプログラム例です。
10 TRISC=0 20 *bsloop 30 PORTC=PORTC+1 40 goto *bsloop |
さきほどのプログラムをこのように書いても同じように実行されます。
下はPICBASICコンパイラによって生成されたPICアセンブラプログラムリストです。
2040 ; 10 TRISC=0 2040 000e movlw D'0' 2042 946e movwf TRISC 2044 ; 20 *bsloop 2044 bsloop 2044 ; 30 PORTC=PORTC+1 2044 8250 movf PORTC,w 2046 22ec call 44 2048 00f0 204a 010e movlw D'1' 204c 24ec call 48 204e 00f0 2050 1c24 addwf R1c,w 2052 826e movwf PORTC 2054 ; 40 goto *bsloop 2054 22ef goto bsloop 2056 10f0 |
マシン語プログラムの長さがほんの少しだけ短くなりました。
プログラムの実行結果です。
先ほどのプログラムの実行速度とほとんど変わりません。
やはりサブルーチン部分の実行に大半の時間がかかっているようです。
PICBASICコンパイラ[第56回]
2023.7.24upload
前へ
次へ
ホームページトップへ戻る