Autor Tema: bit RBIF no cambia de estado  (Leído 3335 veces)

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

Desconectado japdos

  • PIC10
  • *
  • Mensajes: 13
bit RBIF no cambia de estado
« en: 19 de Febrero de 2008, 07:21:11 »
 Hola, me presento en este foro como alguien que se está iniciando en la programacion de los pics, y que ya tiene problemas expediente x.
En la imagen que adjunto se ve un programa que habilita las interrupciones internas por cambio de estado en los pines del puerto B, se mete en un bucle, y cuando se produce una interrupcion (generada por un estimulo del mplab) se dirige a la direccion 0x04 correctamente, pero ocurren dos cosas que no entiendo: y que he marcado en la imagen con un circulo rojo:
1-la instruccion bcf intcon,rbif no restablece el bit marcado con otro circulo rojo a cero
2-cuando hace retfie, no retorna al bucle principal, sino que salta de nuevo a la direccion 0x4
[img=http://img252.imageshack.us/img252/1241/dibujopp3.th.jpg]

¿Alguien me podría dacir por qué ocurre esto?

gracias.
« Última modificación: 19 de Febrero de 2008, 07:45:03 por japdos »

Desconectado Sispic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1685
    • winpic800
Re: bit RBIF no cambia de estado
« Respuesta #1 en: 19 de Febrero de 2008, 07:38:50 »
es INTCON , RBIF

INTCON REGISTER (ADDRESS 0Bh, 8Bh)
RBIF: RB Port Change Interrupt Flag bit
1 = 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

suertes .

Desconectado japdos

  • PIC10
  • *
  • Mensajes: 13
Re: bit RBIF no cambia de estado
« Respuesta #2 en: 19 de Febrero de 2008, 07:44:38 »
Me he equivocado al escribir

Me he equivocado al escribirlo en el primer post, donde pongo bcf status,rbif quería decir bcf intcon,rbif , pero en la imagen se ve correcto, modificaré el post inicial para no confundir.
gracias.

Desconectado Sispic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1685
    • winpic800
Re: bit RBIF no cambia de estado
« Respuesta #3 en: 19 de Febrero de 2008, 07:59:16 »
Citar
y cuando se produce una interrupcion (generada por un estimulo del mplab)


No se como lo hara mplab , pero que no sea cosa de rebotes .
Inabilita la interrupcion nada mas entrar , asi no se producira otra vez y podras ver el bit que borras como queda

Desconectado japdos

  • PIC10
  • *
  • Mensajes: 13
Re: bit RBIF no cambia de estado
« Respuesta #4 en: 19 de Febrero de 2008, 08:48:46 »
MPLAB permite establecer un estimulo por cambio de estado (toggle) o que sea solamente un pulso (high or low)
He probado con ambas opciones y ocurre el mismo problema.
El problema no es que despues del retfie retorne una sola vez a la direccin 0x04 sino que entra en un bucle infinito saltando una y otra vez a la direccion.
He probado a inhabilitar el RBIE nada más entrar, y el resultado es que sale correctamente mediante el retfie, pero una vez en el bucle principal del programa, ya no me aceptaría más interrupciones, y si mediante código, volviera a habilitar el RBIE, justo al ejecutar "bsf intcon,rbie" vuelve a saltar a la direccion 0x04.
¿?

Desconectado Sispic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1685
    • winpic800
Re: bit RBIF no cambia de estado
« Respuesta #5 en: 19 de Febrero de 2008, 09:06:33 »
Citar
He probado a inhabilitar el RBIE nada más entrar,

bcf intcon,rbie
clrf PORTA
bcf intcon,rbif
retfie

Y has mirado como queda INTCON , RBIF  una vez ha salido de la interrupcion de esta manera ? , es para que vayas descartando causas


bcf intcon,rbie
clrf PORTA
bcf intcon,rbif

un delay y ver lo quie pasa

bsf intcon,rbie
retfie



aunque lo ideal es provar fisicamente y tocar con los pies en el suelo


Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: bit RBIF no cambia de estado
« Respuesta #6 en: 19 de Febrero de 2008, 11:54:52 »
japdos, el RBIF solo se borrará cuando la condición de diferencia entre el último valor leído y el nuevo valor desaparezca.

Eso se hace de dos formas

1) Leyendo el puerto B
2) Escribiendo en el puerto B (ya que una escritura en un puerto, involucra una LECTURA/MODIFICACION/ESCRITURA) por ende no deja de ser una lectura.

De no hacerlo la condición de "cambio en el puerto B" nunca desaparecerá porque el PIC guarda el último valor que tenía de referencia para este evento y mientras sea diferente el flag seguirá reactivándose.

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

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1685
    • winpic800
Re: bit RBIF no cambia de estado
« Respuesta #7 en: 19 de Febrero de 2008, 16:06:56 »
Ni idea que havia que leer el valor para que se borre el flag , como se nota que nunca he usado esa int .

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: bit RBIF no cambia de estado
« Respuesta #8 en: 19 de Febrero de 2008, 20:40:00 »
Si así es sisco, adjunto un extracto del datasheet de los 16f87x así ya queda por si otro tiene la misma duda más adelante.

Pasos para borrar el flag.


a) Any read or write of PORTB. This will end the mismatch condition.
b) Clear flag bit RBIF.
A mismatch condition will continue to set flag bit RBIF.
Reading PORTB will end the mismatch condition and allow flag bit RBIF to be cleared.
- 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 japdos

  • PIC10
  • *
  • Mensajes: 13
Re: bit RBIF no cambia de estado
« Respuesta #9 en: 20 de Febrero de 2008, 04:47:27 »
efectivamente maunix, era que no estaba leyendo el puerto.
Gracias!


 

anything