#include <16f877a.h> //pic a utilizar
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP //ordenes para el programador
#use delay (clock=4000000) //Fosc=4Mhz
void mostrar(int temperatura);
float temperatura=0;
void main(void)
{
set_tris_b(0x00);
set_tris_c(0x00);
output_low(pin_C0);
output_low(pin_C1);
output_low(pin_C2);
setup_adc_ports(NO_ANALOGS);
setup_adc_ports(RA0_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0); //Canal 0.
delay_ms(1);
while(1)
{
mostrar(temperatura=read_adc()*(500/255));
}
}
void mostrar(int 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.
}
#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.
}
#include <16f877a.h> //pic a utilizar
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP //ordenes para el programador
#use delay (clock=4000000) //Fosc=4Mhz
int decenas=0, unidades=0, decimales=0, interrupciones=1;
int tab7seg[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67};
#int_TIMER0
void Timer0_isr(void)
{
switch(interrupciones)
{
case 1:
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.
interrupciones++;
break;
case 2:
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.
interrupciones++;
break;
default:
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.
interrupciones=1;
break;
}
set_timer0(252);
}
void conversion_bcd(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.
setup_adc_ports(NO_ANALOGS);
setup_adc_ports(RA0_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0); //Canal 0.
set_timer0(252); //T = (256 - precarga) * Preescaler * 4 / Fosc --->>> precarga=252
while(1)
{
temperatura=read_adc()*(100/51);
conversion_bcd(temperatura);
}
}
void conversion_bcd(long temperatura)
{
while(temperatura>100)
{
temperatura=temperatura-100;
decenas++;
}
while(temperatura>10)
{
temperatura=temperatura-10;
unidades++;
}
while(temperatura>0)
{
temperatura=temperatura-1;
decimales++;
}
}
...
switch(interrupciones++)
{
...
}
...
while(temperatura>=10)
#device adc=10temperatura = (float) (read_adc() * 0.04883);
temperatura=(float) read_adc()*(500/1024);