Hi. Ich muss für ein weiteres Programm mein LPT1-Port in den Byte-Modus setzten, damit ich Daten einlesen und wegschicken kann. In meinem Bios kann ich den Byte-Modus nicht direkt einstellen, sondern lediglich ECP. Ich hab jetzt folgendes versucht: 1.)Von windowsXP ab in die DosBOX 2.)debug <- 3.)(Datenleitungen als Ausgang) -o 378,0F //Datenleitungen mit Wert laden -o 37F,32 //Datenleitungen als Eingang setzen -i 378 //Auslesen der Datenleitungen F0 //Wert wurde also nicht übernommen
Hi Steffen, habe jetzt das Änliche Problem mit der I²C Schnittstelle unter Xp. Wenn ich was neues Habe melde ich mich wieder MFG Maik Geßner
Wenn Du die Datenleitungen auf Eingabe schaltest, liest Du die physikalischen Pegel an den Leitungen. Wenn keine 1-Pegel anliegen (von außen!) kannst Du auch nur 0 lesen. Oder habe ich da ´was übersehen? Ein Bekannter hat mir (Nichtprogrammierer) ein Windows-Programm geschrieben, das genau so funktioniert. Unter DOS und Pascal (selbst probiert) funktionierte es auch. Es gibt allerdings auch ECP-Schnittstellen, die sich nicht davon überzeugen lassen, voll bidirektional zu arbeiten (manche Laptops z.B.). Lege doch mal über einen Schutzwiderstand von 1kOhm 5V an einen der Datenpins und gucke, was ´reinkommt.
Also die Sache mit dem Widerstand hab ich schon probiert. -So ein Programm das mir da was anzeigen sollte, hab ich auch. Nachdem das aber schon nicht geklappt hat, dachte ich mir ich probier mal das ganze ohne Programm um die Fehlerwahrscheinlichkeit zu minimieren. Naja, und dann bin ich bei den 3 Befehlen gelandet die ich oben geschrieben habe. (-noch kleiner geht´s wohl nicht :)) Ps.: Schönes Wochenende MFG Steffen
Ein Grund, warum das ganze nicht funktioniert, dürfte darin zu finden sein, daß DOS-Programme unter Windows NT (ja, XP ist auch NT) keine direkten Hardwarezugriffe durchführen können. Diese werden teilweise von virtualisierter Hardware abgefangen, so verhält es sich bei den seriellen Schnittstellen und dem Parallelport, und teilweise "verpuffen" sie völlig wirkungslos. Das lässt sich mit Tricks umgehen, mit einem Treiber namens giveio.sys kann die NT-eigene Hardwarezugriffsüberwachung deaktiviert werden, so daß auch DOS-Programme direkte Hardwarezugriffe durchführen können. Das sollte man aber nur mit Hardware machen, die keine Interrupts auslöst, da die nicht von DOS-Programmen ausgewertet werden können und zu "interessanten" Reaktionen des Betriebssystemes führen dürften.
Ja, das stimmt natürlich, ich vergaß das zu erwähnen, daß im Hintergrund ein virtueller Porttreiber läuft (zlportio.sys) der die Zugriffe unter 2000 und XP ermöglicht. Im eigenliche Programm steht aber nicht viel anderes als im oben genannten Code.
Wie läuft das mit dem Treiber (giveio.sys) genau ab? Wie kann ich die wenn ich sie auf der Paltte habe "laden", und wie lange ist die dann aktiv? So lange ich die Dos-Box offen habe? Fragen über Fragen, bin aber halt noch blutiger Anfänger. "noch" MFG
Der Treiber muss installiert sein, näheres dazu hier: http://home.snafu.de/mgrafe/treiber.htm Damit der Treiber auch für die DOS-VDM aktiv wird, muss -aus DOS heraus- ein Dateizugriff stattfinden; fopen("\\\\.\\giveio", "r"); sollte genügen.
Der Parallelport hat als Modi SPP, ECP und EPP. Was davon soll der Byte-Modus sein? Aufgrund der linearen Addressierung macht man beim Parallelport häufig nur 32-Bit-Zugriffe, mit denen man alle (3) Register des SPP (Standard Parallel Port) liest/schreibt, da Port-Zugriffe langsam sind und das Zerlegen/Zusammensetzen der Bitfelder von der CPU sehr schnell geht.
Modus? Das ist doch nur ein Bit (BIT5) im Konfigurations-Register. Das nun Modus zu nennen ist übertrieben. Und den SPP hat man auch dann noch, wenn man ECP oder EPP einstellt, weil die Erweiterungen sind, die bei höheren I/O-Ports sind; man braucht eigentlich nichts einzustellen, zumindest wenn man ohne Interrupts auskommt.
Ich hab´s nicht so genannt! In diversen Beschreibungen ist davon aber immer mal wieder die Rede. Ansonsten hast Du natürlich Recht.
Byte Modus ist normalerweise SPP mit der Umschaltmöglichkeit der Datenleitungen als Eingänge. Dabei werden nur die 3 Standardregister zur Datensteuerung benutzt. Bei EPP und ECP kommen weitere Register dazu. Wichtig ist im Bytemodus ein Bit im Control-Register zum Umschalten der Ausgangsleitungen zu Eingangsleitungen umzusetzen. Giveio.sys ist ideal zum totschlagen des Schutzes der IO-Ports unter NT4 bis WinXP. Gezielter auf den LPT-Port kann man mit speziellen Treibern wie unter www.lpt-driver.com zugreifen. Da kann man dann auch den geregelten Zugriff auf den LPT-Port steuern. Falls gerade gedruckt wird, bekommt man eine Information - falls man selbst gerade auf dem LPT-Port ist, wartet der Drucker ... Sven
Sven schrieb: .... .. Wichtig ist im Bytemodus ein Bit im Control-Register zum Umschalten der Ausgangsleitungen zu Eingangsleitungen umzusetzen. ... Und welches Bit ist das nun genau, ich denke es ist das Fünfte, aber das funktioniert bei mir irgendwie nich :(
Es kann an der Bios-Einstellung liegen. Beim Standard-Parallel-Port ist der Datenport nur Ausgang; bei den anderen Modi auch Eingang. Hier eine Übersicht zum Parallelport: http://www.linux-magazin.de/Artikel/ausgabe/1999/10/IO/parport_s.gif
Ich habe soweit eigentlich alles beachtet, aber bei mir will es einfach nicht. Ich kann 0X378 auslesen und einmal beschreiben. Dieser Wert bleibt dann da tapfer drin, bis zum bitteren Ende, egal was ich mach... und an der Schnittstelle ändert sich kein Pegel. Folgende Header hab ich drin: #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <unistd.h> #include <dir.h> Fehlt da was? ICh wäre für Tipps sehr dankbar, da ich schon ein paar TAge über dem Problem sitze. Mfg CE
BIT5 vom Kontroll-Register gibt die Richtung vor; will man Schreiben muss es auf 0 sein; will man Lesen muss es auf 1 sein und zwar vorher. Das steht auch unter dem letzten Link. Es gibt keine Hardware, die sowas automatisch macht.
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.