-- パラレルポートの制御(2) (2009/09/27 01:30) - 1776PV

プログラムの解説いきます。
実際に制御するのに必要な関数は、iopermとoutbだけです。

流れとしては、
1. iopermでポートの入出力権限を得る。
2. outbで実際に出力する。

ちなみに、Linuxでないと動作しないはずです。
今回は信号を出力するだけですが、入力の場合はinbという関数があります。
#include <stdio.h>
#include <unistd.h>
#include <sys/io.h>
特別にインクルードするヘッダファイルは、unistd.hとsys/io.hです。
これらは、おそらくiopermのためのもの。
#define addr 0x378
ここが一つめのポイント。
パラレルポートにどんなアドレスがあてられているかは機種に依存します。
だから、BIOSを立ち上げて確認します。



このパソコンの場合は「378」というアドレスなので、0x378と設定。
一般的に、このアドレスである場合が多いようです。
#define size 3
そして、どのくらいの大きさのアドレスを使うかを指定します。
パラレルポートは25ピンで、そのうち1つはグラウンドです。
だから、扱えるのは24bit、つまり3byteです。
int main(){

  unsigned char c;
  if( ioperm( addr, size, 1 ) )
    return -1;
main関数の中に入って、iopermでポートの入出力権限を得ます。
失敗した場合はプログラムを終了するようにしています。
  while( ( c = getchar() ) != '0' )
    if( c != '\n' )
      outb( c, addr );
ここが2つ目のポイント。
whileとifは、文字の入力の都合なので信号の出力には直接関係ありません。
outbで実際にデータを出力するのですが、ビット単位でなくバイト単位で出力します。
つまり、8bitまとめて出力します。

今回は、文字を入力させて、そのアスキーコードをそのまま出力するようにしています。
たとえば、「a」のアスキーコードは0x61で、ビットに直すと'01100001'です。
これが、9番ピンから2番ピンに向かって、順に出力されるわけです。
  return 0;

}
ここは終了処理。

今回作った回路では、2番ピンにLEDをつないでいます。
だから、a(0x61=01100001)が入力された時は点灯。
b(0x62=01100010)が入力された時は消灯・・・といった具合。

11番ピンから24番ピンに出力するときは、出力のアドレスを変えるだけ。
ただ、ピンとの対応関係はまだ分からないので、追って調べてみます。

-- 参考文献
I/O ポートの制御
COFFEE-HOWTO

-- 関連項目
パラレルポート
NetVistaの改造
パラレルポートの制御
家庭用100V電源の制御
モーターの制御(2)
モーターの制御(3)
モーターの制御(4)
ソーシャル目覚まし
えんぺらあ 「こうなってくるとやれることが増えてきて楽しくなってきますよね。さあ、お絵かきしようか。」 (2009/09/28 20:33)
かってぃ 「今日もまた一歩前進しました(後で更新予定)。だが、お絵かきロボットへの道は険しい・・・。」 (2009/09/28 20:45)

