1
Capitolo
Interfacciamento di periferiche
I/O con il PC
1.1
Il BUS di espansione del PC
1.2
Interfacciamento di periferiche I/O con il PC,
con dispositivi non programmabili
1.3
Istruzioni per leggere o scrivere un dato su una
periferica
1.4
Interfacciamento di periferiche I/O con il PC,
con dispositivi programmabili PPI 8255
.
Interfacciamento di periferiche I/O con il PC
INTERFACCIAMENTO DI PERIFERICHE CON IL PC
1.1 IL BUS DI ESPANSIONE DEL PC
Ogni PC è dotato di un Bus di espansione su cui l'utente può inserire le proprie schede.
Questo bus di espansione ha subito dalla sua nascita notevoli trasformazioni si à passati dal
Bus tipo XT a quello AT (detto anche ISA), al VESA , al PCI, all’AGP , USB, ecc.
Nei moderni PC, anche se sono implementati i nuovi tipi di bus, tuttavia è ancora presente
un connettore di tipo ISA in cui è possibile inserire anche schede di tipo XT.
Il Bus ISA è costituito da due connettori, il primo 31+31 pin che implementa il BUS XT e
l'altro a 18+18 pin con segnali propri del BUS ISA.
1.1.1
PRINCIPALI SEGNALI DEL BUS XT
Il Bus XT fu realizzato per operare in sistemi in cui era presente il µP 8088/8086. I principali
tipi di segnali adoperati per l'interfacciamento di periferiche I/O sono:
•
A0÷A19 Bus indirizzi:
sono 20 linee di trasmissione unidirezionali (dal µP verso l'esterno), dove transitano gli
indirizzi.
•
D0÷D7 Bus dati:
sono otto linee di trasmissione bidirezionali che consentono di inviare o ricevere una
parola di 8 Bit.
•
IOR\ I/O Read (lettura): il segnale, attivo a livello basso, è utilizzato per effettuare una
operazione di lettura di un dato posto sulle linee D0-D7 da un dispositivo esterno.
Sostituisce l'insieme dei segnali RD\ e IO/M\ presenti sul BUS della CPU
•
IOW\ I/O Write (scrittura): tale segnale, attivo a livello basso, indica al dispositivo
esterno che la CPU vuole effettuare, attraverso le linee D0-D7 , la scrittura di un dato su
di esso. Sostituisce l'insieme dei segnali WR\ e IO/M\ presenti sul BUS della CPU
•
AEN: Enable (abilitazione dell'indirizzo): attivo a livello alto
Indica che il bus è impegnato per operazioni di DMA. Quindi. poiché durante le
operazioni di lettura o scrittura su periferiche il BUS non deve essere impegnato con le
operazioni di DMA, esse si considerano valide se AEN si trova a livello basso
•
+5V ±12V Tensioni stabilizzate, che potremmo usare per alimentare una eventuale
scheda di interfacciamento.
Prof. Francesco Di Sabatino - Dispense di Sistemi Elettronici Automatici
I-2
Interfacciamento di periferiche I/O con il PC
1.2
INTERFACCIAMENTO DI PERIFERICHE
DISPOSITIVI NON PROGRAMMABILI
I/O
CON
IL
PC
CON
Per collegare una periferica di input ( ad es. interruttori, convertitore A/D) al bus dati, si fa uso
di un buffer tree-state (ad es. il C.I. 74LS244), il quale state viene abilitato dal circuito di
decodifica (decoder address).
Mentre per collegare invece una periferica di output (ad es. Led , convertitore D/A, display)
al bus dati, si fa uso i di un D-FF (ad es. il C.I. 74LS374), il cui clock è comandato anche
esso dal circuito di decodifica.
Ciò si rende necessario in quanto la periferica non può essere collegata permanentemente al
Bus Dati, ma deve essere collegata soltanto quando essa selezionata.
Per l'indirizzamento di periferiche di I/O realizzate dall’utente è riservato un campo di indirizzi
compresi da 300H a 31FH, per non interferire con le altre periferiche del PC.
Un tipo schema a blocchi per l’interfacciamento di periferiche I/O è il seguente
Dalla periferica
di ingesso
Alla periferica
di uscita
Note sul circuito di decodifica
Per effettuare la selezione di un dispositivo periferico si utilizza in genere insieme alle linee
indirizzo, anche il segnale AEN, IOR per le periferiche di input, IOW per le periferiche di
output.
In tabella è riportato lo stato dei segnali durante la lettura o scrittura su periferiche.
AEN
L
L
IOW
H
L
IOR
L
H
Lettura
Scrittura
Prof. Francesco Di Sabatino - Dispense di Sistemi Elettronici Automatici
I-3
Interfacciamento di periferiche I/O con il PC
1.3
•
ISTRUZIONI PER
PERIFERICA
LEGGERE
O
SCRIVERE
UN
DATO
SU
UNA
SCRITTURA (TRASMISSIONI DATI AD UNA PERIFERICA)
L’istruzione OUT sia in Assembler che in Basic e outp in C++, consente di scrivere un dato su
una periferica.
Esempio.
Supponendo di voler accendere solo i led dispari collegati alla Porta B, il cui indirizzo è 301H
Il dato da inviare è 10101010 = 55h
Le istruzioni sono:
IN ASSEMBLER
MOV AX, 55 h
MOV DX, 301h
OUT DX, AX
outp (0x301, 0x55);
OUT &H301, &H55
‘carica il dato da inviare alla periferica nel registro AX
‘ carica l’indirizzo che seleziona la periferica nel registro DX
‘ invia il dato posto in AX alla periferica.. il cui indirizzo è
posto in DX.
IN C++
' trasmette il dato (55h) alla periferica
il cui indirizzo è 301h
IN BASIC
' trasmette il dato (55h) alla periferica
il cui indirizzo è 301 .
Prof. Francesco Di Sabatino - Dispense di Sistemi Elettronici Automatici
I-4
Interfacciamento di periferiche I/O con il PC
•
LETTURA ( RICEZIONE DATI DA UNA PERIFERICA).
Es. Supponendo di voler leggere lo stato di 8 interruttori collegati alla Porta A il cui indirizzo è
300H
Le istruzioni sono:
MOV DX, 300h
IN AL, DX
IN ASSEMBLER
'carica l'indirizzo (300h) che seleziona la periferica nel registro
DX
'carica nel registro AL il dato proveniente dalla periferica
(l’indirizzo che seleziona la periferica è posto in DX
IN C++ (bisogna caricare la libreria dos.h)
N = inp(0x300);
N=INP(&H300)
‘assegna alla variabile N, il dato proveniente dalla periferica il cui
indirizzo è 300H.
IN BASIC
‘assegna alla variabile N, il dato proveniente dalla periferica il cui
indirizzo è 300H. .
Prof. Francesco Di Sabatino - Dispense di Sistemi Elettronici Automatici
I-5
Interfacciamento di periferiche I/O con il PC
1.4
INTERFACCIAMENTO DI PERIFERICHE I/O CON IL PC, CON
DISPOSITIVI PROGRAMMABILI PPI 8255
Generalità:
La PPI 8255 (Programmable Peripheral Interface), è stata progettata per interfacciare
periferiche I/O con i microprocessori INTEL della famiglia 80XXX, ed è in grado di gestire 3
porte (port) (PA, PB, PC) a 8 linee TTL compatibili, che possono essere programmate come
input o come output (queste ultime dotate di latch).
Schema a blocchi Interfaccia I/O con PPI8255 col Bus del PC.
Scegliendo come indirizzo base dell’address decoder (decodificatore d’indirizzi) ad es.300H
(11 0000 0000), gli indirizzi con i quali si possono chiamare i port risultano dal data sheet della
PPI 8255:
indirizzo base+0 300H
port A
indirizzo base+1 301H
port B
indirizzo base+2 302H
port C
indirizzo base+3 303H
registro di controllo
Prof. Francesco Di Sabatino - Dispense di Sistemi Elettronici Automatici
I-6
Interfacciamento di periferiche I/O con il PC
1.4.1
ESEMPIO DI PROGRAMMAZIONE DELL’INTERFACCIA CON PPI8255.
(INDIRIZZO BASE DELL’INTERFACCIA 300H)
Si vuole programmare la PPI nel seguente modo: port A = input, port B = output, port C =
input.
Avendo ipotizzato che l’indirizzo base dell’interfaccia sia 300h , l’indirizzo per accedere al
registro di controllo risulta (300+3)h
Per programmare la PPI8255 nel modo richiesto, bisogna scrivere nel registro di
controllo(Control Register) la parola di controllo (WORD CONTROL).
La parola di controllo si ricava dal data sheet della PPI8255; nel nostro caso essa vale 99h
PROGRAMMAZIONE DELLA PPI 8255 IN ASSEMBLER
MOV AX, 99H
' carica la parola di controllo 99H nel registro AX
' carica l’indirizzo del registro di controllo 303H
nel registro DX
' invia la parola di controllo caricata nel registro AX al
registro di controllo, il cui indirizzo è posto in DX.
MOV DX, 303H
OUT DX, AX
PROGRAMMAZIONE DELLA PPI8255 IN C++
Oupt(0x303, 0x99);
// invia la “word control “ (99H) al “control register”
il cui indirizzo è 303H.
PROGRAMMAZIONE DELLA PPI8255 IN BASIC
OUT &H303, &H99
' invia la “word control “ (99H) al “control register” il cui
indirizzo è 303H
Prof. Francesco Di Sabatino - Dispense di Sistemi Elettronici Automatici
I-7
Interfacciamento di periferiche I/O con il PC
1.4.3. ESEMPIO DI SCRITTURA SULLA PORTA PB
Supponiamo di mandare alla porta B il cui indirizzo è 301H la seguente parola: (F7H)
PB7
1
PB6
1
PB5
1
PB4
1
PB3
0
PB2
1
PB1
1
PB0
1
IN ASSEMBLER
MOV AX, 99 H
MOV DX, 303H
OUT DX, AX
Programmazione
PPI8255
port A = input, port B = output, port C = input.
MOV AX, F7H
MOV DX, 301H
OUT DX, AX
outp(0x303, 0x99);
IN C++
// Programmazione PPI8255
port A = input, port B = output, port C = input.
outp(0x301, 0xF7);
OUT &H303, &H99
IN BASIC
Programmazione
PPI8255
port A = input, port B = output, port C = input.
OUT &H301, &HF7
Prof. Francesco Di Sabatino - Dispense di Sistemi Elettronici Automatici
I-8
Interfacciamento di periferiche I/O con il PC
1.4.5 ESEMPIO DI LETTURA DEL DATO PRESENTE SULLA PORTA PA
(INDIRIZZO PORTA A 300H)
MOV AX, 99 H
MOV DX, 303H
OUT DX, AX
IN ASSEMBLER
Programmazione
PPI8255
port A = input, port B = output, port C = input.
MOV DX, 300H
IN AL, DX
outp(0x303, 0x99);
IN C++
Programmazione
PPI8255
port A = input, port B = output, port C = input.
N = inp(&H300);
OUT &H303, &H99
IN BASIC
Programmazione
PPI8255
port A = input, port B = output, port C = input.
N = INP(&H300)
Prof. Francesco Di Sabatino - Dispense di Sistemi Elettronici Automatici
I-9
Scarica

Interfacciaamento di dispositivi I-O al PC