Site dedicat in intregime bunicului meu care mi-a insuflat o gandire libera
si comunitatii Antionline [ IRC #antionline, undernet ]
Powered By LinuX ( Line X :)
Calea curenta: Home/Tutoriale/Porturi/Portul PeralelProgramare Paralel
[Home]
[Tutoriale]
[Scheme]
[Pascal]
[Asembler]
[C,C++]
[Linux]
[Link-uri]
[Antionline]
[Old NewS]
[Bad NewS]
[Manifesto]
Programarea Portului Paralel

      Programarea acestei interfete se face de o manevra foarte simpla:doar trei registrii sunt necesari pentru a controla toate semnalele.De fapt daca in sistem sunt instalate mai multe porturi paralele,este nevoie de atatea grupe de cate trei registrii cate porturi paralele sunt instalate. De exemplu daca avem 2 porturi paralele (corespunzatoare LPT1 si LPT2) vom avea nevoie de 2x3 registrii.

      Semnalele de date (378h-LPT1,278h-LPT2)
      Daca interfata paralela este clasica acest registru este accesibil doar la scriere. Scrierea unui octet in acest registru trece imediat liniile de date D0 la D7 la nivelurile cerute. Scrierea se face cu o instructiune de tip "OUT" (ex i asembler out ax,xx in ax gasindu-se adresa portului de baza (P+0) ex.378, iar xx fiind o variabila pe un byte sau in pascal port[port_de_baza]:=xx).

7 6 5 4 3 2 1 0  
x               d7
  x             d6
    x           d5
      x         d4
        x       d3
          x     d2
            x   d1
              x d0

      Pentru a putea folosi acest registru ca registru de intrare,la porturile care suporta transfer bidirectional trebuie sa-l setam.Aceasta se face setand bitul 5 al portului P+2 (ex 37ah). apoi putem prelua datele de pe magistrala D0-D7 cu o instructiune de tip IN din registrul de baza ( ex temp:=port[port_de_baza] in pascal)

Starea imprimantei (379h-LPT1,279h-LPT2)

      Acest registru accesibil doar la citire,este imaginea starii semnalelor ERROR,SELECT,PE,ACK si BUSY. Trebuie remarcat ca bitul 7 al registrului (corespondent al semnalului BUSY- vezi asteriscul *) este inversat in raportcu intrarea,intre cupla si registru fiind prezent un inversor.
7 6 5 4 3 2 1 0  
x               /BUSY(*)
  x             /ACK
    x           PE
      x         SELECT
        x       /ERROR
          x x x Nedefinite
(*) logica inversa

Comanda imprimantei (37ah-LPT1,27ah-LPT2)
      Acest ultim registru este accesibil pe rand la citire si la scriere. Primii patru biti sunt imaginea semnalelor STROBE,AUTOFEED,INIT si SELECT IN ( si aici sunt inversoare montate intre cupla si registru notat in tabel cu (*)) Bitul 4 (IRQ ENABLE) autorizeaza sau nu declansarea unei intreruperi cand ACK trece in starea jos (deci cand imprimanta valideaza receptia unui caracter). Aceasta intrerupere este INT 7 (0fh) pt LPT1 sau INT5 (0dh) pentru LPT2.
Nota: putem redirecta aceste intreruperi astfel incat la un front negativ al semnalului ACK sa se ruleze programul nostru rezident care sa trateze aceaste intreruperi ( vezi in pascal getintvec si setintvec).
Bitul BIT CTRL nu are sens decat pentru porturile bidirectionale(EPP sau ECP). Facand acest bit 1 logic,portul este accesibil la scriere.
We continue to hack... @2003 MrBadNewS Design, Antionline TeaM...
Optimized for NetScape