Aqui os envio el codigo que utilizo ahora y que si funciona porque el vector es de 10, si le pongo de tamaño 50 o 100 me da error en la compilacion.
#include <16F876A.h>
#use delay(clock=20000000)
#define use_portb_lcd TRUE
#include <lcd.c>
#fuses HS, NOWDT, NOPROTECT, NOPUT, NOBROWNOUT, NOLVP
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
char cad1[7]="BARES";
char cad2[12]="ATMOSFERAS";
char cad3[5]="PSI";
char cad4[14]="KILOPASCALES";
float atm=0;
float bar=0;
float psi=0;
long int KPa=0;
float x=0;
int i=0;
float suma=0;
int num=0;
float vector[10];
void primera_medida()
{
set_tris_a(0xFF);
setup_adc_ports(AN0_AN1_VSS_VREF);
setup_adc(ADC_CLOCK_DIV_8);
set_adc_channel(0);
suma=0;
for (i=0; i<10; i++)
{
suma = suma + vector;
}
x=suma/10;
}
void valor ()
{
set_tris_a(0xFF);
setup_adc_ports(AN0_AN1_VSS_VREF);
setup_adc(ADC_CLOCK_DIV_8);
set_adc_channel(0);
for (i=0;i<10;i++)
{
vector=vector[i+1];
}
vector[9]=read_adc();
delay_ms(200);
suma=0;
for (i=0; i<10; i++)
{
suma = suma + vector;
}
x=suma/10;
atm=(1.28*x)-140;
bar=atm*1.013;
psi=atm*14.7;
KPa=atm*101.325;
}
void main()
{
set_tris_a(0xFF);
setup_adc_ports(AN0_AN1_VSS_VREF);
setup_adc(ADC_CLOCK_DIV_8);
set_adc_channel(0);
lcd_init();
for (i=0;i<10;i++)
{
vector=read_adc();
delay_ms(200);
}
primera_medida();
do
{
if(num>4) num=0;
else num=num;
if (!input(PIN_C0))
num+=1;
else if (!input(PIN_C2))
num-=1;
else num=num;
Switch(num)
{
case 1:
if(!input(PIN_C1))
{
do
{
Valor();
lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc("MEDIDOR PRESION");
lcd_putc("\n");
printf(lcd_putc,"%4.2f BAR",bar);
printf("\r \n %4.2f BAR",bar);
delay_ms(20);
}while(true);
}
else
{
lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc("UNIDADES MEDIDA");
lcd_putc("\n");
printf(lcd_putc,"%s",cad1);
delay_ms(200);
}
break;
case 2:
if(!input(PIN_C1))
{
do
{
valor();
lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc("MEDIDOR PRESION");
lcd_putc("\n");
printf(lcd_putc,"%4.2f ATM",atm);
printf("\r \n %4.2f ATM",atm);
delay_ms(20);
}while(true);
}
else
{
lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc("UNIDADES MEDIDA");
lcd_putc("\n");
printf(lcd_putc,"%s",cad2);
delay_ms(200);
}
break;
case 3:
if(!input(PIN_C1))
{
do
{
valor();
lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc("MEDIDOR PRESION");
lcd_putc("\n");
printf(lcd_putc,"%4.2f PSI",psi);
printf("\r \n %4.2f PSI",psi);
delay_ms(200);
}while(true);
}
else
{
lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc("UNIDADES MEDIDA");
lcd_putc("\n");
printf(lcd_putc,"%s",cad3);
delay_ms(200);
} break;
case 4:
if(!input(PIN_C1))
{
do
{
valor();
lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc("MEDIDOR PRESION");
lcd_putc("\n");
printf(lcd_putc,"%Lu KPa",KPa);
printf("\r \n %Lu KPa",KPa);
delay_ms(20);
}while(true);
}
else
{
lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc("UNIDADES MEDIDA");
lcd_putc("\n");
printf(lcd_putc,"%s",cad4);
delay_ms(200);
} break;
default:
lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc("MEDIDOR PRESION");
delay_ms(1000);
lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc("MEDIDOR PRESION");
lcd_putc("\n");
lcd_putc("Elegir unidades");
delay_ms(1000);
break;
}
}while (true);
}