TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: zeus2 en 08 de Julio de 2005, 16:57:00
-
Hola,
Soy un novato en esto de los PIC y he encontrado mi primer problema al tratar de probar las interrupciones del 16F84A (en concreto la que salta al cambiar RB4-7). El código es:
#include <16F84A.h>
#fuses NOWDT,XT, NOPUT, NOPROTECT
#use delay( clock = 4000000 ) /* reloj de 4 MHz */
#byte puerto_b = 06
#int_rb
rsi_puerto_b()
{
delay_us(500000);
bit_set(puerto_b, 0);
delay_us(500000);
bit_clear(puerto_b, 0);
}
void main(void)
{
set_tris_b(0xF0);
enable_interrupts(INT_RB);
enable_interrupts(GLOBAL);
puerto_b = 0;
for (;;);
}
Y el problema es que la interrupción me salta continuamente (tengo un pulsador conectado a RB5, pero no hay problemas de rebote ya que si dejo en CA RB4-7 sigue igual). Me gustaría que alguien me ayudara y así poder seguir aprendiendo.
Un saludo desde Canarias.
-
Creo que lo que te pasa es que como la interrupcion es por cambio de estado en cualquiera de las patillas, te salta la interupcion cuando pulsas el pulsador y cuando lo sueltas vuelve a entrar a la interrupcion. Prueba a usar esta mascara.
delay_ms(70); // esperamos para evitar rebotes
if(!(port_b^0xF0)) // si se produce al soltar el pulsador
return; // salimos de la interrupcion.
Salu2