Hola amigos, les escribo para ver si me pueden ayudar con un fallo que me esta robando el sueño desde hace dias, lo que tengo que hacer es la compensación de un termopar tipo k, lo que hago es amplificar le señal del termopar para mandarla al canal analogico del pic y mediante una funcion calcula la temperatura, en otro canal leo la tension de un lm35 y hago lo mismo, al final solo sumo ambas temperaturas y mando el resultado a una lcd, en simulacion no hay problema alguno, solo es en fisico y es que al imprimir mi temperatura lo que hace es imprimir uno o dos valores incorrectos seguidos del correcto y asi se sigue, y no logro solucionarlo, anexo mi código esperando puedan ayudarme

:
// Conexiones del LCD
#define LCD_RS_PIN PIN_C0
#define LCD_RW_PIN PIN_C1
#define LCD_ENABLE_PIN PIN_C2
#define LCD_DATA4 PIN_C3
#define LCD_DATA5 PIN_C4
#define LCD_DATA6 PIN_C5
#define LCD_DATA7 PIN_C6
//Declaramos las librerias y registros de nuestro PIC
#include <16F877a.h>
#fuses XT, NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOLVP
#device ADC = 10
#use delay(clock = 4MHz)
#include <lcd.c>
#byte PORTB=0x86
#byte TRISB=0x06
#define boton_1 PIN_B0
#define boton_2 PIN_B1
#include <math.h>
void main()
{
//Declaramos nuestras constantes y variables
float tempc,temp_c,tempf,E,temp_amb,tempk, tempr;
float a0= 0.00E00;
float a1=2.508355E+01;
float a2=7.860106E-02;
float a3= -2.503131E-01;
float a4= 8.315270E-02;
float a5=-1.228034E-02;
float a6= 9.804036E-04;
float a7= -4.413030E-05;
float a8=1.057734E-06 ;
float a9=-1.052755E-08;
int menu=1;
//Declaramos nuestras entradas digitales
trisb=0b1111111;
//Configuramos los canales analogicos para la lectura de los sensores
lcd_init();
lcd_putc('\f');
lcd_gotoxy(1, 1);
printf(lcd_putc,"Compensacion de ");
lcd_gotoxy(1, 2);
printf(lcd_putc,"Termopar tipo K");
delay_ms(2000);
lcd_putc('\f');
lcd_gotoxy(1, 1);
printf(lcd_putc,"Equipo: 6");
lcd_gotoxy(1, 2);
printf(lcd_putc,"Grupo: 6AM1");
delay_ms(2000);
lcd_putc('\f');
while(TRUE){
setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports(AN0_AN1_AN3);
delay_ms(1);
set_adc_channel(1);
delay_ms(100);
//Realizamos la lectura del ADC para el termopar y convertimos a tension
E=read_adc()*(((0.004887)*1000)/(242.2480));
//Se aplica del polinomio obtenido de las tablas de termopar tipo K para obtener la temperatura medida
set_adc_channel(0);
delay_ms(100);
//Realizamos la lectura del ADC del LM35 para asi obtener la temperatura ambiente
temp_amb = read_adc()*0.4887;
temp_amb=0;
setup_adc (adc_off);
temp_c=a0+(a1*pow(E,1))+(a2*pow(E,2))+(a3*pow(E,3))+(a4*pow(E,4))+(a5*pow(E,5))+(a6*pow(E,6))+(a7*pow(E,7))+(a8*pow(E,8))+(a9*pow(E,9));
//Realizamos la compensacion
tempc=temp_c+temp_amb;
//Realizamos las debidas conversiones a C,F,K y R
tempf=(1.8*tempc)+32;
tempk=tempc+273;
tempr=((9/5)*tempc)+491.67;
//Menu para cambiar las unidades de temperatura mostradas en la LCD
if (input(boton_1)==1 && input(boton_2)==0)
{
do{
}while(input(boton_1));
menu=menu-1;
if(menu<1) menu=1;
delay_ms(10);
if(menu>4) menu=4;
delay_ms(10);
}
if (input(boton_1)==0 && input(boton_2)==1)
{
do{
}while(input(boton_2));
menu=menu+1;
delay_ms(10);
}
switch (menu){
case 1:
lcd_gotoxy(1, 1);
printf(lcd_putc," Celsius ");
lcd_gotoxy(1, 2);
printf(lcd_putc,"T=%2.0f %cC ",tempc, 223);
break;
case 2:
lcd_gotoxy(1, 1);
printf(lcd_putc," Fahrenheit ");
lcd_gotoxy(1, 2);
printf(lcd_putc,"T=%2.0f %cF ",tempf,223);
break;
case 3:
lcd_gotoxy(1, 1);
printf(lcd_putc," Kelvin ");
lcd_gotoxy(1, 2);
printf(lcd_putc,"T=%2.0f K ",tempk);
break;
case 4:
lcd_gotoxy(1, 1);
printf(lcd_putc," Rankine ");
lcd_gotoxy(1, 2);
printf(lcd_putc,"T=%2.0f R ",tempr);
break;
}
delay_ms(100);
}
}