Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi LPT - Mehrere Pins ansprechen!? (https://www.delphipraxis.net/4613-lpt-mehrere-pins-ansprechen.html)

flomei 6. Mai 2003 15:18


LPT - Mehrere Pins ansprechen!?
 
Hallo! Jetzt schreib ich mal wieder ein Prog für die Schule. Dieses Programm soll eine "Flaschenabfüllanlage" steuern. Bevor mich jetzt jeder fragt, wie die aussieht und wie die was abfüllt bleiben wir bei Delphi. Bei meinem ersten Steuerprogramm habe ich nach langem Googlen (so bin ich auch hier hingekommen! :D) ein paar Teile Assembler gefunden mit denen das unter Win9X und ME ohne Treiber funktioniert. Das nächste Programm soll auch wieder unter Win98 laufen muss aber mehrere Ports einlesen und ausgeben.
Ich hatte folgenden Code zum Ansteuern des Parallelports:
Delphi-Quellcode:
procedure port(x:byte);
begin
 asm
  mov dx,378h
  mov al,x
  out dx,al
 end;
end;
Geht auch. Wenn ich nun den ersten Datenpin auf High setzen will hab ich das so gemacht:
Delphi-Quellcode:
procedure TSteuerung.Pin1HighClick(Sender: TObject); assembler;
begin
  port(1); //setzt ersten Datenpin high
end;
Nun frage ich mich:
  • Wie steuere ich mehrere Pins an? Überlegung:
    Delphi-Quellcode:
    Port(00000011); //oder anders???
  • Wie lese ich Pins ein? Überlegung:
    Delphi-Quellcode:
    in dx,al //in statt out

Thx im Voraus.

MfG Florian :hi:

P.S.: Ich würde gerne nach Schluss des Projektes das Programm und ein paar Infos über die Anlage hochladen für alle Interessierten. Wenn ich darf!

Daniel B 6. Mai 2003 16:08

Hallo,

schau mal hier, hier und hier.

War es denn so schwer nach LPT zu Suchen? :roll: ;)

Grüsse, Daniel :hi:

mika 6. Mai 2003 16:15

port
 
Hallo,

du liegst schon ganz richtig

Delphi-Quellcode:

Const
  PortNum = $378;

function PortIn( PortNum: word): byte;
Var a : byte;
Begin
  asm
    mov DX, PortNum;
    in AL, DX;
    mov a, AL;
  end; {asm}
  PortIn := a;
end;

procedure PortOut( PortNum: word; a: byte);
Begin
  asm
    mov DX, PortNum;
    mov AL, a;
    out DX, AL;
  end; {asm}
end;
damit kannst du auf dem port lesen und schreiben.

Mehrere pins setzt du indem du das byte erhöhst

Wert Pins
1 1
2 2
3 1 & 2
...

wenn ich nicht ganz falsch liege, ist schon länger her das ich sowas gemacht habe.

flomei 6. Mai 2003 16:25

Zitat:

Zitat von Daniel B
War es denn so schwer nach LPT zu Suchen?

Was meinst du was ich zuerst gemacht habe. Ich hab da nirgendwo was von mehreren :!: :!: Pins gelesen. Wenn es nicht darum ginge würde ich keinen neuen Thread aufmachen.

Zitat:

Zitat von mika
Code:
Wert Pins
1 1
2 2
3 1 & 2

Das verstehe ich nicht ganz. Könntest du mir das bitte ein wenig genauer erklären?
Danke!

MfG Florian :hi:

mika 6. Mai 2003 20:47

Pins
 
Hallo Florian,

Das ist ganz einfach

Die pins (1-8) sind gleichzusetzen mit den Bits in einem Byte

Pin 1 ist = Bit 0 ist = 1
Pin 2 ist = Bit 1 ist = 2
Pin 3 ist = Bit 2 ist = 4
Pin 4 ist = Bit 3 ist = 8
Pin 5 ist = Bit 4 ist = 16
Pin 6 ist = Bit 5 ist = 32
Pin 7 ist = Bit 6 ist = 64
Pin 8 ist = Bit 7 ist = 128


So kann man jeden Pin EINZELN schalten, man muss nur den Wert in den Port
schreiben. Wenn man MEHRERE Pins schalten will muss man addieren!

Also

Pin 1 und 3 schalten = 1 + 4 (wie oben beschrieben) also 5
wenn man den wert 5 schickt gehen die beiden Pins an.

Alle Pins schalten ergibt 255 (Summe aller Wert)

Pin 3 und 7 ist 4 + 64 = 68, wenn du 68 auf den Port schreibst dann gehen
Pin 3 und 7 an.

flomei 8. Mai 2003 20:58

Mika. Hast du dieses Programm gefunden von dem du mir erzählt hast? Das würde mir vielleicht doch noch etwas helfen. Morgen wird erstmal Assembler geschrieben in der Schule. Das wird eine entspannte Technik Stunde mit Delphi 6 Personal und meinem Multimeter! :mrgreen:

MfG Florian :hi:

mika 11. Mai 2003 03:15

Hi Flomei,

ja das Programm hab ich wiedergefunden, ich poste das morgen mal
hier hoch, jetzt muss ich erst mal ne runde schlafen :)


bye

mika 11. Mai 2003 13:24

Hei Flomei,

ich hab das Programm wiedergefunden, aber das ist wirklich tierisch
unverständlich :) das war nur so n test für mich. Ich glaub ich kann
das besser mal überarbeiten damit das auch verständlich ist.

mfg, Michael

flomei 15. Mai 2003 08:42

Ich hab Probleme beim Einlesen der Pins. Bitte poste mal den Code mit dem ich ganz sicher die Pins einlesen kann.
Und noch ne technische Frage dazu :mrgreen:: Wie setzt man die Statuspins am Besten auf High? Wir haben da rum probiert aber er wollte nicht. Kann aber auch am Code liegen. :roll:

DANKE!!!

MfG Florian :hi:

Daniel B 15. Mai 2003 16:24

Hallo,

http://www.ensacom.de/forum/showtopic.php?threadid=13

Wenn Du damit nicht weiter kommst, kann ich Dir auch nicht helfen. ;)

Grüsse, Daniel :hi:


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:11 Uhr.
Seite 1 von 2  1 2      

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-2025 by Thomas Breitkreuz