デジタル降魔録TOPページへ

thank you for your access
 2018.08.18更新
































 ご質問にお答えします・・・


Flash PICって何ですか?
Flash PIC内で書き込んだプログラムが保存できません
保存ボタンはあるのですが、読み込みボタンがありません
FlashPICでは『DEFINE』命令が使えるのですか?
実際のPICと比べてずいぶんと制約がありますが
もう少し詳しいソースプログラムの説明はないのですか?
プログラム言語、アセンブラ言語の『命令』と『疑似命令』の違いは?
ソースプログラムとは?
FlashPICのを動かすうえで注意があれば教えてください

Flash PIC内で書き込んだプログラムが保存できません

Flashプレーヤーのセキュリティが上がってきておりまして、保存できないPCがあることが確認されています。ソースプログラムを保存してからFlash PICを再起動してみて、『ソースファイルを読み込みました』という窓が開けば問題ありませんが、そうでないときは保存されていません。この問題を回避するために、ソースプログラムはメモ帳か、テキストエディッタで作っていただき、それをコピーしてFlash PICのソースウィンドウへ貼り付けて使用するようにします。ソースプログラムの保存はご利用のテキストエディッタで行うことになります。

 逆にFlashPICに書かれたソースプログラムをWindowsのメモ帳へコピペをするとソースプログラムの内容が1列に繋がってしまうという不具合が出る場合があります。これはFlashPICはUNIX系の文字処理を行いますので、そうではないWindowsでこのような現象が起きます。



先頭へ戻る

保存ボタンはあるのですが、読み込みボタンがありません

読み込みボタンは作っておりません。
 Flash PICに書き込まれたソースプログラムの保存と読み込みの挙動を説明いたします。
 まず保存ボタンを押しますと作成中のソースファイルのテキストデータを一つだけがセーブします。そして次にFlash PICが起動された時に、保存先にソースファイルがあるとそれを読み込みます。
 つまり読み込むのは起動された時だけですので、保存ボタンしかない無いわけです。



先頭へ戻る

FlashPICでは『DEFINE』命令が使えるのですか?

FlashPICは初心者向けであるため、疑似命令は『EQU』と『ORG』のみです。
 『DEFINE』が使えるとEQUとあわせて、

 PORT_A  EQU  8       
 #DEFINE TEST_PT PORT_A,0

 などと書けてとても便利なのですがFlashPICでは使えません。

 上記の意味ですが、
 初めのEQUで『PORT_A』と言う文字列に数値『8』、つまりFlashPICに備わっているAポートのアドレスを代入しています。
 次の『#DEFINE』で、TEST_PTという文字列に『PORT_A,0』を代入しています。早い話がAポートのビット0を指定していることがになります。こうしておくとプログラム部分で以下のように書けます。

 btfss TEST_PT
 return
 ~何かの処理

 動きの説明をしますと、
 ポートのTEST_PTのビット(=PORT_Aのビット0)が "L" なら return 命令を処理してこのサブルーチンから脱出します。
 ポートのTEST_PTのビットが "H" なら return 命令をスキップして"~何かの処理"のほうへ移動します。

 これを普通に書くと、

 btfss 8,0
 return
 ~何かの処理

 となります。内容はどちらも同じですが、TEST_PTの部分は自分で使う名称が使えますので、分かりやすさは断然最初のほうです。
 と便利な『#DEFINE』の説明をしておき、それが使えないという悲しいお知らせでした。



先頭へ戻る

実際のPICと比べてずいぶんと制約がありますが

申し訳ありません。ネット上でシミュレートするという無茶をやっていますので、実際よりも超簡易的になっています。

 たとえばソースプログラムの先頭に書かれた英字はすべてラベルと判断されるために『ORG』疑似命令は最低一つの空白を先頭につける必要があるとかの実機とは異なった制約があります。
 書式制約はこちらをご覧ください


 他にもアセンブラ言語のうち特殊な物は用意されていません。このあたりが無茶なシミュレーターと言われる由縁です。
 特殊な物と言うと。
 割り込みはできません。もちろんA/D変換も、USART、ウォッチドッグタイマーだってありません。どれも初心者の方が頭を抱える物ですので、すべて排除しました。(ウソ。Flashで実現するには速度が足りず困難だったからです)

 無茶ついでに、
 割り当てレジスタがちょっとしかありません。詳しくは割り当てレジスタ一覧表をご覧ください。

 FlashPICが無茶なシミュレーターだと言うのはこの超簡単な構造のためです。ところが初めてプログラムをしようかという人には、これぐらいがちょうどいいのですね。まだプログラムの流れが頭に入らないうちから、割り込みだとかマルチタスクだとか、マクロ疑似命令もそうですが、そんなのはプログラム的思考力が固まるまでは考えないのが得策。気付けば自分から手を出すようになります。
 それよりも自分の作ったプログラムがレジスタやメモリを書き換えてポートの先にある部品を動かしていくようすをステップ動作で確認することが、どれだけ理解を深めるか実感してみてください。これは本物のエミュレータと同じ機能を実現しています。





