08.12.2012 Views

Modo 1 - PoliformaT

Modo 1 - PoliformaT

Modo 1 - PoliformaT

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Tema 2:<br />

Expansión de E/S digital<br />

Periféricos e Interfaces Industriales<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada


Expansión de Entrada/Salida digital<br />

Índice<br />

• Introducción<br />

• Expansión de E/S con lógica discreta<br />

– Mapeado de entradas adicionales<br />

– Mapeado de salidas adicionales<br />

• Expansión de E/S con circuitos especializados: El<br />

PPI 8255<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

2de 55


Expansión de Entrada/Salida digital<br />

Índice<br />

• El PPI8255 (cont.)<br />

– Arquitectura<br />

• Conexión al microcontrolador<br />

– El registro de control<br />

• Configuración del modo de operación<br />

• Puesta a 0 ó 1 de un bit del puerto C<br />

– <strong>Modo</strong>s de operación<br />

• <strong>Modo</strong> 0 (básico): entrada o salida<br />

• <strong>Modo</strong> 1 (protocolo): entrada o salida<br />

• Existe un modo 2 (bidireccional con protocolo)<br />

– El puerto C en los modos con protocolo<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

3de 55


Expansión de Entrada/Salida digital<br />

Introducción<br />

• Necesidad de expansión<br />

– A veces la elección del uC depende de factores ajenos<br />

al diseño<br />

• Coste<br />

• Disponibilidad<br />

• Herramientas de desarrollo<br />

• Posibilidad de reaprovechar sistemas/tarjetas<br />

• Conocimientos previos, curva de aprendizaje, tiempo<br />

– Otras veces la elección del uC depende de sus<br />

periféricos internos, pero necesitamos más capacidad<br />

de entrada/salida de la que disponemos sólo con el uC<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

4de 55


Expansión de Entrada/Salida digital<br />

Expansión de E/S con lógica discreta<br />

• Con lógica discreta se puede ampliar la E/S<br />

utilizando como vía de acceso al uC<br />

– Puertos de E/S de propósito general<br />

• Los puertos se comparten entre varios dispositivos<br />

– La memoria externa de datos (XRAM)<br />

• “Mapeando” el dispositivo dentro del área de memoria<br />

• Las líneas del bus (direcciones, datos, control) se comparten<br />

entre los dispositivos, las memorias externas del sistema, etc.<br />

• Suele ser la solución más lógica cuando, por otros motivos<br />

(generalmente requisitos de memoria), ya se dispone de un bus<br />

de datos externo<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

5de 55


Expansión de Entrada/Salida digital<br />

Expansión de E/S con lógica discreta<br />

• Expansión de las entradas<br />

– Idea general: Multiplexar los datos de entrada<br />

• Si tenemos K entradas de W bits, nos bastará con<br />

– W pines de entrada<br />

– S pines de salida (S >= 2 K )<br />

– MUX de K valores de W bits cada uno<br />

µC<br />

Dato<br />

multiplexado<br />

W<br />

selección<br />

MUX<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

S<br />

W<br />

...<br />

W<br />

E 0<br />

E K-1<br />

6de 55


Expansión de Entrada/Salida digital<br />

Expansión de E/S con lógica discreta<br />

• Expansión de las entradas<br />

– Ejemplo: Multiplexar 8 entradas E0 a E7 de 1 bit cada<br />

una con menos de 8 líneas en el uC<br />

• A) Haciendo 8 lecturas de 1 bit para obtener toda la<br />

información<br />

– 1 entrada, 3 salidas<br />

– Sw para leer todas las entradas, para leer 1 entrada<br />

µC P1.7<br />

P1.2 a P1.0<br />

Dato<br />

multiplexado<br />

selección<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

1<br />

3<br />

1<br />

...<br />

1<br />

E 0<br />

E 7<br />

7de 55


Expansión de Entrada/Salida digital<br />

Expansión de E/S con lógica discreta<br />

• Expansión de las entradas<br />

– Ejemplo (cont):<br />

• A) 8 lecturas de 1 bit<br />

1. Sw para leer todas las entradas en un vector e<br />

2. Sw para leer una entrada i<br />

for (i=0; i < 8; i++) {<br />

/* Quitar selección del P1 */<br />

P1 &= 0xF8;<br />

/* Selección = i */<br />

P1 |= (i & 0x07);<br />

/* Leer entrada */<br />

e[i] = P1^7;<br />

}<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

int leer_entrada (int i) {<br />

}<br />

i ∈ [0,7]<br />

/* Quitar selección del P1 */<br />

P1 &= 0xF8;<br />

/* Selección = i */<br />

P1 |= (i & 0x07);<br />

/* Leer entrada */<br />

return P1^7;<br />

8de 55


Expansión de Entrada/Salida digital<br />

Expansión de E/S con lógica discreta<br />

• Expansión de las entradas<br />

