Italiano - English

The Parallel Port

Table of Contents

    Esercitazioni di Informatica Industriale
    1. Intel 8086 Microprocessor System Architeture
    2. Interrupt managment on 80/86 microprocessor
    3. Programmable Interrupt Controller (PIC Intel 8259a)
    4. Demo Kernel Multitasking
    5. The Serial Port
    6. The Parallel Port
    Translation for this document is not available or is not complete,
    if you are intrested to receive information please write to

    Viene descritta la porta parallela (centronics), la sua gestione e programmazione anche come porta di I/O. Viene presentato un semplice software di comunicazione tramite porta parallela

    Introduzione

    la porta parallela permette il collegamento di diverse periferiche che trasferiscono 8 bit in parallelo con standard ttl.

    la porta ha un connettore a vaschetta con 25 pin

    lo scopo principale della porta parallela (o centronics) e' di collegare il pc-ibm ad una stampante

    La porta centronics come porta di I/O

    Per stampare attraverso la porta parallela si puo' usare int 17h servizi 0,1,2

    Si puo' utilizzare la porta come interfaccia di input output con altre periferiche che non siano la stampante ??

    l'interfaccia parallela e' in grado di leggere e di produrre segnali elettrici di controllo (a bassisima potenza) con standard ttl

    e' utilizzabile quindi per comandare un rele', o verificare se un interruttore e' aperto o chiuso.

    la porta parallela puo' generare un irq7 quando cambia stato uno dei suoi pin (ack)

    quindi una qualsiasi periferica puo' produrre un interrupt sw

    Registri intel

    IL PC-IBM PUO' DISPORRE FINO A TRE DIVERSE PORTE CENTRONICS, A CUI CORRISPONDONO TRE DIVERSI INDIRIZZI BASE DI I/O (278h, 378h, 3BCh)

    OGNI PORTA CENTRONICS DISPONE DI TRE REGISTRI COMPRESO IL REGISTRO BASE:

    PRINTER DATA OUTPUT (PDO): contiene il byte che deve essere trasmesso. Il registro è collegato ai pin 2..9 della porta parallela. Il byte puo' essere solo trasferito sui pin hw e mai letto dai pin nel registro.

    PRINTER STATUS REGISTER (PSR): contiene informazioni relative allo stato della porta. Queste informazioni sono strettamente legate al collegamento della porta con una stampante. Il registro è collegato ai pin 10..15 della porta parallela ed è a SOLA LETTURA. NOTA il bit 7 (pin 11) relativo al segnale 'busy' è negato elettricamente.

    PRINTER CONTROL REGISTER (PCR): registro di controllo della porta parallela. Questo registro è a SOLA SCRITTURA, tranne il bit di STROBE che dovrebbe essere bidirezionale. Il bit 4 abilita la generazione di IRQ 7 quando sul pin 6 (ACK) giunge un impulso

    CORRISPONDENZA PORTE PIN

    CORRISPONDENZA PORTE PINla porta parallela puo' dunque essere usata come una porta di I/O TTL con:

    • un bus da 8 bit in USCITA
    • un bus da 3 bit in USCITA
    • un bus da 5 bit in INGRESSO

    Inoltre i pin possono essere utilizzati anche singolarmente

    LA COMUNICAZIONE PARALLELA

    view source code LPTTERM.C

    Una possibile applicazione della porta parallela puo' essere quella di comunicazione ad alta velocità tra due PC. A differenza della comunicazione seriale si ha: 

    • MAGGIORE VELOCITA': il byte sul cavo seriale viene spedito un bit alla volta quindi ci vuole più tempo. MINORE ROBUSTEZZA': i segnali TTL sono a bassisima potenza pertanto facilmente disturbabili.
    • MINORE DISTANZA: questa è una conseguenza del punto precedente, ma anche del maggior costo di un cavo parallelo.

    DATO CHE LA PORTA PARALLELA DISPONE SOLO DI 5 INGRESSI, LA TRASMISSIONE DI UN BYTE DEVE AVVENIRE ALMENO IN DUE VOLTE.

    RISULTA COMDO DIVEDERE IL BYTE NEI NIBBLE (4 bit) INFERIORE (bo..b3) E SUPERIORE (b4..b5)

    IN QUESTO MODO LA PIU' PICCOLA ENTITA' DA TRASMETTERE E' UN NIBBLE

    Il cavo parallelo

     

    IN QUESTA CONFIGURAZIONE (ll3, dos6) CI SONO DUE BUS MONODIREZIONALI, UNO PER OGNI SENSO.

    OGNI BUS DA 5 BIT CONTIENE UN NIBBLE PIU' UN SEGNALE DI CONTROLLO E SINCRONIZZAZIONE (ricordarsi che il pin 11 è negato elettricamente)

    QUALE PROTOCOLLO DI COMUNICAZIONE ??

    UN SEMPLICE PROTOCOLLO DI COMUNICAZIONE PARALLELA

    UNO DEI VANTAGGI DELLA COMUNICAZIONE SERIALE E' CHE L'INTERFACCIA UART SI PREOCCUPA DI TUTTI I PROBLEMI ELETTRICI E DI SINCONIZZAZIONE TRA I DUE TERMINALI.

    IN QUESTO E' NECESSARIO CONTROLLARE CON IL SW TUTTO LO SCAMBIO DI INFORMAZIONI.

    A QUESTO SCOPO SI POSSONO UTILIZZARE LE LINEE DI CONTROLLO PER REALIZZARE UNA SORTA DI SINCRONIZZAZIONE TRA CHI TRASMETTE E CHI RICEVE.

    DATO CHE I DUE TERMINALI SONO COMPLETAMENTE ASINCRONI, NON E' POSSIBILE TRASMETTERE AD IMPULSI.

    PRIMA DI TRASMETTERE UN NIBBLE SUCCESSIVO BISOGNA ESSERE SICURI CHE QUELLO PRECEDENTE SIA STATO LETTO, ALTRIMENTI VA PERSO.

    QUESTO ACCADE PER TUTTI LE LINEE UTILIZZATE

    DEFINISCO I SEGUENTI SEGNALI:

    REQUEST TO SEND (RTS): tx invia una richiesta di trasmissione di un nibble sulla sua linea di controllo.

    OK TO SEND (OTS): rx sente un RTS ed invia una accettazione della trasmissione sulla sua linea di controllo.

    DATA READY (DR): tx sente un OTS, dispone il nibble sul bus dati, e comunica il dato pronto a rx

    END READ (ER): rx sente DR legge il dato dal bus e comunica quando l'operazione è terminata.

     

    Tecnical Report on parallel printer port

    Port 3BC printer data output-PDO (readable)
             ¦7¦6¦5¦4¦3¦2¦1¦0¦  ports 278, 378, 3BC
              ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- data bit 0, hardware pin 2
              ¦ ¦ ¦ ¦ ¦ ¦ +----- data bit 1, hardware pin 3
              ¦ ¦ ¦ ¦ ¦ +------ data bit 2, hardware pin 4
              ¦ ¦ ¦ ¦ +------- data bit 3, hardware pin 5
              ¦ ¦ ¦ +-------- data bit 4, hardware pin 6
              ¦ ¦ +--------- data bit 5, hardware pin 7
              ¦ +---------- data bit 6, hardware pin 8
              +----------- data bit 7, hardware pin 9
    
     	Port 3BD printer status register-PSR   (Parallel Printer Port)
    
             ¦7¦6¦5¦4¦3¦2¦1¦0¦  ports 279, 379, 3BD
              ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- 1 = time-out
              ¦ ¦ ¦ ¦ ¦ +------- unused
              ¦ ¦ ¦ ¦ +-------- 1 = error,	pin 15
              ¦ ¦ ¦ +--------- 1 = on-line,  pin 13
              ¦ ¦ +---------- 1 = out of paper,  pin 12
              ¦ +----------- 0 = Acknowledge,  pin 10
              +------------ 0 = busy,  pin 11
    
     	Port 3BE printer control register-PCR   (Parallel Printer Port)
    
             ¦7¦6¦5¦4¦3¦2¦1¦0¦  ports 27A, 37A, 3BE
              ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---- 1 = output data to printer,  (pin 1)
              ¦ ¦ ¦ ¦ ¦ ¦ +----- 1 = auto line feed,  (pin 14)
              ¦ ¦ ¦ ¦ ¦ +------ 0 = initialize printer,  (pin 16)
              ¦ ¦ ¦ ¦ +------- 1 = printer reads output,  (pin 17)
              ¦ ¦ ¦ +-------- 0 = IRQ disable,1=IRQ enable for ACK
              +------------- unused
    
    Vote this page:

    4 Comments:

    #1 Sent by Daniele 25-10-2010

    Aiuto vi prego contattatemi..
    sono uno studente devo collegare una macchina a controllo numerico e devo programmarla con delphi..
    devo costruire una funzione che mi consenta di programmare la parallela (ma non nel modo classico con le funzioni in out dove leggi e scrivi un byte)
    mi serve poter settare (scrivere) e leggere i bit delle parallela.. tutti quelli utili dall''1 al 17
    come posso fare??!?!? ci sono dei programmi che consentono di farlo.. tipo kcam..
    ma io devo farlo da me in delphi??? perchè ho collegato una sonda ad ultrasuoni che legge altri dati..
    grazie..

    #2 Sent by PkLab 25-10-2010

    Partendo dal fatto che i 17 pin sono:
    - 8 INPUT/OUTPUT
    - 4 INPUT
    - 5 OUTPUT
    cercando con google puoi trovare numerosi componenti delphi che ti permetto InPort e OutPort su WinNT/XP. In questi SO le istruzioni InPort e OutPort sono protette quindi è necessario scrivere il tuo sw con privilegi di driver. A questo scopo puoi trovare DLL che ti mettono a disposizione queste funzioni, ad esempio vedi

    http://www.sixca.com/eng/articles/pardel/
    http://www.ecawa.asn.au/home/jfuller/delphi/delphi1.htm

    In entrambi i casi si tratta di DLL per Inport/Outport. A quel punto la tua applicazione può utilizzare le tecniche standard come descritte in questo articolo.

    Per leggere un singolo pin devi comunque leggere l\\\'intero byte dalla porta a cui fa riferimento il pin che ti interessa, quindi devi utilizzare una maschera logica per ottenere il bit relativo.

    Ad esempio il PIN3 della centronics è collegato al bit1 della porta PDO quindi

    -leggi il byte dalla PDO: value:=InPOrt($378)
    -ottieni il valore del pin: pin3 := value AND b00000010

    Per scrivere un singolo bit devi comunque scrivere un byte intero sulla porta quindi per non modificare i bit non interessati devi
    -leggi il byte dalla PDO: value:=InPOrt($378)
    -set bit1: value := value OR b00000010
    -clear bit1: value := value AND b11111101
    -inverti bit1: value := value XOR b00000010
    -invia il byte alla porta

    Buon lavoro

    #3 Sent by Daniele 25-10-2010

    grazie mille per la risposta..
    ho trovato cmq una libreria già da tempo però utilizza un driver.sys..
    il problema è che non riesco cmq ad usarla..
    di seguito posto la piedinatura della scheda di controllo..
    http://img69.imageshack.us/img699651/piedinatura.jpg
    se ad esempio io volessi attivare il pin 2 e 3 dovrei passare il mio byte il numero 3??
    il pin1 è automatico??
    e soprattutto come faccio a leggere i pin 11,12 e 13.. e come posso scrivere il pin 14..
    veramente grazie mille!! vi citerò nei ringraziamenti..

    #4 Sent by PkLab 25-10-2010

    Hai provato le librerie segnalate ?
    Per attivare i pin che ti interessano devi pensare ai PIN come ai BIT ma la posizione è data dal mappa PIN/BIT che vedi nell'immagine di sopra
    Il PIN7 corrisponde al bit5 del registro PDO
    il PIN13 corrisponde al bit4 del registro PSR
    il PIN17 corrisponde al bit3 del registro PCR
    eccetera

    Quindi per attivare
    -il PIN2 e 3 devi usare il byte b00000011 = 3
    -il PIN7 devi usare il byte b00100000 = 32

    Per i pin oltre il 9 la logica è sempre la stessa, ogni registro di I/O è da byte, ogni pin della parallela è mappato su uno dei bit dei registri di I/O relative alla parallela.

    Se avessi letto con attenzione l'articolo in questa pagina, al paragrafo CORRISPONDENZA PORTE PIN avresti visto che

    il PIN11 è mapato sul BIT7 del registro PSR
    il PIN14 è mapato sul BIT1 del registro PCR
    ecc..

    quindi per scrivere sul PIN14 devi usare la maschera logica relativa al BIT1 ma devi scrivere sul registro PCR anziché sul registro PDO. Lo stesso ragionamento per i PIN11,12,13

    Leave your comment:

    Note:
    • Your email email will not be visible or used in any way, and is not required
    • Please keep comments relevant
    • Any content deemed inappropriate or offensive may be edited and/or deleted
    • HTML code is not allowed. Please use BBCode to format your text
      [b]bold[/b], [u]underline[/u], [i]italic[/i], [code]code[/code]
    The coding examples presented here are for illustration purposes only. The author takes no responsibility for end-user use
    This work is property of Pk Lab. You can use it for free but you must retain author's copyright.