Buenas a todos.
Por fin lo he conseguido.
Cambie la configuración y cambie el cristal y ya funciona siempre en la placa que hice.
Este programa esta hecho para un cristal de 4 MHz.
He hecho un programa, ya puestos, para que valga para todo el mundo que empieza, para lcd, con interrupción de tmr0 y comunicacion con ordenador por puerto serie rs232.
#include <18f4550.h> //archivo de cabecera
#fuses HS,MCLR,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOPBADEN,NOLVP,NOCPD,NODEBUG,NOWRT,NOVREGEN,CPUDIV1
#use delay(clock=4000000)
#use rs232 (baud=9600, xmit=PIN_C6, rcv=PIN_C7, parity=N, bits=8)
#include <flex_lcd.h>
char rcvchar=0x00;
long con_tim=0x00;
short seg_si=0;
short enc_si=0;
#INT_TIMER0
void timer0() //Interrupción del timer 0
{
SET_TIMER0(0xC2); //Ponemos el valor 0x87 en el TIMER0
con_tim++; //Incrementamos la variable intermedia con_tim
if (con_tim>=300) //Comprobamos el valor de con_tim
{
seg_si=1; //Si es mayor o igual que 250 ponemos a uno seg_si
con_tim=0x00; //Y además ponemos a cero con_tim
}
}
#int_rda
void serial_isr()
{
disable_interrupts( INT_Timer0 );
if(kbhit())
{
rcvchar=getc();
putc(rcvchar);
lcd_putc(rcvchar);
}
enable_interrupts( INT_Timer0 );
}
void main()
{
SETUP_TIMER_0(RTCC_DIV_256|RTCC_INTERNAL|RTCC_8_BIT);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
Setup_ADC_Ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_spi(FALSE);
setup_psp(PSP_DISABLED);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
port_b_pullups(FALSE);
setup_wdt(WDT_OFF);
setup_oscillator(False);
SET_TIMER0(0xC2);
enable_interrupts( INT_Timer0 );
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
delay_ms(5000);
lcd_init();
lcd_putc("esperar");
delay_ms(1000);
lcd_putc("esp");
while(true)
{
delay_ms(1000);
output_high(PIN_D7);
delay_ms(1000);
output_low(PIN_D7);
}
}