– Ejemplo (cont):<br />

• B-1) Haciendo 2 lecturas de 4 bits utilizando 4 MUXes 2-a-1<br />

µC<br />

– 4 entradas, 1 salida<br />

– Sw para leer todas las entradas, para leer 1 entrada<br />

P1.4 a P1.7<br />

P1.1 a P1.0<br />

Dato<br />

multiplexado<br />

selección<br />

4 x MUX 2-a-1<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

4<br />

1<br />

4<br />

4<br />

E 0 , E 1 , E 2 , E 3<br />

E 4 , E 5 , E 6 , E 7<br />

9de 55


Expansión de Entrada/Salida digital<br />

Expansión de E/S con lógica discreta<br />

• Expansión de las entradas<br />

– Ejemplo (cont):<br />

• B-1) Haciendo 2 lecturas de 4 bits con MUXes<br />

1. Sw para leer todas las entradas en un vector e<br />

2. Sw para leer una entrada i<br />

for (i=0; i < 2; i++) {<br />

/* Quitar selección del P1 */<br />

P1 &= 0xFE;<br />

/* Selección = i */<br />

P1 |= (i & 0x01);<br />

/* Leer 4 entradas */<br />

e[4*i+0] = P1^4; e[4*i+1] = P1^5;<br />

e[4*i+2] = P1^6; e[4*i+3] = P1^7;<br />

}<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

10 de 55


Expansión de Entrada/Salida digital<br />

Expansión de E/S con lógica discreta<br />

• Expansión de las entradas<br />

– Ejemplo (cont):<br />

• B-1) Haciendo 2 lecturas de 4 bits con MUXes<br />

1. Sw para leer<br />

todas las entradas<br />

2. Sw para leer<br />

una entrada i<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

int leer_entrada (int i) {<br />

/* Quitar selección del P1 */<br />

P1 &= 0xFE;<br />

/* Selección = i/4 (bloque) */<br />

P1 |= ((i/4)) & 0x01);<br />

/* Leer entrada */<br />

switch (i%4) {<br />

case 0: return P1^4;<br />

case 1: return P1^5;<br />

case 2: return P1^6;<br />

default: break; }<br />

return P1^7; }<br />

11 de 55


Expansión de Entrada/Salida digital<br />

Expansión de E/S con lógica discreta<br />

• Expansión de las entradas<br />

– Ejemplo (cont):<br />

• B-2) Haciendo 2 lecturas de 4 bits utilizando un ‘244<br />

– 4 entradas, 1 ó 2 salidas<br />

– ‘244 = 74ls244, 74hc244, 74hct244, ...<br />

1A0 - 1A3 4 4 1Y0 - 1Y3<br />

/1OE<br />

2A0 - 2A3 4 4 2Y0 - 2Y3<br />

/2OE<br />

‘244<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

12 de 55


Expansión de Entrada/Salida digital<br />

Expansión de E/S con lógica discreta<br />

• Expansión de las entradas<br />

– Ejemplo (cont):<br />

µC<br />

• B-2) Haciendo 2 lecturas de 4 bits utilizando un ‘244<br />

– 4 entradas, 1 ó 2 salidas<br />

– ‘244 = 74ls244, 74hc244, 74hct244, ...<br />

Dato<br />

multiplexado<br />

selección<br />

1<br />

4<br />

E0 , E1 ,<br />

E2 , E3 E4 , E5 ,<br />

E6 , E7 Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

4<br />

4<br />

Dato<br />

multiplexado<br />

selA<br />

selB<br />

1 salida 2 salidas<br />

1<br />

1<br />

13 de 55


Expansión de Entrada/Salida digital<br />

Expansión de E/S con lógica discreta<br />

• Expansión de las entradas<br />

– Ejemplo (cont):<br />

• B-2) Haciendo 2 lecturas de 4 bits utilizando ‘244<br />

– Si se utiliza 1 salida, el sistema es funcionalmente idéntico al B-1<br />

– Si se utilizan 2 salidas (selA, selB) ahorramos el inversor, pero ...<br />

» Peligro: Podemos crear un cortocircuito si activamos<br />

simultáneamente ambos triestados<br />

(selA = selB = 0)<br />

» Ejercicio 1: Sw para leer todas las entradas<br />

» Ejercicio 2: Sw para leer una entrada<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

14 de 55


Expansión de Entrada/Salida digital<br />

Expansión de E/S con lógica discreta<br />

• Expansión de las entradas<br />

– Ejemplo (cont):<br />

• C) Mapeando un integrado ‘244 en el mapa de memoria<br />

– Solución interesante si ya se usan memorias externas o existen<br />

otros dispositivos mapeados en memoria<br />

» El mapeado no supone la sobrecarga adicional de los buses<br />

de direcciones y datos, pues ya se usan<br />

– 1 línea adicional de selección (/CS244 )<br />

» /CS244 se conecta a ambos /OE, y se leen las 8 entradas en<br />

