Por fin, tema solucionado, muchas gracias por vuestros consejos y ayuda, por fin lo he comprendido, el código queda asi:
//DEMOSTRACION DEL FUNCIONAMIENTO DE LAS FUNCIONES
#include <16F877.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#FUSES NODEBUG //No Debug mode for ICD
#use delay(clock=4000000)
int resultado(int a,int b); //DECLARAMOS FUNCION
void main()
{
int a=3;//variable local a =5
int b=3;//variable local b =5
int sumaenmain;//variable de resultado suma en main para ver si main ha recibido suma del return de la f resultado
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_CLOCK_DIV_2);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_ccp1(CCP_OFF);
while(true)
{
resultado(a,b);//llamamos a la funcion y enviamos el valor de a y de b
sumaenmain=resultado(a,b);//asignamos el valor de resultado de la funcion resultado a sumaenmain o sea
//que el return(suma)=resultado(a,b)
}
}
int resultado(int a, int b)
{
int suma;
suma=a+b;//la variabla global suma tiene el valor de a+b
return (suma);//este return da igual ponerlo o no ya que ya tenemos a+b en suma
}