hola, soy nuevo en esto del pic. estoy haciendo un programa usando la interrupcion interna en RB4, con el 16f877. no se que pasa en el programa, seguramente habre puesto alguna burrada. el programa consiste en dar a rb4 y que suene un buz piezoeléctrico y al volver a darle se apague, asi indefinidamente.
haber si alguien puede ayudarme:
gracias
//
// Dispositivo: PIC 16F877 Compilador: CCS vs3.236
// Entorno IDE: MPLAB IDE v7.3 Simulador: Proteus 6.7sp3
//
#include <16f877.h> //pic a utilizar
#fuses XT //ordenes para el programador
#use delay (clock=4000000) //Fosc=4Mhz
#use standard_io(c)
#use fast_io(b)
#byte port_b=0x06 //declaracion del puerto b
int last_b;
byte changes;
///DECLARACION DE FUNCIONES GLOBALES
void buzzer(void); //funcion que hace sonar el buz del portc dada la interrupcion
///PROGRAMA
void main(void)
{
set_tris_b (0b111110111); //portb entrada menos pin B0 es salida
set_tris_c (0b00000100);
enable_interrupts(int_rb); //activar interrupcion rb4:7
enable_interrupts(GLOBAL); //activar interrupciones
//variable que almacena que pin a realizado la interrupcion
last_b=port_b;
do{
changes = last_b ^ port_b; //changes<-pin que genera la interrupcion
last_b = port_b; //last_b=como estaba el portb antes de interrupcion
if (bit_test(changes,4 )) //¿PIN_B4 genera interrupcion?
buzzer(); //SI -> ejecuta va a la interrupción
else
output_low(pin_c2); //No,
}while(TRUE); //bucle infinito
}
///FUNCION QUE EJECUTA LA SECUENCIA DE ZUMBIDO DEBIDO A INTERRUPCION POR EL PORTB4:7
#INT_RB
void buzzer(void)
{
do{
output_high(PIN_C2);
delay_ms(1);
output_low(PIN_C2);
if (bit_test(changes,4 )) //¿PIN_B4 genera interrupcion?
break;
}while(true);
}
massiah desde cantabria