ESCUELA TÉCNICA SUPERIOR DE INGENIEROS DE TELECOMUNICACIÓN Sistemas Electrónicos Digitales Convocatoria EXTRAORDINARIA. Julio 2005 DATOS PERSONALES Apellidos SOLUCIÓN Nombre Firma D.N.I. CALIFICACIONES Pregunta 1 1.5 Pregunta 5 2.5 Pregunta 2 1.5 Pregunta 6 Pregunta 3 2.5 Pregunta 4 1.0 Revisado 1.0 Calificación final Las Palmas de Gran Canaria a 16 de julio de 2005 Convocatoria Extraordinaria Sistemas Electrónicos Digitales Julio 2005 Pregunta 1 (1.5 Ptos.) 1. 0.3 El siguiente ejemplo provoca un overflow en el resultado: LDAA #$FF LDAB #$FF ABA 2. 0.3 El código equivalente a la instrucción JSR Address es: LDX #NEXT+2 PSHX NEXT JMP Address 3. 0.3 El CPE para el código que se muestra es: $0051 DATO EQU ‘3’+30 $0100 ORG $100 $0100 JMP INICIO $0103 ZONA RMB *-DATO $01B5 INICIO JSR CAL 4. 0.3 El código equivalente a la instrucción RTS es: PULX JMP $00,X 5. 0.3 El código equivalente a la instrucción DECD es: SUBD #1 Pregunta 2 (1.5 Ptos.) El código de la rutina es: Etiqueta Nemónico , Operando MOVEMSPP JMP INICIO DATB RMB 1 DATY RMB 2 MASK RMB 1 RET RMB 2 INICIO STAB DATB STY DATY TSY LDAB $02,Y STAAB MASK LDY $00,Y STY RET TSY LDAB #$03 ABY TYS LDAB DATB LDY DATY ASR MASK BCC CHKB PSHA CHKB ASR MASK BCC CHKX PSHB CHKX ASR MASK BCC CHKY PSHX CHKY ASR MASK BCC SALIR PSHY SALIR LDY RET PSHY LDY DATY RTS Comentario ; Guardamos A en DATA ; Guardamos Y en memoria ; Y apuntando al último elemento en la pila ; Recuperamos la máscara ; Y la almacenamos en memoria ; Recuperamos la dirección de retorno ; y la almacenamos en memoria ; Actualizamos el SP para apuntar al comienzo de ; la zona de datos. ; Desplazamos la máscara para comprobar A ; Si es cero seguimos con el siguiente registro ; Guardamos B en la pila ; Desplazamos la máscara para comprobar B ; Si es cero seguimos con el siguiente registro ; Guardamos B en la pila ; Desplazamos la máscara para comprobar X ; Si es cero seguimos con el siguiente registro ; Guardamos X en la pila ; Desplazamos la máscara para comprobar Y ; Si es cero seguimos con el siguiente registro ; Guardamos Y en la pila 1 Solución Convocatoria Extraordinaria Sistemas Electrónicos Digitales Julio 2005 Pregunta 3 (2.5 Ptos.) 1. 0.3 La solución adoptada consiste en controlar el pulsador P1 mediante interrupción IC2 y la entrada de pulsos mediante la señal IC1. El conexionado quedaría: VDD 10uF 1uF 0.001uF 1 PA0/IC3 5 PA1/IC2 6 PA2/IC1 7 PA3/OC5/IC4 8 PA4/OC4/OC1 5 PA5/OC3/OC1 6 PA6/OC2/OC1 7 PA7/PAI/OC1 8 PB7/A15 5 PB6/A14 6 PB5/A13 7 PB4/A12 8 PB3/A11 5 PB2/A10 6 PB1/A9 7 PB0/A8 8 VDD SYSTEM POWER 1 VSS 18 pF 1 18 pF 8 MHz 10 M 1 XTAL VDD RESET 10 M IN MC34064 1 RESET GND VDD MC68HC11 VDD ETAL STRA/AS 2 STRB/R/W 2 E 2 PC7/AD7 5 PC6/AD6 6 PC5/AD5 7 PC4/AD4 8 PC3/AD3 5 4.7 K 1 4.7 K XIRQ 2 IRQ PC2/AD2 6 4.7 K 3 MODA/LIR PC1/AD1 7 4.7 K 4 MODB/VSTBY PC0/AD0 8 PD0/RxD 5 PD1/TxD 6 PD2/MISO 7 PD3/MOSI 8 PD4/SCK 2 PD5/SS 2 PE0/AN0 5 PE1/AN1 6 PE2/AN2 7 PE3/AN3 8 PE4/AN4 5 PE5/AN5 6 PE6/AN6 7 PE7/AN7 8 VDD 10 M 1 VRH 1 uF 1 VRL d c b a 74LS47 Display 1 g f e d c b a Display 0 a 100 a 100 f 100 b f g 100 b g 100 e 100 c e c 100 d 2N2222 d 2N2222 Pulse VDD 4.7k P1 2. 2.2 El programa quedaría de la siguiente manera: Etiqueta Nemónico , Operando Comentario ORG $FFFE ; Vector de Reset FDB $F800 ORG $FFEC ; Vector de IC2 FDB RSIIC2 ORG $FFEA ; Vector de IC3 FDB RSIIC3 ORG $FFD6 ; Vector de SCI FDB RSISCI DISP PULSE D0 D1 TST0 TST1 FIRST FLAG ORG RMB RMB RMB RMB RMB RMB RMB RMB $0000 2 1 1 1 1 1 2 1 ORG LDS LDX CLR CLR CLR CLR $F800 #$100 #$1000 DISP DISP+1 TST0 TST1 ; Zona de datos en memoria RAM ; Bytes reservados para el los displays ; Ponemos a cero los bytes de los displays ; Indica se ha recibido el primer valor del pulso ; Indica se ha recibido el segundo valor del pulso 2 Solución Convocatoria Extraordinaria Sistemas Electrónicos Digitales CLR FLAG LDAA #$02 STAA DDRD,X CLR SCCR1,X LDAA #$30 STAA BAUD,X LDAA #$05 STAA TCTL2,X LDAA #$03 STAA TMSK1,X LOOP LDAA DISP ORAA #$10 STAA PTOB,X BSR DEL1MS LDAA DISP+1 ORAA #$20 STAA PTOB,X BSR DEL1MS BRA LOOP * Subrutina de retardo 1 milisegundo DEL1MS LDY #286 L1 DEY BNE L1 RTS * Rutina de Servicio para la interrupción SCI RSISCI LDAA SCSR,X LDAA SCDR,X CMPA #’+’ BEQ MAS CMPA #’-’ BEQ MENOS CMPA #$0D BEQ VALIDAR ANDA #$0F TST TST1 BNE ST0 STAA D1 COM TST1 BRA OUTRSISCI ST0 TST TST0 BNE OUTRSISCI STAA D0 COM TST0 BRA OUTRSISCI MAS LDAA PULSE CMPA #32 BEQ OUTRSISCIP ADDA #10 STAA PULSE BRA OUTRSISCIP MENOS LDAA PULSE CMPA #1 BEQ OUTRSISCIP SUBA #10 STAA PULSE BRA OUTRSISCIP VALIDAR CLR TST0 CLR TST1 LDAA D1 LDAB #10 Julio 2005 ; Indica primer flanco detectado ; Programamos Puerto SCI ; IC2 por flanco de subida, IC3 ambos flancos ; IC2 e IC3 por interrupciones ; Leemos registro de estado ; Leemos el dato 3 Solución Convocatoria Extraordinaria OUTRSISCIP OUTRSISCI MUL LDAA ABA STAA CLR RTI Sistemas Electrónicos Digitales Julio 2005 D0 PULSE SCCR2,X * Rutina de Servicio para la interrupción IC2 RSIIC2 LDAA #$24 STAA SCCR2,X CLR TST0 CLR TST1 BCLR TFLG1,X $FD RTI * Rutina de Servicio para la interrupción IC3 RSIIC3 TST FLAG BNE SEGUNDO LDD TIC3,X STD FIRST COM FLAG BRA OUTRSIIC3 SEGUNDO LDD TIC3,X SUBD FIRST PSHX LDX #2000 IDIV XGDX PULX CMPB PULSE BGE OUTRSIIC3 LDAA DISP+1 INCA CMPA #$0A BEQ CLRDISP0 STAA DISP+1 BRA OUTRSIIC3 CLRDISP0 CLR DISP+1 LDAA DISP INCA CMPA #$0A BEQ CLRDISP STAA DISP BRA OUTRSIIC3 CLRDISP CLR DISP OUTRSIIC3 BCLR TFLG1,X $FE RTI END ; Deshabilitamos SCI ; Recepción por interrupción y recepción habilitada ; Programamos SCCR2 ; Borramos flag de IC2 ; Verificamos si primer o segundo flaco ; Obtenemos en B el resultado de la división ; Borramos FLAG IC3F Pregunta 4 (1.0 Pto.) El código quedaría de la siguiente manera: CPE Nemónico , Operando Contenido ADDEX MACRO JMP INI\@ DATO\@ DS.L 1 INI\@ MOVE.L \1,DATO\@ MOVEM.L D0-D1,-(A7) MOVE \1,D0 MOVE \1,D1 SWAP D1 ADD D1,D0 4 Solución Convocatoria Extraordinaria SWAP MOVE MOVE.L MOVEM.L MOVE.L ENDM Sistemas Electrónicos Digitales Julio 2005 D0 DATO\@,D0 D0,DATO\@ (A7)+,D0-D1 DATO\@,\1 Pregunta 5 (2.5 Ptos.) El código es el siguiente: Etiqueta Nemónico , Operando Comentario PARPOS EQU 20 PARFOUND EQU 16 PARDATO1 EQU 12 PARDATO2 EQU 8 PARMSB1 EQU 6 PARMSB2 EQU 4 ORG $2000 JUMP INICIO *Definición de variables MSB1 DC.W 16 MSB2 DC.W 15 DATO1 DS.L 1 DATO2 DS.L 1 POS DS.B 1 FOUND DS.B 1 INICIO MOVE.L #$3000,A7 ; Stack Pointer PEA POS ; Pasamos POS por referencia PEA FOUND ; Pasamos FOUND por referencia MOVE.L DATO1 ; Pasamos DATO1 por valor MOVE.L DATO2 ; Pasamos DATO2 por valor MOVE MSB1,-(A7) ; Pasamos MSB1 por valor MOVE MSB2,-(A7) ; Pasamos MSB2 por valor JSR MATCHB ; Llamamos a la subrutina ADD.L #20,A7 …… MATCHB MOVEM.L D0-D3/A0-A2,-(A7) ; Guardamos el estado de la máquina MOVE.L PARDATO1(A7),D0 ; D0 con DAT01 MOVE.L PARDATO2(A7),D1 ; D1 con DAT02 MOVE.L PARPOS(A7),A0 ; A0 apuntando a POS MOVE.L PARFOUND(A7),A1 ; A1 apuntando a FOUND MOVE.W PARMSB1(A7),D2 ; D2 contiene MSB1 MOVE.W PARMSB2(A7),D3 ; D3 contiene MSB2 CLR.B (A1) ; Borramos FOUND SUBQ,L D2 ; Decrementamos el valor del MSB1 SUBQ,L D3 ; Decrementamos el valor del MSB2 BTST.L D2,D0 ; Test del bit indicado por MSB1 BEQ CMPZ ; Si es cero comparamos con Z CMPNZ BTST D3,D1 ; Comprobamos el bit indicado por MSB2 BNE FOUNDB ; Si no es cero se ha encontrado acierto BRA LOOPD ; En caso de no acierto seguimos CMPZ BTST D3,D1 ; Comprobamos el bit indicado por MSB2 BEQ FOUNDB ; Si es cero se ha encontrado acierto LOOPD DBF D2,LOOP ; Seguimos en el bucle por MSB1 DBF D3,LOOP ; Seguimos en el bucle por MSB2 BRA NFOUNDB ; En caso de no coincidencia salimos FOUNDB MOVE.B D2,(A0) ; Ponemos en POS la posición MOVE.B #$FF,(A1) ; Ponemos FOUND a $FF NFOUNDB MOVEM.L (A7)+, D0-D3/A0-A2; Recuperamos el estado de la máquina RTS END 5 Solución Convocatoria Extraordinaria Sistemas Electrónicos Digitales Julio 2005 Pregunta 6 (1.0 Pto.) 1. 0.4 El código equivalente de la instrucción BTST #<d8>,<dea>, suponiendo el bit a verificar en el registro D0 y el dato en registro de datos D2: MOVE.L #$01,D1 LSL.L D0,D1 AND.L D2,D1 2. 0.3 Que en A4 se carga el valor $1234. 3. 0.3 En el segundo caso se toma como dirección de comienzo del módulo objeto la dirección $0 y se anota la dirección de la etiqueta DATO, dirección relativa, para calcularla posteriormente. En el primer caso, la dirección de DATO que se ensambla en la instrucción es fija. 6 Solución