PICでUSBを!(知識ゼロからのスタートです)
PIC18F14K50のUSB機能を100%自前のソフトで制御する試みです。しかもアセンブラで!
当記事は2009年12月から「TTLでCPUをつくろう!」というタイトルの もとにほとんど毎日連載をしてきたものを再編集したものです。 |
2011.7.8 前へ 次へ 目次へ戻る ホームページトップへ戻る |
☆プロローグ 今までUSBを使ってパソコンと通信をする部分にはFTDI社のFT232RLかまたはFT245を使って、RS232C−USB変換をしておりました。 ところがUSBコントローラを内蔵しているPICがあることを知りました。 PICは232C通信をするためなどに使っています。 それならそのUSBコントローラを内蔵したPICを使えばFT232RLを使わなくても済んでしまいそうです。 FT232RLはなかなかに便利なICですが、ただ難点はフラットパッケージしかないことです。 それを使わなくても済むということならば、ここは一番ぜひとも挑戦してみるべきでありましょう。 さっそくPIC18F4550のマニュアルをダウンロードして読んでみたのでありますが…。 |
[第6回]
●Windows98とアセンブラ
もう何度も書いておりますように、私はいまだにWindows98を使っております。
WindowsXPは、もっていますけれどほとんど使いません。
そのように書くと、
「まあなんと時代遅れなのだろう。きっと新しいものは使いこなせないんだ。かわいそうに。」
などと思われてしまったりします。
また前回のように、「私はCコンパイラが嫌いだから、PICライターのプログラムをアセンブラで書きます」などと書いたりしていますと、
「いまどきCを使わなくて何ができるというのだろう?多分使いこなせないんだ。かわいそうに。」
とまたまた同情されてしまいそうです。
でもですね。
私は思うのです。
世の中、少し間違ってんじゃないだろうか?
猫も杓子も、なんでもかんでもCプログラミングだなんて、私にはちょいと異常に思えます。
なんだか知らないけれど、みんな、「はじめにCありき」と思い込んでいらっしゃるのではありませんか?
そこで、これから、PICライターのプログラムにとりかかるのですけれど、その前に。
まずは、ちょいと皆様に、「目からウロコ」のお話しをしておきたいと思います(こんなことは8086アセンブラがおわかりの方には当たり前のことなのですけれど)。
前回、MicrochipのサイトからダウンロードしたPICライターのプログラム(AN589ソースプログラム)をBorlandC++でコンパイルしたところ、エラーになってしまいました、と書きました。
「biosprintが未定義」というエラーです。
そのリストには確かにbiosprintは定義されていません。
どうやらヘッダーファイルbios.hにその定義がありそうです。
で、Borlandのヘッダーファイルをさぐってみたら、bios.hというファイルがあって、その中に「_bios_printer()」というのがありましたので、多分これのことでしょう、と書きました。
でも、このBorlandC++にあるbios.hも「抜け殻」で使えないようなのです。
そもそも、このbios.hを見ていると、何でこんなものがいるのかなあ、と考えてしまいます。
で、考えていましたら、「ああ、そうか」
わかりました。
●Cでポートに出力、ってどうする?
前回お見せしたパラレルポートを使用するPICライターの回路ですけれど、当然のことながら、パラレルポートから書き込みパルスを出力しなければなりません。
でも、Cでは、そこんところをどうやるのでしょう?
DOS/Vパソコンのパラレルポートアドレスは378Hです(違うアドレスもあるのですがここでは簡単に)。
そのビット0からPICの書き込みのために連続してパルスを出力するプログラムをC(またはC++)で書くにはどうしたらよいのでしょう?
「XPじゃそんなこと、出来ないよ」
ですね。そこがまた別の問題なのです。
ですけれど、それはちょっと置くことにして、XPより以前のWindows98などでしたらできますから、気にしないで、どうぞCまたはC++で書いてみてくださいませ。
私が不勉強なのかも知れませんが、どうもCにおいては、ダイレクトにパラレルポートにアクセスするのは、一般的な方法ではなさそうなのですねぇ。
どうするのでしょう?
あ。別にCにけちをつけているのではありません(ってしっかりつけてますけれど)。
CにはCの役割があるのです(と思います)。
でもCはオールマイティではない。しっかり不得意なところがある。
近ごろ世間はそこんところを誤解しているのではありますまいか?
なんでもCで書こうとして自縄自縛に陥っているように思えます。
多分、どこかのだれか(たいていはMicrosoftだったりして)が用意してくれた、ヘッダーファイルをインクルードしなければ、何もできませぬ。
でも、それがまた大変で。
これこれをしたいけど、そのためには、なにをどこからもってきて、それをどのように使うのか、それがまた一苦労、なのではありませんか?
能書きはこのくらいにいたしまして。
はい。目からウロコです。
アセンブラならこうします。
左のOUTTEST.TXTがアセンブラのソースプログラムです。
たったこれだけです。
あっけないくらい、簡単です。
インクルードもヘッダーもクソもありませんです。はい。
いきなり書いて、いきなり終わりです(アセンブラって意外と簡単でしょー)。
もちろん、これだけで、ちゃーんと動きます。
MOV DX,378で、DXレジスタにパラレルポートアドレスの378Hを入れます。
次のOUT DX,ALはもう「そのまんま」です。DXで示すポートアドレスにレジスタALの値を出力せよ、です。
次のXOR AL,01はALのビット0のみを反転するために使っています。
そしてJMP LOOPで繰り返します。
右はOUTTEST.TXTをアセンブルして機械語のファイル、OUTTEST.COMを出力しているところです。
ASMというのは、当社のオリジナル8086アセンブラです。
そして一番下のOUTTESTで、今作ったOUTTEST.COMを早速実行しています。
実行の結果をチェックするためにオシロのプローブをプリンタコネクタにつけているところです。
OUTTEST.COMの実行結果です。
パラレルポート(プリンタポート)のビット0からの出力波形です。
ねーえ。こんなに簡単なことですのに、どうしてCなどを使おうとしか考えないのでしょうか?
いかがでしたでしょうか?
目からウロコが落ちましたでしょうか?
(次回に続きます)
CPUをつくろう!第398回(2009.12.13upload)を再編集
PICでUSBを![第6回]
2011.7.8upload
前へ
次へ
目次へ戻る
ホームページトップへ戻る