PCのパラレルポート(プリンタポート)を、ActiveBASIC (Ver.4)を用いて直接操作して、
PICと通信する方法をまとめる。
まず、プリンタポートの仕様は、AT互換機パラレルプリンターポートにある。
また、フリー百科事典『ウィキペディア(Wikipedia)』では、パラレルポートといった記述がある。
PCで利用することを考えると、これが分かりやすい。
ですが、Windows XP では、直接操作が許されていないので、IOSCM.SYSを使う。
実際に使うのはその内の、次の2ヶのみである。(メインプログラムと同じ場所に置いておく)
ioscm.sys、vbioscm_DLL.dll
メインプログラムでは、DLL の使用宣言をし、開始処理を呼び、IOを行う。
(段付けのために、先頭に2B空白がある)
'------------------- < Active BASIC > -----------------
' 直接I/O 制御関数群(InpB、OutB)宣言
Declare Function InpB Lib "VBIOSCM_DLL.DLL" Alias "_InpB@4" (ByVal Port As Integer) As Integer
Declare Sub OutB Lib "VBIOSCM_DLL.DLL" Alias "_OutB@8" (ByVal Port As Integer, ByVal dat As Integer)
' 直接I/O 制御 開始/終了処理(IOSCM_Start、IOSCM_Stop)宣言
Declare Function IOSCM_Start Lib "VBIOSCM_DLL.DLL" Alias "_IOSCM_Start@0" () As Integer
Declare Function IOSCM_Stop Lib "VBIOSCM_DLL.DLL" Alias "_IOSCM_Stop@0" () As Integer
Dim addr As Integer, ret As Integer ' 変数定義
ret=IOSCM_Start() ' IOSCM 開始処理をコール
If ret And 1 Then ' エラーの時は直接I/O制御不可のため終了
Print "IOSCM Init Error!!"
End
End If ' 以後は直接I/O 制御が可能になる
'
addr=&H378 ' プリンタポート、環境にあわせて変更
'
OutB(addr+2,&H0B) ' データポートを出力モードに設定する。コントロールポートは全てLowに。
OutB(addr,0) ' データポートを全てLowにする。
以下、
OutB(addr,xxx) ' データポートへ xxx を出力する。
xxx=InpB(addr+1) ' ステータスポートから入力する。
等で使える。
最後は、
*owari ' 終了
ret=IOSCM_Stop() ' IOSCM 終了処理をコール
End
となる。
なお、データポートを入力モードにするには、
OutB(addr+2,&H2B) ' 入力モードに設定する。コントロールポートは全てLowに。
である。
例えば、ピン#2(データポートの0ビット)をPICに繋いで、スイッチの代わりに使う。
OutB(addr+2,&H0B) ' データポートを出力モードに設定する。
OutB(addr,0) ' スイッチオフ。
OutB(addr,1) ' スイッチオン。
となる。
ついでに、PC上での時間待ちは Sleep(xx) 命令を使う。
xx は ミリ秒単位であるが、実際には15mS 単位に切り上げられる。
お手数をおかけします。2クリック(投票を)お願いします ⇒