PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Visual Basic und der LPT



ShadowPhoenix
21.02.2004, 18:38
Hallo!
Ich habe in Visual Basic folgenden Code geschrieben:

Private Declare Sub PortOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Byte)
Private Declare Function PortIn Lib "IO.DLL" (ByVal Port As Integer) As Byte
Dim var1 As Integer

Private Sub Command1_Click()
PortOut (888), 128
End Sub

Private Sub Command10_Click()
PortOut (888), 255
End Sub

Private Sub Command11_Click()
var1 = PortIn(888)
Text1.Text = var1
End Sub

Private Sub Command2_Click()
PortOut (888), 64
End Sub

Private Sub Command3_Click()
PortOut (888), 32
End Sub

Private Sub Command4_Click()
PortOut (888), 16
End Sub

Private Sub Command5_Click()
PortOut (888), 8
End Sub

Private Sub Command6_Click()
PortOut (888), 4
End Sub

Private Sub Command7_Click()
PortOut (888), 2
End Sub

Private Sub Command8_Click()
PortOut (888), 1
End Sub

Private Sub Command9_Click()
PortOut (888), 0
End Sub

Das heißt auf Button1 ist D0 gleich +5V , auf Button2 ist D1 gleich +5V!
Also ich spreche damit die Datenleitungen des parallelPorts an!
NUR: Wenn ich PortOut(888),255 setze (Alle Datenleitungen auf high(+5V)), leuchten bei mir zwar ALLE Leds, aber nach einer Zeit gehen sie wieder aus, OHNE das ich was mache!
Also ich hab für jede Datenleitung (0-7) eine Led, und die leuchten auf Kommando alle.
Nur nach zufälliger Zeit leuchtet auf einmal nur noch die 3. Led (Port ist statt 255 auf einmal auf 32)
Ich habe mir gedacht, dass vielleicht irgendein anderes Programm auf den port zugreift, aber welches?
Ich habe ihn noch nie benutzt!
Könnt ihr mir helfen?
Mfg,
ShadowPhoenix

jörg
22.02.2004, 02:29
Ich weiss es nicht,
aber ich könnte mir schon vorstellen, dass Windows den LPT selbst überwacht, und Du umgehst ja mit Deiner Port-Ausgabe das System vermutlich völlig. Warum dann ausgerechnet genau der 3. Port ON ist, kann ich mir nicht erklären (32 = HEX 20 = SPACE ?).

Ansonsten:

Die LPT kann man bidirektional oder konventionell (nur OUT) betreiben; versuch mal, auf "nicht bidirektional" einzustellen; dann machts für Windows weniger Sinn, da was zu überwachen.

Vielleicht ist's auch der Spooler: Nimm mal den "Default Drucker" von Deinem LPT weg.

ShadowPhoenix
22.02.2004, 10:44
Danke, ich bin mal in den BIOS-Optionen auf LPT gegangen.
Dort gab es EPP, ECP, Bidirektional und noch was...
Ich hab mal EPP genommen, seit dem lässt Windows meinen port in Ruhe :D
Danke, jetzt kann ich endlich was damit steuern!
Mfg,
ShadowPhoenix

God
22.02.2004, 12:36
@ ShadowPhoenix:
Welches Betriebssystem hast du? Und wo hast du die IO.dll her?
Ich steuer den LPT port mit einer ocx an

mfg God

God
22.02.2004, 12:38
@ ShadowPhoenix:
Welches Betriebssystem hast du? Und wo hast du die IO.dll her?
Ich steuer den LPT port mit einer ocx an

mfg God

ShadowPhoenix
22.02.2004, 12:39
Ich habe WindowsXP.
Die IO.DLL habe ich von dieser Seite:
http://www.geekhideout.com/iodll.shtml
Mfg,
ShadowPhoenix

Und hier die FunktionsPrototypen der DLL:

Private Declare Sub PortOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Byte)
Private Declare Sub PortWordOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Integer)
Private Declare Sub PortDWordOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Long)
Private Declare Function PortIn Lib "IO.DLL" (ByVal Port As Integer) As Byte
Private Declare Function PortWordIn Lib "IO.DLL" (ByVal Port As Integer) As Integer
Private Declare Function PortDWordIn Lib "IO.DLL" (ByVal Port As Integer) As Long
Private Declare Sub SetPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As Byte)
Private Declare Sub ClrPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As Byte)
Private Declare Sub NotPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As Byte)
Private Declare Function GetPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As Byte) As Boolean
Private Declare Function RightPortShift Lib "IO.DLL" (ByVal Port As Integer, ByVal Val As Boolean) As Boolean
Private Declare Function LeftPortShift Lib "IO.DLL" (ByVal Port As Integer, ByVal Val As Boolean) As Boolean
Private Declare Function IsDriverInstalled Lib "IO.DLL" As Boolean

God
22.02.2004, 13:12
Danke,
damit ist das einfacher als mit der ocx

mfg God