Autor Tema: prioridad en interrupciones pic18f452  (Leído 3072 veces)

0 Usuarios y 4 Visitantes están viendo este tema.

Desconectado headbreacker

  • PIC10
  • *
  • Mensajes: 7
prioridad en interrupciones pic18f452
« en: 22 de Septiembre de 2006, 13:47:29 »
quiero saber qeu sucede cuando se esta ejecutando una rutina de interrupcion correspondiente al INT1 y a media ejecucion cae una interrupcion en INT0 con el sistema de prioridades activado.

yo lo simule pero me di cuenta que cuando retorna de la rutina de INT0 y continua en con la INT1 terminandola el retfie no pone en 1 en bit correspondiente por lo cual queda deshabilitado para una siguiente interrupcion

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: prioridad en interrupciones pic18f452
« Respuesta #1 en: 22 de Septiembre de 2006, 14:57:35 »
quiero saber qeu sucede cuando se esta ejecutando una rutina de interrupcion correspondiente al INT1 y a media ejecucion cae una interrupcion en INT0 con el sistema de prioridades activado.

yo lo simule pero me di cuenta que cuando retorna de la rutina de INT0 y continua en con la INT1 terminandola el retfie no pone en 1 en bit correspondiente por lo cual queda deshabilitado para una siguiente interrupcion

1) De qué interrupciones estas hablando puntualmente

2) En qué estas codificando (Assembler, CCS, C18, etc)


- 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 headbreacker

  • PIC10
  • *
  • Mensajes: 7
Re: prioridad en interrupciones pic18f452
« Respuesta #2 en: 22 de Septiembre de 2006, 20:02:43 »
estoy utilizando ensamblador

y estoy utilizando dos interrupciones externas INT0 e INT1 pero el problema es que cuando la interrupccion de mayor prioridad se ejecuta mientras se atiende la de menor prioridad, la de menor prioridad(INT1) queda deshabilitada para subsiguientes ejecuciones solo quedando habilitada la de mayor prioridad(INT0)

Desconectado GustavoT

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 102
Re: prioridad en interrupciones pic18f452
« Respuesta #3 en: 22 de Septiembre de 2006, 20:56:47 »
seria bueno que copiaras las partes importantes del programa, te podriamos ayudar mejor

saludos
Hay dos cosas infinitas: el Universo y la estupidez humana. Y del Universo no estoy seguro.   Albert Einstein

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: prioridad en interrupciones pic18f452
« Respuesta #4 en: 23 de Septiembre de 2006, 08:31:12 »
estoy utilizando ensamblador

y estoy utilizando dos interrupciones externas INT0 e INT1 pero el problema es que cuando la interrupccion de mayor prioridad se ejecuta mientras se atiende la de menor prioridad, la de menor prioridad(INT1) queda deshabilitada para subsiguientes ejecuciones solo quedando habilitada la de mayor prioridad(INT0)

heabreaker esto es algo normal, es así como funcionan los PICs

Fíjate lo siguiente:

Si estas en la rutina LOW y te ocurre una rutina HIGH, el vector de interrupción irá a 0x0008.  Bien, ahi tu atiendes tu interrupción HIGH.

Las llamadas a los vectores de interrupción son "calls automáticos", para volver de ellos debes hacer un "return".

En el caso específico de las interrupciones debes hacer un "retfie" o "Return from interrupt".

Esto te habilita nuevamente las interrupciones.  El tema es que como "también" estabas en el vector LOW no se habilitará pero debiera volver a él.  Es decir terminar de hacer lo que hacía ahí y en ese punto vuelves a hacer otro "retfie" con lo cual el código volverá al su flujo normal con ambos GIEH y GIEL habilitados.

Espero lo hayas comprendido.  Esto sirve para "explicar" como funcionan las interrupciones.

Ahora bien, si modificas nuevamente tu código de acuerdo a lo que te acabo de comentar y aún así no te anda, debieras subir tu código como lo sugirió GustavoT.

Saludos

- 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 headbreacker

  • PIC10
  • *
  • Mensajes: 7
Re: prioridad en interrupciones pic18f452
« Respuesta #5 en: 24 de Septiembre de 2006, 00:08:18 »
ok lo tendre presente!!!!!!!!!!!!!!

Desconectado headbreacker

  • PIC10
  • *
  • Mensajes: 7
Re: prioridad en interrupciones pic18f452
« Respuesta #6 en: 24 de Septiembre de 2006, 00:21:39 »
eso lo entiendo,hago ese retfie en la rutina LOW pero cuando la ejecuta despues de haber retornado de la rutina HIGH este retfie no habilita el GIEL provocando que no se ejecute otra vez la rutina LOW, quedando solo habilitada la interrupcion HIGH por lo menos eso es lo que me demuestra el simulador pic18 simulator

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: prioridad en interrupciones pic18f452
« Respuesta #7 en: 24 de Septiembre de 2006, 23:40:08 »
eso lo entiendo,hago ese retfie en la rutina LOW pero cuando la ejecuta despues de haber retornado de la rutina HIGH este retfie no habilita el GIEL provocando que no se ejecute otra vez la rutina LOW, quedando solo habilitada la interrupcion HIGH por lo menos eso es lo que me demuestra el simulador pic18 simulator

¿Podes subir tu código en un archivo .zip?

Saludos
- 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 headbreacker

  • PIC10
  • *
  • Mensajes: 7
Re: prioridad en interrupciones pic18f452
« Respuesta #8 en: 26 de Septiembre de 2006, 17:39:51 »
aqui esta el correspondiente a las rutinas de interrupcion

recepcion_ISR:
      movwf   W_TEMP,ACCESS               ;Push W   
      movff   STATUS,STATUS_TEMP
      movf   LATE,W,ACCESS
      movwf   tmp_late,ACCESS

      bsf      enb6
      bcf      enb3

      movf    PORTC,W,ACCESS               ;Leer latch de salida y guardarlo en W
      movwf    POSTINC0,ACCESS
         
      

      bsf      enb3                     ;DESHABILITACION DE transceiver recepcion
      movf   W_TEMP,W,ACCESS
      movff   STATUS_TEMP,STATUS
      movf   tmp_late,W,ACCESS
      movwf   LATE,ACCESS
      bcf    INTCON,INT0IF,ACCESS         ;Limpiar bandera para poder habilitar la interrupcion
      retfie

transmision_ISR:
      movwf   W_TEMP,ACCESS               ;Push W   
      movff   STATUS,STATUS_TEMP
      movf   LATE,W,ACCESS
      movwf   tmp_late1,ACCESS
   
      bsf      enb3
      bcf      enb6
   
      movf    PORTC,W,ACCESS               ;Leer latch de salida y guardarlo en W
      movwf    POSTINC1,ACCESS
         
      movf   W_TEMP,W,ACCESS
      movff   STATUS_TEMP,STATUS
      movf   tmp_late1,W,ACCESS
      movwf   LATE,ACCESS
      bcf    INTCON3,INT1IF,ACCESS         ;Limpiar bandera para poder habilitar la interrupcion
      retfie



el programa solo simplemente debe de recoger un dato en el puerto c cuando este reciba un pulso en INT0 o INT1 pero el asunto es que es bastante probable que mientras este procesando un dato provocado por la int1 ocurra una interrupcion  en INT0 causando el problema que les mencionaba