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