Paralleler Port will nicht



  • Hallo
    Da die Sommerferien bevorstehen, habe ich mir vorgenommen zumindest mal die Grundlagen von ASM in den Ferien zu lernen, habe auch schon ein recht gutes Tutorial gefunden. Bis jetzt lief ja alles nicht schlecht (Hallo Welt, In Dateien schreiben,.. geht wunderbar).
    Tja bis jetzt.
    Als ich mal einen Blick in die FAQ´s warf sprang mir gleich der parallele Port ins Auge, ich wollte immer schon Sachen vom PC aus steuern. Zum "einschalten" eines Ausgangs (Ausgang0) verwende ich den Sourcecode aus den FAQ´s und ein bisschen Drumherum halt.

    DATEN SEGMENT
    
            MELDUNG DB "Dieses Programm fummelt am LPT1 herum.","$"
    
    DATEN ENDS
    
    STAPEL SEGMENT BYTE STACK ;Ist hier nicht wirklich notwendig
    
            DW 128 DUP (?)
    
    STAPEL ENDS
    
    CODE SEGMENT
    
    ASSUME CS:CODE,DS:DATEN,ES:NOTHING,SS:STAPEL
    
    START:  MOV AX,DATEN ;Datensegment initialisieren (oder wie mans auch nennt)
            MOV DS,AX
    
            MOV DX,OFFSET MELDUNG 
            MOV AH,09H
            INT 21H      ;Meldung ausgeben
    
            MOV ax,01H   ;1 nach ax schieben
            MOV dx,378H  ;Schubse Adresse von LPT1 in DX
            OUT dx,ax    ;Sende 1 an LPT1
    
            MOV AH,4CH
            INT 21H
    
    CODE ENDS
            END START
    

    Die Schande habe ich mit Tasm und Tlink ohne Fehler zu einer *.exe "compiliert".
    Wenn ich nun eine LED mit Wiederstand (147Ohm) an den Ausgang0 und Masse hänge tut sich da garnichts. Womöglich hängts damit zusammen dass ich mein Prog über INT 21H gleich nach dem setzen von Ausgang0 beende, aber wie kann ich verhindern, dass es sofort beendet wird?
    Oder ich hab irgendwo was anderes übersehen, aber mir fällt nicht ein was. Womöglich liegts am Win98 😕

    Grosses thx im Voraus
    Noob

    P.S. Ich könnte noch .Daten, .Code, usw verwenden, würde aber hier nix bringen und Tippübungen sind auch nicht schlecht.



  • Ich kann mir gut vorstellen, dass Windows beim beenden des Programms den LTP gleich wieder zuruecksetzt.
    Schreib das hier mal vor den int 21h, der das Programm beendet:
    xor ax,ax
    int 16h
    Das haelt die Ausfuehrung des Codes auf, bis eine Taste gedrueckt wurde...



  • oder per int 21
    MOV AH,8
    INT 21H
    (MOV VARIABLE1, AL);wenn du die gedrueckte taste noch auswerten willst



  • Nochmals Hallo
    Ich hab jetzt den "Verzögerer" eingebaut, aber es tut sich immer noch nichts. Ich messe mit einem Voltmeter zwischen Masse und Pin (bzw Loch), aber egal ob mein Programm ausgeführt(in MS DOS) wird oder nicht, kein Pin ändert seinen Zustand, auch wenn ich statt 01H 02H oder 00H schicke. Ich weiss nichtmehr, worann das noch liegen könnte.

    mfg und thx
    Noob



  • Ich hab jetzt den ganzen Schmarrn nachgestellt und es hat funktioniert 😕 (Port(378h)=01h)
    Vielleicht ist in der FAQ nicht ganz klargeworden, an welche Pins du was anschliessen musst. Hier nochmal eine Liste der Pin-Nummern + Funktion:
    1 - Strobe PC Output
    2 - Data_0 PC Output
    3 - Data_1 PC Output
    4 - Data_2 PC Output
    5 - Data_3 PC Output
    6 - Data_4 PC Output
    7 - Data_5 PC Output
    8 - Data_6 PC Output
    9 - Data_7 PC Output
    10- /ACK PC Input
    11- Busy PC Input
    12- Paper Empty PC Input
    13- Select PC Input
    14- /Autofeed PC Output
    15- /Error PC Input
    16- Init Printer PC Output
    17- /Select_Input PC Output
    18- Ground
    ...-25

    Musst also die LED-Widerstand-Konstruktion zwischen Pin 2 und 18-25 (einer von denen) klemmen.

    Sollte das dann immernoch net gehen 😕 Is das Teil im BIOS disabled?



  • Es war alles richtig angeschlossen und im BIOS ist alles soweit aktiviert. Ich hab nochmal die Adresse des Ports überprüft, 378H.
    Der einzige PC auf dem ich bis jetzt die Gelegenheit hatte das auszuprobieren war ein alter IBM Laptop, alle anderen PC´s haben Win2000 und das hat´s nicht so mit 16Bit Anwendungen.
    Ich werde morgen eine alte 900MB Platte in meinen 2. PC einbauen, Win98 installieren, im DOS Modus starten und hoffen das es was bringt. Immerhin man muss es versuchen, könnte ja sein das der Laptop ein bisschen spinnt.

    [EDIT]
    Juhuuu es funktioniert 🙂 🙂 :). Win98 Bootdisk in den 2.PC, Diskette mit dem Prog rein, ausführen und es geht perfekt. Lag wohl irgendwie am Laptop, der LPT ging aber, drucken konnte ich, LPT1 am Laptop hatte die gleichen Einstellungen wie der Desktop PC. 1000 Dank für Hilfe, und der Code zum Zeichen einlesen kommt gerade zum richtigen Zeitpunkt. Ich will nämlich ein Prog schreiben, das entweder "Loch" 2 oder 3 ein oder Ausschaltet, je nach Eingabe.

    big THX und mfg
    Noob

    P.S. Wie lese ich eigentlich Text ein? Der besteht ja aus mehreren (ASCII) Zahlen. Das geht sicher über eine Schleife oder?

    [ Dieser Beitrag wurde am 25.06.2002 um 01:36 Uhr von noob editiert. ]



  • Hallo

    Was hast du für ein Tutorial?



  • @noob:
    Schau mal in den Thread Wie lese ich eine ganze zahlenfolge ein.
    Der erste int 21h-Aufruf liest einen ganzen String von der Tastatur ein.

    @Schoetz:
    In die FAQ schauen. 😉



  • Danke für den Link, das Einlesen klappt schon richtig gut.

    mfg
    Noob



  • sau blöde frage passt eigentlich der port? soweit ich weiss ist das nicht standardisiert wo der paralelport hingemapt wird. bei manschen systemen kann der ganz wo anders liegen. ( compaq is so ein schlawiener, und bei laptops kann ich mir das auch gut vorstellen )

    auserdem sowie ich das mitgekrigt hab bastelst du auf nen laptop. kann gut möglich sein, das hier die hw ein bischen anders aussieht und nicht ganz standard konform ist .

    gruss termite



  • Original erstellt von Termite:
    **sau blöde frage passt eigentlich der port? soweit ich weiss ist das nicht standardisiert wo der paralelport hingemapt wird. bei manschen systemen kann der ganz wo anders liegen. ( compaq is so ein schlawiener, und bei laptops kann ich mir das auch gut vorstellen )

    auserdem sowie ich das mitgekrigt hab bastelst du auf nen laptop. kann gut möglich sein, das hier die hw ein bischen anders aussieht und nicht ganz standard konform ist .

    gruss termite**

    Ui....Der neue Drucker XXXX jetzt mit 5 Druckerkabeln, damit auch IHR Computer passt 😉 Nene....welcher Anschluss wo liegt ist schon genormt, sonst wäre das echt lustig biem Kabelkauf



  • das war ja auch nicht gemeint. das die an der pinbelegung drehen. nur wo der paralelport jetzt z.b mit seinen 3 ports in dem Adressraum ligt ist nicht festgelegt ( hat ibm damals verschlafen ) auch weichen gerade bei laptops manche hersteller von den spezifikationen ab. bzw sind gerade noch so drin. ( belastbarkeits der pins, pegelspannungen, ...)

    z.b. gibts an laptops serielle schnitstellen, an die du nicht alles anslschlissen kanst, da der signalpegel zu gering für diese geräthe ist. (+3 bis +12 Volt sind als low definiert. der laptop gibt nur 5 Volt als pegel aus. das angeschlossene geräht will aber gerne +6 Volt haben und schon tuts nich mehr)

    gruss termite



  • Oh...na dann wirds wirklich problematisch bie elektronik hinter dem Port...soviel zum Thema standariesierung also 😕



  • Die Adresse des LPTs hab ich jedesmal richtig angegeben, aber er hatte nach jedem start eine andere (entweder 0x378 oder 0x3BC, wechselten immer ab).
    An der seriellen Schnittstelle könnte ich vom Signalpegel schon eine TTL Logik direkt anschliessen, 4,7 Volt als High. IBM hat´s nicht so mit Standards denke ich mal.

    Aber ich muss auch schon wieder nervern:
    Die ASCII Zahlenfolge einlesen geht ja, nur Ausgeben lässt sie sich nicht. Ich seh nur Sonderzeichen und sonstigen ASCII Schrott, aber kein Buchstabe von meinem Text. Könnte es daran liegen, dass der eingelesene String nicht terminiert ist?

    mfg
    Noob



  • Das kann viele Gruende haben... Int 21h,0Ah terminiert eingelesene Strings eigentlich nicht. (Ausser vielleicht mit 0Dh, wegen der gedrueckten Enter-Taste)


Anmelden zum Antworten