Академический Документы
Профессиональный Документы
Культура Документы
Describir qué hace el siguiente código
MOVWF W_TEMP
SWAPF STATUS,W
MOVWF STATUS_TEMP
FUN …
END …
SWAPF STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,W
El código realiza un almacenamiento en RAM de los registros de estado y acumulador temporal
de la ALU. Para ello utiliza la instrucción SWAPF, que intercambia los nibbles (cuartetos) alto y
bajo del registro. El código tras ejecutar una función, trata de recuperar el estado anterior de
W y de STATUS.
2. ¿Identifica algún error en el código anterior? Suponga que todas las etiquetas están
correctamente declaradas.
En la cuestión anterior se comenta que tras la función se trata de recuperar los valores de W y
de STATUS. Esto se comenta porque, aunque el valor de STATUS es recuperado correctamente,
para recuperar el valor de W haría falta hacer otro intercambio de sus nibbles. Faltaría por
tanto la instrucción SWAPF W_TEMP,F previa a SWAPF W_TEMP,W o bien, cambiar ésta por
MOVF W_TEMP,W.
Por otro lado, se está utilizando como etiqueta una palabra reservada del ensamblador (END) y
además en una columna incorrecta.
3. ¿Qué es y para qué sirve el Watch‐dog Timer? ¿Cuál es el tiempo máximo temporizable?
Es un contador de 8 bits con oscilador independiente. Cuando desborda genera un RESET al
chip. Su período es de 18ms. Con el postscaler a su máximo valor, el período puede llegar a ser
de hasta 2.3s.
4. ¿Cómo salvas el contexto de ejecución cuando entras en una subrutina de interrupción?
Escribe las instrucciones.
Hay que guardar los registros STATUS y W en memoria y luego recuperarlos. Se puede hacer,
por ejemplo con las instrucciones
movwf old_w
swapf status,w
movwf old_status
...
swapf old_status,w
movwf status
swapf old_w,f
swapf old_w,w
retfie
5. ¿Qué diferencias fundamentales encuentras entre un microprocesador y un
microcontrolador?
El microcontrolador integra un microprocesardor junto con memorias y periféricos en el mismo
chip.
6. ¿En qué consiste el Power‐on Reset? ¿Para qué sirve?
Se ejecuta un RESET del chip cuando se detecta ua subida de la tensión de alimentación. Sirve
para asegurarse de que todos los componentes del chip se inicializan adecuadamente cuando
se da tensión.
7. Si se quisiese diseñar un reloj‐despertador que no pierda la hora, ni la configuración,
cuando se produce un fallo de alimentación ¿cómo podría hacerse usando un PIC 16F84?
Habría que utilizar el Timer0 para llevar la cuenta de la hora. Se puede configurar con el
prescaler al valor máximo y contar 15 desbordamientos (se mide 1.02 s). Cada vez que se
incremente la cuenta o se cambie la configuración se escribe en la memoria EEPROM. Cuando
se inicie el programa hay que leer la hora y la configuración de la EEPROM.