Вы находитесь на странице: 1из 2

1.

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. 

Вам также может понравиться