una sola operación<br />

» /CS244 proviene del decodificador, no del uC<br />

– Sw para leer todas las entradas, para leer 1 entrada<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

15 de 55


Expansión de Entrada/Salida digital<br />

Expansión de E/S con lógica discreta<br />

• Expansión de las entradas<br />

– Ejemplo (cont):<br />

4 4<br />

4<br />

• C) Mapeando un integrado ‘244 en el mapa de memoria<br />

E7-E0 4<br />

≈<br />

8 8<br />

D7-D0 uC<br />

A15-A0 uC<br />

Circuito<br />

Decodif.<br />

8 8<br />

/RD uC<br />

/WR uC<br />

– También podríamos haber hecho /CS 244 OR /RD uC para activar el<br />

‘244 y garantizar así que la operación del uC es una lectura<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

/CS 244<br />

DATOS<br />

DIR<br />

RAM-1<br />

/CS<br />

/RD<br />

/WR<br />

DATOS<br />

DIR<br />

RAM-2<br />

/CS<br />

/RD<br />

/WR<br />

16 de 55


Expansión de Entrada/Salida digital<br />

Expansión de E/S con lógica discreta<br />

• Expansión de las entradas<br />

– Ejemplo (cont):<br />

• C) Mapeando un integrado ‘244 en el mapa de memoria<br />

1. Sw para leer todas las entradas en un vector e<br />

2. Sw para leer una entrada i<br />

typedef unsigned char byte;<br />

/* Variable global en dir. fija */<br />

xdata byte ent_244 at 0x8000;<br />

...<br />

for (i=0; i < 8; i++) {<br />

e[i] = (ent_244 >> i) & 0x01;<br />

}<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

typedef unsigned char byte;<br />

/* Variable global en dir. fija */<br />

xdata byte ent_244 at 0x8000;<br />

...<br />

int leer_entr (int i) {<br />

return (ent_244 >> i) & 0x01;<br />

}<br />

17 de 55


Expansión de Entrada/Salida digital<br />

Expansión de E/S con lógica discreta<br />

• Expansión de las salidas<br />

µC<br />

– Idea general: Demultiplexación<br />

• Si tenemos K salidas de W bits, nos bastará con<br />

W<br />

S<br />

– W pines de salida para datos<br />

– K latches de W bits cada uno<br />

– S ó S+1 pines para<br />

la selección del latch<br />

Dato multiplexado<br />

selección<br />

escritura<br />

DEC<br />

G<br />

...<br />

Latch<br />

LE<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

...<br />

Latch<br />

LE<br />

W<br />

W<br />

S 0<br />

S K-1<br />

D0-<br />

D7<br />

LE<br />

/OE<br />

latch ‘573<br />

D<br />

E<br />

Q<br />

D 0<br />

LE<br />

1 2 3<br />

Q 1 2<br />

O0-<br />

O7<br />

18 de 55


Expansión de Entrada/Salida digital<br />

Expansión de E/S con lógica discreta<br />

• Expansión de las salidas<br />

– Ejemplo: Construir 3 salidas S0 a S2 de 4 bits cada una<br />

con menos de 8 líneas en el uC<br />

• A) Utilizando 2 líneas de selección, 1 línea de escritura<br />

– Sw para escribir en una salida<br />

P1.3 a P1.0<br />

µC<br />

P1.5, P1.4<br />

P1.7<br />

2<br />

Dato multiplexado<br />

4 selección<br />

escritura<br />

DEC<br />

G<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

Latch S0<br />

LE<br />

4<br />

Latch<br />

LE<br />

Latch<br />

LE<br />

4<br />

4<br />

S1<br />

S2<br />

19 de 55


Expansión de Entrada/Salida digital<br />

Expansión de E/S con lógica discreta<br />

• Expansión de las salidas<br />

– Ejemplo: Construir 3 salidas S0 a S2 de 4 bits cada una<br />

con menos de 8 líneas en el uC<br />

• A) Utilizando 2 líneas de selección, 1 línea de escritura<br />

– Sw para escribir en una salida s el dato d<br />

void escribir_sal (int s, char dato) {<br />

/* Eliminar todo menos P1.6, decodificador desactivado */<br />

P1 &= 0x40;<br />

}<br />

P1 |= (dato & 0x0F); /* A1. Añadir dato (4 bits) */<br />

P1 |= ((s & 0x03)


Expansión de Entrada/Salida digital<br />

Expansión de E/S con lógica discreta<br />

• Expansión de las salidas<br />

– Ejemplo: Construir 3 salidas S0 a S2 de 4 bits cada una<br />

con menos de 8 líneas en el uC<br />

• A) Utilizando 2 líneas de selección, 1 línea de escritura<br />

– Sw para escribir en una salida s el dato d<br />

