Seite 1 von 1

Ausgabe in Controlregister Parallelport

Verfasst: 10.01.2005 12:17
von Martin66119
Was mache ich falsch!

ich versuche in das Controlregister des Parallelports zu schreiben. Aber irgendwas mache ich falsch. Hier ist Code:

;---------------Deklaration der Variabeln ---------------------------------------

PortNumD.l = $378 ; PortNummer des Datenregisters
PortNumS.l = $379 ; PortNummer des Statusregisters
PortNumC.l = $37A ; PortNummer des Controlregisters
Samples = 0

j = 1
;----------------------------------check library io.dll -------------------------
LibOpen.l = OpenLibrary(1,"io.dll")
If LibOpen = 0
End
EndIf
;---------------------------------open function io.dll--------------------------
CallFunction(1,"PortOut", PortNumC,%0000) ; write to port 37ah

Text$ = InputRequester("Number of samples!", "Integerzahl", "")
Samples =Val(Text$)

Repeat
CallFunction(1,"PortOut", PortNumC,%0000) ; write 0 to port
37ah "Strobe = 0"
Ergebnis.b= CallFunction(1,"PortIn", PortNumC)
INC j
Until j >= Samples

Wenn ich nun %0001 in das Register oder aber auch %0011 schreibe und anschließend den reingeschriebenen Wert wieder auslese, steht immer 3 drin. Ich weiß, dass die Bits des Controlregisters teilweise invertiert sind.
Hier sind die Infos zum Port: http://members.tripod.com/~Malzev/radiodoc/printer.htm

Was mache ich denn falsch?

Ich benutze die io.dll unter folgendem Link: http://www.geekhideout.com/iodll.shtml

Verfasst: 10.01.2005 14:06
von Falko
Im Controllregister (Steuerregister) sind die Bits 0,1,3 invertiert.
Also wenn diese Bits gesetzt sind, wäre das der Wert 1+2+8=11.
Diese mußt du mit Deinem Integwert durch XOR (!) umkehren.

Das müßte dann so aussehen:

Ausgabe:

Code: Alles auswählen

CallFunction(1,"PortOut", PortNumC,%0000 ! 11) ; write 0 to port 
Einlesen:

Code: Alles auswählen

Ergebnis.b= CallFunction(1,"PortIn", PortNumC ! 11) & 15
MfG Falko

Unklar

Verfasst: 10.01.2005 14:13
von Martin66119
Ja, dass die Bits 1, 3 invertiert sind weiß ich. Folgendes passiert aber wenn ich in das Register schreibe.

Schreibe lesen
0000 0
0011 3
0111 7
0110 7

Das kann ich nicht verstehen!

Verfasst: 10.01.2005 15:14
von Falko
Sind das dann die Werte nach dem alten Code oder hattest du das mal angepaßt, wie ich das oben angegeben hatte? Der letze Wert müßte
eigendlich 6 sein.