2026.9.28
前へ

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


[新連載開始]W65C02マイコンボードの製作

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
私としてはW65C02をさわるのは全く初めてです。何から何まで未経験です。さてどうなりますでしょうか。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第83回]



●USBによるデータの送受信(5)DWBFCK,DRBFCK,DWRITE,DREAD

今まで書いてきましたようにPIC18F45K50とW65C02の間のデータの送受信はPIC18F45K50がDMAでW65C02のプログラムを一時停止させておいてその間にRAMに対してデータをWRITE、READするという方法で行ないます。
その方法をステップを踏んで構築してきましたので新規に作ったBASICの命令はまだDMA方式を意識したものになっていました。
実際にそのように操作しているのですからそれがわかる形のほうが応用が利くという面があると思います。
ただ実用としてのUSB通信を考えてみるとDMAを意識しながらプログラムを作るというのもいささか冗長です。
裏ではDMA方式で行なっていても表では直接データを送受信している形にしたほうが余計なことを考えなくて済むだけプログラミングの効率が上がるといえましょう。
そもそもはそれこそがBASIC的ということだと思います。
その考えに従って今回はまた4つの命令を新しく作りました。
とは言っても前回までの命令が使えなくなったわけではありません。
今までの命令も今までのやりかたでそのまま機能します。
今回はそれに加えて新しい命令を追加しました。
命令の名前をどうするかでちょっと悩みました。
送信、受信ということからすればSEND、RECEIVEが適当なのですが特にRECEIVEなどは綴りでこけてしまいそうです。
ここはやっぱりWRITE、READのほうが判りやすいと判断しました。
前回の命令でメモリに対してMWRITE、MREADを使いましたのでその延長でDWRITE、DREADとしました(Data Write、Data Readの意)。
またバッファエンプティかどうかを確認するためのものとしてDWRITE、DREADからの連想でDWBFCK、DRBFCKという名前の命令を作りました。
以下に整理します。
1)DWBFCK
Data Write Buffer Check
1バイトの送信バッファが空のときに0、フルのときに1になります。
PIC18F45K50(PICUSBBASIC)からW65C02へデータを送るときが「送信」でW65C02からのデータを受け取るときが「受信」です。
2)DRBFCK
Data Read Buffer Check
1バイトの受信バッファが空のときに0、フルのときに1になります。
3)DWRITE
1バイトのデータを送信します。
書式は DWRITE data です。
dataとして0を送信するとBASICとW65C02側のプログラムが共に終了します。
4)DREAD
1バイトのデータを受信します。
DWBFCK、DRBFCK、DREADにはパラメタはありません。
DWRITEの実行前にDWBFCKを実行してバッファが空であることを確認する必要があります。
ここでバッファが空というのは値が0という意味ではありません。
W65C02がそのデータを読み取り済み(受信済み)であるという意味です。
DREADの実行前にDRBFCKを実行してバッファに受信データがあることを確認する必要があります。
受信データがあるというのはそこに何かの値があるという意味ではありません。
そこにW65C02から送られたデータがあってそれが未読であるということを意味しています。

下がPIC18F45K50の側のBASICプログラムです。

こんなに短いプログラムになりました。

W65C02の側のプログラム(前回と同じ65C02TEST52.BIN)は先に/LDコマンドでロード済みです。
/RUNコマンドでW65C02側のプログラムの実行を開始し次にRUNコマンドでPIC18F45K50側のBASICプログラムの実行を開始しました。

20行の b#0 はb≠0(b<>0)の意味で使います。

W65C02マイコンボードの製作[第83回]
2026.9.28 upload

前へ

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