Autor Tema: Interrupciones  (Leído 1513 veces)

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

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Interrupciones
« en: 21 de Junio de 2007, 13:08:28 »
Hola que tal... una preguntica.... Es posible saber por cual bit del puerto B ocurrio una determinada interrupción.... y si es así??? esa rutina va dentro de la rutina de la interrupción ovbiamente, pero la haria como, haciendole encuesta a cada bit del puerto?, es decir, preguntando el estado de cada bit???

Atte: Enigma... la llanerita de Guayana :P
« Última modificación: 21 de Junio de 2007, 13:28:40 por Enigma »
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Interrupciones
« Respuesta #1 en: 21 de Junio de 2007, 13:31:45 »
Hola.

No especificás a qué modelo de PIC te estás refiriendo.

Si vamos al más básico, el 16F84A, depende la interrupción. Si usás la INTF(RB0) obviamente vas a saberlo debido a que posee una interrupción específica. Si usás la interrupción por cambio en el puertob(RB4~RB7) entonces podés averiguar también cuál fué el/los pin/es que cambió/aron de estado recurriendo a guardar el ultimo estado conocido de los pines en un registro auxiliar antes de reactivar la interrupción.

Ej:

movf PORB,W
movwf AUXPB             ;guardar ultimo estado conocido del PuertoB antes de reactivar interrupciones...
bsf INTCON,GIE           ;activar interr

 org 0x0004
 ....
 movf PORTB,W          ;leo PB
 btfsc INTCON,RBIF
 call CambioPB
....
....
....
retfie

CambioPB
xorwf AUXB,W              ;comparo con valor guardado
....                               ;aqui chekearias que pines se modificaron(la XOR devuelve los bits modificados = 1)
movf PORB,W
movwf AUXPB             ;guardar ultimo estado conocido del PuertoB antes de reactivar interrupciones...
return

Aunque debo destacar que no es 100% eficaz. Puede que algunas veces no funcione correctamente. Depende de la velocidad con la que ocurren los cambios en los pines.
El error ocurre debido a que pasa un cierto tiempo entre que ocurre la interrupcion y se lee el puertoB. Durante este tiempo los pines pueden volver a cambiar, y sin embargo no ha forma de capturarlo.
Lo mismo ocurre cuando guardas el ultimo estado del puertob. Entre que lo guardas y reactivas las interr, vuelve a pasar un cierto tiempo, durante el cual pueden ocurrir cambios en el puertob que no serán contemplados.



Suerte!
« Última modificación: 21 de Junio de 2007, 13:39:58 por BrunoF »
"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