A1. P1 |= (dato & 0x0F); A2. P1 |= ((s & 0x03)


Expansión de Entrada/Salida digital<br />

Expansión de E/S con lógica discreta<br />

• Expansión de las salidas<br />

– Ejemplo: Construir 3 salidas S0 a S2 de 4 bits cada una<br />

con menos de 8 líneas en el uC<br />

• B) Utilizando 2 líneas de selección<br />

– Sw para escribir en una salida<br />

P1.3 a P1.0<br />

P1.5, P1.4<br />

µC<br />

4<br />

2<br />

Dato multiplexado<br />

selección<br />

DEC<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

Latch<br />

LE<br />

Latch<br />

LE<br />

Latch<br />

LE<br />

4<br />

4<br />

4<br />

S0<br />

S1<br />

S2<br />

22 de 55


Expansión de Entrada/Salida digital<br />

Expansión de E/S con lógica discreta<br />

• Expansión de las salidas<br />

– Ejemplo: Construir 3 salidas S0 a S2 de 4 bits cada una<br />

con menos de 8 líneas en el uC<br />

• B) Utilizando 2 líneas de selección<br />

– Sw para escribir en una salida s el dato d<br />

void escribir_sal (int s, char dato) {<br />

/* Eliminar todo menos P1.7 y P1.6, deco activa salida 3 */<br />

P1 = (P1 & 0xC0) | 0x30;<br />

}<br />

P1 |= (dato & 0x0F); /* A1. Añadir dato (4 bits) */<br />

P1 |= ((s & 0x03)


Expansión de Entrada/Salida digital<br />

Expansión de E/S con lógica discreta<br />

• Expansión de las salidas<br />

– Ejemplo: Construir 3 salidas S0 a S2 de 4 bits cada una<br />

con menos de 8 líneas en el uC<br />

• B) Utilizando 2 líneas de selección<br />

– Sw para escribir en una salida<br />

A1. P1 |= (dato & 0x0F); A2. P1 |= ((s & 0x03)


Expansión de Entrada/Salida digital<br />

S0<br />

S1<br />

S2<br />

Expansión de E/S con lógica discreta<br />

• Expansión de las salidas<br />

4<br />

4<br />

4<br />

– Ejemplo: Construir 3 salidas S0 a S2 de 4 bits cada una<br />

con menos de 8 líneas en el uC<br />

• C) Mapeando los latches<br />

Latch<br />

LE<br />

Latch<br />

LE<br />

Latch<br />

LE<br />

– Sw para escribir en una salida<br />

CS S2<br />

CS S1<br />

4<br />

CS S0<br />

A15-A0 uC<br />

Circuito<br />

Decodif.<br />

Activas a nivel<br />

alto (como LE)<br />

D7-D0 uC<br />

– También podíamos haber operando CS Si con AND NOT(/WR uC )<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

/RDuC /WRuC DATOS<br />

DIR<br />

RAM-1<br />

/CS<br />

/RD<br />

/WR<br />

DATOS<br />

DIR<br />

RAM-2<br />

/CS<br />

/RD<br />

/WR<br />

25 de 55


Expansión de Entrada/Salida digital<br />

Expansión de E/S con lógica discreta<br />

• Expansión de las salidas<br />

– Ejemplo: Construir 3 salidas S0 a S2 de 4 bits cada una<br />

con menos de 8 líneas en el uC<br />

• C) Mapeando los latches<br />

– Sw para escribir en una salida s el dato d<br />

/* Supondremos que el decodificador activa las<br />

salidas /CS de los latches en las<br />

direcciones 0x8000, 0x8001 y 0x8002 */<br />

xdata byte salidas[3] at 0x8000;<br />

void escribir_sal (int s, char dato) {<br />

/* Esto genera un “MOVX @DPTR, A” con A = dato y<br />

DPTR = 0x8000, 0x8001 ó 0x8002 (en función de s) */<br />

salidas[s % 3] = dato; /* también “dato & 0x0F” */<br />

}<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

26 de 55


Expansión de Entrada/Salida digital<br />

Expansión de E/S con lógica discreta<br />

• Expansión de las salidas<br />

– Ejemplo: Construir 3 salidas S0 a S2 de 4 bits cada una<br />

con menos de 8 líneas en el uC<br />

• Ejercicio: Diseñar una nueva solución<br />

– Mapeando dos latches de 8 bits<br />

– S0 y S1 en el primer latch, S2 en el segundo latch<br />

– Sw para escribir en una salida s el dato d<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

27 de 55


Expansión de Entrada/Salida digital<br />

Expansión de E/S con circuitos<br />

especializados<br />

• Factores de diseño en la elección entre la<br />

expansión de E/S con lógica discreta o con<br />

circuitos especializados<br />

– Factores dependientes del caso:<br />

• Cantidad de líneas a expandir<br />

• Circuito de decodificación resultante<br />

– A más dispositivos, más complejo/caro/grande/...<br />

• Periféricos con modos de comunicación específicos<br />