名前
コメント
更新情報
コメント「Pharmc378さん」(2018/10/16 01:33)
コメント「Pharmg834さん」(2018/10/16 01:31)
コメント「Pharmd230さん」(2018/10/16 01:31)
コメント「Pharme155さん」(2018/10/14 19:25)
コメント「Pharmd788さん」(2018/10/14 19:25)
コメント「Pharmk8さん」(2018/10/13 13:25)
コメント「Pharmg628さん」(2018/10/13 13:25)
コメント「Pharmf709さん」(2018/10/13 13:25)
コメント「Pharmb611さん」(2018/10/13 13:25)
コメント「Pharmb287さん」(2018/10/12 08:02)
コメント「Pharmf594さん」(2018/10/11 01:20)
コメント「Pharmb140さん」(2018/10/11 01:20)
コメント「Pharmg975さん」(2018/10/11 01:20)
コメント「Pharmg566さん」(2018/10/11 01:20)
コメント「Pharmk56さん」(2018/10/09 19:18)
コメント「Pharmg808さん」(2018/10/09 19:18)
コメント「Pharmk885さん」(2018/10/09 19:18)
コメント「Pharmb377さん」(2018/10/09 19:18)
コメント「Pharma706さん」(2018/10/08 13:15)
コメント「Pharmd718さん」(2018/10/08 13:15)
コメント「Pharme503さん」(2018/10/08 13:15)
コメント「Pharme612さん」(2018/10/08 13:15)
コメント「Johna911さん」(2018/10/07 20:26)
コメント「Johnf318さん」(2015/11/30 06:26)
コメント「もちもちさん」(2015/10/15 01:25)
コメント「しもさんさん」(2014/07/11 12:57)
コメント「ljilchさん」(2014/06/28 02:40)
コメント「ledogoさん」(2013/06/25 23:11)
コメント「tcrwefcxtjさん」(2013/06/25 21:00)
コメント「gihjfldrwさん」(2013/06/23 08:07)
コメント「yfaewyqviさん」(2013/06/23 03:12)
コメント「Papan3世さん」(2013/05/09 11:48)
コメント「Papan3世さん」(2013/05/09 11:46)
コメント「Papan3世さん」(2013/05/09 11:45)
コメント「Papan3世さん」(2013/05/09 11:40)
コメント「Papan3世さん」(2013/05/09 11:37)
コメント「さん」(2013/04/21 01:57)
コメント「上田朋哉さん」(2013/04/08 02:43)
コメント「syazaqxさん」(2013/02/14 11:36)
コメント「seqdspさん」(2012/11/08 02:34)
コメント「kzghepさん」(2012/11/03 21:45)
コメント「さん」(2012/10/16 08:05)
コメント「yflpfhftbvpさん」(2012/07/21 14:51)
コメント「szodydさん」(2012/06/22 15:38)
コメント「nkhkajuttzさん」(2012/06/20 03:23)
コメント「jjomlllxさん」(2012/02/13 12:34)
コメント「さん」(2011/10/28 14:11)
コメント「onmqdqobrpdさん」(2011/10/15 03:57)
コメント「さん」(2011/08/20 14:05)
コメント「さん」(2011/06/26 20:59)
コメント「bfixkuohhzoさん」(2011/06/10 00:04)
コメント「さん」(2011/05/24 13:47)
コメント「dyecrnさん」(2011/05/12 20:06)
コメント「atkyzmさん」(2011/03/02 07:59)
日記「新年を迎えまして(4)[1647]」 (2011/01/23 00:17)
電子工学「TwitCrew[2052]」 (2011/01/02 06:22)
コメント「かってぃさん」(2010/12/07 15:49)
コメント「通りすがりさん」(2010/12/02 23:37)
電子工学「ソーシャル目覚まし[2925]」 (2010/11/14 07:41)
その他「自己紹介[7655]」 (2010/10/16 01:36)
コメント「かってぃさん」(2010/10/15 02:03)
コメント「えんぺらあさん」(2010/10/15 02:00)
電子工学「性格の木[1807]」 (2010/10/15 01:43)
PR

プロフィール
名前: かってぃ
職業: 学生、性別: 男性、年齢: 22歳、住所: 横浜市
理系用語
コンテンツ
トップページ
自己紹介
電子工学

料理
勉強
日記
ノート
自転車
その他
本棚
一言メモ
電子回路コレクション
ヘッドホンアンプのまとめ
リンク
三度の飯とエレクトロン
choilog
TwitCrew
Questo
Ropi.me
studylog
つい、投票。
tvtw - ツイッターでテレビ実況
理系用語
理系用語bot on twitter

ぷよぷよ!!クエスト 攻略
気ままでいたいがあんまり気ままではない感じのブログ
魚料理と簡単レシピ
素晴らしき哉,電気工学的人生!
アンチ・バベルの塔
大学生ブログランキング