Autor Tema: [Duda con Interrupcion]  (Leído 2823 veces)

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

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
[Duda con Interrupcion]
« en: 29 de Diciembre de 2017, 17:02:32 »
Hola de nuevo, aunque llevo bastante sin postear nada no hay día que no visite el foro, y hoy me ha surgido una duda con la interrupción que intento ejecutar y no doy con el error, ¿alguien puede iluminarme?

Código: ASM
  1. #include "p16f876a.inc"
  2.  
  3. ; CONFIG
  4. ; __config 0xFFB9
  5.  __CONFIG _FOSC_XT & _WDTE_OFF & _PWRTE_OFF & _BOREN_OFF & _LVP_ON & _CPD_OFF & _WRT_OFF & _CP_OFF
  6.  
  7.  ERRORLEVEL  -302   ; Al compilar no notifica los posibles errores de paginación
  8.  ERRORLEVEL  -207  
  9.  
  10. ;-------------------------------------------------------------------------------
  11.  
  12.  #define    SWITCH  PORTA,0
  13.  #define    LED     PORTA,1
  14.  
  15. ;-------------------------------------------------------------------------------
  16.  
  17. ; DECLARACION DE VARIABLES
  18.     save_status EQU 0x20    ; variable usada en la interrupcion
  19.     save_w      EQU 0x21    ; variable usada en la interrupcion
  20.        
  21. ;-------------------------------------------------------------------------------
  22.  
  23. ; DECLARACION DE MACROS
  24. BANK0   macro
  25.      BCF STATUS,RP0
  26.      BCF STATUS,RP1
  27.         endm
  28.        
  29. BANK1   macro
  30.      BSF   STATUS,RP0
  31.      BCF   STATUS,RP1
  32.         endm
  33.        
  34. ;-------------------------------------------------------------------------------
  35.  
  36. RES_VECT  CODE    0x0000    ; processor reset vector
  37.     GOTO    START           ; go to beginning of program
  38.     ORG     0x004           ; vector de interrupcion
  39.     GOTO    INTERRUPT
  40.    
  41. ;-------------------------------------------------------------------------------
  42.  
  43. INTERRUPT
  44.     MOVWF save_w      
  45.     SWAPF STATUS,W  
  46.     MOVWF save_status
  47.  
  48. COMP_SWITCH
  49.     BTFSS   SWITCH          ; comprobamos el estado del switch
  50.     GOTO    LED_OFF         ; el switch esta sin pulsar
  51. LED_ON
  52.     BSF     LED             ; ahora si, encendemos el led
  53.     GOTO    COMP_SWITCH     ; comprobamos el switch
  54. LED_OFF
  55.     BCF     LED             ; el led permanece apagado
  56.     GOTO    COMP_SWITCH     ; comprobamos el switch
  57.    
  58.     SWAPF save_status,W
  59.     MOVWF STATUS
  60.     SWAPF save_w, F
  61.     SWAPF save_w, W
  62.     RETFIE
  63.    
  64. ;-------------------------------------------------------------------------------
  65. ; *** PROGRAMA PRINCIPAL ***
  66. ;-------------------------------------------------------------------------------
  67.  
  68. MAIN_PROG CODE              ; let linker place main program
  69.  
  70. START:
  71.     BANK0                   ; banco 0
  72.     CLRF    PORTA
  73.     BANK1                   ; banco 1
  74.     MOVLW   0x06            ; configuramos todos los pines
  75.     MOVWF   ADCON1          ; como entradas digitales
  76.     MOVLW   B'00000001'     ; configuramos todo el PORTA
  77.     MOVWF   TRISA           ; como output excepto RA0 que sera input
  78.     BSF     INTCON,GIE      ; activamos...
  79.     BSF     INTCON,PEIE     ; interrupciones
  80.     BANK0                   ; banco 0
  81.    
  82. MAIN
  83.     NOP                     ; aqui el micro ejecuta cualquier otra cosa
  84.     GOTO    MAIN
  85.  
  86.     END

Gracias y felices fiestas.
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:[Duda con Interrupcion]
« Respuesta #1 en: 30 de Diciembre de 2017, 00:48:44 »
Tu problema es que tenés un loop infinito en tu rutina de interrupción
Tampoco limpias el flag de interrupción
« Última modificación: 30 de Diciembre de 2017, 01:39:58 por KILLERJC »

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re:[Duda con Interrupcion]
« Respuesta #2 en: 30 de Diciembre de 2017, 05:21:38 »
Tu problema es que tenés un loop infinito en tu rutina de interrupción
Tampoco limpias el flag de interrupción
Gracias KILLERJC, no he probado lo que comentas luego lo pruebo, pero pregunto porque no lo se, aun así al darle al switch no debería de entrar en la interrupción aunque funcionase de forma errónea. ¿A que flag te refieres? en los registros usados en la interrupción todos hacen referencia a periféricos, o eso creo entender.

Saludos!
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:[Duda con Interrupcion]
« Respuesta #3 en: 30 de Diciembre de 2017, 11:31:00 »
Disculpa lo vi anohe medio dormido.. y vi unicamente la rutina de interrupcion. Creo que el switch era un RB0 y que usabas la INT externa.

La interrupcion no deberia entrar porque obviamente no tenes activo ninguna interrupcion, solo los globales. Pero que sentido tiene activar los globales si no activas ninguna interrupcion?
Tal ves haga cualquier cosa por que tenes el LVP en ON, nunca me gusto el LVP :P .


Queres saber cual es el problema? Desactiva el GIE y fijate si continua el problema, sino desactiva el LVP y activa nuevamente el GIE fijate si el problema continua.

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re:[Duda con Interrupcion]
« Respuesta #4 en: 30 de Diciembre de 2017, 15:10:21 »
Gracias KILLERJC, he probado lo que me comentas y como era de esperar no funciona, pero es lógico al no activar ningún tipo de interrupción pero así se aprende.

Muchas Gracias de nuevo.
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.


 

anything