– Generalmente protocolos de handshake<br />

– Dichos protocolos pueden estar directamente soportados por los<br />

circuitos especializados de E/S<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

28 de 55


Expansión de Entrada/Salida digital<br />

Expansión de E/S con circuitos<br />

especializados<br />

• Factores de diseño en la elección entre la<br />

expansión de E/S con lógica discreta o con<br />

circuitos especializados<br />

– Factores ajenos:<br />

• Preferencia personal<br />

• Coste del sistema resultante<br />

• Inventario disponible de elementos<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

29 de 55


Expansión de Entrada/Salida digital<br />

El PPI8255<br />

• El PPI8255 es un dispositivo genérico para<br />

resolver la interfaz a periféricos externos<br />

– PPI = “Programmable Peripheral Interface”, o interfaz<br />

programable de periféricos.<br />

– Ofrece al uC 3 puertos de 8 bits cada uno que se<br />

pueden configurar como entradas o salidas<br />

• No realmente bidireccionales<br />

– Está especialmente diseñado para ser conectado a un<br />

bus de microcontroladores de 8 bits como los MCS-51<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

30 de 55


Expansión de Entrada/Salida digital<br />

El PPI8255<br />

• El PPI8255 es un dispositivo genérico para<br />

resolver la interfaz a periféricos externos<br />

– Para la conexión con el procesador, el 8255 se<br />

direcciona como un dispositivo con 4 posiciones de<br />

memoria<br />

• Las tres primeras posiciones corresponden a los registros<br />

asociados a cada uno de los puertos<br />

• La cuarta posición corresponde a un registro interno de control<br />

• Señales /CS, /RD, /WR, A1-A0, D7-D0, RESET<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

31 de 55


Expansión de Entrada/Salida digital<br />

Arquitectura del PPI8255<br />

• Esquema de bloques<br />

Conexión<br />

al<br />

μC<br />

D7-D0<br />

A1, A0<br />

/WR<br />

/RD<br />

/CS<br />

RESET<br />

8<br />

Buffer<br />

datos<br />

Bloque<br />

control<br />

Puerto<br />

A<br />

Puerto<br />

C H<br />

Puerto<br />

C L<br />

Puerto<br />

B<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

8<br />

4<br />

4<br />

8<br />

Conexión<br />

a los<br />

periféricos<br />

32 de 55


Expansión de Entrada/Salida digital<br />

Arquitectura del PPI8255<br />

• La entrada de RESET=1 inicializa el dispositivo<br />

– <strong>Modo</strong> 0 (entrada) para todos los puertos<br />

• Mapa de posiciones<br />

internas de memoria<br />

A1 A0<br />

0 0<br />

0 1<br />

1 0<br />

1 1<br />

• El valor escrito en el registro de control<br />

– Configura el modo de operación<br />

– Pone a 0/1 una línea del puerto C (bit set/reset)<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

Registro<br />

Registro puerto A<br />

Registro puerto B<br />

Registro puerto C<br />

Registro control<br />

33 de 55


Expansión de Entrada/Salida digital<br />

Arquitectura del PPI8255<br />

• Conexión del PPI8255 al uC<br />

8<br />

8<br />

4<br />

4<br />

A D7-0<br />

A1-0<br />

B<br />

8255<br />

C H<br />

C L<br />

D7-D0 uC<br />

/CS<br />

/RD<br />

/WR<br />

8<br />

2<br />

8<br />

/CS 8255<br />

D7-D0 uC<br />

A15-A0 uC<br />

Circuito<br />

Decodif.<br />

O<br />

Latch<br />

D LE /RDuC /WRuC P0 uC ALE P2 /RD /WR<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

8<br />

8<br />

/RD uC<br />

/WR uC<br />

A15-A0 uC<br />

DATOS<br />

DIR<br />

RAM-1<br />

/CS<br />

/RD<br />

/WR<br />

DATOS<br />

DIR<br />

RAM-2<br />

/CS<br />

/RD<br />

/WR<br />

34 de 55


Expansión de Entrada/Salida digital<br />

El registro de control del PPI8255<br />

• Configuración del modo de operación<br />

– Escritura en el registro de control con el bit 7 = 1<br />

Reg. control:<br />

00: básico<br />

01: protocolo<br />

1x: bidireccional con<br />

protocolo (half-duplex)<br />

0: salida<br />

1: entrada<br />

MSB LSB<br />

1 MA1 MA0 DA DCH MB DB DCL<br />

<strong>Modo</strong> puerto A<br />

Dirección pto. A<br />

Dirección parte alta pto. C<br />

Dirección pto. B<br />

Dirección parte baja pto. C<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

<strong>Modo</strong><br />

pto. B<br />

0: básico<br />

1: protocolo<br />

35 de 55


Expansión de Entrada/Salida digital<br />

El registro de control del PPI8255<br />

