Entwickler-Ecke
Sonstiges (Delphi) - LTP Port bei WinXP
Jan K. - Mo 28.04.03 15:19
Titel: LTP Port bei WinXP
Hi, ich weiß, wie ich auf WinME oder 98 auf den LTP Port zugreifen kann, doch wie geht das mit Windows XP?
Adrian - Di 29.04.03 08:48
Titel: LPT bei XP
Hallo,
google mal nach IO.DLL.
Du brauchst nur die DLL einbinden und entsprechend ansteuern - funktioniert prächtig.
Gruß,
Adrian
Jan K. - Mi 30.04.03 14:06
Titel: geht nicht
Sorry, aber unter Win XP geht das bei mir nicht, das Programm bricht immer mit der Fehlermeldung "Privilegierte Aktion" oder so ab. Unter Win ME geht das, aber ich will es halt auf Win XP machen.
trotzdem Danke
Adrian - Mi 30.04.03 22:03
Titel: LPT und XP
Hallo Jan,
wenn Du die Antwort "Privilegierte Anweisung" bekommst, paßt wohl was bei der DLL-Einbindung nicht. Der folgende Code (Ausschnitt) hat bei mir funktioniert.
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| implementation
{$R *.DFM}
procedure PortOut(Port : Word; Data : Byte); stdcall; external 'io.dll'; function PortIn(Port:Word):Byte; stdcall; external 'io.dll';
procedure TForm1.Button1Click(Sender: TObject); begin PortOut($378, $AA); end; |
Mit PortIn kannst Du über $379 die Eingänge einlesen, die schon bei der SPP-Einstellung vorhanden waren.
Servus,
Adrian
Delete - Mi 30.04.03 22:18
Titel: Re: geht nicht
Jan K. hat folgendes geschrieben: |
Sorry, aber unter Win XP geht das bei mir nicht, das Programm bricht immer mit der Fehlermeldung "Privilegierte Aktion" oder so ab. Unter Win ME geht das, aber ich will es halt auf Win XP machen.
trotzdem Danke |
Genau deswegen sollst du über die DLL die Ports ansteuern, weil unter NT-basierenden System das OS den direkten Hardwarezugriff unterbindet. Dies geht nur über einen Treiber. Und diese DLL stellt einen Treiber dar.
Jan K. - Fr 02.05.03 14:09
danke, werds nochmal ausprobieren
Jan K. - Fr 02.05.03 15:17
Titel: sorry
Ich bin glaub ich einfach zu blöd, jetzt kommt eine Fehlermeldung, dass die procedur portout nicht in der dll ist ????
Ex0rzist - Fr 02.05.03 19:07
Hast du auf Groß- und Kleinschreibung geachtet?
Jan K. - Sa 03.05.03 15:57
Tut mir Leid, aber ich krieg das einfach nicht hin, es bricht immer wieder mit der gleichen Fehlermeldung ab: Privilegiere Anweisung... .
könnt ihr mir nicht ein (einfaches,funktionierendes) Beispiel schicken??
Jan K. - So 18.05.03 19:41
´Danke, hatte aber auch schon eine funktionierende Version gefunden... :roll:
GIGI - Di 25.11.03 21:12
Titel: Problem mit MBM5 und CpuIdle
Hi also bei mir funktioniert die Ausgabe mit der IO.dll. Aber wenn ich das Prog. Motherboard Monitor 5 oder CpuIdle gestartet habe und dann mein Programm starte bekomme ich eine Fehlermeldung mit dem Inhalt: MBM5 Core: Priviliged Instruction. bzw CpuIdle: Priviliged Instruction.
Nach der Fehlermeldung funktionieren beide Programme (MBM5 und CpuIdle) nicht mehr, aber mein Programm funktioniert weiterhin.
Moonbiker - Mi 05.10.05 23:53
Ist zwar schon ne weile her, aber vielleicht könnt ihr mir dennoch helfen...
Ich verwende die io.dll für meinen parallelen port, und habe folgende fragen:
1. welche Adresse des Ports ist günstiger: $378, $379, 888, bzw mit den ergänzungen '+1' oder '+2'?
2. sind da unterschiede beim einlesenund ausgeben bei unterschiedlichen adressen (habe was von $379 gelesen)?
3. bei mir wird immer Pin3, als0 ausgabewert 4 aktiviert, wenn ich wild auf meinen eingabestatern rumdrücke (bzw meine hardware dies tut)---warum und wie kannich es umgehen?
ok, naja, mal sehn ob hier noch jmd ist,
als denn,
cya
drstar - Do 06.10.05 21:42
Wie meinst Du das, welche Adresse ist "günstiger"?
Darum geht es nicht. Die Ports haben eine bestimmte Bedeutung. Müßte jetzt lügen, wie es beim LPT war, aber wenns genauso wie beim IDE-Controller ist, sind diese PORTS prinzipiell mit Registern verknüpft (ich meine nicht die Register der CPU, sondern im Chipsatz bzw. im LPT-Controller, der ja via ISA-Bridge am PCI-Bus hängt).
Folglich gibt es Befehlsregister, Statusregister und Datenregister. Jedes hat seine spezifische Aufgaben. Ich denke mal, da kann ein alter DOS-Hase mit Hardwareerfahrung mehr zu sagen.
Auf jeden Fall ist es nicht egal, welchen Port Du ansprichst.
___________________________________
Bearbeitet.........................
___________________________________
So, hab mich mal schlau gemacht.
Zunächt schematisch zur Hardware (Connector), guckst Du hier:
http://www.tarigon.de/tramp/epp-ecp.html
...
So, hab mal ein wenig gegoogelt und ein klein wenig Infos zusammengetragen:
LPT1 -> 0x0378 - 0x037F (in Delphi $0378 - $037F)
LPT2 -> 0x0278 - 0x027F (in Delphi $0278 - $027F)
So, und wie schon zuvor zu lesen, gibt es diese drei Registerarten: Status- , Befehls- und Datenregister.
Zunächst zum Befehlsregister: es ist beschreibbar, und übernimmt den Befehl (lesen, schreiben, initialisieren, etc.)
Das Datenregsietr kann sowohl beschreiebn als auch gelesen werden, abhängig davon, ob man Daten über den LPT ausgeben (= beschreiben) oder einlesen (= lesen) möchte.
Das Statusregister kann nur gelesen werden und enthält den Statsu der letzten Operation (Ready, Error, Busy...). Dieses Register ist nach JEDER Operation auszulesen, egal, ob Init, Datenausgabe oder einlesen. Sollte das Statusregister nach einem Lesebefehl nämlich einen Fehler melden, sind die daten im Datenregister nur einen Müll wert. Für weitere Fragen mal im Delphi-Forum, bei Delphi-Praxis oder bei Google suchen.
So. Hoffe, das hilft weiter...
Moonbiker - Do 06.10.05 21:49
ok, danke!
werde es sicher irgendwie hinbekommen, habe diverse literatur vor mir, dachte nur es würde so schneller gehen...
thx
Mann_aus_Delphi - So 01.03.09 17:09
Hallo,
dieses Thema ist zwar schon ziemlich alt, ich probiers trotzdem mal!
Ich möchte eine selbstgebaute Hardware über den Parallelport ansteuern. Jedoch will ich nur Daten schreiben, keine lesen.
Die Daten, die ich senden möchte liegen als Dezimalzahl vor. Nun wandele ich sie ins Dualsystem (8 Bit) um und schreibe sie in den Parallelport. Wahrscheinlich muss man jedem Pin einzeln eine 1 oder eine 0 zuweisen, oder?
Da ich mich noch nie mit Hardware-Ansteurung beschäftigt habe, wäre es sehr nett, wenn jemand ein kleines Beispiel bringen könnte, wie ich nun, mit Hilfe der IO.dll, eine acht-stellige Zahl im Dualsystem über den Parallerport versende.
(Ich benutze Delphi 7 und Turbo Delphi 2006. Das Programm sollte später unter XP laufen.)
Vielen Dank schon mal,
Mann aus Delphi!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!