TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: marcovalencia123 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
-
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!
-
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!
-
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!
-
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
-
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?
-
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