Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Interfata paralela in PC

Informatica


Interfata paralela în PC

Generalitati



Interfata paralela SPP a fost dezvoltata pentru imprimante si reprezinta standardul pentru cele mai reduse perfomante.

Nivelul semnalelor este standard TTL. Conductorii se ecraneaza prin torsadarea unui fir de masa pe firele de semnal.

Transferul datelor dintre calculator si imprimanta se desfasoara dupa un protocol "handshaking", deci pe lânga liniile de date exista si semnale de control.

Transferul datelor se face pe 8 biti, ca în figura urmatoare:

STROBE/ si SEL IN/ sunt semnale de comanda de iesire, de la calculator la periferic.

ACK/ si BUSY sunt semnale de comanda de intrare, de la periferic spre calculator.

Prezenta datei stabile la iesire se semnaleaza la imprimanta prin semnalul STROBE.

Dupa preluarea datelor, receptorul raspunde cu activarea semnalului ACK/ (data receptionata).

BUSY semnaleaza starea de ocupat a imprimantei.

Semnalul SEL IN/ este emis numai în cazul porturilor bi 16516w2215q directionale si stabileste sensul transferului.

În conectorul portului paralel, semnalele sunt amplasate conform tabelului urmator:

Conector DIP 25

Semnal SPP

In/Out

SOBE

In-Out

DATA 0-7

IOut

ACK/

In

BUSY

In

PO

In

SELECT/

In

AUTO

FEED

In-Out

ERROR/

In

INIT/

In-Out

SELECT

INPUT/

In-Out

GND

GND

Porturile EPP si ECP folosesc un hardware suplimentar pentru handshaking. Ele sunt complet compatibile si cu modul SPP.

Pentru a transmite un octet la imprimanta, folosind modul SPP, programul executa urmatoarea secventa:

Scrie octetul în portul de date

Testeaza linia BUSY. Daca aceasta este '1', imprimanta nu accepta date si asteapta dezactivarea lui BUSY. Orice data se pierde.

Activeaza ('0' logic) linia STROBE si face o temporizare de cca 5 microsecunde.

Dezactieaza linia STROBE ('1').

Pentru cresterea vitezei de transfer, de obicei se ignora linia ACK.

2. Registrele interfetei:

Portul paralel SPP foloseste trei adrese. Adresa 3BCh a fost initial introdusa pentru porturile paralele pe unele adaptoare video mai vechi. Aceasta adresa a disparut un timp, deoarece porturile paralele au fost înlaturate de pe adaptoarele video. Adresa a fost apoi folosita din nou, ca o optiune pentru portul paralel integrat pe placa de baza, astfel încât configurarea lui se poate face prin BIOS.

LPT1 are de obicei adresa de baza 378h, iar LPT2 278h.

Adresa

Observatii

3BCh-3BFh

Port paralel pe placa de baza

378h-37Fh

Uzual LPT1

278h-27Fh

Uzual LPT2

La pornire, BIOS determina numarul porturilor pe care le are si le atribuie la dispozitivele logice LPT1, LPT2, LPT3 etc. Prima adresa testata este 3BC. Daca la aceasta adresa BIOS gaseste un port paralel, îl atribuie lui LPT1, apoi cauta adresa 378h si 278h. Astfel, este posibil ca în cazuri particulare adresele sa difere de cele din tabelul de mai sus.

Adresele alocate de BIOS pentru porturile paralele sunt memorate la locatii de memorie specifice, astfel încât ele pot fi regasite.

Adresa

Functia

Adresa LPT1

0000:040A

Adresa LPT2

0000:040C

Adresa LPT3

Fiecare adresa ocupa 2 octeti.

Programul urmator este un exemplu pentru obtinerea adreselor porturilor paralele, prin citirea locatiilor de memorie corespunzatoare.

#include <stdio.h>

#include <conio.h>

void main(void)

a. Folosind un astfel de program, determinati adresa portului paralel pentru calculatorul din laborator.

Adresele porturilor sunt:

Base +0 Adresa de baza, uzual numita Registru de date, este folosit pentru înscrierea datei de iesire. De obicei, acest port este numai pentru scriere. Daca portul e bidirectional, portl contine data receptionata.

