Autor Tema: Simulacion de interrupciones en MPLAB  (Leído 8008 veces)

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

Desconectado mmonterei

  • PIC10
  • *
  • Mensajes: 49
Simulacion de interrupciones en MPLAB
« en: 18 de Diciembre de 2005, 15:27:00 »
Buenas foro.
Sigo intentando montar un pequeño proyecto con un 16F84 y a la hora de simular el programa en el MPLAB no me obedece a las interrupciones que le he programado y eso que le tengo el bit GIE del registro INTCON en 1.
A la hora de activar la interrupcion desde el generador de estimulos no me la reconoce. ¿sabeis a que puede ser debido?
Un saludo.

Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: Simulacion de interrupciones en MPLAB
« Respuesta #1 en: 18 de Diciembre de 2005, 18:39:00 »
El simulador del MPLAB no soporta interrupciones ni simulación de los periféricos.

Para ver que una interrupción funciona vas a tener que poner el PC al principio de la rutina de interrupción a mano.

Desconectado PAOLA09

  • Moderador Local
  • PIC18
  • *****
  • Mensajes: 332
RE: Simulacion de interrupciones en MPLAB
« Respuesta #2 en: 18 de Diciembre de 2005, 20:39:00 »
HOLA
ME GUSTARIA PODER VER LA PARTE DE LA INTERRUPCION QUE USAS O AL MENOS CONOCER CUAL ES Y COMO SE PRODUCE PARA ASI MIRAR QUE ES LO QUE SUCEDE Y PODERTE COLABORAR CON ESO.Giño

Desconectado mmonterei

  • PIC10
  • *
  • Mensajes: 49
RE: Simulacion de interrupciones en MPLAB
« Respuesta #3 en: 20 de Diciembre de 2005, 09:32:00 »
Buenas tardes Paola, parece ser que di con el problema. Estaba configurando el registro INTCON con el siguiente dato "10000000" y creo que es necesario activar otro bit, aunque la verdad es que no lo tengo muy claro.
Seguire estudiando.

Un saludo.

Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: Simulacion de interrupciones en MPLAB
« Respuesta #4 en: 20 de Diciembre de 2005, 17:08:00 »
El bit que activas es el permido global de interrupciones. Además debes activar el bit correspondiente a la interrupicón que vayas a utilizar.

Cuando se produzca la interrupción, se activará su flag y el procesador atenderá a dicha interrupción. Para que la interrupción se vuelva a disparar, deberás poner a cero dicho flag.

En resumen, para que una interrupción salte debes poner el bit GIE a uno, el bit correspondiente a dicha interrupción a uno y el flag (bit) de disparo a cero.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: Simulacion de interrupciones en MPLAB
« Respuesta #5 en: 22 de Diciembre de 2005, 11:56:00 »
Escrito originalmente por antoniof
El simulador del MPLAB no soporta interrupciones ni simulación de los periféricos.

Para ver que una interrupción funciona vas a tener que poner el PC al principio de la rutina de interrupción a mano.


Como????? Quien te dijo esto??? Hace mas de 7 años que lo uso y vengo simulando interrupciones....  me parece que le has errado bastante ... o tal vez yo no interpreté lo que querías decir...

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: Simulacion de interrupciones en MPLAB
« Respuesta #6 en: 22 de Diciembre de 2005, 12:43:00 »
Pues si, la verdad es que me cogio un poco fuera de horario (1.39 de la mañana en España) SonrojadoSonrojadoSonrojado.

No obstante, creo que el MPLAB no simula periféricos como el ADC o el módulo MSSP no?

Desconectado mmonterei

  • PIC10
  • *
  • Mensajes: 49
RE: Simulacion de interrupciones en MPLAB
« Respuesta #7 en: 11 de Enero de 2006, 17:06:00 »
Saludos foro, de nuevo otra vez con el mismo problema. Os pongo un programa basico de interrupcion que pongo a simular en el MPLAB y lo que me suceda ahora es que no se deja poner a cero el Bit 0 del registro INTCON y esta continuamente entrando la interrupcion.

   LIST         P=16F84
      INCLUDE     <P16F84.INC>
      __CONFIG      _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC

      ORG      0X00
      goto   Inicio
   
      ORG      0x04
      goto    interrupcion

Inicio
        bsf      STATUS,5      
        MOVLW   b"10001000"
        MOVWF   INTCON
        MOVLW   b"00000000"
         movwf   TRISA
        MOVLW   b"11110000"
        movwf   TRISB
        bcf      STATUS,5      
     
bucle
      goto   bucle
   
interrupcion
      BCF      INTCON,0
      retfie
         
      END         ; Fin del programa.

anteriormente me funcionaba perfectamente otros programas con interrupciones en el MPLAB, pero no se que he tocado que ahora no me funcionan correctamente.
¿alguna idea de lo que pudo pasar?

Saludos y gracias al foro.

Desconectado mmonterei

  • PIC10
  • *
  • Mensajes: 49
RE: Simulacion de interrupciones en MPLAB
« Respuesta #8 en: 12 de Enero de 2006, 18:02:00 »
Saludos de nuevo foro, despues de intentar solucionar mi problema con la simulacion de las interrupciones, me doy cuenta de que solo sucede esto con la interrupcion por cambio de estado en el puerto B, en este caso me es imposible poner a cero el Flag correspondiente. En las demas interrupciones si puedo poner a cero sus flags.
Por favor, alguien me puede ayudar al respecto.

