Ante todo daros las gracias a todos por vuestra ayuda,
mil gracias a POCHER por el programita ya estoy obligado a aprender C y lo mejor es que le he cogido el gustillo.
Os coloco el codigo ya depurado para un 12c508a, habia algunas cosillas que no me funcionaban, pero las consegui enmendar.
// Ejer30_5A.C
// El LED se enciende suavemente hasta el máximo y luego se apaga suavemente hasta cero
#include <12c508a.h>
//#fuses INTRC,NOWDT,NOMCLR,PROTECT
#use delay(Clock=4000000)
main()
{
int16 b;
int16 c;
int8 d;
int16 e;
setup_counters(RTCC_INTERNAL,RTCC_DIV_16);
//setup_timer_1(T1_DISABLED);
//setup_comparator(NC_NC_NC_NC);
//setup_vref(FALSE);
output_B(0x00);
set_tris_b(0x00);
b=0;
c=0;
e=255;
while(TRUE)
{
output_bit(PIN_B0,0);
delay_ms(2000);
while(b<255)
{
d=0;
while(d<6)
// set_timer0(50);
// while(get_timer0()<220)
{
output_high(pin_B0);
for(c=b;c!=0;c--)
delay_us(2);
output_low(pin_B0);
for(c=e-b;c!=0;c--)
delay_us(28);
d++;
}
b++;
}
output_bit(PIN_B0,1);
delay_ms(3000);
while(b>0)
{
d=0;
while(d<6)
// set_timer0(50);
// while(get_timer0()<220)
{
output_high(pin_B0);
for(c=b;c!=0;c--)
delay_us(5);
output_low(pin_B0);
for(c=e-b;c!=0;c--)
delay_us(25);
d++;
}
b--;
}
}
}
Una de las cosas que me fallaron fue el timer0, lo sustitui por una variable que hace repetir el ciclo las veces que uno quiera para que vaya mas rapido o mas lento la subida y la bajada, otro problema fue la operacion de c=255-b, cuando realizaba esta operacion me daba un c de 16bits, mayor que 255 que es el valor maximo que toman ambas variables(sin embargo en el 12F629 no tuve problemas con dicho valor y lo unico que no iba era el tmr0), al final cambie algunos valores del delay para los anchos de pulsos para obtener un efecto mejor, todo fue cuestion de probar.
Todo va como la seda y he decidido de ahora en adelante programar en C, joder si hubiese tenido que hacer esto en asembler me da algo y para cambiar cosas esto es una maravilla.