Base+1  Status Port. Port de stare este folosit numai pentru citire. Notam ca în registrul de stare se citeste valoarea negata a lui BUSY. Astfel, daca pinul de intrare 11 este '1' logic, în registru se citeste '0'.

Base+1

Status Port

Bit 7

Busy (negat)

Bit 6

Ack

Bit 5

Paper Out

Bit 4

Select In

Bit 3

Error

Bit 2

IRQ (negat)

Bit 1

Rezervat

Bit 0

Rezervat

Base+2 Control port. Portul de comanda este folosit pentru iesire, dar poate fi si citit. Daca la acest port se conecteaza o imprimanta, sunt folosite 4 semnale de comanda.

Base+2

Control Port

Bit 7

Nefolosit

Bit 6

Nefolosit

Bit 5

Validare port bidirectional

Bit 4

Valideaza IRQ prin intrarea Ack

Bit 3

Selectare imprimanta

Bit 2

Initializare imprimanta (Reset)

Bit 1

Auto Linefeed

Bit 0

Strobe

Întreruperile portului paralel sunt de obicei IRQ5 sau IRQ7. Întreruperile pot fi validate sau invalidate prin bitul 4 al Registrului de comanda. Întreruperile, odata validate, vor apare pe tranzitia din '0' în '1' a liniei Ack. (la unele modele poate fi si invers).

În programul urmator se da un exemplu de folosire a întreruperii portului paralel.

** Program PRNT_INT.C **

Folosese o rutina de tratare a inreruperii pentru a semnala o intrerupere de la imprimanta.

Intreruperea e determinata de tranzitia '1'->'0' a semnalului /ACK.

Notam ca am consideratportul de imprimanta la adresele 0x0378 -0x037a

si am asociat IRQ 7.

Nume Adresa in tabel **

IRQ2 0x0a

IRQ4 0x0c

IRQ5 0x0d

IRQ7 0x0f ** */

#include <stdio.h>

#include <bios.h>

#include <dos.h>

#define DATA 0x0378

#define STATUS DATA+1

#define CONTROL DATA+2

void close_intserv(void);

void int_processed(void);

void open_intserv(void);

void interrupt far intserv(void);

int intlev=0x0f; /* interuperea asociata cu IRQ7 */

void interrupt far (*oldfunc)();

int int_occurred = 0;

/* Definitii globale */

int main(void)

close_intserv();

return(0);

void interrupt far intserv(void)

/* Este rutina de tratare a intreruperii */

void open_intserv(void)

/* valideaza IRQ7. In caz de intrerupere (low in /ACK) salt la intserv.

** toate intreruperile se invalideaza pe durata acestei functii

Validarea se face la iesire. */

void close_intserv(void)

/* invalideaza IRQ7 */

void int_processed(void)

/* EOI */

b. Scrieti un program care trimite la imprimanta un sir de caractere citit de la tastatura.

Conectarea unor comutatoare si LED-uri la portul paralel.

O aplicatie simpla este comanda unor LED-uri si citirea starii unor comutatoare. Consideam ca se citeste pe intrarea BUSY starea unui comutator si se comanda un LED conectat la Bitul 0. Notam ca o iesire '0' logic detrmina aprinderea LED-ului.

În programul urmator, daca comutatorul e deschis, LED-ul este comandat sa lumineze.

/* Program LED

Iustreaza o aplicatie simpla a portului paralel.

Cand comutatorul e deschis, LED-ul lumineaza. */

#include <stdio.h>

#include <dos.h>

#define DATA 0x03bc

#define STATUS DATA+1

#define CONTROL DATA+2

void main(void)

else

} }

c. Faceti schema electrica pentru conectarea la portul paralel a 8 LED-uri în cazul în care pe intrarea Ack se conecteaza un buton cu apasare si revenire.

Scrieti un program care, folosind întreruperile, numara apasarile pe buton si aprinde LED-corespunzator, pentru a indica în binar numarul de apasari.


Document Info


Accesari: 3032
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )