PICBASICコンパイラ
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
まるでインタプリタ。でもコンパイラです。超カンタン超シンプルです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第39回]
●PRINT文/LCD表示
今回はPRINT文について少し詳しく説明をします。
PICBASICコンパイラのPRINT文には2つの役目があります。
1つはプログラムのデバッグに役立つようにプログラムの途中にPRINT文を挿入したりレジスタの値などを表示させるための機能です。
実際その機能がないことにはデバッグは極めて困難になります。
デバッグのためのPRINT文は必須と言えるでしょう。
そのためには要はデバッグ画面(コマンドプロンプト画面)に簡単なメッセージや計算の途中の結果などの数値が表示できさえすればよいので、通常のPRINT文に期待されるような表示の際のレイアウトに関する機能などはなくてもよろしいでしょう。
さて、もう1つの機能なのですがこちらも非常に有用な機能です。
それが[第37回]に書きましたようにPICBASICコンパイラの最終的な目的であるところのPICボードの単独実行時のデータやメッセージをLCDに表示するための機能としてのPRINT文です。
どちらも重要な役目ですがPRINT文の機能としてはどちらかといえば後者によりウェイトがかかっています。
PICBASICコンパイラのPRINT文にはそのような2つの役目があることを理解してください。
[第37回]から書いておりますPRINT文は勿論後者についての説明です。
前置きは以上なのですが今回の説明に入る前に前回の補足説明をしておきます。
前回のプログラムはFOR〜NEXT文の中でPRINT文を使ってA〜Zの文字を表示するものでした。
PRINT文で使っているCHR$()は()の中の値をASCIIコードとみなしてそのコードに対応する文字を返します。
LCDに文字を表示するサンプルとしてそういうプログラムを例示しましたので、ひょっとするとPICBASICコンパイラでLCDに表示するにはそういう使い方をしなければならないのか、と思われたかもしれません。
前回のプログラムは連続する文字コードを利用することでアルファベットの文字列を簡単に表示する方法のひとつの例として使ったので、LCDに文字を表示するにはCHR$()を使わなければならないということではありません。
今回はもう少し一般的なLCDへの表示プログラム例をお見せしながらPICBASICコンパイラのPRINT文について説明します。
[第37回]のPIC18F4550ボード(PICBS02)は間にPIC18F14K50ボード(PICBS01)をはさむ形で間接的にWindowsマシンにUSB経由で接続されています。
その接続イメージは[第2回]で略図で説明しています。
下に再掲します。
図のUSBIFボードがPICBS01でPICターゲットボードがPICBS02です。
ちょっと見には市販のUSB−232C変換ケーブルを使えばよいじゃないかと思われそうですがそうしたくないわけがあってこのような構成になっています。
市販のUSB−232C変換ケーブルは大抵は中にFTDI社のUSB−232C変換ICが入っていてそれを使うためにはドライバのインストールが必要です。
そのドライバは大抵は自動でインストールしてくれるようですが、以前はなかなかインストールできなくて苦労したことをよく経験しました。
ユーザーによっては他にインストールしているアプリケーションなどが邪魔をしてどうしてもインストールできなかったり正常に動作しないことなどもありました。
それでドライバのインストールを必要としない(実際は必要なのですが標準的なHIDインターフェースなので大抵はWindowsがスタンダードのドライバを捜して組み込んでくれます)このようなシステムにしています。
当初は基本的にはUSB−232Cインターフェースの機能として考えていたのですが、ここしばらくあれこれ作業を進めるなかでなんだかすごい機能を組み込んでしまいそうなところにきてしまっています(またしても泥沼にはまりそうな…)。
ちょいと余談になりました。
話をもとに戻します。
いつものようにBASICプログラムをLOADしました。
プログラムはBSPRINTT5.TXTです。
ロードするとすぐにPICBASICコンパイラによってPICアセンブラソースプログラムに翻訳され、最終的にPICマシン語コードが生成されます。
LISTコマンドでプログラムをリスト表示しました。
前回は文字を表示するのにCHR$()を使いましたが文字列を表示するのに普通は表示したい文字列を” ”ではさんで使います。
” ”の中には半角の英大文字、小文字、数字と記号が使えますが全角文字やカナは使えません。
PRINT文に変数名を記述するとその値が16進数2桁で表示されます。
このプログラムでは変数としてa、b、cを使っています。
現在の仕様では変数の値は8ビットですから00〜FF(0〜255)の範囲に限られます。
現行ではマイナスの数は扱いません。
このあたりのところは将来は機能拡張するかもしれません。
PICのSFR(特殊関数レジスタ)を扱う関係で変数名としては英小文字と数字、それと−、__(アンダーバー)を使います。
このプログラムでは1桁の英小文字a、b、cを使いましたが1桁でなくても構いません。
14文字までの文字列を使うことができます(PICBASICの命令語と同じ文字列は使えません)。
表示の区切りマークとしては ,(カンマ)を使います。
;(セミコロン)は前後を空けないで間をつめて表示します。
PRINT文の最後を;(セミコロン)で終ると改行されません。
PRINT文の最後に;(セミコロン)をつけないで終ると改行されます。
/RUNコマンドを実行すると翻訳生成されたPICのマシン語コードがPICに送られてそこで実行されます。
PICターゲットボードにLCD表示器を接続していてもそれがUSBIFボードを介してWindowsパソコンとUSB接続されている状態ではPRINT文を実行するとLCD表示器ではなくて上の画面のようにコマンドプロンプトの画面に表示されます。
program startedの次からbreak program endの前までがPRINT文での表示です。
上の説明を見ながらプログラムリストとプログラムの実行結果の表示を照合してみてください。
PICBASICコンパイラによって作成されたマシン語プログラムリストファイルです。
2000 ; 10 print "LCDTEST" 2000 4c0e movlw 4c 2002 16ec call 2c 2004 00f0 2006 430e movlw 43 2008 16ec call 2c 200a 00f0 200c 440e movlw 44 200e 16ec call 2c 2010 00f0 2012 540e movlw 54 2014 16ec call 2c 2016 00f0 2018 450e movlw 45 201a 16ec call 2c 201c 00f0 201e 530e movlw 53 2020 16ec call 2c 2022 00f0 2024 540e movlw 54 2026 16ec call 2c 2028 00f0 202a 26ec call 4c 202c 00f0 202e ; 20 a=5:b=8 202e 050e movlw D'5' 2030 306e movwf a 2032 080e movlw D'8' 2034 316e movwf b 2036 ; 30 c=a+b 2036 3050 movf a,w 2038 22ec call 44 203a 00f0 203c 3150 movf b,w 203e 24ec call 48 2040 00f0 2042 1c24 addwf R1c,w 2044 326e movwf c 2046 ; 40 print "a=";a,"b=";b, 2046 610e movlw 61 2048 16ec call 2c 204a 00f0 204c 3d0e movlw 3d 204e 16ec call 2c 2050 00f0 2052 3050 movf a,w 2054 14ec call 28 2056 00f0 2058 28ec call 50 205a 00f0 205c 620e movlw 62 205e 16ec call 2c 2060 00f0 2062 3d0e movlw 3d 2064 16ec call 2c 2066 00f0 2068 3150 movf b,w 206a 14ec call 28 206c 00f0 206e 28ec call 50 2070 00f0 2072 26ec call 4c 2074 00f0 2076 ; 50 print "c=";c, 2076 630e movlw 63 2078 16ec call 2c 207a 00f0 207c 3d0e movlw 3d 207e 16ec call 2c 2080 00f0 2082 3250 movf c,w 2084 14ec call 28 2086 00f0 2088 28ec call 50 208a 00f0 208c 26ec call 4c 208e 00f0 2090 ; 60 print "a=";%a,"b=";%b,; 2090 610e movlw 61 2092 16ec call 2c 2094 00f0 2096 3d0e movlw 3d 2098 16ec call 2c 209a 00f0 209c 3050 movf a,w 209e 1aec call 34 20a0 00f0 20a2 28ec call 50 20a4 00f0 20a6 620e movlw 62 20a8 16ec call 2c 20aa 00f0 20ac 3d0e movlw 3d 20ae 16ec call 2c 20b0 00f0 20b2 3150 movf b,w 20b4 1aec call 34 20b6 00f0 20b8 28ec call 50 20ba 00f0 20bc ; 70 print "c=";%c, 20bc 630e movlw 63 20be 16ec call 2c 20c0 00f0 20c2 3d0e movlw 3d 20c4 16ec call 2c 20c6 00f0 20c8 3250 movf c,w 20ca 1aec call 34 20cc 00f0 20ce 28ec call 50 20d0 00f0 20d2 26ec call 4c 20d4 00f0 |
まだ説明の途中なのですが本日は時間がありません。
続きは次回にいたします。
PICBASICコンパイラ[第39回]
2023.6.22upload
前へ
次へ
ホームページトップへ戻る