Autor Tema: Ayuda con interrupcion int_RB  (Leído 3584 veces)

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

Desconectado marcovalencia123

  • PIC10
  • *
  • Mensajes: 5
Ayuda con interrupcion int_RB
« en: 11 de Agosto de 2011, 14:47:26 »
Hola!!:

Quisiera pedirles ayuda en un programa que hice en clase pero no entiendo muy bien, es acerca de las interrupciones.  A continuacion lo pongo:

#include <16f883.h>
#fuses XT, NOWDT, NOPROTECT, NOLVp,
#use delay (clock= 4000000)
#BYTE OPTION_REG=0x181
#byte IOCB=0x96
#byte INTCON=0x0B
#use fast_io(b)
#use fast_io(c)
//int a;


#INT_RB
void rb_isr(){
//a=input(pin_B0);
//if (a==1){
output_toggle(pin_C1);
delay_ms(500);
//}
}


void main(){
set_tris_C(0x00);
set_tris_B (0xBB);
output_C(0x00);

port_b_pullups(TRUE);
enable_interrupts(int_rb0);
enable_interrupts(global);

while(1){
}
}



Lo que pretendo hacer con este programa es que al conectarle un interruptor en la entrada B0 cambie el estado de C1 cada vez que sea presionado, "un interruptor tipo toggle". Cuando corro el programa en mi simulación y hago un cambio en b0 este lo hace pero se queda ciclado. Puse unas instrucciones como comentarios que si son deshabilitadas funciona el programa que yo quiero. Quisiera saber si estoy utilizando de manera correcta la interrupcion. Otra duda que tengo es lo mismo usar: while(1){} que while(TRUE){} por que si uso la primera, el compilador me marca un warning. De antemano les agradezco su ayuda y el tiempo que se toman.

Saludos

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Ayuda con interrupcion int_RB
« Respuesta #1 en: 11 de Agosto de 2011, 15:07:25 »
La interrupción "RB" es por cambio de estado en los pines RB4 a RB7. Lo que tu necesitas es interrupción por flanco en RB0, interrupción Externa. Utiliza el buscador, hay varios ejemplos.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Ayuda con interrupcion int_RB
« Respuesta #2 en: 11 de Agosto de 2011, 16:39:05 »
Si, de poder se puede hacer. Pero él mezcla las cosas, quiere usar el pin RB0 pero la interrupción por cambio de estado (RB4-RB7)  :z)


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Francirius

  • PIC10
  • *
  • Mensajes: 32
Re: Ayuda con interrupcion int_RB
« Respuesta #3 en: 12 de Agosto de 2011, 03:08:55 »
Si, de poder se puede hacer. Pero él mezcla las cosas, quiere usar el pin RB0 pero la interrupción por cambio de estado (RB4-RB7)  :z)


Saludos!
Me voy a colgar de este tema para hacerles una consulta, que quiere decir exactamente  el "cambio de estado en la linea", por que he visto un circuito con un 16f84, y un lcd, y en los pines que tiene conectado el lcd le tenian pulsadores, y con esta interrupcion leian los pulsadores, y a la vez desplegaban en el lcd.
Arigato!

Desconectado erdanieee

  • PIC10
  • *
  • Mensajes: 44
Re: Ayuda con interrupcion int_RB
« Respuesta #4 en: 12 de Agosto de 2011, 07:29:03 »
Buenas,

existen dos clases de interrupciones para el puerto B en ese PIC:
  - interrupción externa (RB0), que la puedes configurar para que se active por flanco de subida o de bajada
  - interrupción por cambio de estado de los pines RB4-RB7, que se activa cada vez que alguno cambia su estado lógico.

Lo puedes hacer con cualquiera de las dos, pero si sólo necesitas detectar un botón pulsado quizás sea más fácil usar la primera.

En cualquier caso, despues de la interrupción hay que leer o escribir el puerto B para que se actualizen los registros, ya que si no entrará contínuamente en la interrupción como te ocurre cuando descomentas esa línea.

un saludo

Desconectado Francirius

  • PIC10
  • *
  • Mensajes: 32
Re: Ayuda con interrupcion int_RB
« Respuesta #5 en: 13 de Agosto de 2011, 15:40:49 »
Buenas,

existen dos clases de interrupciones para el puerto B en ese PIC:
  - interrupción externa (RB0), que la puedes configurar para que se active por flanco de subida o de bajada
  - interrupción por cambio de estado de los pines RB4-RB7, que se activa cada vez que alguno cambia su estado lógico.

Lo puedes hacer con cualquiera de las dos, pero si sólo necesitas detectar un botón pulsado quizás sea más fácil usar la primera.

En cualquier caso, despues de la interrupción hay que leer o escribir el puerto B para que se actualizen los registros, ya que si no entrará contínuamente en la interrupción como te ocurre cuando descomentas esa línea.

un saludo
Pero como funciona la interrupcion por cambio en el puerto B (RB4:BB7), cuando esta conectado al lcd?

Desconectado tannke

  • PIC16
  • ***
  • Mensajes: 176
Re: Ayuda con interrupcion int_RB
« Respuesta #6 en: 15 de Agosto de 2011, 08:08:14 »
Pero como funciona la interrupcion por cambio en el puerto B (RB4:BB7), cuando esta conectado al lcd?

Funciona exactamente igual, solo que si a parte de pulsadores quieres conectar el lcd a esas lineas lo que tienes que haces es mantenerlas como entradas (para detectar las interrupciones) y cuando tengas que escribir en el lcd las pones como salidas, escribes lo que tengas que escribir y las vuelves a configurar como entradas.

Recuarda poner resistencias entre pulsadores y pic para no cortocircuitar si en el momento de pulsar se están enviando datos al lcd.

Saludos