1

パラレル ポートのデータ ピンを高低に設定する方法を知りたいです。これには PyParallel を使用できると思いますが、特定のピンを設定する方法がわかりません。

ありがとう!

4

2 に答える 2

2

ここでは、ソフトウェアとハ​​ードウェアのインターフェイスについて話しています。これらは通常、レジスタに 1 バイトの値を割り当てることによってローとハイに設定されます。パラレル ポートには、データが移動するための 8 つのピンがあります。C、C++ のような低水準言語では、データの 8 ピンに対応する 8 ビットを保持するレジスタを「A」と呼びましょう。たとえば、次のようになります。

レジスタ A がピンのように設定されていると仮定します: [7,6,5,4,3,2,1,0]

Cライクな疑似コード

A=0x00 // all pins are set low
A=0xFF // all pins are high
A=0xF0 // Pins 0:3 are low, Pins 4:7 are high

このアイデアはPyParallelで継承されます

import parallel
p = parallel.Parallel() # open LPT1
p.setData(0x55) #<--- this is your bread and butter here  

p.setData は、あなたが興味を持っている関数です。バイナリに変換された 0x55 は

0b01010101

-また-

[ルルルルフ]

データを特定のバイトに設定できるようになりましたが、大量のデータを送信するにはどうすればよいでしょうか... 3 バイト 0x00、0x01、0x02 としましょう。受信マシンが送信されたばかりの受信を確認したときの ack ラインを監視する必要があります。

単純な実装:

data=[0x00, 0x01, 0x02]
while data:
    onebyte=data.pop()
    p.setDataStrobe('low') #signal that we're sending data
    p.setData(onebyte)
    while p.getInAcknowledge() == 'high': #wait for this line to go 'low'
                                          # to indicate an ACK
        pass                              #we're waiting for it to acknowledge...
    p.setDataStrobe('high')#Ok, we're done sending that byte.

わかりました、それはあなたの質問に直接答えません。ピン5を高くまたは低く設定したいだけだとしましょう。多分私はそのピンにLEDを持っています。次に、バイナリ操作が少し必要です。

portState = 0b01100000 #Somehow the parallel port has this currently set
newportState = portState | 0b00010000#<-- this is called a bitmask
print newportState 
>>> 0b011*1*0000

それでは、そのビットをクリアしましょう...

newportState = 0b01110000
clearedPin5 = newportState & 11101111
print clearedPin5
>>> 0b011*0*0000

これらのバイナリ操作が外部のものである場合は、avrfreaks に関するこの優れたチュートリアルをお勧めします。さらに先に進む前に、私は彼らと親しくなりました。このような組み込みソフトウェアの概念は、ビットマスクとビットシフトでいっぱいです。

于 2013-09-19T18:46:36.437 に答える