Pregunta 1

Anuncio
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
Descargar