PIC16F876A - Controlar E/S en PUERTO C

Buenas.

Necesito controlar una variable en función de la tensión que entra a las patillas C1,C2 y C3 del puerto C en un PIC16F876.

El código que empleo es el siguiente:

Código:
#include <16f876.h>
#device adc=10
#fuses XT,NOWDT,NOPROTECT,BROWNOUT,PUT,NOLVP
#use delay(clock=4000000)

#include "I:\PROYECTO\PRACTICAS\MIS PRACTICAS\prueba\flex_lcd.c"
#include "math.h"

float x;
float zeroG_x = 1.5039;
float oneG_x = 1.7968;
float meas_x;
float aviso;

void DoMeasureXYZ() {
  meas_x = read_adc();   // Measure X_out
}

void WriteX(float wr_x) {

  if (wr_x < 0) {
     lcd_gotoxy(1,1);
     lcd_putc("-");
     wr_x = -wr_x;
  }

  lcd_gotoxy(1,2);
  printf(lcd_putc,"%f",wr_x);
}

void Read_Angles() {
 double div_x, x_rad;
 
  DoMeasureXYZ();
  //Aquí están mis rutinas de medición de ángulos
  
  WriteX(x);

  if (x>=aviso)
  {output_high(PIN_C4);}
  else
  {output_low(PIN_C4);}
}

void Control_Aviso(){
   if (input(PIN_C1))
   {aviso=6;}
   if (input(PIN_C2))
   {aviso=11;}
   if (input(PIN_C3))
   {aviso=16;}
}

void main()
{
   
   lcd_init();
   
   port_b_pullups(TRUE);

   setup_adc_ports(AN0);
   setup_adc(ADC_CLOCK_DIV_8);
   set_adc_channel(0);
   delay_us(20);
   
   
   lcd_putc("\f");
   
   while(1){
      Control_Aviso();
      Read_Angles();
      delay_ms(500);
    }
}

Todo funciona correctamente salvo que cuando modifico la entrada de tensión a las patillas la variable aviso tarda unos 20 segundos en cambiar. ¿Cúal es el motivo?

Si apago y enciendo el circuito funciona inmediatamente. Pero me gustaría que el cambio de tensión en las patillas C1,C2,C3 surgiera efecto en la variable aviso casi de manera inmediata.

Saludos y muchas gracias.
 
Atrás
Arriba