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:________________