Entradas/salidas digitales 1. Objetivos Familiarizarse en el manejo de puertos paralelo del 80C167. Crear un primer programa de manejo de puertos en lenguaje ensamblador y depurarlo utilizando la herramienta µVision3 en modo “Tarjeta” y modo “Simulador”. 2. Puertos de entrada/salida Para lectura y escritura en el puerto usar el comando Enter de µVision3 en modo “Tarjeta”. Los pasos a realizar son: Indicar qué lı́neas del puerto hacen de entrada y qué otras lı́neas hacen de salida. P.e. el comando e int 0xffc2 = 0x00ff configura las 8 lı́neas bajas del Puerto 2 del c167 como salidas (DP2 a 1’s), y las 8 altas como entradas (DP2 a 0’s). Una vez configurado el puerto se pueden realizar operaciones operaciones de escritura sobre las salidas (para cambiar el estado de los diodos)1 . . P.e. con el comando de escritura: e int 0xffc0 = 0x00f0 enciende los cuatro diodos más bajos de la tarjeta. (Recuerde: la dirección de P2 en el mapa de memoria del micro es 0xffc0). Realizar las siguientes operaciones: Hacer que se apaguen todos los diodos conectados a P2 menos el conectado a la lı́nea menos significativa. Lo mismo con la más significativa. P1- ¿Qué valores hay que poner en P2 en cada caso? 3. Programa Cargar el siguiente programa a partir de la posición 0x300 de memoria. Ejecutar dicho programa en la tarjeta. mov r0,#0x00ff mov 0xffc2,r0 mov r0,0xffc0 shr r0,#8 mov 0xffc0,r0 jmpr cc uc,0x308 P2- Indicar con palabras sencillas qué hace el programa: 4. Sumador en ensamblador de lı́nea P3- Realizar un programa en lenguaje ensamblador que lea los ocho bits altos del puerto P2, separe el dato de ocho bits en dos datos de cuatro bits cada uno, sume ambos datos, y muestre el resultado en la parte baja de P2. Los pasos a realizar: Programar los 8 bits bajos del puerto P2 como salidas y los 8 altos como entradas (salidas a diodos y entradas a interruptores). 1 Las operaciones de lectura no deben intentarse con esta herramienta pues la lectura no refleja el estado de los interruptores, refleja la imagen que la herramienta tiene en memoria a cerca del estado del puerto. Esta imagen sólo se actualiza cada vez que se ejecuta una instrucción en el micro; no se actualiza con los comandos de lectura/escritura de memoria 1 Separar el dato de 8 bits en dos partes de 4 bits cada una. Realizar la suma de los dos datos y mostrar el resultado en la parte baja de P2. El siguiente programa, escrito en lenguaje C, proporciona un mayor detalle de las operaciones a realizar en lenguaje ensamblador. /* Ejemplo para la prueba de la herramienta muvision3: - Suma de dos datos introducidos por el puerto P2 Departamento de Electrónica y Automática DEA-ICAI Prof. Cesáreo Fernández Martı́nez */ #include <reg167.h> void main(void) { int temp1,temp2; DP2 = 0x00ff; while (1) { temp1 = P2; temp2 = temp1; /* Mejor que "temp2 = P2 */ temp1 = temp1 & 0x0f00; temp1 = temp1 >> 8; temp2 = temp2 & 0xf000; temp2 = temp2 >> 12; P2=~(temp1 + temp2); } } 5. Manejo de puertos en el Simulador Figura 1: Simulación del puerto P2 Los programas que utilizan puertos también pueden ser desarrollados en modo “Simulador”. El simulador tiene soporte de todos los periféricos del microprocesador. Por ejemplo, para el caso del puerto P2 podemos pinchar en Peripherals ->I/O Ports ->Port2 y nos aparecerá una ventana como la recogida en la figura 1. Al ejecutar el programa aparecerá DP2 tal como lo haya configurado dicho programa. Para introducir datos por el puerto pinchar en Pins, en la parte alta de P2. En la parte baja de P2 aparecen los resultados. 2