HI, ist die LPT ansteuerung in dem Source richtig? c:='1'; {w} base := memw[$40:8]; {o} if ParamStr(2) = '2' then {r} begin {k} base := memw[$40:10]; { } c:='2'; {o} end; {u} if ParamStr(2) = '3' then {t} begin { } base := memw[$40:12]; {p} c:='3'; {o} end; {r} If base = 0 then {t} begin Writeln('Parallel port does not exist!'); Halt(2); end; die Timing funktionen nms(), startdel(), delay_mks() habe ich nicht verstanden. Kann das jemand verstehen? Das Timing bei der Aufgabe ist besonders wichtig! Es muss auf mikrosec genau sein! Das hier ist der Source von einer Programmersoftware, jedoch funktioniert das ganze nicht. Ich denke der Fehler liegt in dem Code. Ich habe WinXP, wie der entwickler geschrieben hatte sollte es nicht funktionieren. Naja habs trotzdem ausprobiert und die Software lief fehlerfrei durch. Nur mein Drucktreiber spielte verrueckt. Habe dann eine Startdiskette erstellt und es dann ausprobiert. Wieder lief die Software fehlerfrei durch. Aber das Ergebnis auf dem MC ist = 0. Cod Auszuege aus der Datei im Anhang Wenn mir jemand das erklaeren oder weiterhelfen koennte, bin ich sehr dankbar! Daniel
Der von Dir angegebene Quelltextausschnitt steuert keinen Parallelport an, sondern er bestimmt die I/O-Adressen, in dem ein BIOS-Datenbereich ausgelesen wird. Das Programm selbst wird - mal von Timingungenauigkeiten abgesehen - schon irgendwas richtiges tun, nur kann es das unter Windows XP nicht ohne Nachhilfe. Wie unter jeder Version von Windows NT dürfen Programme auch hier nicht einfach irgendwelche Hardware-I/O-Zugriffe durchführen. Dafür bedarf es eines Devicetreibers. Oder eines Tricks, nämlich der Abschaltung der I/O-Überwachung des Betriebssystems. Mehr dazu hier: http://www.beyondlogic.org/porttalk/porttalk.htm
Hallo, vielen Dank erstmal. Und wenn ich es mit einer von XP erstellten MS-Dos Startdiskette ausfuehere, dann duerfte es doch keine Windowsueberwachung mehr geben, oder? Diese I/O Adressen sind diese PC-spezifisch oder sind sie von PC zu PC unterschiedlich. Habe im Bios, glaube, 0x37F fuer meinen LPT eingestellt. Funktioniert das dann? daniel
Wenn Du Dein Programm unter DOS laufen lässt, sieht die Situation natürlich anders aus. Dann läuft es unter DOS und nicht unter Windows. Die I/O-Adressen sind gewissermaßen genormt, es gibt drei unterschiedliche Basisadressen für LPT1, LPT2 und LPT3. Der in Deinem Softwarefragment zitierte Code kann unter DOS die verwendeten Adressen bestimmen; das BIOS des Rechners trägt nämlich die verwendeten I/O-Adressen in den im Code ausgelesenen Datenbereich ein.
Hi, also es arbeitet ja auch fehlerfrei, sowohl unter DOS wie auch unter WinXP. Es kommt keine Fehlermeldung in WinXP das es keinen Schreibzugriff gibt. Das Programm laeuft auch fehlerfrei durch. Wie sind diese Adressen ? $40:8 - LPT 1? $40:10 - LTP 2? $40:12 - LPT 3? Kann man sich sicher sein, dass das Timing zumindest mit der Dos Startdiskette genau ist ? Vielen Dank Daniel
Das Nichtvorhandensein einer Fehlermeldung von XP bei versuchten Schreibzugriffen auf den Parallelport hat nichts zu besagen, die DOS-Emulationsumgebung fängt I/O-Zugriffe auf serielle und parallele Schnittstellen ab und versucht diese entsprechend umzusetzen, was bei simplem Drucken funktioniert, aber oft auch schief geht. Fehlermeldungen gibt es erst, wenn auf andere Hardware zugegriffen werden soll als die von der virtuellen DOS-Maschine (NTVDM) emulierte. Wirklich funktionierende Hardwarezugriffe auf die Parallelschnittstelle unter XP mit einem DOS-Programm sind aber nur mit solchen Hilfsmitteln wie Porttalk, giveio etc. möglich. Von einer DOS-Diskette gestartet verhält sich ein DOS-Programm so, wie es sich unter DOS verhält, das hat also GARNICHTS mit dem Betrieb unter XP zu tun. Ob das Timingverhalten auf Deinem Rechner korrekt ist, hängt in diesem Falle davon ab, auf welche Art und Weise das Timing realisiert wurde und wie alt das betreffende DOS-Programm ist. Einfache Verzögerungsschleifen werden kaum richtig funktionieren, da Dein XP-Rechner sicherlich mehrere Größenordnungen schneller ist als die DOS-Kiste, für die das ursprünglich mal programmiert wurde. Aber das ist kein Problem - wenn Du Dir mal den Kommentar im von Dir selbst geposteten Quelltext angesehen hättest, wüsstest Du es schon selbst: (...) I've rewritten parts of it so that it should work ok on any computer BUT ONLY IN REAL DOS MODE. it will NOT work under windows, use py2051 if you need that. It has been written so it should work on any speed pc, I've tried it on a PIII 850, and on a 16MHZ 286 and it worked on both. Vielleicht liegt Dein Problem ja auch ganz woanders, nämlich in der von Dir am Parallelport angeschlossenen Hardware?
Hi, vielen Dank fuer die Antwort. Habe mir das Quelltextprogramm angesehen. Und auch zu genuege. Ich frage halt nur weil ich nicht weiss ob meine Startdiskette ein REAL DOS MODE ist. Und weil im Quelltext steht, es SOLLTE eigentlich gehen. Bei mir gehts eben nicht und deswegen wollte ich nachvollziehen was der da macht. Besonders das Timing und wie diese Timings erzeugt werden. Oder ob mein der LPT port vielleicht nicht richtig ist, wenn ich da eine 1 ( fuer LPT 1) eingebe. Ob mein PC um die 700 MHz vielleicht da etwas falsch macht. Naja werde weitersuchen. Auch an der Hardware. Nochmals Danke fuer die Antworten Daniel
> Ich frage halt nur weil ich nicht weiss ob meine Startdiskette > ein REAL DOS MODE ist. Ah, das erklärt das Verständnisproblem. Ja, DOS, gestartet von einer Diskette, ist "REAL DOS MODE". Sobald aber irgendwo Windows ins Spiel kommt, das DOS also aus Windows heraus aufgerufen wird, ist es kein "reines" DOS mehr. Bereits Windows 3.1 verfügte über eine DOS-Virtualisierung. Bevor Du Dir aber unnötige Probleme machst: Welchen µC möchtest Du eigentlich mit welcher Hardware programmieren? Vielleicht findet sich da ja auch eine andere Lösung...
Hi, naja die Loesung ist schon gebaut, das Problem zur Programmierung (Hardware/ Software ) laeuft im Forum schon in einem anderen Thread. Und zwar diesen: Beitrag "Programmer Problem - BlowIt - AT89C2051" Da steht auch alles ueber meine verwendeten Einstellungen und Begebenheiten zur Hardwaren und Software. Aber in Kurzform, moechte mit dem Programmer BlowIt eine AT89C2051 beschreiben. Bis jetzt schlugen aber alle Versuche fehl :( . Diese Thread hier ist nur zur Programmierung, ob mir halt jemand die Ports aus dem Quelltext erklaeren koennte und wie das mit diesen Timingfunktionen programmiert ist. (Ist aber bereits schon erklaert von dir, Danke :) ) daniel
Hallo, nur zur Anmerkung auf einem alten Rechner unter Windows 95 laeuft die Software wunderbar. Vielleicht haben sich ja inzwischen die Bios Register geaendert fuer die Parallele Schnittstelle. daniel
Windows 95 ist nicht Windows NT, Windows XP aber ist Windows NT*. Windows 95 und seine verschiedenen Aufgüsse (98/98se/Me) sehen keine Hardwarevirtualisierung vor, daher verhalten sich DOS-Programme unter ihnen anders als unter Windows NT. *) und zwar Windows NT 5.1. Vista ist Windows NT 6.0
>Vielleicht haben sich ja inzwischen die Bios >Register geaendert fuer die Parallele Schnittstelle. Ich habe auch den Verdacht, dass es am BIOS liegt. Wenn (unter DOS) die Adressen der Ports vorhanden sind, so hat sie üblicherweise das BIOS vorher dort abgelegt. Aber heutzutage ist ja alles Plug & Pray. Daher auch nicht sicher, dass die Daten überhaupt gesetzt werden. In den BIOS-Einstellung kann man überlicherweise angeben, dass ein Plug&Play-OS gestartet wird: Das kannst du ja mal abschalten.
Hi Die Portadressen der verfügbaren LPT-Ports lassen sich auch über den Gerätemanager feststellen. Üblicherweise ist LPT1 I/O 378H-37FH und LPT2 278H-27FH. Übrigens macht obiger Programmabschnitt keine I/O-Zugriff sondern einen Speicherzugriff auf das BIOS-Variablen-Segment. Auf Adresse 0040:0008H steht die I/O-Adresse von LPT1 usw. Das stammt zwar noch aus DOS-Zeiten , aber wie ich MS kenne wird das noch in 100 Jahren so sein. MfG Spess
> aber wie ich MS kenne wird das noch in 100 Jahren so sein.
Zumindest noch so lange wie die PCs DOS booten können.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.