Foros de Electrónica

Comunidad de discusión sobre Automatización, Electrónica industrial, Microcontroladores y electrónica digital, Robótica, Domótica, Telemática, Tecnologías móviles, y muchos temas más.




Modo de usar las interrupciones en el 16f84 en ensamblador


       



#11  
pepechip
Colaborador
Ubicación: Granada- España
Registrado: 09 Feb 2007
Mensajes: 1622
citar
En asembler para salir de las rutina de interrupcion se realiza mediante la instruccion RETFIE, la cual actua de forma similar al return, pero ademas te pone a 1 el bit GIE para volver a activar las interrupciones.

Simplemente tienes que volver a activar las interrupciones mediante bsf GIE. y el programa continuara sin pegar el salto que provoca el return o retfie.
operando de esta manera la pila star no se borra, asi que despues de operar de esta forma olvidate de los datos que tengas en la pila, ya que el ultimo dato sera la posicion donde estaba el programa antes de la interrupcion.
No hay ningn problema en que la pila se desborde, el micro no activa ningun mecanismo de alarma.

En C no se como se haria, pero puedes intentar lo siguiente:
cuando termines la rutina de interrupcion en vez de darle fin de la forma habitual, realizalo como si habilitaras las interrupciones.

#12  
JuAnSiTo
Ubicación: Barcelona, España
Registrado: 20 Oct 2007
Mensajes: 18
citar
Ya lo he pensado...

Pero sabes lo que hago en C, supongo que también se deberia hacer en ASM... Que es guardar lo que es registro W, STATUS y el PCL... No se si te suena esto. En fin, esto se hace con el fin de poder volver a tener estos registros antes de volver de la interrupcion, de modo que la operacion que estaba haciendo antes de la interrupcion, no se despeñe por que estaba utilizando estos registros.

En fin, luego me di cuenta en el datasheet que lo que hace cuando hay una interrupcion, es que la dirreccion donde se activo la interrupción se guarda en el Stack 1 de la Pila, de modo que cuando vuelvo de la interrupción, esta dirección que está en el Stack1 se pone en el Contador de programa otravez, de modo que vuelve a sitio donde se activo la interrupción. Esto independiente mente si pones el GIE a 1 otravez.

Entonces, dudaba mucho de que lo que planteaba de, que si se podia cambiar el sitio de retorno, por que creo que no se puede cambiar el valor del Stack1. A noser que desbordemos la pila... pero claro, la dirección que al final hay en el primer Stack despues de debordar la pila será distinta, pero no será la que yo quiero que vuelva. Asi que estamos en la misma...


Bueno, no se si has entendido lo que he pensado y reflexionado depues de haber leido 10 veces el datasheet xD... En fin, espero que esto te de ideas, y puedas compartiarlas tambieén...

Un saludo Pepechip

#13  
pepechip
Colaborador
Ubicación: Granada- España
Registrado: 09 Feb 2007
Mensajes: 1622
citar
JuAnSiTo escribió:
Entonces, dudaba mucho de que lo que planteaba de, que si se podia cambiar el sitio de retorno, por que creo que no se puede cambiar el valor del Stack1. A noser que desbordemos la pila... pero claro, la dirección que al final hay en el primer Stack despues de debordar la pila será distinta, pero no será la que yo quiero que vuelva. Asi que estamos en la misma...


Creo que mo lo has entendido.
Normalmente al confeccionar un programa utilizando las interrupciones seguimos los siguientes pasos:

1º activamos las interrucciones
2º Cuando ocurre la interrupcion ejecutamos la rutina que deseemos
3º ponemos fin a la interrupcion, con lo que el contador de programa vuelve a donde se quedo antes de la interrupcion.

Tu si quieres que no continue donde lo dejo lo haces de esta manera.
1º activamos las interrucciones
2º Cuando ocurre la interrupcion ejecutamos la rutina que deseemos
3º Hago un goto a la rutina nueva que quiera ejecutar, pero en el principio de esta rutina vuelves a poner las instrucciones del 1º punto "activamos las interrupciones"

Lo siento no se explicartelo de otra manera para que lo comprendas.

#14  
El nombre
Ubicación: Alicante
Registrado: 28 Jun 2006
Mensajes: 1445
citar
Dentro de una interrupción ver que se produce otra es facil.
Solo tienes que esperar que se produzca otra revisando los flags y cuando se active otra lo envias donde quieras.
No es muy lógico hacer eso en programación si lo tienes bien estructurado pero es una forma de salir del problema.

#15  
Leon Elec
Ubicación: Argentina
Registrado: 07 Nov 2007
Mensajes: 268
citar
Cuando uno utiliza la interrupción, no es obligatorio usar el RETFIE

Esta instrucción, lo que hace, como dijo pepechip, habilita de nuevo las interrupciones y vulve al punto de dónde se abandonó la tarea. Esto lo hace en dos ciclos de instrucción. Si esta instrucción RETFIE, no estaría, tendríamos que usar el RETURN y luego utilizar el BSF GIE para activar las interrupciones. De esta manera, ocuparíamos 3 ciclos de reloj, pero con el RETFIE, se ahorra un ciclo.

Lo que hiso Pepechips, es totalmente válido, y tiene la suerte que al desbordarce la PILA, por la forma de su programa, no le es problema. Pero es un detalle que hay que tener en cuenta.

 Responder



 Otros temas de interés 
No hay mensajes nuevos Circuito acondicionador de entrada 4-40mA y salida 0-10 V
No hay mensajes nuevos Circuito Cerrado de Televisión
No hay mensajes nuevos Circuito de Audio cerrado en una casa
No hay mensajes nuevos Circuito cerrado de television
No hay mensajes nuevos 74390 con reseteo

Foros de Electronica
|| Cuestiones Elementales de Electrónica || Fuentes de alimentacion || Circuitos de radio || Diseño de circuitos en general ||
|| Sistemas de Audio: Preamplificadores, Ecualizadores || Amplificadores || Reparación || Discusión ||
|| Microcontroladores y sistemas embebidos || Circuitos logicos combinacionales y secuenciales || Interfaces y Programacion || Dudas en general || Sistemas de Video || PC Hardware || Telematica y comunicaciones || Tecnologias moviles || Software Electronico || Robotica, Domotica y Mecatronica || Autotrónica || Automatizacion, Electronica industrial y de Potencia || Documentacion, circuitos y esquemas || Donde Las Ideas Convergen... || Tutoriales y Manuales || Proyectos Prácticos ||
Contacto | Acerca de | Ayuda | Normas de la Comunidad | Privacidad | Mapa de los foros
© Foros de Electrónica - Comunidad Internacional de Electrónicos