Escuela Técnica Superior de Ingenieros Industriales I d i l I d Calculadoras Sexto Curso E.T.S.I.I. Convocatoria ORDINARIA. Abril 2003 Datos Personales SOLUCIÓN DEL EXAMEN Nombre: Primer Apellido: Segundo Apellido: DNI y firma: Calificación Pregunta Puntuación Pregunta Puntuación Nº. 1 1.5 Nº. 6 Nº. 2 1.5 Nº. 7 Nº. 3 2.0 Nº. 8 Nº. 4 Nº. 9 Nº. 5 Nº. 10 Revisado SI Calificación Final: 5.0 Las Palmas de Gran Canaria a 7 de Abril de 2003 i l Convocatoria Ordinaria Calculadoras. Abril 2003 Pregunta 1. (1.5 Ptos.) 1. 2. 3. 4. 5. 6. 7. Responder brevemente a las siguientes cuestiones: En cualquiera de los casos se termina de ejecutar la instrucción en curso y posteriormente se atiende la interrupción. El recurso que maneja el programa de arranque en Modo Bootstrap es el puerto serie asíncrono para poder comunicarse con el PC. Lo maneja mediante interrupciones ya que aún cuando estamos ejecutando nuestro programa puede responder a los diferentes comandos que le enviamos a través del puerto serie. El Pulse Accumulator se desborda cada 256 pulsos y la frecuencia mínima de un pulso generado con el Output Compare es la correspondiente a 65536 ciclos de E, lo que da un semiperiodo de 32,768ms. Luego el tiempo máximo de desbordamiento sería de 256 * 32,768 * 2 = 16,8 segundos. No entró en el examen. Los dos valores son posibles debido a que cada uno de ellos tiene significado durante un tiempo determinado. Así, MODA sólo tiene significado durante el RESET y LIR el resto del tiempo. No tiene sentido, ya que el flag STAF corresponde al flanco recibido por la señal STRA, que no interviene para nada en este protocolo. La instrucción ADDM $0012,X ocupa tres bytes, uno para el código de operación y dos para el Offset. Se ejecuta en 7 ciclos que serían: - Ciclo de Fetch - Ciclo de Lectura del Offset (parte alta) - Ciclo de Lectura del Offset (parte baja) - Ciclo de Cálculo de la dirección efectiva - Ciclo de lectura del primer dato - Ciclo de lectura del segundo dato y de suma - Ciclo de almacenamiento del resultado Pregunta 2. (1.5 Ptos.) El código de la rutina sería: Etiqueta Nemónico HNDSHK BRCLR STAA BCLR BRSET BSET RTS , Operando PTOA,X $01 * PTOB,X PTOA,X $10 PTOA,X $01 * PTOA,X $10 Comentario ; Esperamos poder enviar dato (ACK = 1) ; Sacamos dato por puerto B ; Sacamos STROBE a nivel bajo ; Esperamos mientras no responda la impresora (ACK = 1). ; Desactivamos STROBE y salimos 1 Solución Convocatoria Ordinaria Calculadoras. Abril 2003 Pregunta 3. (2.5 Ptos.) 1. El conexionado del sistema es el que se muestra a continuación: 2. Programa en ensamblador: Para implementar el programa se ha utilizado el IC3 para detectar los envases. Con esto hacemos: 1) Incrementamos contador de envases; 2) Activamos la interrupción en tiempo real para poder calcular el retardo de 2,5 segundos que necesitamos para activar el actuador POT. El programa principal se dedicará a realizar el refresco de los displays. Para obtener el retardo de 2,5 segundos usamos la interrupción en tiempo real cada 32,768 ms, lo que nos da un número total de interrupciones de 76. 2 Solución Convocatoria Ordinaria Etiqueta CONT D0 D1 LOOP Calculadoras. Nemónico ORG FDB , Operando $FFFE $F000 Comentario ; Vector de RESET del sistema. ORG FDB $FFEA #RSIIC3 ; Vector de interrupción de IC3 ORG FDB $FFF0 #RSIRTI ; Vector de interrupción de la RTI ORG RMB RMB RMB $0000 1 1 1 ORG LDS LDX LDAA STAA CLR LDAA STAA STAA STAA $F000 #$007F #$1000 #$FF DDRC,X PTOC,X #$02 TCTL2,X TFLG1,X TMSK1,X ; Programamos PTOC de salida ; y borramos PTOC. LDAA STAA CLR CLR CLR LDAA ORA STAA STAA BSR LDAA ORA STAA BSR BRA #$03 PACTL,X CONT D0 D1 D0 #$10 PTOB TMSK1,X DEL1MS D1 #$20 PTOB DEL1MS LOOP ; Programación de la RTI cada 32,768 ms ; Borramos contador de RTI ; Borramos Display 0 ; Borramos Display 1 ; Cargamos display 0 ; y activamos el display 0 ; Sacamos por display 0 ; Habilitamos interrupción por IC3 ; Retardo de 1 milisegundo ; Cargamos display 1 ; y activamos el display 1 ; Sacamos por display 1 ; Retardo de 1 milisegundo * Rutina de interrupción para IC3 RTIIC3 BSET TMSK2,X $40 LDAA D0 INCA CMPA #$0A BEQ CLRD0 STAA D0 BRA ERTIIC3 CLRD0 CLR D0 LDAA D1 INCA CMPA #$0A BEQ CLRD1 STAA D1 BRA ERTIIC3 CLRD1 CLR D1 ERTIIC3 BCLR TFLG1,X $FE RTI Abril 2003 ; Contador de RTI contados ; Display 0 ; Display 1 ; Almacenamiento del programa al comienzo de la EPROM. ; Programamos IC3 por flanco de bajada ; Borramos flag de IC3 ; Habilitamos interrupción IC3 ; Activamos la interrupción RTI ; Cojemos D0 ; y lo incrementamos. ; Comparamos a ver si ya ha llegado a “A” ; Si ha llegado, salimos y seguimos con D1. ; En caso contrario lo almacenamos y ; salimos de la rutina. ; Borramos D0 y hacemos el mismo proceso con ; D1. ; Borramos el flag y salimos. 3 Solución Convocatoria Ordinaria Calculadoras. * Rutina de servicio de la interrupción RTI RSIRTI LDAA CONT INCA CMPA #72 BEQ POT STAA CONT BRA ERSIRTI POT BSET PORTC,X $01 BSR DEL100US BCLR PORTC,X $01 BCLR TMSK2,X $40 CLR CONT BCLR TFLG2,X $BF RTI * Rutina de retardo de 1ms DEL1MS LDY L1 DEY BNE RTS * Rutina de retardo de 100us DEL100US LDY L2 DEY BNE RTS END Abril 2003 ; Cargamos el contador de 32,768 ms. ; Incrementamos el contador ; y lo comparamos con 72. ; Si ha llegado a 72, actuamos sobre POT. ; En caso contrario lo depositamos en CONT ; y salimos. ; Ponemos POT a nivel alto ; durante 100 microsegundos. ; Y lo volvemos a poner a 0. ; deshabilitamos la RTI. ; Borramos el contador para la siguiente vez. ; Borramos el flag y salimos. #286 L1 #286 L2 4 Solución