por kar105s » Lun Jul 19, 2010 2:53 pm
Hola Biblioman ,en el tutorial Recursos del PIC- Uso de la Interrupción por cambio de estado en RB4-RB7 , se describe la nota donde indica que hay que hacer una lectura/escritura del puertoB.
La instruccion "output_b(input_b());" no hace nada, la intención es que solo lee y escribe el puerto B con el mismo valor. en teoria no debiera alterar nada.
De todas formas encontré el error : me olvidé la directiva de configuración de puerto #use fast_io(b) (Nota: con standar_io() no funciona)
Te comento que suprimí esa instrucción (output_b(input_b()) por que mi código incluía una lectura del puerto y tambián funciona correcto.
Muchas gracias por tu respuesta.
De todas formas agrego el código ya que esa instrucción la copie de otros programas que encontre y puede que alguien tenga el mismo problema.
/*Incrementa contador en cada interrupción por pulsador en RB6.
*/
#include <16f84a.h> // Selecciona el PIC
#fuses XT,NOWDT,NOPROTECT,PUT // Opciones de configuración
#use delay(clock=4000000) // Velocidad del Cristal : 4 Mhz
#include <lcd_Entrenador1.h> //lib lcd: E:RA2, RS:RA0, RB1-RB4
#use fast_io(b)
#use fast_io(a)
#bit TRISB6=0x86.6
#bit rbpu = 0x81.7
#byte portb =0x06
// variables globales
int cont=0;
#int_RB // Interrupción por activación
void RB_isr(void) { // externa RB4-RB7
// output_b(input_b()); no hace falta si el cádigo incluye lectura de puerto
if(bit_test(portb,6)==0){ // LECTURA DEL PUERTO B
cont++;
lcd_putc("\f");
printf(lcd_putc,"%d",cont);
}
}//fin isr
// función principal
void main(void) {
// varialble locales
rbpu=0; //habilito pullup
output_b(0); //limpio el puertoB
lcd_init();
printf(lcd_putc,"%d",cont); //muestra el valor 0
TRISB6=1; //configuro pin 6 del puerto B como entrada
//configuración de puertos
enable_interrupts(INT_RB);
enable_interrupts(global);
// Programa Principal
while(true); //bucle infinito
}//fin main