Documentos de Académico
Documentos de Profesional
Documentos de Cultura
APELLIDOS Y NOMBRE_____________________________________________________________
CUESTIÓN 1 (1 Punto)
Un compilador de lenguaje C para el PIC 18f2525 , asigna dos registros con direcciones
consecutivas (16 bits), para las variables de tipo int, el registro de menor dirección para la parte baja
del valor y el siguiente para almacenar la parte alta.
La variable DATO ha sido declarada de tipo int y las posiciones asignadas son la 0x600 y siguiente.
La variable DATO1 ha sido declarada de tipo int y las posiciones asignadas son la 0x602 y siguiente.
http://dte.uc3m.es
#INCLUDE <P18F2525.INC>
CONFIG OSC=HS
CONFIG WDT = OFF
ORG 0x00
BRA INICIO
ORG 0X100
INICIO: LFSR FSR0, 0X200
LFSR FSR1, 0X300
MOVLW NUM
MOVWF CONT
BUCLE: DECFSZ CONT
BRA SEGUIR
BRA FIN
SEGUIR: MOVF INDF0,0,0
RRCF WREG
BTFSC STATUS,C
BRA SALTO
MOVF INDF0,0,0
MOVWF INDF1
INCF FSR1L
SALTO: INCF FSR0L
BRA BUCLE
FIN:
END
Los valores que hay en las posiciones de memoria antes de ejecutar el programa son :
APELLIDOS Y NOMBRE_____________________________________________________________
Se pide:
a) Valor de los registros utilizados al llegar a la posición bucle. (0,5 Puntos)
FSR0 - 0x200
FSR1 - 0x300
WREG – 0x0A
CONT (0X00) – 0x0A
b) Valor de los siguientes registros al llegar por primera vez a la instrucción: BRA BUCLE
(0,6 Puntos)
WREG CONT FSR0 FSR1 0x200 0x300
0x10 0x09 0x201 0x301 0X10 0X10
(1,4 Puntos)
http://dte.uc3m.es
Para ello se coloca en una rueda, un sensor, que genera un flanco de subida cada vez que la rueda da
una vuelta.
El TIMER0 genera una interrupción cada milisegundo, La rutina de atención incrementa una
variable global denominada CONTADOR (tipo unsigned char), esta variable se utiliza para
medir el tiempo que tarda la rueda en dar una vuelta. Si el contador llega a su valor máximo
mantendrá este valor, (NO es cíclico).
El sensor de la rueda, está conectado a la INT0, genera una interrupción cada flanco de
subida.
El bit 1 del puerto A, se activará cuando la velocidad sea mayor de 150 Km/hora
Se pide:
1.- Código de configuración de los puertos utilizados. (Configurar como entrada los bits no utilizados)
(0,5 Puntos).
LATA=0;
LATB=0;
LATC=0;
APELLIDOS Y NOMBRE_____________________________________________________________
2.- Valor de la carga del Timer0 y del pre-escalado para que genere una interrupción cada
milisegundo. (Programado en MODO 8 bits, Reloj interno de 8 MHz) . (0,5 Puntos).
1ms/(k·0.5μs)<28
3.- Código de configuración del TIMER0 y de las interrupciones: INT0 y TMRO, para las
especificaciones deseadas.
INTCONbits.TMR0IF=0;
TMR0L=0x06;
if(CONTADOR<255)
CONTADOR++;
http://dte.uc3m.es
INTCONbits.INT0IF=0;
TIEMPO=CONTADOR;
PORTC=CONTADOR;
CONTADOR=0;
Realizar un bucle que en función del valor de la variable TIEMPO, active los bits 0 y 1 del puerto A,
según las especificaciones. (2 Puntos).
while(1)
if(TIEMPO>225)
{PORTAbits.RA0=1;}
else
{PORTAbits.RA0=0;}
if(TIEMPO<30)
{PORTAbits.RA1=1;}
else
{PORTAbits.RA1=0;}
}
ELECTRÓNICA DIGITAL
Grados en Ingeniería Electrónica Industrial y Automática
Examen PARCIAL. Curso 2018-2019
5 diciembre de 2018
APELLIDOS Y NOMBRE_____________________________________________________________
¿Indique una posible forma de resolver el problema? (No hace falta escribir el nuevo código)
(1 Punto).
Una posible solución sería añadir una variable con valor inicial cero que se ponga a uno cuando se
produzca desbordamiento.
El programa principal la consulta para determinar si la velocidad ha sido menor que 20Km/h y la
pone a cero.
http://dte.uc3m.es