• El puerto A puede funcionar en cualquier modo<br />

– Es el único puerto que puede funcionar en modo 2<br />

• El puerto B puede funcionar en modos 0 ó 1<br />

– <strong>Modo</strong> 0 (entrada), modo 0 (salida), modo 1 (entrada) o<br />

modo 1 (salida)<br />

• El puerto C sólo puede funcionar en modo 0<br />

– <strong>Modo</strong> 0 (e) o modo 0 (s)<br />

– Configuración independiente de la parte alta y baja<br />

– Sólo para las líneas que no sean de control de los<br />

protocolos de los otros puertos<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

36 de 55


Expansión de Entrada/Salida digital<br />

El registro de control del PPI8255<br />

• Configuración del modo de operación<br />

– Los modos con protocolo utilizan líneas adicionales a<br />

las del puerto para controlar la transferencia<br />

• Permite adaptar uC y periféricos de velocidades de trabajo muy<br />

diferentes<br />

– El más rápido se adapta al más lento<br />

• Está basado en un procedimiento de handshaking:<br />

– El receptor debe dar su permiso antes de poder enviar<br />

– Una vez enviado el dato, el emisor activa una señal de aviso para<br />

que el receptor “sepa” que hay un dato “nuevo” que recoger y<br />

procesar<br />

– El uC puede ser avisado mediante una línea de interrupción o<br />

gestionar el protocolo mediante consulta de estado<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

37 de 55


Expansión de Entrada/Salida digital<br />

El registro de control del PPI8255<br />

• Configuración del modo de operación<br />

– El puerto A es el único puerto que puede funcionar en<br />

todos los modos (0, 1 y 2)<br />

• Las líneas adicionales utilizadas para los modos con protocolo<br />

se toman del puerto C (de la parte alta)<br />

– El puerto B puede funcionar en modos 0 ó 1<br />

• Las líneas adicionales utilizadas para el modo de transferencia<br />

con protocolo se toman del puerto C (de la parte baja)<br />

– El puerto C sólo puede funcionar en modo 0<br />

• Y sólo las líneas que no se hayan reservado para<br />

transferencias con protocolo de los puertos A o B<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

38 de 55


Expansión de Entrada/Salida digital<br />

El registro de control del PPI8255<br />

• Operación de puesta a 0 ó 1 de un bit del pto C<br />

– Esta operación se denomina bit set/reset del pto C<br />

– Se consigue escribiendo una palabra en el registro de<br />

control con el bit 7 = 0<br />

– La línea del puerto C indicada en la operación debe<br />

estar configurada como salida,<br />

– y no debe estar asociada a protocolo<br />

Reg. control:<br />

MSB LSB<br />

0 - - - b2 b1 b0 v<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

Número bit puerto C (de 0 a 7)<br />

Número valor línea (0 ó 1)<br />

39 de 55


Expansión de Entrada/Salida digital<br />

<strong>Modo</strong>s de funcionamiento del<br />

PPI8255: <strong>Modo</strong> 0<br />

• <strong>Modo</strong> 0: E/S básica<br />

– Una línea sólo puede ser entrada o salida<br />

– Las salidas son registradas<br />

• El uC escribe en el registro asociado al puerto, y su valor se<br />

saca a las líneas del puerto<br />

– Las entradas no son registradas<br />

• El uC lee directamente de los pines del puerto<br />

– Líneas libres puerto C (no asociadas a protocolo)<br />

• CH = bits 7..4 (todas)<br />

• CL = bits 3..0 (todas)<br />

– 16 combinaciones de modo<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

40 de 55


Expansión de Entrada/Salida digital<br />

<strong>Modo</strong>s de funcionamiento del<br />

PPI8255: <strong>Modo</strong> 1<br />

• <strong>Modo</strong> 1: E o S con protocolo ( strobed I/O )<br />

– La salidas y las entradas son registradas<br />

• El dato en los pines del puerto se registra en el flanco de una<br />

de las señales de protocolo<br />

– Los puertos A y B pueden estar configurados en<br />

diferente modo y/o dirección<br />

• 16 combinaciones de modo (E ó S para A, B, C H, C L)<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

41 de 55


Expansión de Entrada/Salida digital<br />

<strong>Modo</strong>s de funcionamiento del<br />

PPI8255: <strong>Modo</strong> 1<br />

• <strong>Modo</strong> 1: E o S con protocolo ( strobed I/O )<br />

– Líneas libres del puerto C<br />

• En función del modo del puerto A, del CH los bits C7 y C6 si es<br />

modo entrada (ó C5 y C4 si es modo salida)<br />

– También C3 si se usa el protocolo sin interrupciones<br />

• Del CLel bit C0 si se usa el protocolo sin interrupciones en el<br />

puerto B<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

42 de 55


Expansión de Entrada/Salida digital<br />

<strong>Modo</strong>s de funcionamiento del<br />