Saludos.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
RE: Simulacion de interrupciones en MPLAB
« Respuesta #9 en: 12 de Enero de 2006, 21:06:00 »
Hola mmonterei. ¿ A que te referis con: "me es imposible poner a cero el Flag correspondiente"?

Cuando una interrupcion configurada ocurre, el GIE (Global Interrupt Enable) el PC se carga con el valor 0x004 y el GIE se pone automaticamente a cero, para evitar otras interrupciones.
En este momento, por mas que nibble alto del PuertoB varie, la interrupcion no va a ocurrir, por lo que el programa se ejecuta hasta que TU nuevamente pongas en alto el bit de GIE.Saludos.

P.D. Recorda que el vector 0x0004 este muy cerca del vector de inicio de tu programa (aunque tu decides el vector de inicio, y si lo pusiste bien, no deberias tener problemas...

te recomiendo:
ORG   0X0000
GOTO INICIO

ORG   0x0004
GOTO  INTERRUPCION

ORG  0x0005
INICIO   ;inicio de la config y resto del programa





INTERRUPCION  ;aca pone el codigo que analice cual interrupcion ocurrio, etc
                          RETFIE ; el PC se carga con el valor antes de qe ocurriera la interrupcion, y el programa se ejecuta normalmente hasta proxima interrupcion

Exitos. Bruno.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
RE: Simulacion de interrupciones en MPLAB
« Respuesta #10 en: 12 de Enero de 2006, 21:08:00 »
Ah! olvide hacer el comentario que al ejecutarse la instruccion RETFIE, el GIE se pone a 1 automaticamente (se habilitan las interrupciones que tengas configuradas)
Por ahi puede venir tu problema.
Saludos
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado mmonterei

  • PIC10
  • *
  • Mensajes: 49
RE: Simulacion de interrupciones en MPLAB
« Respuesta #11 en: 13 de Enero de 2006, 06:13:00 »
Hola BrunoF.
Efectivamente, el bit GIE se pone automaticamente a 1 al ejecutar la instruccion RETFIE, pero el Flag indicador del tipo de interrupcion que se ha producido, que en el caso de interrupcion por cambio de estado en el puerto b seria el FLAG RBIF, se tiene que poner a cero por software y es eso lo que no me deja hcer el programa que liste anteriormente.
Por lo menos en la simulacion del MPLAB no se pone a CERO.
Saludos.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
RE: Simulacion de interrupciones en MPLAB
« Respuesta #12 en: 13 de Enero de 2006, 19:00:00 »
Aloha, no confies en el MPLAB:

Microchip en su datasheet dice:

bit 0: RBIF: RB Port Change Interrupt Flag bit
1 = When at least one of the RB7:RB4 pins changed state (must be cleared in software)
0 = None of the RB7:RB4 pins have changed state

Ok? entonces, repito: NO CONFIES EN EL MPLAB SIM...tiene muchisimos bugs conocidos y aun muchos mas no tanto.
Te lo digo por experiencia propia... Setea el RBIF a cero por Soft, y veras que va a funcionar en el PIC como tu deseas.

P.D. ¿como hiciste en primer lugar para poner el RBIF a 1? si el MPLAB SIM no soporta interrupciones! ¿por soft?locoloco
Exitos
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado mmonterei

  • PIC10
  • *
  • Mensajes: 49
RE: Simulacion de interrupciones en MPLAB
« Respuesta #13 en: 14 de Enero de 2006, 12:17:00 »
Hola Brunof, yo utilizo el MPLAb para depurar mis programas, y de momento he simulado interrupciones sin ningun problema.
Como bien dices, ante un cambio de estado en los pines RB4-Rb7, el flag que indica ese cambio de estado en el registro INTCOn es el RBIF que corresponde a la posicion 0 del Bite. Este se pone automaticamente a uno al producirce dicho cambio de estado. Por otro lado y al mismo tiempo el FLAG GIE que corresponde al la posicion 7 de Bite INTCON se pone automaticamente a cero a espera de que se ejecute la instruccion RETFIE.
En el testo de microchip que me indicas dice que el flag RBIF se tiene que poner a cero por software y si miras en el programa que puse en el post, lo pongo a cero con la instruccion " BCF   INTCON,0" , pero no surte efecto y el bit sigue a uno. Por lo que al ejecutarse el comando RETFIE que viene despues pasa de nuevo a ejecutar la interrupcion.
Todo esto se puede simular y ver como sucede en el MPLAB y me funcionaba perfectamente hasta que fui a crear un nuevo proyecto y desde entonces no puedo poner a cero el bit RBIF.
Decir tambien que he instalado otra version del MPLAB y sigo con el mismo problema.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
RE: Simulacion de interrupciones en MPLAB
« Respuesta #14 en: 15 de Enero de 2006, 02:44:00 »
Hola. Mira, estuve probando tu codigo con el MPLAB v7.30 y NO funciona. No setea el BIt RBIF a cero...No hay caso.Tu codigo esta OK. Es seguramente, un problema del simulador. RebotadoRebotadoRebotado
Lamento que no vas a poder emularlo satisfactoriamente. Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.


 

anything