Segun lo que entendi, el codigo deberia ser asi:
#include <16f877a.h> //pic a utilizar
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP //ordenes para el programador
#use delay (clock=4000000) //Fosc=4Mhz
void mostrar(long temperatura);
long temperatura=0;
void main(void)
{
set_tris_a(0x00);
set_tris_b(0x00);
set_tris_c(0x00);
set_tris_d(0x00);
output_low(pin_C0);
output_low(pin_C1);
output_low(pin_C2);
output_a(0x00);
output_b(0x00);
output_c(0x00);
output_d(0x00);
enable_interrupts(INT_RTCC); // Habilito Interrupción RTCC.
setup_counters(RTCC_INTERNAL,RTCC_DIV_256);// TIMER0: Clock Interno, Presescaler 256.
set_timer0(252);
setup_adc_ports(NO_ANALOGS);
setup_adc_ports(RA0_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0); //Canal 0.
while(1)
{
temperatura=read_adc()*(100/51);
}
}
#int_TIMER0
void Timer0_isr(void)
{
mostrar(temperatura);
set_timer0(252);
}
void mostrar(long temperatura)
{
int decenas=0, unidades=0, decimales=0;
int tab7seg[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67};
while(temperatura>100)
{
temperatura=temperatura-100;
decenas++;
}
while(temperatura>10)
{
temperatura=temperatura-10;
unidades++;
}
while(temperatura>0)
{
temperatura=temperatura-1;
decimales++;
}
output_high(pin_C0);
output_b(tab7seg[decenas]);
delay_ms(5);
output_low(pin_C0);
delay_ms(5); //VER SI PUEDEN SER MENORES O CERO.
output_high(pin_C1);
output_b(tab7seg[unidades]);
delay_ms(5);
output_low(pin_C1);
delay_ms(5); //VER SI PUEDEN SER MENORES O CERO.
output_high(pin_C2);
output_b(tab7seg[decimales]);
delay_ms(5);
output_low(pin_C2);
delay_ms(5); //VER SI PUEDEN SER MENORES O CERO.
}
Pero definitivamente entendi mal ya que no se prenden nunca los displays......esta claro que no entiendo bien que es lo ke hay que hacer cuando entra a la interrupcion. NO tengo que hacer ahi lo que quiero hacer y al salir poner el valor del TIMER0 en el valor de precarga??
Vi tu ejemplo MLO_ y por lo que entendi, todo lo que haces dentro de la interrupcion es lo que cada uno necesita para su necesidad?