PPI8255: <strong>Modo</strong> 1 (Entrada)<br />

• <strong>Modo</strong> 1 (entrada): Líneas de protocolo<br />

–/STB (Strobe): Del periférico al 8255<br />

• Orden para registrar el dato presente en el puerto<br />

–IBF (Input Buffer Full): Del 8255 al periférico<br />

• Respuesta a /STB. El periférico debe esperar hasta que se<br />

desactive<br />

• Se desactiva cuando el μC lee el dato recién registrado<br />

– INTR (Interrupt Request): Del 8255 al μC<br />

• Aviso de que hay un dato que recoger<br />

• Sólo se genera si el bit de habilitación INTEx = 1 (si no, el μC<br />

deberá hacer lecturas para consultar el estado y determinar el<br />

valor de IBF)<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

43 de 55


Expansión de Entrada/Salida digital<br />

<strong>Modo</strong>s de funcionamiento del<br />

PPI8255: <strong>Modo</strong> 1 (Entrada)<br />

• <strong>Modo</strong> 1 (entrada)<br />

– /STB, IBF e INTR son las líneas de protocolo<br />

Bit<br />

PC2<br />

Habilitación de interrupciones (a nivel alto) hacia el uC. Bit PC4<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

Del periférico<br />

Al periférico<br />

Al μC<br />

(opcional)<br />

44 de 55


Expansión de Entrada/Salida digital<br />

<strong>Modo</strong>s de funcionamiento del<br />

PPI8255: <strong>Modo</strong> 1 (Entrada)<br />

• <strong>Modo</strong> 1 (entrada): Cronograma del protocolo<br />

/STB<br />

IBF<br />

INTR<br />

RD<br />

t0 t1 t2<br />

Puerto<br />

Nuevo dato<br />

tk tk+1<br />

t0. El periférico pone un nuevo dato en el puerto y activa /STB para indicar al 8255 que debe<br />

registrarlo (puede hacerlo porque IBF=0). El 8255 captura el dato en el registro interno y activa IBF<br />

para frenar al periférico<br />

t1. El periférico acepta la orden de esperar antes de enviar más datos y lo indica desactivando /STB<br />

t2. El 8255 activa la petición del interrupción para que el uC lea el nuevo dato<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

45 de 55


Expansión de Entrada/Salida digital<br />

<strong>Modo</strong>s de funcionamiento del<br />

PPI8255: <strong>Modo</strong> 1 (Entrada)<br />

• <strong>Modo</strong> 1 (entrada): Cronograma del protocolo<br />

/STB<br />

IBF<br />

INTR<br />

RD<br />

t0 t1 t2<br />

Puerto<br />

Nuevo dato<br />

tk tk+1<br />

tk. Al comienzo del ciclo de lectura del uC, el 8255 desactiva la petición del interrupción<br />

tk+1. Al finalizar del ciclo de lectura del uC (cuando el dato ya ha sido leído por el uC) el 8255<br />

desactiva IBF dando así permiso al periférico para enviar un nuevo dato.<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

46 de 55


Expansión de Entrada/Salida digital<br />

<strong>Modo</strong>s de funcionamiento del<br />

PPI8255: <strong>Modo</strong> 1 (Salida)<br />

• <strong>Modo</strong> 1 (salida): Líneas de protocolo<br />

– /OBF (Output Buffer Full): Del 8255 al periférico<br />

• Orden de registrar el dato presente en el puerto, se activa<br />

cuando el uC escribe un nuevo dato<br />

–/ACK (Acknowledge): Del periférico al 8255<br />

• Respuesta a /OBF. El periférico indica que está procesando el<br />

nuevo dato, y que el 8255 debe esperar antes de poder enviar<br />

otro dato<br />

– INTR (Interrupt Request): Del 8255 al μC<br />

• Aviso de que el periférico ha procesado el último dato enviado<br />

y por tanto se le puede enviar otro<br />

• Sólo se genera si el bit de habilitación INTEx = 1<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

47 de 55


Expansión de Entrada/Salida digital<br />

<strong>Modo</strong>s de funcionamiento del<br />

PPI8255: <strong>Modo</strong> 1 (Salida)<br />

• <strong>Modo</strong> 1 (salida)<br />

Bit<br />

PC6<br />

– /OBF, /ACK e INTR son las líneas de protocolo<br />

Bit<br />

PC2<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

Al periférico<br />

Del periférico<br />

Al μC<br />

(opcional)<br />

48 de 55


Expansión de Entrada/Salida digital<br />

<strong>Modo</strong>s de funcionamiento del<br />

PPI8255: <strong>Modo</strong> 1 (Salida)<br />

• <strong>Modo</strong> 1 (salida): Cronograma del protocolo<br />

/WR<br />

/OBF<br />

INTR<br />

/ACK<br />

Nuevo dato<br />

Puerto<br />

t0 t1 t2 t3<br />

