■手順2.プリンターI/Oのチェック。
まず、手順として先に説明しましたようにプリンターI/Oを使うので、こちらのチェックを行っておきましょう。
その前にエクセル97が必要です。またエクセルのVBA(ビジュアルベーシックforアプリケーション)の使い方も知っていなければなりません。BASIC言語ですので取っ付き安いと考えています。
エクセルでVBAを使うには?エクセルを起動して[ツール|マクロ|Visual Basic Editor]をクリックするとVisual Basic Editor(VBE)の画面が出てきます。左上側にプロジェクト エクスプローラの窓があるはずです。なければ[表示]から呼び出します。現在のBookを選び[挿入|標準モジュール]をクリックするとコード(プログラムorマクロ)を書くためのモジュールが出てきます。
さて、1つ1つプログラミングしていただくよりは付属の"writest.xls"をロードした方が早いと思いますのでそちらで説明します。"writest.xls"からVBEを出して下さい。
Declare Function InpB Lib "in_out.dll" Alias "inp" (ByVal Port As Integer) As Integer
Declare Sub OutB Lib "in_out.dll" Alias "outp" (ByVal Port As Integer, ByVal DAT As Integer)
Const PrIn As Integer = &H42 ' PC98 &H0279,&H0379,&H03BD DOS/V
Const PrOut As Integer = &H40 ' PC98 &H0278,&H0378,&H03BC DOS/V
Const Busy As Integer = &H04 ' PC98 &H80 DOS/V最初の2行はVBAにはIN/OUTのコードが無いのでDLLを呼び出してその関数を利用するためのものです。(in_out.dllはあらかじめ\windows\systemのディレクトリーへコピーしておいて下さい。)
次の3行はプリンターI/OのアドレスとBUSYの値を宣言しています。これらはパソコンごとに異なるのでこれをまず確かめます。[スタート|設定|コントロールパネル]からシステムをWクリックします。
![]()
「システムのプロパティ|ディバイスマネージャ」を開き
(例では一部衝突があるが気にしないように×とi)
プリンターポートを選択して<プロパティ>をクリックします。
「プリンターポートプロパティ|リソース」を開きI/Oポートアドレスを紙に書いておいて下さい。
例の場合アドレスの最初の&H03BCがデータOUT、次の&H03BDがBUSYピンのある制御INとなります。
Const PrIn As Integer = &H03BD 'PC98 &H0279,&H0379,&H03BD DOS/V
Const PrOut As Integer = &H03BC 'PC98 &H0278,&H0378,&H03BC DOS/V
と書き換えて下さい。(下線は不要)
また例ではDOS/V機ですのでBUSYピンはbit7となり下記のようにします。
Const Busy As Integer = &H80 'PC98 &H80 DOS/V
VBAではVBAが関知する定数、関数そのほかを自動的に大文字交じりに変更しますので全て小文字で書いて行くとconst Busy as integer→Const Busy As Integer と書き換えてくれるので綴りのチェックができます。またこれ以降 busy→Busy と自動的になります。
次にコネクターとケーブル、パソコンを接ぎI/Oのテストをしてみます。左はコネクターを裏側から見た結線図です。コネクターには小さな文字でピン番号が書かれていますので確認して下さい。
ここから先は各ピンのショートに注意して下さい。みのむしクリップかICピンクリップがあれば良いのですが無ければあらかじめピンに線をはんだ付けして接いでおいて下さい。黒丸がGND(グランド、コモン)に結線されている可能性があるピンですがパソコン、ケーブルによっては接ながれていない場合もあります。たぶん33か17番ピンは確かなようです。
テスターを2(PB0)(+)とGND(-)に接いでおきます。次にsub Otest()を実行します。やり方はsub Otest()の中のどこかにカーソルを置き[実行|Sub/ユーザーフォームの実行]をクリックすれば良いのですが今回はシート"IOテスト"にボタンがありますので<OutTest>をクリックして下さい。
すると出力する値を聞いてきますので1を入れます。この1はPB0のみをHighにすると言う意味です。PB0に電圧は出ていますか?他のPBピンはほぼ0Vになっていますか?同じようにして他の値でも確認して下さい。
2進数はご存じですね。25なら11001となりますよね。2進数が1になっているピンは電圧が出ます。0に対応するのはほぼ0Vです。
次はBUSYをチェックします。これは入力となります。これをVCC(電源)やGNDに接ぐことにより1,0を表しパソコンに入力します。今はVCC(電源)がないので取り敢えずPB0に接ぎます。お守り代わりにBUSYとPB0間に300Ωの抵抗を直列に入れて接いで下さい。(間違い無く接げるのであれば要りません)
次にシート"IOテスト"の<InTest>をクリックして下さい。最初にBUSYに接続されたPBに出力する値を聞いてきますので0を入れます。ここでPC98でConst Busy As Integer = &H04とした方は4となるはずです。ところでPB0に0を入れたので0が返って来ても良さそうですが逆になっています。これはPC98では内部でインバートされていて逆の値が入力されます。今度はPB0に1を出力してみるとBUSYは0の値を返すはずです。
またDOS/V機でConst Busy As Integer = &H80 とした人は同じようにして128が戻ってきます。
InTestは sub Itest() を起動します
ここまででうまく行かなかった人は
@in_out.dllを\windows\systemのディレクトリーへうまくコピーできなかった。この場合ボタンを押すと「関数がありません」のエラーが出る
Aコネクターの接続、IOピンの接続が正しくない。表示の裏表見間違い、GNDピンなど
BプリンターI/Oのアドレス、BUSYのビットなどの設定間違い。