![]() |
Re: Ansteuern des Parallelports
Hallo
ich habe mal den Quelltext etwas umgeschrieben aber jetzt bringt er nur noch fehlermeldungen
Delphi-Quellcode:
in der main unit um die funktion aufzurufen
Function LesePort( Port : Word ) : Byte;
implementation Const LPT_DataRegister = $378; LPT_StatusRegister = $379; LPT_KontrollRegister = $37A; Var Value: Byte; Port: Word; function LesePort( Port : Word ) : Byte; Begin // Welches Register des Statusports willst du lesen? // Port := LPT_DataRegister // Werte holen aus dem Register des Ports (NUR UNTER WINDOWS 9X) asm //erklärt dem Compiler, dass Assembler Code anfängt mov dx, Port //Port = 378h = die Adresse von LPT 1 in al, dx Mov Value, AL end; case Port of LPT_DataRegister : Begin IF Value AND $01 = $01 then result:=1; IF Value AND $02 = $02 then result:=2; IF Value AND $04 = $04 then result:=3; IF Value AND $08 = $08 then result:=4; IF Value AND $16 = $16 then result:=5; IF Value AND $32 = $32 then result:=6; IF Value AND $64 = $64 then result:=7; IF Value AND $128 = $128 then result:=8 else result:= 0; end; end; end; end.
Delphi-Quellcode:
was mus ich für ? einsetzen???
a := LesePort(???)
|
Re: Ansteuern des Parallelports
Hallo Stephan,
solltest Du den Wert des Porteingangs so abfragen
Delphi-Quellcode:
bekommst Du als Resultat immer nur das höchstwertig gesetzte Bit zurückgegeben.
case Port of
LPT_DataRegister : Begin IF Value AND $01 = $01 then result:=1; IF Value AND $02 = $02 then result:=2; IF Value AND $04 = $04 then result:=3; IF Value AND $08 = $08 then result:=4; IF Value AND $16 = $16 then result:=5; IF Value AND $32 = $32 then result:=6; IF Value AND $64 = $64 then result:=7; IF Value AND $128 = $128 then result:=8 else result:= 0; Beispiel Value = 10010000b Dann erfolgt bei Value AND $16 => result := 5 und bei Value AND $128 => result := 8 Die Information von Bit4 geht also verloren Möchtest Du die Anzahl der gesetzten Bits wissen, solltest Du Result inkrementieren, ansonsten bleibt Dir nur die Übergabe des binären Wertes oder die Zuweisung an acht einzelnen Variabelen oder an ein Array oder eine Struktur. MfG. Uwe :dancer2: [edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit] |
Re: Ansteuern des Parallelports
Hallo,
die ganze Vorgehensweise, die du hier beschreibst ist auch für Win9x und Me extrem unsauber. Wir befinden uns im protected mode eines intel Prozessors. Eigentlich sind diese direkten Hardwarezugriffe nicht zulässig. Dass sie funktionieren ist eine andere Sache. Aber bitte sowas nicht in ein Tutorial ( auch wenns weh tut ). Nimoee |
Re: Ansteuern des Parallelports
olla an alle :)
@flomei: danke für das lob aber das wäre nicht nötig gewesen. ich meinte doch zu dir das das testcode für mich war den ich ganz schnell schreiben musste um das auszuprobieren. aber ob der code was für n tutorial taugt wage ich ein wenig zu bezweifeln. nicht böse nehmen. @nimoee: wie würdest du es denn realisieren wenn du einzelne pins direkt setzen/lesen willst? gibt es da noch andere funktionen für? mfg, mika |
Re: Ansteuern des Parallelports
Hallo liebe DP-Nutzer,
falls ihr Fragen oder Anregungen zu dem Tutorial von flomei habt postet hier. Dann können auch andere User die das selbe Problem/ die selbe Frage haben direkt hier im Forum die Lösung finden. Andernfalls würde flomei mit E-Mails überheuft, was in letzter Zeit der Fall war. Genau aus diesem Grund beantwortet er Anfragen dieser Art mittlerweile garnicht mehr. Das Níchtbeantworten hat also nichts mir personlichen Hass oder ähnlichem zu tun. MFG Thomas |
Re: Ansteuern des Parallelports
Kann ich von dem kontrollregister überhaupt einlesen
also bei mir funktioniert nur das einlesen des Statusregisters mfg Stephan |
Re: Ansteuern des Parallelports
viiiiiiiiiilen dank für die kleine procedure portOut !!!!
ich suche sie schon seit wochen, ich will ein interface ansteueren und konnte es nur in basic und turbopascal, nun endlich auch in delphi; ist doch ein viel schöneres arbeiten als mit basic... meine schüler werden sich freuen daaaanke Hannes Burgemeister Pauker an der Martin-Buber-Oberschule.de :hello: |
Re: Ansteuern des Parallelports
Moin!
Zitat:
Zitat:
Zitat:
Zitat:
h = hexadezimal d = dezimal o = oktal b = binär Dies wird z.B. direkt so vom Turbo Assembler von Borland verwendet. Zitat:
3BCh, 378h, 278h und PCI Portadressen (also Portadressen > 1000h) Bei den meisten Rechnern wo ein 2. Parallelport mit einer ISA Karte nachgerüstet ist, da wird es 278h sein. Bei solchen wo eine MDA Karte mit drinne steckt, da wird es 3BCh sein. Zitat:
Delphi-Quellcode:
Begin
ShowMessage('Portadresse: ' + IntToHex(Port, 3) + ' hexadezimal' + #13#10 + 'Portadresse: ' + IntToStr(Port) + ' dezimal'); End; Zitat:
Code:
Genauso bei Move:
In Ziel, Quelle einlesen, also ins Ziel schreiben und vom Port lesen
Out Ziel, Quelle schreiben, also in den Port schreiben.
Code:
mov Ziel, Quelle
mov dx, $378 Zitat:
Den anderen Teil der 8. Frage kann dir ein anderer erklären - war genug erstmal für mich. @flomei: Erklär mal bitte auch, das es eine Basisadresse gibt und dann die Register immer nur ein fester Offset von dieser Basisadresse ist. MfG Muetze1 |
Re: Ansteuern des Parallelports
nabend muetze,
ich danke dir vielmals für dein engagement. ich werd mich jetzt ma hinsetzen und versuchen das zu verarbeiten. bei frage 6 war eine dezimalzahl gewünscht. nochmals danke gruß capable |
Re: Ansteuern des Parallelports
hallo leutz,
könnt ihr mir kurz verraten, wie ich einen string in byte wandeln kann. hintergrund: ich möchte die variable x aus einem editfeld im formular holen. ich danke euch! capable |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz