ワンボードマイコンをつくろう!(パソコンの原点はここから始まった)
TK80ソフトコンパチブル!8080、Z80マシン語からBASICまでこれ1台でこなせます
[第121回]
●ND80ZVのボーレートの設定
前回からの続きです。
WindowsXPでハイパーターミナルを使って、ND80ZVとRS232C通信を行います。
あらかじめND80ZVのボーレート(通信速度)の設定をしておきます。
ND80ZV側のボーレートの設定はディップスイッチで行ないます。
今回はND80ZVは9600ボー(ビット/秒)に設定しておきます。
●ZB3BASICの起動
ND80ZVをパソコンとUSBで接続をしてZB3BASICを起動します。
ND80ZVをパソコンに接続してZB3BASICを起動するまでの手順につきましては、ND80ZVの説明書を参照してください。
このときND80ZVをUSB接続するパソコンは232C通信をするパソコンでも、別のパソコンでも構いませんが、話が混乱してしまいますから、とりあえずはパソコンはWindowsXPパソコンが1台しかない、という前提で説明をします。
つまりND80ZVのZB3BASICを使うためにND80ZVをWindowsXPパソコンとUSBで接続します。
そしてRS232C通信を行うために同じWindowsXPパソコンと232Cケーブルまたは232C−USB変換ケーブルで接続します。
説明の順序としては、先に232Cケーブルでの接続例について説明をします。
ND80ZVの9ピンDSUBコネクタとWindowsXPパソコンの9ピンDSUBコネクタとをRS232Cケーブル(ストレートケーブル)で接続します。
9ピンDSUBコネクタがないパソコンの場合には、RS232C−USB変換ケーブルを使ってUSBで接続をします(前回を参照)が、USBでの接続例についてはあとで説明しますから、まずは以下の説明を順にお読みください。
●ハイパーターミナルの起動
ハイパーターミナルは[スタート]→[すべてのプログラム]→[アクセサリ]→[通信]→[ハイパーターミナル]の順にクリックして開きます。
[2011.10.9追記]
うっかりして、この部分が落ちておりましたので追記いたします。
ハイパーターミナルを開くと最初に「規定のTelnetプログラムにしますか?」と聞かれます。
いまどきTelnetなんて使わないだろうと思いますし、今回想定しているような、「パソコン」対「外部CPU装置」間のRS232Cによるデータの送受信はTelnetとは全く無関係です。
ここは[いいえ]をクリックします。
☆しかし「既定のTelnetプログラムとすることをお勧めします」などと書いてありますと、とりあえずは[はい]にしておくほうがよいのか、などという迷いが生じてしまいます。
そこで、追記をするついでにハイパーターミナルとTelnetについて調べてみましたら。
なんと、恐ろしいことがわかりました。
いやあ。
なんでも調べてみるものですねえ。
Microsoftによってハイパーターミナルの脆弱性が報告されており、危険を回避するために、ハイパーターミナルを既定のTelnetプログラムにしないように提案されていることがわかりました。
それどころか、本当はハイパーターミナルは削除してしまったほうがよいのだそうな。
むむむ。
それでWindows7にはハイパーターミナルがインストールできないのか。
ま。もっとも、この情報(http://technet.microsoft.com/ja-jp/security/bulletin/ms04-043)が公開されたのは2004年12月のことですから、ほとんどのWindowsユーザーはセキュリティ対策ソフトの更新が完了しているはずだと思います。
なので、削除まではしなくてよいと思いますが、とにかく既定のTelnetプログラムにしてはいけない、ということだけは言えると思います。
[追記ここまで]
「接続の設定」が表示されます。
今回初めてハイパーターミナルを使いますから、「新しい接続」を名前をつけて設定します。
とりあえずは適当な名前をつけました。
nd3test1にします。
[OK]をクリックします。
続いて「接続の設定」画面が表示されます。
電話は関係ありませんから、電話番号の入力は不要です。
今回はまずRS232Cポート(9ピンDSUB)に接続しますから、接続方法は「COM1」にします。
[OK]をクリックします。
「COM1のプロパティ」が開きます。
今回は9600ボー(ビット/秒)で通信を行うようにND80ZV側を設定しましたから、COM1も同じ「9600」にします。
フロー制御は行ないませんから、「なし」にします(フロー制御については前回の説明を参照してください)。
[OK]をクリックします。
ハイパーターミナルが起動しました。
じつはもうこれで相手側とケーブルで接続されていなくても、通信が開始されています。
画面左下に接続が開始されてからの経過時間が表示されています。
●最初にND80ZVから送信してみる
最初にND80ZVから送信をしてみます。
下の画面の通りにプログラムを入力してください。
たった3行のプログラムです。
実はZB3BASICの送信プログラムで本当に必要なのは、行番号20の1行だけです。
WRITE #1は232Cの送信命令です。
それに続く文字列を送信します。
行番号10と30はプログラムが実行されたかどうかを確認するための、ただのPRINT文です。
プログラムを入力したら、正しく入力されたかどうか、LIST文で確認してみましょう。
BASICプログラムの実行コマンドは「RUN」です。
RUN[Enter]と入力すると、プログラムはただちに実行されて
START
END
と表示されたあと、ブレイクします。
画面をよく見てください。
MSDOSプロンプトとハイパーターミナルのサイズを加減して、両方の結果を同時に見ることができるように、横に並べて表示しています。
左のMSDOSプロンプトでZB3BASICの送信プログラムを実行すると、すぐに右のハイパーターミナルに受信結果が表示されます。
え?
こんなに簡単なの?
そうです。
こんなに簡単なのです。
●ハイパーターミナルから送信してみる
今度は先ほどとは逆に、ハイパーターミナルから送信してみます。
ZB3BASICで受信プログラムを書きます。
私としたことがちょっとうっかりミスをしてしまったものですから、みっともない画面になってしまいました。
受信プログラムは送信プログラムよりもちょっとだけ複雑です。
下のLIST文で表示されている通りにプログラムを入力します。
行番号20のREAD #1が232Cの受信命令です。
その後に置く文字変数に受信データが入ります。整数変数にはそのときの受信文字数が入ります。
ここでは文字変数にA$、整数変数にA%を使っています。
受信が完了する(最後の区切り文字コード0D0Aを受信する)と整数変数には受信文字数が入りますが、0D0Aコードを受信するまでは、整数変数には0または−1が入ります。
行番号30が受信が完了したかどうかを確認するためのIF〜GOTO文です。
なおこの整数変数にはREAD #1文の実行前に0を入れておく必要があります。
ちょっと複雑だといってもこの程度ですから、やはり簡単なものです。
ND80ZVが受信する場合には、先に受信プログラムを実行して送信されるのを待っている必要があります。
上の画像は、ZB3BASICの受信プログラムをRUNコマンドで先に実行させたところです。
そうしておいてハイパーターミナルから送信データをキー入力したのですが。
ハイパーターミナルの画面にはキー入力された文字が表示されませんし、ZB3BASIC側も上の画面のままで変化がありませんでした。
実はハイパーターミナルは本気でさわるのは今回が初めてくらいのもので、ほとんど使ったことがありません。
それで送信の場合にはさらにいくつか設定が必要だということをうっかり忘れてしまっていました。
●ハイパーターミナルの設定
送信のためのハイパーターミナルの設定は上の画像にありますように、[ファイル]→[プロパティ]を開いて行ないます。
[設定]タブを開いて[ASCII設定]をクリックします。
「行末に改行文字をつける」と「ローカルエコーする」にチェックを入れて、[OK]をクリックします。
そのあと「プロパティ」も[OK]をクリックして閉じます。
今度は送信できたようです。
ZB3BASICは2回実行しています。
最初はハイパーターミナルのプロパティ設定がしてなかったためにzyz[Enter]12345[Enter]xyz[Enter]と入力したものが、ハイパーターミナル画面に表示されず(エコーされず)、改行文字もつけられなかったために、送信バッファにためられていただけでした。
そのあとで気が付いてプロパティ設定をしてからもう一度xyz[Enter]を入力したところ、それまでのデータがまとめて送信されたのが、最初の14文字の受信データです。
それにしても。
いかがでしたでしょうか?
232C通信がこんなに簡単だったなんて、「目からウロコ」ではありませんか?
●USB−RS232C変換ケーブルを使ってみる
今度は同じことを、秋月の「USB・シリアル変換ケーブル」を使って行なってみます。
WindowsXPパソコンのUSBコネクタに、USB・シリアル変換ケーブルを接続しました。
どうやらはじめての接続だったようで、「新しいハードウェアの検出ウィザード」が開始されました。
ところが、管理が悪くてドライバCDがどこかにいってしまって捜してもみつかりません。
XPだもの。ドライバくらいみつけてくれるでしょう。
[次へ]をクリックしました。
だめでした。
こうなると自力でドライバをダウンロードするしかありません。
「秋月」のサイトで確認してみました。
おお。
ドライバーソフトのダウンロードがありました。
ドライバーは、上の秋月のサイトからダウンロードできますし、下のメーカーのサイトからもダウンロードできます。
さっそくダウンロードしてセットアップしましたら、無事認識されました。
デバイスマネージャを開いて確認しました。
ポート(COMとLPT)のところでCOM5として認識されています。
COM番号がいくつになるかは、ハードによって異なります。
●新しい接続
ハイパーターミナルに新しい接続を作成します。
[ファイル]→[新しい接続]をクリックします。
現在の接続(COM1)を切断する許可を求められます。
[はい]をクリックします。
COM1での接続設定を次回接続時にも使えるように、保存しておくかどうかを聞かれます。
[はい]をクリックします。
新しい接続に名前をつけます。
nd3test2にして[OK]をクリックしました。
後から気が付いたのですが。
最初のnd3test1はrs232c9pにして、今回のnd3test2はusb232cにしておいた方がよかったですね。
「接続の設定」が表示されます。
接続方法はCOM5にして[OK]をクリックします。
「COM5のプロパティ」が表示されます。
COM1のときと同じように、ビット/秒は「9600」、フロー制御は「なし」にして[OK]をクリックします。
ハイパーターミナルが起動して、いつでも受信できるようになりますが、どうせ送信のためのプロパティの設定もしなければなりませんから、ここで済ませてしまいます。
[ファイル]→[プロパティ]を開いて、COM1のときと同じように、[設定タブ]を開いて[ASCII設定]をクリックします。
「行末に改行文字をつける」と「ローカルエコーする」にチェックを入れて、[OK]をクリックします。
そのあと「プロパティ」も[OK]をクリックして閉じます。
これでハイパーターミナルの設定は完了しましたから、次はND80ZVの側の準備をします。
まだUSB・シリアル変換ケーブルがND80ZVに接続されていなければ、ここでND80ZVの9ピンDSUBコネクタに接続します。
最初はND80ZVから送信しますから、送信プログラムを作成します(最初に書いたときにSAVEしておけばよかったですね)。
先ほど使った受信プログラムはこのあとまた使いますから、名前をつけて保存しておきます。
/SAVE RTEST1.TXT[Enter]と入力して、RTEST1.TXTという名前でハードディスクに保存しました。
BASICプログラムは行単位で書き換えができます。
現在ND80ZVのRAMにある受信プログラムのうち、5と40の行を削除します。
行番号だけ入力すると、その行が削除されます。
行番号20と30を書き換えます。
そのあと正しく変更できているかどうかLISTコマンドで確認しました。
RUN[Enter]と入力すると、送信プログラムが実行されて、ハイパーターミナルには受信した文字列が表示されました。
今度はハイパーターミナルから送信します。
ND80ZVの側は受信プログラムをLOADします。
そのまえに、せっかく書いた送信プログラムをSAVEしておきます。
/SAVE WTEST1.TXT[Enter]と入力して、送信プログラムをWTEST1.TXTという名前でハードディスクに保存します。
そのあと/LOAD RTEST1.TXT[Enter]と入力して、さきほど保存しておいた受信プログラムをLOADします。
RUN[Enter]と入力すると受信プログラムが実行されて受信待ちの状態になります。
ハイパーターミナルに送信する文字列を入力して最後に[Enter]を入力すると、ND80ZV側に、受信した文字列とその文字数が表示されました。
ワンボードマイコンをつくろう![第121回]
2011.10.8upload
2011.10.9追記
前へ
次へ
目次へ戻る
ホームページトップへ戻る