Einzelnen Beitrag anzeigen

Benutzerbild von mika
mika

Registriert seit: 25. Okt 2002
176 Beiträge
 
Delphi 6 Professional
 
#15

Re: SERIELLE SCHNITTSTELLE "Mühlespiel"

  Alt 20. Okt 2003, 21:42
also wenn du jeden pin einzeln setzen willst dann kannst du das unter win98 (unter nt/2000) geht das nur mit
nem treiber den status eines einzelnen pins mittels assembler abfragen.

erstmal die pins in einer übersicht
##########################################

DataRegister, 0, Out printerdata
StatusRegister, 1, IN printerstatus
ControlRegister, 2, Control printerfunctions.

(Dataregister (offset = 0))
----------------------------------
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
----------------------------------
..|...|...|...|...|...|...|...|_____ D0 Out.
..|...|...|...|...|...|...|________D1 Out.
..|...|...|...|...|...|__________ D2 Out.
..|...|...|...|...|____________ D3 Out.
..|...|...|...|_______________ D4 Out.
..|...|...|__________________D5 Out.
..|...|____________________ D6 Out.
..|_______________________D7 Out.



(Statusregister (offset = 1))
----------------------------------
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | (all read)
----------------------------------
..|...|...|...|...|____________ Error.
..|...|...|...|_______________ Select.
..|...|...|__________________PE.
..|...|____________________ ACK.
..|_______________________Busy (inverted)



(Controlregister (offset = 2))
----------------------------------
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | (OUT AND IN.)
----------------------------------
..........|...|...|...|...|...|
..........|...|...|...|...|...|
..........|...|...|...|...|...|____ Strobe (inverted.)
..........|...|...|...|...|_______ Auto Feed.
..........|...|...|...|_________ Init (inverted.)
..........|...|...|____________ SLCT IN (inverted.)
tech60....|...|_______________ IRQ Enable
tech60....|__________________ Direction, PS2 or later AT Devices, 0 = write, 1 = read
*)



asm geht dann ungefähr so
#############################
Delphi-Quellcode:
Const
  lptport = $378;
  DataRegister = $00;
  StateRegister = $01;
  ControlRegister = $02;


    // lesen
    port := lptport + gewünschtes register
    asm
      mov dx, Port
      in al, dx
      Mov Value, AL
    end;
    Value beinhaltet den aktuellen wert deines registers

    
    // schreiben
    port := lptport + gewünschtes register
    value hat den wert den du in das register schreiben willst
    asm
      mov al, Value
      mov dx, Port
      out dx, al
    end;


wenn dir das ungefähr weiterhilft sag bescheid dann poste ich mal kompletten code hier.


mfg, mika
:: don't Panic ::
  Mit Zitat antworten Zitat