先頭へ戻る

もう少し詳しいソースプログラムの説明はないのですか?


 Microchipで公表されている"0"~"65535"までの10進数を16進数に変換するプログラムの一部を使って説明していますので、こちらをご覧ください



先頭へ戻る

プログラム言語、アセンブラ言語の『命令』と『疑似命令』の違いは?

プログラム言語あるいはアセンブラ言語での『命令』とは、PICを制御するための単語を羅列したものです。アセンブラはこれを読み込んでPICが直接理解できる16進数のマシン語に変換します。
 疑似命令と呼ばれるのはプログラム言語とは異なり、マシン語を吐き出すアセンブラへ指示を出す命令のことで、PICの制御には直接関係ありません。



先頭へ戻る

ソースプログラムとは?

プログラム言語とアセンブラへの疑似命令を上から順に並べて書いて保存した物がソースコード、あるいはソースプログラムと呼ばれるものです。


先頭へ戻る

FlashPICのを動かすうえで注意があれば教えてください

1)ユーザーが好きに使えるファイルレジスタは0x0B~0x7Fまでですが『Watchテーブル』に表示されるのは0x14までです。
ファイルレジスタのことを難しく考えないでください。パソコンのメモリと同じです。何ギガバイトの時代に最大116バイトと地獄のような仕様です。
 スペシャルファンクションレジスタは、入出力設定やポートに直結した、ハードウエアへの橋渡し部分だと思えばいいかもです。


2)10進表記はできません。すべて16進表記でプログラムを書いてください。FlashPICの取り説には10進表記ができるようなウソが書かれています(どもすみません)。できれば本番の練習だと思って、0x16と、頭に"0x"を付けるクセを養いましょう。
 本物のPICアセンブラは好きな数値表現ができますが、この数値は10進ですよとか、16進ですよとアセンブラに知らせる疑似命令が必要です。その一つが "0x" です。"0x"が付くと16進を指定します。

 なのでFlashPICでは10進数を頭の中で16進に換える練習をして、16進表記に慣れておくのがいいです。慣れてくると "0x0A"や "0x0E"が偶数だと、自然と頭に浮かんでくるようになります。


3)処理結果の格納先は "1" や "0" でもいいのですが、分かりやすい "to_F" や "to_W" と書きましょう。ただし本物のPICアセンブラでいきなり書くとエラーになります。そこでは疑似命令"equ"を使って、

 to_W  equ 0
 to_F  equ 1 と書けば使えるようになります。

ただし、FlashPICでこう書くとエラーになります。ほんとアマノジャクでどもすみません。代わりに"equ"を使わずとも、次の書き方を許しています。

〝0〟〝to_W〟〝to_w〟〝W〟〝w〟〝 W〟(Wの前にひとつのスペース)〝 w〟(wの前にひとつのスペース)
〝1〟〝to_F〟〝to_f〟〝F〟〝f〟〝 F〟(Fの前にひとつのスペース)〝 f〟(fの前にひとつのスペース)


4)ラベルとは……
 ジャンプ先を示す文字列だと思ってください。もしこれを使わず直接アドレスを指定をした時のことを考えてみてください。実際、FlashPICで "goto"文を使ってアドレス指定で書いてみると解ります。ジャンプ先のアドレスよりも前に新しい命令を追加した時のことを。アドレスがその分ずれてしまい、アドレスを直接書いた部分の訂正を強いられます。これはとんでもないことですよね。そんな時、ラベル名が決められていれば、ラベルの位置がどんなに移動しようが、アセンブルする時に再計算してくれます。
 こういうのをツーパスアセンブラと言います。地獄のワンパスアセンブラを行っていた時代が懐かしいです。
 ラベル名の末尾は何も入れなくてもいいのですが、":"をつけて終わったほうが、一目でラベルと分かりますので、本番の時に妙なエラーに悩まされずに済みます。


5)コメントについて
";" から始めて行末までですが、行末に少しスペースが空いたほうがおかしな表示結果に悩まされることがなくなります。二行に渡るコメントを書きたいときは、行末までに一度改行して、行頭から";"を書いて続きを書くことをお勧めします。ただしこれはこちらの都合です。すみません。本物のアセンブラではそんなことはありません。でも二行に渡るコメントでうっかりへんなところで改行してしまうと、プログラムの一部と判断されてエラーが出ます。そのとき半角英字が行頭にくるとラベルとなって意味不明なことになる場合はあります。



先頭へ戻る