[Java] Drucker über Centronics Port ansprechen

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Laura, 13. März 2011 .

  1. 13. März 2011
    Drucker über Centronics Port ansprechen

    Hey,

    brauche Hilfe bei folgender Aufgabe:

    Das auszugebende Zecihen wird an den Dastenport gelegt. Danach wird die BUSY-Leitung (Bit 7) getestet, bis sie auf Low-Pegel geht. Anschließend wird die STROBE-Leitung (Bit 0) gepulst und so das Zeichen vom Drucker übernommen. Die Daten BUSY und STROBE sind invertiert (man muss also auf Bit 7 auf 1 beim STATUSPORT testen und Bit 0 des Steuerports kurz auf 1 setzen, um den Strobe-Impuls zu erzeugen.

    Infos und ein Zeitablaufdiagramm:
    http://www2.informatik.hu-berlin.de/sv/lehre/ti1/ti1d/download/doc/ti1d7.pdf

    Infos zum Code:
    1. Da ich keinen Com Port am Pc habe und man den unter Windows 7 nicht ansprechen kann, habe ich eine Klasse, die Virtuelle Ports erzeugen kann.
    Bis jetzt habe ich nur die Flanke, die schaut, ob BUSY 1 ist
    Busy Bit7 -- 0 = Drucker ist beschäftig (invertiert)
    Strobe Bit0 -- 0=Daten liegen an D0-D7 (invertiert)
    ACK Bit6 -- 0=Drucker für nächstes Zeichen bereit (invertiert)

    Ich habe 3 Ports angelegt, für jedes der 3 Datenregister eins:
    Datenregister = Port278h --> 632dezimal -- writeonly
    Statusregister = Port 279h --> 633dezimal -- readonly
    Steuerregister = Port 27Ah --> 634dezimal -- read/write
    und dann auf den ersten Port die Daten geschrieben und dann kommt die Flanken Abfrage.

    Nur jetzt weiß ich nicht mehr weiter, wie geht das mit dem "Pulsen" der Strobe Leitung oder was bedeutet das?

    Bisheriger Quellcode:
    Code:
    package Port;
    import java.awt.Color;
    import java.io.IOException;
    import javax.swing.UIManager;
    
    public class Drucken {
     public static void main(String[] args) throws IOException, InterruptedException {
     //Hier wird der System-Default-LookAndFell eingesetzt, damit die GUI schöner aussieht...
     try {
     UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
     }
     catch(Exception e) {
     System.out.println("Fehler beim laden des Look and Feels!");
     }
     //Ein hauptfenster-objekt wird erzeugt (und damit die Ports 632, 633 und 634) und der neue Frame wird sichtbar gesetzt...
     GUI_Hauptfenster hauptfenster = new GUI_Hauptfenster(0x278, 0x279, 0x27A);
    
     hauptfenster.setVisible(true);
    
     
     GUI_Hauptfenster.pm.writePort(0x278, 0x4D); //"M" auf Datenleitung legen
     GUI_Hauptfenster.pm.writePort(0x27A, 0x1); // Strobe = 1 = Daten liegen an
     
     
     int k = 1;
     while(k == 1) {// nur für den Anfang eine endlosschleife
     while(!((GUI_Hauptfenster.pm.readPortReturnInt(0x279) & 64) == 64)) {
     Thread.sleep(200);
     }// end while
     while(!((GUI_Hauptfenster.pm.readPortReturnInt(0x279) & 64) == 0)) {
     Thread.sleep(200);
     }// end while
     //[COLOR=Red]HIER WEIß ICH NICHT MEHR WEITER?([/COLOR]
     }// end while
     }// end main
    
    }// end class
    mfg Laura
     
  2. 13. März 2011
    AW: Drucker über Centronics Port ansprechen

    Das Strobe-Signal sagt dem Drucker/Gerät, dass neu Daten gesetzt worden sind und er diese nun annehmen soll und dient ganz einfach zur Synchronisation der Daten.

    Eine genau und gute Beschreibung findest du hier unter Timing im Compliance Mode (Drucken)


    Mfg Rushh0ur
     
  3. 13. März 2011
    AW: Drucker über Centronics Port ansprechen

    Hey,
    danke dir, der Tipp hört sich gut an, jetzt weiß ich schon mehr, kann das aber erst morgen mal weiter programmieren
     
  4. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.