1 Puertos paralelo Entrada/salida. Puertos paralelo • 9 puertos

Anuncio
Puertos paralelo
Cesáreo Fernández Martínez
Álvaro Sánchez Miralles
Entrada/salida. Puertos paralelo
• 9 puertos, 111 líneas (144 pin)
• P0 y P1 (16 bits): Bus de datos y bus de direcciones
• P2 (16 bits): de propósito general
– Parte baja: Diodos led (y teclado en tarjeta de ampliación)
– Parte alta: Interruptores (tarjeta de ampliación)
• P3 (16 bits): Vía serie con PC (y display en tarjeta de
ampliación)
• (P4, 8 bits: parte alta del bus de direcciones)
• P5 (16 bits): Entradas A/D.
• (P6, 8 bits: de “chip select”).
• (P7, 8 bits: de “PWM”).
• (P8, 8 bits: de “Capture Compare”)
Título Presentación - 2
1
Puerto 2
• Dos registros de control de 16 bits: DP2 y P2 (SFRs)
• DP2 en 0xFFC2
– DP2 (bits DP2.0 a DP2.15): “Data Direction Register”. Ej:
• DP2.0 = 1 : Línea de salida
• DP2.0 = 0 : Línea de entrada
• P2 en 0xFFC0
– P2 (bits P2.0 a P2.15): “Data Register”. Ej;
• Si DP2.0 = 1, (P2 como registro de escritura)
– P2.0 = 1: La Salida P2.0 se pone a 5 V.
– P2.0 = 0: La Salida P2.0 se pone a 0 V.
• Si DP2.0 = 0, (P2 como registro de lectura)
– Si P2.0 = 1: La Entrada P2.0 está a 5 V.
– Si P2.0 = 0: La Entrada P2.0 está a 0 V.
Título Presentación - 3
Diodos e interruptores
• Tenemos diodos (leds) en parte baja P2 (P2.0 a P2.7) e
interruptores en la parte alta (P2.8 a P2.15).
+ 5V
+ 5V
P2.8
P2.0
• ¿Qué nivel valor tengo que poner en P2 y en DP2 para que
el diodo se encienda?
Título Presentación - 4
2
Ejemplo de manejo de P2 en C
• Lee entradas, efectúa cierta operación con las mismas,
pone el resultado en los diodos.
void main(void) {
int temp1,temp2;
DP2 = 0x00ff;
while (1) {
temp1 = P2;
temp2 = temp1; /* Mejor que "temp2 = P2 */
temp1 = temp1 & 0x0f00; /* AND bit a bit */
temp1 = temp1 >> 8;
/* SHR rotar 8 a la decha*/
temp2 = temp2 & 0xf000;
temp2 = temp2 >> 12;
P2=~(temp1 + temp2); /* CPL */
}
}
• ¿Qué operación se realiza con el dato introducido
mediante los interruptores?
Título Presentación - 5
Ejemplo de manejo de P2 en C
• Versión compacta
#include <reg167.h>
void main(void){
DP2 = 0x00ff;
while (1) {
P2 = ~(((P2 & 0x0f00) >> 8) +
((P2 & 0xf000) >> 12));
}
Título Presentación - 6
3
Descargar