Hey,
folgendes Problem:
Ich habe mit nem Kumpel nen Interface für den seriellen Port am Pc zusammengelötet. Darauf werden über Schieberegister Relais geschaltet und Eingänge eingelesen.
Es muss so angesprochen werden:
Eingänge in die Schiregs holen (dtr einmal auf high und sofort wieder auf low)
dann mit txt den takt angeben und jeweils dem rts die ausgänge der schiberegister setzen.
auf dcd werden die eingänge entgegengenommen
Es werden 16 einsen und nullen durchgeschoben. Eine 1 steht für geschaltet 0 für nicht geschaltet.
Bei den Eingängen werden ebenfals einsen und Nullen an den dcd gesendet und ausgelesen
Bis jetzt habe ich zur Steuerung der Schnitstelle die Port.dll verwendet. Nur jetzt sind wir dabei komplexere Programme zu schreibne udn da stöst die
dll langsam an die Grenzen, sprich die Rutine wird zu langsam.
Das ist der Code mit dem wir das Interface ansteuern:
Delphi-Quellcode:
dtr(1); //strobe on //Eingänge ins Schireg holen
dtr(0); //strobe off
for n:=1 to 16 do
begin
rts(booltoint(aOUT[n])); //ausgang setzen
if dcd = 1 then
begin
aIN[n] := true; //eingang lesen
end
else
begin
aIN[n] := false;
end;
txd(1); //taktgeben
txd(0);
end;
dtr(1); //strobe //Ausgänge setzten
dtr(0);
Also haben wir uns gedacht: Könnten wir nicht eigene Rutinen schreiben die auf die Pins des Ports zugreifen.
Da war der erste Gedanke das Ganze in Assembler zu schreibne in Delphi.... Soweit so gut allerdings macht uns da ja Windows einen Strich durch die Rechnung das er uns nicht direkt auf die Hardware zugreifen läst...
Daher meine Frage: Wie kann ich eine möglichst schnelle Ansteuerung schreiben die genau das oben beschriebene Protokoll einhält?
Schonmal danke für die Antwort
KnobY
PS: Ähnliche Themen gab es schon weiß ich aber keins davon brachte mich wirklich weiter