Te pongo algo más de codigo, no lo pongo todo porque es bastante largo y enrevesado, pero si me concretas que parte te interesa te lo pongo.
#include <18F4525.h>
#device ADC=16
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, errors, disable_ints)
....
//ME SALTO UNA PARTE IRRELEVANTE DE CODIGO
....
WHILE (CONTADOR < TSesion)
{
for(i3=1; i3<=PuntosMedia; ++i3)
{ // ciclo para calcular la media de muestras
for(j2=0; j2<NumCanales; j2++) // ciclo para recorrer los canales analog.
{
set_adc_channel( j2 );
for(k2=1; k2<=(TScan); ++k2)
{
delay_ms(5);
}
value = Read_ADC();
for(k2=1; k2<=(TScan); ++k2)
{
delay_ms(5);
}
valfl= (float) value;
valfl *=5.0/65536.0;
VMed[j2] = (VMed[j2]*(i3-1) + valfl)/(i3);
if (transmitir_sesion)
{
printf("%s0> Temp,Arbol:%u,Ch:%X,Ct:%lu,valfl:%f@",UMX,NArbol,make8(j2,0),CONTADOR,valfl);
}
} //recorrido por canales
} //Media de muestras
//-----------------------------
for(j2=0; j2<NumCanales; j2++)
{
if ((metodo) && (VMed[j2]>VMax[j2])) //Calcula Vmax
{
VMax[j2] = VMed[j2];
TMax[j2] = CONTADOR;
}
else if (!(metodo) && (VMed[j2]<(Vini[j2])+Vmin) && (Tz[j2]<=1)&& (CONTADOR>=770))
{
Tz[j2] = CONTADOR;
detectado_cero=true;
valfl2= (float)(Tz[j2]);
valfl2 *=(26.0/1000.0);
if (transmitir_sesion)
{
printf("%s0> Tz!,VMed[j2]:%f,Vini[j2]:%f,Vmin:%f,Arbol:%u",UMX,VMed[j2],Vini[j2],Vmin,NArbol);
printf("Ch:%X,Ct:%lu,valfl:%f,Tz:%f@",make8(j2,0),CONTADOR,valfl,valfl2);
}
}
}
//-----------------------------
}//END WHILE