pic Jul. 2016 | Page 66

Cuando se produce una interrupción el procesador ejecuta una Rutina de Servicio de Interrupción (RSI), y, al terminar, el programa principal continúa donde fue interrumpido. La dirección en la que se debe situar la rutina de interrupción es la 0x04, y es recomendable, para terminarla, usar la instrucción RETFIE, en lugar de RETURN, puesto que, al activarse una interrupción, el mecanismo de las mismas se deshabilita como medida de seguridad. RETFIE sirve para rehabilitarlas. Como las rutinas pueden modificar el contenido de los registros del procesador, al iniciarlas conviene guardar en la pila el valor de los mismos y restaurarlos antes del RETURN. Antes de regresar la RSI debe determinar la causa de la interrupción, borrar la bandera apropiada antes de salir y, por supuesto, dar servicio a la interrupción. A primera vista, salvar y restaurar los registros sin modificar sus contenidos no es una tarea fácil. El contenido del registro W debe guardarse primero, junto con todos los registros que han pasado por W para el almacenamiento temporal de sus posiciones. El hecho de mover W a otro registro corrompe la bandera Z, modificando el registro de Estado. Microchip recomienda una secuencia de código que permite salvar y restaurar los registros sin modificarlos. La mostramos en la siguiente secuencia de código: ; ************************** SALVAR ************************* MOVWF Almacen1_W SWAPF estado,w MOVWF Almacen2_S ... ... ... ; Guardamos contenido de W en su sitio ; Swap del contenido de estado en W ; Guarda el contenido de ESTADO ;********************** FIN RUTINA RSI *********************** SWAPF Almacen2_S,w ; Deja estado como estaba MOVWF estado ; Y lo restaura SWAPF Almacen1_W,f SWAPF Almacen1_W,w RETFIE La instrucción SWAPF mueve los datos sin afectar a la bandera Z del registro de ESTADO. Aunque los conjuntos de 4 bits se invierten en el proceso, posteriormente son restaurados en su situación inicial. Si se empleara la instrucción MOVF se corrompería el bit Z. 64