t0. El uC escribe un nuevo dato. El 8255 lo almacena y saca por las líneas del puerto, activando /OBF<br />

para indicar al periférico que debe recogerlo. Simultáneamente desactiva la petición de interrupción<br />

t1. El periférico acepta el dato y activa /ACK para frenar el envío de nuevos datos<br />

t2. El 8255 reconoce que el periférico ha recogido el dato y acepta la orden de esperar antes de<br />

continuar enviando nuevos datos desactivando /OBF<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

49 de 55


Expansión de Entrada/Salida digital<br />

<strong>Modo</strong>s de funcionamiento del<br />

PPI8255: <strong>Modo</strong> 1 (Salida)<br />

• <strong>Modo</strong> 1 (salida): Cronograma del protocolo<br />

/WR<br />

/OBF<br />

INTR<br />

/ACK<br />

Puerto<br />

t0<br />

Nuevo dato<br />

t1 t2 t3<br />

t3. Al finalizar el proceso con el nuevo dato el periférico desactiva /ACK, lo que permite que el 8255<br />

envíe nuevos datos. Para continuar enviando, el 8255 activa la petición de interrupción al uC.<br />

Volvemos a la situación previa a t0.<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

50 de 55


Expansión de Entrada/Salida digital<br />

El puerto C del PPI8255 en los modos<br />

con protocolo<br />

• Uso reservado de los pines del puerto C<br />

<strong>Modo</strong> 1 (E)<br />

<strong>Modo</strong> 1 (S) /OBF A /ACK A<br />

PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0 IBFA /STBA INTRA /STBB IBFB • Uso reservado del registro del puerto C<br />

<strong>Modo</strong> 1 (E)<br />

<strong>Modo</strong> 1 (S) /OBFA INTEA Puerto A configurado<br />

en modo 1<br />

INTR A<br />

IBF A INTE A INTR A<br />

INTR A<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

/OBF B /ACK B<br />

INTE B<br />

IBF B<br />

INTE B /ACK B<br />

INTR B<br />

INTR B<br />

PC 7 PC 6 PC 5 PC 4 PC 3 PC 2 PC 1 PC 0<br />

Puerto B configurado<br />

en modo 1<br />

INTRB INTRB 51 de 55


Expansión de Entrada/Salida digital<br />

PPI8255 - ANEXO:<br />

<strong>Modo</strong> 2 (bidireccional)<br />

• <strong>Modo</strong> 2: E/S bidireccional con protocolo<br />

– Sólo aplicable al puerto A<br />

– El protocolo utilizado es la combinación de los<br />

protocolos de entrada y salida del modo 1<br />

• Si concurren en el tiempo una transferencia de salida y otra de<br />

entrada, el protocolo decide cual se hace primero (la<br />

comunicación es half-duplex)<br />

– Líneas libres del puerto C<br />

• CH = ninguna<br />

• CL = depende del modo del puerto B<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

52 de 55


Expansión de Entrada/Salida digital<br />

PPI8255 - ANEXO:<br />

<strong>Modo</strong> 2 (bidireccional)<br />

• <strong>Modo</strong> 2 (bidireccional)<br />

– /OBF, /ACK, INTR:<br />

Protocolo para la salida<br />

– /STB, IBF, INTR: Protocolo<br />

para la entrada<br />

Bit PC6 (Hab. INTR salida)<br />

Bit PC4 (Hab. INTR entrada)<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

53 de 55


Expansión de Entrada/Salida digital<br />

PPI8255 - ANEXO:<br />

<strong>Modo</strong> 2 (bidireccional)<br />

• <strong>Modo</strong> 2: E/S bidireccional con protocolo<br />

– Garantía de que no ocurren colisiones en el puerto A<br />

(datos fluyendo 8255 ⇒ periférico y periférico ⇒ 8255<br />

simultáneamente)<br />

• El 8255 y el periférico mantienen el puerto A en alta impedancia<br />

el mayor tiempo posible<br />

• Cuando el periférico está dispuesto a procesar un dato del μC<br />

(indicado con /ACK = 0). Sólo entonces el dato del 8255 sale por<br />

el puerto A<br />

• Si el periférico activa /STB está indicando que el 8255 debe<br />

capturar un dato para el μC. Entonces el valor del puerto A es<br />

capturado. Una vez capturado el puerto A vuelve a alta<br />

impedancia<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

54 de 55


Expansión de Entrada/Salida digital<br />

PPI8255 - ANEXO:<br />

<strong>Modo</strong> 2 (bidireccional)<br />

• <strong>Modo</strong> 2 (bidireccional): Cronograma<br />

Dato periférico Dato μC<br />

Contenidos sujetos a una Licencia Creative Commons 2.5:<br />

Reconocimiento – No comercial – Sin Obra Derivada<br />

Permiso<br />

periférico<br />

para sacar<br />

dato por el<br />

puerto<br />

55 de 55

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!