Autor Tema: 16F84A no me sale de la Interrupcion  (Leído 2974 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado the_nitro

  • PIC12
  • **
  • Mensajes: 53
16F84A no me sale de la Interrupcion
« en: 30 de Mayo de 2004, 20:52:00 »
Hola de nuevo a todos, os cuento mi nuevo problemilla.
 Tengo un codigo para 16f84 que, en un principio, funciona todo bien, incluso ejecuta cdo se produce una interupcion, pero luego no hace nada.
  Explico mejor: El programa es un bucle a la espera de una interrupcion externa, una vez producida esta ejecuta lo conveniente, y vuelve al bucle.
  Pues bien, alimento el PIC, todo ok, produzco la interrupcion externa, se ejecuta el proceso correctamente. Vuelvo a interrumpir... y nada. No hace nada. Si hago un MCLR y vuelvo a interumpir, vuelve a funcionar.
  WDT está desconectado, antes de salir de la interrpcion me aseguro de limpiar el flag que la produjo y eso. Se supone que la habilliacion global de interrupciones se vuelve a activar automaticamente cdo sale de la RTI no? De todas maneras tambien he probado a volver a habilitarla yo antes de salir.
  ¿A que se puede deber esto? ¿Se quedará colgado o es que no sale bien de la rutina? Al ensamblar no me produce ni warnigs ni mensaje alguno.

   Gracias y un saludo a todos


Desconectado Ginho_rj

  • PIC12
  • **
  • Mensajes: 87
RE: 16F84A no me sale de la Interrupcion
« Respuesta #1 en: 30 de Mayo de 2004, 21:01:00 »
coloque o codigo aqui!

Desconectado Abago

  • PIC24F
  • *****
  • Mensajes: 792
RE: 16F84A no me sale de la Interrupcion
« Respuesta #2 en: 30 de Mayo de 2004, 23:47:00 »
Restauras las interrupciones generales al final del handler de interrupción???

 bsf     INTCON , GIE



cuando entras en el handler, tendrás que desactivar las interrupciones
      bcf     INTCON,GIE
pero al salir, hay que ponerlas a funcionar de nuevo...

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: 16F84A no me sale de la Interrupcion
« Respuesta #3 en: 30 de Mayo de 2004, 23:57:00 »
No es necesario Abago, ni desactivar al entrar, ni activar al salir, es muy listo y lo hace él solito.

Pega el código the_nitro.

Un saludo

Desconectado the_nitro

  • PIC12
  • **
  • Mensajes: 53
RE: 16F84A no me sale de la Interrupcion
« Respuesta #4 en: 31 de Mayo de 2004, 04:03:00 »
Joder Chavales, que velocidad!! Muchas Gracias por el apoyo mostrado, de verdad, vaya comunidad que sóis. Lo flipo! Me acosté al poner el hilo, y cdo me levanto..... 4 respuestas!! Gracias.

   ORG 0
   GOTO   INICIO

   ORG 4
   BcF     INTCON,GIE
   BTFSC   INTCON,INTF   ;COMPROBACIÓN DE INTERRUPCION INT
   GOTO   RTI_INT

   BCF   INTCON,INTF   ;BORRA FLAG INT
   BCF   INTCON,GIE
   RETFIE


RTI_INT:      
      MOVLW      B"00001000"   ;BIT 1 --> CMD1
      CALL      CMD
      RETURN


;-------------------------------------------------------------------------------------------
CMD:             ;Envia el comando cargado en el Acumulador (W) [0 CMD0, 1 CMD1, 2 CMD2....]
                CLRF            PTR             ;Inicializamos puntero despl.
                MOVWF           CMD_AUX         ;Guardamos el Comando pasado

NX_CHR      MOVF      PTR,W      ;Puntero despl. a W
      BTFSC      CMD_AUX,0
      CALL      CMD0
      GOTO      X1

X1      BTFSC      CMD_AUX,1
      CALL      CMD1
            GOTO      X2

X2      BTFSC      CMD_AUX,2
      CALL      CMD2
      GOTO      X3

X3      BTFSC      CMD_AUX,3
      CALL      CMD3
      GOTO      X4

X4      BTFSC      CMD_AUX,4
      CALL      CMD4
      GOTO      X5

X5      BTFSC      CMD_AUX,5
      CALL      CMD5
      GOTO      X6

X6      BTFSC      CMD_AUX,6
      CALL      CMD6
      GOTO      X7

X7      BTFSC      CMD_AUX,7
      CALL      CMD7

      ADDLW      0      ;Si W=0 --> Z=1
      BTFSC      STATUS,2   ;Z=0 ?

      RETURN            ;Si -->Ultimo chr del comando

      MOVWF      DATO      ;De W lo pasamos a DATO
      CALL      TXDATO     ;No -->Quedan chrs por tx en el comando
      INCF      PTR,F      ;Incrementamos PTR despl.
      GOTO      NX_CHR
;
;    Tablas de Comandos
;
CMD0 ................
CMD1 ................
..........
.............

;***************************************************
INICIO
;
;PUERTOS
   BANK1
   BCF   TX         
   BCF   01h,6      ;[OPTIONREG][INTEDG]
   BANK0
;PROGRAMACION DE LA INTERRUPCION INT(RB0)

   BSF   INTCON,INTE   ;HABILITA INTERRUPCIÓN INT
   BSF   INTCON,GIE   ;HABILITA INTERRUPCIONES GLOBALMENTE

;
;ESPERA LA INTERRUPCION
   GOTO   $
;
   END


Hay va ese código

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: 16F84A no me sale de la Interrupcion
« Respuesta #5 en: 31 de Mayo de 2004, 06:44:00 »
Vamos con el ensamblador, a ver si me acuerdo.

El programa de atención a la interrupción (salvo algunas líneas) está en:

RTI_INT:
MOVLW B"00001000" ;BIT 1 --> CMD1
CALL CMD
RETURN

Ese último RETURN no debiera ser un RETFIE?

Luego otra cosilla desde dentro de la interrupción haces varios CALL, cuentalos para que no sean más de 8, de lo contrario se desbordará la pila.

No es necesario que deshabilites a GIE y a INTE al entrar en la interrupción, se hace automáticamente para que cuando se está ejecutando una interrupción no pueda llegar otra.

Un saludo

Desconectado odukec

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 174
RE: 16F84A no me sale de la Interrupcion
« Respuesta #6 en: 31 de Mayo de 2004, 11:07:00 »
Hola..

efectivamente amigo.. para que se vuelvan a habilitar las interrupciones tienes que poner retfie.. y no un return

saludos

Desconectado the_nitro

  • PIC12
  • **
  • Mensajes: 53
RE: 16F84A no me sale de la Interrupcion
« Respuesta #7 en: 31 de Mayo de 2004, 14:48:00 »
 Hola de nuevo!
  Gracias por detectar el fallo!!! Yo cdo he leido lo del RETFIE hubiera a postado la mano entera a que lo habia puesto, y de hecho está puesto,pero.... mmmmm entonces he visto el fallo!! que en RTI_INT hago un GOTO, no un CALL, cuando mi intencion era hacer una llamada, no un salto.
  Muchas gracias por hacerme ver el fallo , si vierais la disputa que he tenido hoy en la faucltad con el tema, jejejej y precisamente con el RETFIE, jejejej veis! yo sabia que estaba puesto, otra cosa es k estuviera bien puesto jajajaj.
  Bueno eso, muchas gracias de nuevo y un gran saludo a todos !

 PD-> Revisaré el nº de llamadas, vayamos a kedarnos sin pila

PD2--> Pila revisada, maxima profundidad de pila = 4 niveles, Fuera de peligro Asias por el consejo