En todos las preguntas suponer un PIC16F876 (28pines

Anuncio
En todos las preguntas suponer un PIC16F876 (28pines), con reloj implementado con un cristal
de 4MHz, y con todos los SFRs en el valor por defecto tras un POR, excepto si se impone otra
condición en el enunciado de la pregunta concreta
1. El siguiente código introduce un retardo. Calcular el tiempo (mínimo) de retardo entre los
puntos (1) y (2)
L1
a)
b)
c)
d)
bsf STATUS,RP0
clrf OPTION_REG
bsf OPTION_REG,PS2
bcf STATUS,RP0
movlw 0x40
movwf TMR0
;(1)Inicio retardo
bcf INTCON,T0IF
btfss INTCON,T0IF
goto L1
nop
;(2)Final retardo
192µs
2’05ms
6’14ms
Ninguno de los anteriores
2. Qué sentencias debe haber en (1) para que el código realice una suma en 16bits {AH,AL}=
{AH,AL}+{BH,BL}
AH es un GPR que almacena la parte alta (H) del número de 16 bits {AH,AL}
AL es un GPR que almacena la parte baja (L) del número de 16 bits {AH,AL}
BH es un GPR que almacena la parte alta (H) del número de 16 bits {BH,BL}
BL es un GPR que almacena la parte baja (L) del número de 16 bits {BH,BL}
movf BL,W
addwf AL,F
...
movf BH,W
addwf AH,F
a)
b)
c)
d)
;(1) Sentencias para suma de 16bits
btfsc STATUS,C y incf AH,F
btfss STATUS,C y incf AH,F
btfss STATUS,C y decf AH,F
Ninguna de las anteriores
5. El siguiente código apuntado por la etiqueta INTRR es una rutina de servicio de
interrupción de TMR0. Esta rutina de servicio consta de los pasos:
• Guarda W y STATUS en dos GPR (W2, STATUS2) situados en common-RAM
• Configura el PORTC<1> como salida,
• Provoca un flanco 0->1->0 en PORTC<1>, y límpia el flag de interrupción
• Configura PORTC<1> como entrada.
• Recupera STATUS y W de los dos GPR (W2, STATUS2) situados en common-RAM
El programa principal puede funcionar incorrectamente al finalizar esta rutina cuando…
INTRR movwf W2
movf STATUS,W
movwf STATUS2
bsf STATUS,RP0
bcf TRISC,1
bcf STATUS,RP0
bsf PORTC,1
bcf PORTC,1
bcf INTCON,T0IF
bsf STATUS,RP0
bsf TRISC,1
movf STATUS2,W
movwf STATUS
movf W2,W
retfie
a)
b)
c)
d)
a)
b)
c)
d)
0x008A
0x188A
0x1F8A
Ninguna de las anteriores
4. Se tiene en una dirección de la memoria de programa de un PIC16F877 el código $1686.
¿A qué nemotécnico puede corresponder?
a)
b)
c)
d)
bsf PORTB,2
bcf 0x86,2
bsf TRISB,5
Ninguna de las anteriores
;Almacena STATUS en STATUS2
;Banco1
;PORTC<1> salida
;Banco0
;PORTC<1>=1
;PORTC<1>=0
;Borra flag de interrupción T0IF
;Banco1
;PORTC<1> entrada
;Recupera STATUS
;Recupera W
Cuando STATUS vale $00
Si el TMR0 ha desbordado
Cuando W es diferente de $00
Nunca puede dar problemas el programa principal por el hecho de ejecutar esta rutina de
servicio de interrupción
6. ¿Cúal es el tiempo de ejecución del siguiente código completo?
TMP
L1
3. ¿A qué dirección salta el código al ejecutarse?
movlw 0xFF
movwf PCLATH
goto 0x8A
;Almacena W en W2
a)
b)
c)
d)
equ 0x40
org 0x10
movlw 0xF0
movwf TMP
nop
nop
incfsz TMP,F
goto L1
nop
82µs
84µs
87µs
Ninguno de los anteriores
;Asigna TMP al GPR 0x40
;Programa situado en 0x10
;Bucle de espera
;Comienza nueva iteración del bucle
7. ¿Qué rango de registros borra el siguiente código?
L1
FIN
a)
b)
c)
d)
10. Se tiene una placa con un PIC que ejecuta el siguiente código, que detecta si hay algún
problema en el pin 3 del puerto C (PORTC<3>). ¿Cómo se puede evitar el problema?
clrf STATUS
movlw 0x20
movwf FSR
btfsc FSR,6
goto FIN
clrf INDF
incf FSR,F
goto L1
...
;continua resto
0x020 a 0x040 (incluidos ambos)
0x020 a 0x07F (incluidos ambos)
0x120 a 0x13F (incluidos ambos)
Ninguno de los anteriores
8. Se programa el µC para que genere de forma continua la onda periódica de la figura de
abajo, con el siguiente código. ¿Qué valores XX, YY, ZZ se pueden usar?
clrf PORTC
banksel TRISC
clrf TRISC
banksel PORTC
bsf PORTC,3
bsf PORTC,7
btfss PORTC,3
call PROBLEMA
...
a)
b)
c)
d)
;PORTC<7:0>=0
;PORTC<3>=1
;PORTC<7>=1
;Si PORTC<3>=0
;
PROBLEMA en PORTC<3>
;continua
No puede aparecer el problema
Substituyento bsf PORTC,3 , bsf PORTC,7 por movlw 0x88 , movwf PORTC
Aumentando la frecuencia de reloj
Ninguna de las anteriores
A
250ns
100µs
clrf T2CON
bsf STATUS,RP0
bcf TRISC,2
movlw XX
movwf PR2
bcf STATUS,RP0
movlw YY
movwf CCPR1L
movlw ZZ
movwf CCP1CON
bsf T2CON,TMR2ON
a) XX=D’99’ YY=0x00
ZZ=0x1F
b) XX=D’99’ YY=0x01
ZZ=0x0F
c) XX=D’100’ YY=0x00 ZZ=0x3F
d) No es posible con un reloj de 4MHz, habría que substituirlo por uno de 16MHz
9. ¿Cuál es el valor del registro 0x40 al ejecutarse el siguiente código?
movlw 3
call TABLA
movwf 0x40
...
TABLA addwf
retlw
retlw
retlw
retlw
a)
b)
c)
d)
;continua resto programa
PCL,F
0x05
0xA4
0xBF
0x3B
0x05
0xA4
0xBF
Ninguno de los anteriores
1
2
3
4
5
6
7
8
9
10
B
C
D
X
X
X
X
X
X
X
X
Nombre:_______________________________________
X
X
DNI:________________
Descargar