<紙>さんLOG

「パソコンヲタクの雑記帳」
 PC/Linux系/物理・化学で遊んでいます。
思いついたことを綴っています。

PC:PIC 接続[パラレル編](1)

2008年07月06日 | PIC・マイコン
                                                   日記@BlogRanking
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クリック(投票を)お願いします ⇒ 日記@BlogRanking

最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。