Hola zafra_bcn. No soy experto en CCS, pero he estado mirando tu código y veo algunas lineas que te pueden estar causando problemas.
El CCS no es un lenguage de programación totalmente ANSI standard, por lo que resulta muy cómodo para principiantes como nosotros. Lo mejor para implementar código en CCS entonces es estudiar un poco las instrucciones que vamos a utilizar en el manual y asi verás como no tienes que preocuparte por manejar flags ni estar observando el estado de registros ni bits ni nada de esas cosas que se parecen tanto al lenguaje ensamblador, ya que es el mismo CCS quien internamente hace todas estas operaciones por nosostros.
De entrada para tu código te recomiendo la siguiente configuración:
#include <18F4620.h>
// #device adc=10
#FUSES NOWDT //No Watch Dog Timer
#FUSES WDT128 //Watch Dog Timer uses 1:128 Postscale
#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPROTECT //Code not protected from reading
#FUSES IESO //Internal External Switch Over mode enabled
#FUSES BROWNOUT //Reset when brownout detected
#FUSES BORV21 //Brownout reset at 2.1V
#FUSES PUT //Power Up Timer
#FUSES NOCPD //No EE protection
#FUSES STVREN //Stack full/underflow will cause reset
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOWRT //Program memory not write protected
#FUSES NOWRTD //Data EEPROM not write protected
#FUSES NOEBTR //Memory not protected from table reads
#FUSES NOCPB //No Boot Block code protection
#FUSES NOEBTRB //Boot block not protected from table reads
#FUSES NOWRTC //configuration not registers write protected
#FUSES NOWRTB //Boot block not write protected
#FUSES FCMEN //Fail-safe clock monitor enabled
#FUSES NOXINST //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
#FUSES NOPBADEN //PORTB pins are configured as digital I/O on RESET
#FUSES LPT1OSC //Timer1 configured for low-power operation
#FUSES MCLR //Master Clear pin enabled
#use delay(clock=40000000)
Como podrás ver, he cambiado un par de fuses (LVP por NOLVP y PBADEN por NOPBADEN). Revisa muy bien la hoja de datos del PIC respecto a estos dos fuses y de acuerdo a tu circuito y a tu programador.
También te recomiendo el siguiente encabezado para el main:
void main()
{
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_CLOCK_DIV_2|ADC_TAD_MUL_0);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_OFF);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
setup_ccp1(CCP_OFF);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
enable_interrupts(INT_EXT);
enable_interrupts(INT_EXT1);
enable_interrupts(INT_EXT2);
enable_interrupts(GLOBAL);
Por experiencia, en CCS es mejor curarse en salud y desactivar todo lo que no se va a usar.
Cada vez que conectamos el PIC18F4620, se ejecutan (por orden 0, 1 y 2) las tres interrupcciones que conforman nuestro programa... Y eso no lo queremos. Queremos que cuando se ejecuten no al iniciar, si no cuando se produzcan por medio de tres botones conectados a masa.
Respecto a esto y por algunas experiencias que podrás ver aquí en el foro con el uso de la instrucción port_b_pullups(TRUE), te recomendaría que si tus pulsadores van conectados al negativo, mejor les coloques resistencias 'pull-up' a cada pin de unos 10K ya que sin estas el ruido te puede activar aleatoriamente los pines y es muy posible que sea por eso que las interrupciones se inician solas.
Finalmente, veo que en el código de las interrupciones tienes insertados unos delays de 1 segundo y otro de 10 segundos al encender y apagar cada LED. No es muy recomendable meter tiempos excesivos como estos dentro de una interrupción, sino que más bien lo que debe uno hacer dentro de la interrupción es crear una condición lógica para que el código principal del programa la interprete y ejecute lo que deseamos.
Bueno, les deseo mucha suerte con su proyecto. Un saludo,
Bernardo