Pues ya llevas razón se me había escapado, cuando hago C pongo todas las funciones en un include y las cabeceras en un archivo .h , al hacerlo todo en un mismo archivo se me escapó.
Gracias por estar atento
Aki está el resultado:
//******************************************************+
//
// Adquisición de dos entradas analógicas
//
// Parpadeo de LED en RB1
//
// AD0:
// AD1: termómetro con LM35
//
// Polling entrada digital RB0 ( 0 si activada)
//
// Entrada string por Interrupción UART
// Si es "SUMAR" entrar dos numeros y se suman
//
// Visualización de los resultados por UART
//
//
// Autor: T0ni0
//
//******************************************************+
#include <16F876.h>
#device ICD=TRUE
#device adc=10
#use delay(clock=20000000)
#fuses NOWDT,HS, NOPUT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, DEBUG
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ZERO_RAM
//******************************************************+
// Cabezeras
//******************************************************+
long int suma(long int num1, long int num2);
//******************************************************+
// Variables globals
//******************************************************+
int glob;
//******************************************************+
// INTERRUPCIÓN DE LA UART
//******************************************************+
#int_RDA
RDA_isr()
{
char caract[30];
long int x,y;
char sumes[6]="SUMAR";
gets(caract); //Guarda caracteres hasta que recibe enter.
switch (strcmp(sumes,caract)) {
// SI SON LOS DOS STRINGS IGUALES
case 0: printf("
ENTRA EL PRIMER NUMERO
" );
gets(caract); //Guarda caracteres hasta que recibe enter.
x= atoi32(caract);
printf( " EL PRIMER NUMERO ES %lu
",x);
printf(" ENTRA EL SEGUNDO NUMERO
" );
gets(caract); //Guarda caracteres hasta que recibe enter.
y= atoi32(caract);
printf( " EL SEGUNDO NUMERO ES %lu
", y);
x= suma(x,y);
// x=x + y;
printf(__DATE__);
printf(" LA SUMA ES = %lu
",x); // La mostramos
break;
// SI EL PRIMERO ES MAYOR
case 1: printf("PRIMERO MAS GRANDE
" );
printf("
ENTRAR "SUMAR" PARA EMPEZAR
" );
break;
// SI EL PRIMERO ES MENOR
case -1:printf("PRIMERO MENOR
" );
printf("
ENTRAR "SUMAR" PARA EMPEZAR
" );
break;
// PARA ESTA EVALUACIÓN TIENE QUE SER UN VALOR DE LOS ANTERIORES
default:printf("NO ENCONTRADO
" );
break; } //FINAL DEL SWITCH
} //FINAL DE LA INTERRUPCIÓN
//******************************************************+
// Funciones
//******************************************************+
long int suma(long int num1, long int num2)
{
return(num1 + num2); // Valor a retornar
}
//******************************************************+
// MAIN
//******************************************************+
void main()
{
//******************************************************+
// Variables
//******************************************************+
long int val1,val2;
//******************************************************+
// INICIO
//******************************************************+
setup_adc_ports(RA0_RA1_RA3_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
setup_spi(FALSE);
setup_counters(RTCC_INTERNAL,RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
//******************************************************+
// BUCLE PRINCIPAL
//******************************************************+
while (TRUE)
{
printf("
$AD0: EL VALOR MESURADO EN A/D 0 ES=%4lu
",val1);
delay_ms(2000);
printf("
$TEMPERATURA EXTERIOR:%2luC
",val2);
if (!input(PIN_B0))
{
printf("
$ENTRADA1: SE HA ACTIVADO" );
}
output_high(PIN_B1);
set_adc_channel(0); //observamos el canal 0
delay_ms(1000);
val1 = read_adc(); //Realizamos la adquisición
output_low(PIN_B1);
set_adc_channel(1); //observamos el canal 1
delay_ms(1000);
val2 = read_adc(); //Realizamos la adquisición
val2= val2/25.3; //Relación del (LM35 * 10)
} // FINAL DEL BUCLE PRINCIPAL
} // FINAL DEL MAIN