Para nada es complicado, programar en Arduino se parece mucho a hacerlo en ccs
mira este post, es con un pic diferente, pero la base es lo mismo
http://www.todopic.com.ar/foros/index.php?topic=4530.0
Si cierto es lenguaje C tanto en uno como en otro.
por cierto, para los moderadores... Podríais colocar una chincheta al post al que hago mención ya que creo que es de gran utilidad
Ya esta con chincheta en el foro de C en los cursos, creo.
He pensado utilizar la PIC 10F200, que creo que es la más económica que existe.
No me extraña que sea barato, no tiene de nada

ni vector de interrupciones, ni registro TRIS, ni registro OPTION, por no tener ni siquiera tiene las instrucciones RETURN ni RETFIE hay que arreglarse con RETLW

Pero todas las incomodidades que tiene lo suple en el precio, es un buen PIC para hacer cosas de muy bajo coste (0,31$, precio Microchip), la verdad que nunca lo habia programado y me volvi un poco loco, espero que funcione bien.
; **** Encabezado ****
list p=10F200
#include P10F200.inc
__CONFIG 0FFB ;__CONFIG _CP_OFF & _WDT_OFF & _MCLR_ON
CBLOCK 0X10 ;definimos donde empiezan los registros de RAM
PDel0
PDel1
CONTADOR
ENDC
#DEFINE PULSADOR GPIO,1 ;definimos los pines a usar
#DEFINE LED GPIO,0 ;los puedes cambiar si quieres
ORG 0x00 ;cuando haya interrupcion tambien vendra aqui, ya que este PIC no tiene
GOTO INICIO ;vector de interrupciones.
INICIO
MOVLW 0X3F ;para configurar la interrupcion por cambio de estado
OPTION ;se usa la instruccion "OPTION", ya que el registro OPTION no existe fisicamente
MOVLW 0X7E
MOVWF OSCCAL
MOVLW 0X02 ;configuramos GPIO,1 como entrada, para pulsador
TRIS GPIO ;se usa la instruccion "TRIS" ya que el registro TRIS no esta implementado fisicamente
BTFSC STATUS,GPWUF ;chequeamos el bit STATUS,GPWUF, este flag indica que hubo un cambio en GP0, GP1 o GP3
GOTO ISR ;si el FLAG esta a 1, haremos la secuencia de encendido y apagado del LED
DORMIR
SLEEP ;aqui estara hasta que una pulsacion lo despierte
GOTO DORMIR
;***********En el ISR no se hacen copias de respaldo de registros, porque solo hay este programa, no hace nada mas***************
;***********Realmente no es una interrupcion, o si, ya no lo se, pero no se puede volver con un RETFIE, no existe****************
;***********Tampoco tiene la instruccion "RETURN" solo tiene "RETLW", MPLAB si pones RETURN lo sustutiye por RETLW***************
ISR
BCF STATUS,GPWUF ;borramos flag de "interrupcion" por cambio de estado
BTFSC PULSADOR ;esperamos hasta que se suelte el pulsador
GOTO ISR
ISR_1
BSF LED ;encendemos el led
CALL DEMORA ;llamamos retardo de 500mS
BCF LED ;apagamos led
CALL DEMORA ;llamamos retardo de 500mS
INCF CONTADOR,1 ;para contar 5 veces esta secuencia
MOVLW .5 ;cambiando este numero se cambia el numero de veces que realiza la secuencia
SUBWF CONTADOR,0
BTFSS STATUS,Z ;comprobamos que llego a 5, STATUS,Z=FLAG 0
GOTO ISR_1 ;no llego a 5, repite secuencia
CLRF CONTADOR
GOTO INICIO ;llego a 5, acaba secuencia, no se puede poner un RETFIE
;porque no existe y se pierde el programa, tampoco existe RETURN, SOLO RETLW
DEMORA
movlw .239 ; 1 set numero de repeticion (B)
movwf PDel0 ; 1 |
PLoop1 movlw .232 ; 1 set numero de repeticion (A)
movwf PDel1 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
PDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2 goto PDelL3 ; 2 ciclos delay
PDelL3 clrwdt ; 1 ciclo delay
decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1 ; 2 no, loop
PDelL4 goto PDelL5 ; 2 ciclos delay
PDelL5 goto PDelL6 ; 2 ciclos delay
PDelL6 goto PDelL7 ; 2 ciclos delay
PDelL7 clrwdt ; 1 ciclo delay
RETLW ; 2+2 Fin.
ENDCuando se presiona el pulsador, sale de SLEEP y al soltarlo realiza la secuencia.
Esta hecho con el esquema adjunto, la resistencia de 330 si ves que alumbra poco bajasela un poco, pero no mucho si no cascara el LED.
Si quieres puedes ponerle otro LED (arreglariamos el programa) y se podrian hacer unos juegos de luces mas vistosos.