win95/98 でプリンタポート制御はできていたのですが、win2000 / XP では I/O ポート操作権限がOSからもらえないので、操作できずにいました。ところが!!!!
ゆういち@砂GGB様からメールでVBIOSCM
Windows2000でVB6による直接I/O制御を実現するライブラリ
http://www.vector.co.jp/soft/winnt/prog/se309575.htmlというのを紹介していただき、検証してみました。
意外とサクッと動いたのでびっくりです。パソコンのプリンタポートからAC100Vを制御 を読んでいることを前提に書きますので、読んでない方は一読すると良いかもしれません。

このページ先頭で紹介している
VBIOSCM
Windows2000でVB6による直接I/O制御を実現するライブラリ
http://www.vector.co.jp/soft/winnt/prog/se309575.html
とは何なのか?
これは、win2000 や winXP などで無理矢理 I/O 制御をやってくれるライブラリです。
なかなか手の行き届いた作りになっているのでちょっと感動しました☆
詳しい説明は VBIOSCM の説明書に書かれているので読んでみてください。
プリンタポートについては なひたふ新聞 様の プリンタポートの説明ページ で詳しくわかりやすく説明されているので、そちら参照してください(^^;
さて、本題の説明に入ります。
この回路は、プリンタポートのNo.3pinをLEDに繋げているだけです。
プリンタポートからは+5Vが出るのでLED保護のために330Ω抵抗もつなぎます。
![]() |
I/Oアドレス 0x378 構造 |
||||||||
| bit | bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 | |
| プリンタポート対応pin | 9pin | 8pin | 7pin | 6pin | 5pin | 4pin | 3pin | 2pin | |
I/Oレジスタ アドレス0x378 の1ビット目がNo.3pinに対応してます。
I/Oレジスタに書き込むには VBIOSCMライブラリ
の OutB 命令を使います。
Call OutB(0x378,0) '2進数 '00000000' が0x378に書き込まれる '1ビット目は 0 → No.3pinは出力無(0V) → LED点灯しない
Call OutB(0x378,2) '2進数 '00000010' が0x378に書き込まれる '1ビット目は 1 → No.3pinは出力有(+5V) → LED点灯する
このように、I/O レジスタの 0x378 番地をいじれば、プリンタポートの出力が変わるわけです。
プログラム中では下記のように Text1.Text に書かれている数値を 0x378 番地に書き込んでいます
Dim c As Integer
c = Val(Text1)
Call OutB(addr, c) 'addrは 0x378 (integer)
ちょっとわかりにくい説明ですね・・。
こういうのは、頭で考えるより、 いじってみた方がわかりやすいと思います。
VisualBASIC(VB)ver6
で作りました。
lptled.lzh (22KB)
VBIOSCMライブラリも一緒に入っています。
動作OSは windows2000 ・ windowsXP です。
win9x系では確認していません。
VBIOSCM 本体をDLし、説明書など一読しておくと良いでしょう。
http://www.vector.co.jp/soft/winnt/prog/se309575.html
プリンタコネクタ(オス) |
|
千石電商 \50 |
抵抗 |
330Ω |
秋月電子 \1 |
LED |
普通の輝度の物 |
ゴミから \0 |
| 基板 | ブレッドボード使用 | 再利用可なので\0 とする |
総費用 |
\51 |
回路作成 20分 |
総時間 約2.3時間 |

ソフトを使ってOutBボタンを押すとテキストの数字が反映されて・・
「2」を書き込むとちゃんと光りました。
「6」でも光りました。
ちゃんと bit1が1になれば光ってます。
「0」を書き込めば消灯します。
つまり、bit1が0になれば消灯です。
反応速度はそこそこ良いです。
理論上は1MHzくらいの速度でもイケるらしいのですが・・
まず重要なこと!
I/Oアドレス 0x378 に書き込んで制御を前提としてますが、
パソコンによっては 0x378 では動かないかもしれません。
プリンタのデータ制御ポートは、パソコンによって
0x378
0x278
0x3BC
の3種類のどれか一つを使っているようです。
なひたふ新聞
様の プリンタポートの説明ページ
で初めて知った事です。
で、なひたふ新聞 様のページ通りdebugコマンドを使ってプリンタポートアドレス調べましたが、私のパソコンでは 0x3BC と表示されました。
でも 0x3BCでは動かず・・・・壊す覚悟で 0x378 にアクセスしたら動きました・・。
・・・・・・・う〜ん。
心配ですけど、「動いてりゃ、それでいいじゃん☆」って事で(笑)
あ、そうそう。
パソコンによっては、プリンタポート No.18pin が GND でなく VCC+5V の場合があるようです。
そういう時は No.18pin の代わりに No.25pin を使うのが良さそうです。
ともあれ、ゆういち@砂GGB様 のメールのおかげでwin2000/XPでもプリンタポート制御出来るようになりました。
長年の夢でした・・・(^^;
今は特に使い道ないのですが、必要なときにすぐ使えそうです。
【感謝!リンク】
2008/2/24
最近、この記事を参考にしたけど動かない!というメールをいただくことが増えてきました。
私も検証してみたのですが原因はよくわかりません・・・。
プリンタポート を搭載している機種自体少ないですし、プリンタポートで何かをやる時代ではなくなってしまいました。
なので、今後このプリンタポートでの制御はお薦めいたしません。
また、質問があってもお答えできることは少なくなるかと思います。
今後はUSBが主流になっていくかと思います。
USBでの制御も色々実験していますので、ご参考にして下さい。