Hola:
Deseo intentar lograr con un PIC12F629 varios tipos de parpadeo de un LED. Entre ellos cambiaré el modo de parpadeo con un pulsador que cada vez al pulsar el pulsador, cambia de modo de configuración del LED. Habrá 3 tipos de configuración.
Dejo un ejemplo mal hecho para que sepan la idea y lograr este objetivo.
	
	
	
		
Librería RETARDOS_12F629.INC
	
	
	
		
Un cordial saludo.
EDITO:
Por ahora estoy intentando hacer esto, pero no me sale. Sólo soy ideas.
	
	
	
		
				
			Deseo intentar lograr con un PIC12F629 varios tipos de parpadeo de un LED. Entre ellos cambiaré el modo de parpadeo con un pulsador que cada vez al pulsar el pulsador, cambia de modo de configuración del LED. Habrá 3 tipos de configuración.
Dejo un ejemplo mal hecho para que sepan la idea y lograr este objetivo.
		Código:
	
	; ZONA DE DATOS *********************************************************************
	LIST      P=12F629         		; Procesador utilizado.
	INCLUDE      <P12F629.INC>      ; Definición de algunos operandos utilizados.
	__CONFIG   _CPD_OFF & _CP_OFF & _BODEN_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
	__idlocs	0001				; Versión 1 del ID.
	CBLOCK      0x20
	Contador
	ENDC
	#DEFINE      LED      GPIO,2	; Salida del Led.
	#DEFINE      Pulsador GPIO,3	; Entrada del interruptor.
; ZONA DE CÓDIGOS *******************************************************************
	ORG      0						; El prograna empieza con la dirección 0.
Inicio
	bsf		STATUS,RP0				; Pone a 1 el bit 5 del STATUS. Acceso al Banco 1.
	movlw	0x20            		; Valor de calibración.
	movwf   OSCCAL
	movlw   b'00001000'         	; Activar GP3 como entrada.
	movwf   TRISIO
	bcf		STATUS,RP0         		; Pone a 0 el bit 5 de STATUS. Acceso al Banco 0.
Principal
	movf	GPIO,W
	andlw	b'00001000'
	addwf	PCL,F
	goto	Configuracion_0
	goto	Configuracion_1
	goto	Configuracion_2
Configuracion_0
	bsf		LED
	call	Retardo_1s
	bcf		LED
	call	Retardo_1s
;	goto	Principal
Configuracion_1
	bsf		LED
	call	Retardo_0.5s
	bcf		LED
	call	Retardo_0.5s
;	goto	Principal
Configuracion_2
	bsf		LED
	call	Retardo_0.1s
	bcf		LED
	call	Retardo_1s
	goto	Principal
	INCLUDE	<RETARDOS_12F629.INC>	; Subrutinas de retardos.
	END
	Librería RETARDOS_12F629.INC
		Código:
	
	; SUBRUTINA *************************************************************************
; Retardo_1s ************************************************************************
; Delay = 1 seconds
; Clock frequency = 4 MHz
; Actual delay = 1 seconds = 1000000 cycles
; Error = 0 %
	cblock
	d0
	d1
	d2
	endc
Retardo_1s
			;999990 cycles
	movlw	0x07
	movwf	d0
	movlw	0x2F
	movwf	d1
	movlw	0x03
	movwf	d2
Retardo_1s_0
	decfsz	d0, f
	goto	$+2
	decfsz	d1, f
	goto	$+2
	decfsz	d2, f
	goto	Retardo_1s_0
			;6 cycles
	goto	$+1
	goto	$+1
	goto	$+1
			;4 cycles (including call)
	return
; Retardo_5s ************************************************************************
; Delay = 5 seconds
; Clock frequency = 4 MHz
; Actual delay = 5 seconds = 5000000 cycles
; Error = 0 %
	cblock
	d3
	d4
	d5
	endc
Retardo_5s
			;4999993 cycles
	movlw	0x2C
	movwf	d3
	movlw	0xE7
	movwf	d4
	movlw	0x0B
	movwf	d5
Retardo_5s_0
	decfsz	d3, f
	goto	$+2
	decfsz	d4, f
	goto	$+2
	decfsz	d5, f
	goto	Retardo_5s_0
			;3 cycles
	goto	$+1
	nop
			;4 cycles (including call)
	return
; Retardo_0.5s ************************************************************************
; Delay = 0.5 seconds
; Clock frequency = 4 MHz
; Actual delay = 0.5 seconds = 500000 cycles
; Error = 0 %
	cblock
	d6
	d7
	d8
	endc
Retardo_0.5s
			;499994 cycles
	movlw	0x03
	movwf	d6
	movlw	0x18
	movwf	d7
	movlw	0x02
	movwf	d8
Retardo_0.5s_0
	decfsz	d6, f
	goto	$+2
	decfsz	d7, f
	goto	$+2
	decfsz	d8, f
	goto	Retardo_0.5s_0
			;2 cycles
	goto	$+1
			;4 cycles (including call)
	return
; Retardo_0.3s ************************************************************************
; Delay = 0.3 seconds
; Clock frequency = 4 MHz
; Actual delay = 0.3 seconds = 300000 cycles
; Error = 0 %
	cblock
	d9
	d10
	endc
Retardo_0.3s
			;299993 cycles
	movlw	0x5E
	movwf	d9
	movlw	0xEB
	movwf	d10
Retardo_0.3s_0
	decfsz	d9, f
	goto	$+2
	decfsz	d10, f
	goto	Retardo_0.3s_0
			;3 cycles
	goto	$+1
	nop
			;4 cycles (including call)
	return
; Retardo_0.1s ************************************************************************
; Delay = 0.1 seconds
; Clock frequency = 4 MHz
; Actual delay = 0.1 seconds = 100000 cycles
; Error = 0 %
	cblock
	d11
	d12
	endc
Retardo_0.1s
			;99993 cycles
	movlw	0x1E
	movwf	d11
	movlw	0x4F
	movwf	d12
Retardo_0.1s_0
	decfsz	d11, f
	goto	$+2
	decfsz	d12, f
	goto	Retardo_0.1s_0
			;3 cycles
	goto	$+1
	nop
			;4 cycles (including call)
	return
; Retardo_0.02s ************************************************************************
; Delay = 0.02 seconds
; Clock frequency = 4 MHz
; Actual delay = 0.02 seconds = 20000 cycles
; Error = 0 %
	cblock
	d13
	d14
	endc
Retardo_0.02s
			;19993 cycles
	movlw	0x9E
	movwf	d13
	movlw	0x10
	movwf	d14
Retardo_0.02s_0
	decfsz	d13, f
	goto	$+2
	decfsz	d14, f
	goto	Retardo_0.02s_0
			;3 cycles
	goto	$+1
	nop
			;4 cycles (including call)
	return
	Un cordial saludo.
EDITO:
Por ahora estoy intentando hacer esto, pero no me sale. Sólo soy ideas.
		Código:
	
	; ZONA DE DATOS *********************************************************************
	LIST      P=12F629         		; Procesador utilizado.
	INCLUDE      <P12F629.INC>      ; Definición de algunos operandos utilizados.
	__CONFIG   _CPD_OFF & _CP_OFF & _BODEN_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
	__idlocs	0002				; Versión 1 del ID.
	CBLOCK      0x20
	Contador
	ENDC
	#DEFINE      LED      GPIO,2	; Salida del Led.
	#DEFINE      Pulsador GPIO,3	; Entrada del interruptor.
; ZONA DE CÓDIGOS *******************************************************************
	ORG      0						; El prograna empieza con la dirección 0.
Inicio
	bsf		STATUS,RP0				; Pone a 1 el bit 5 del STATUS. Acceso al Banco 1.
	movlw	0x20            		; Valor de calibración.
	movwf   OSCCAL
	movlw   b'00001000'         	; Activar GP3 como entrada.
	movwf   TRISIO
	bcf		STATUS,RP0         		; Pone a 0 el bit 5 de STATUS. Acceso al Banco 0.
Principal
	btfsc	Pulsador				; ¿Pulsador presionado?, ¿(Pulsador)=0?
	goto	Fin						; No. Vuelve a leerlo.
;	call	Retardo_0.02s			; Espera que se estabilicen los niveles de tensión.
	btfsc	Pulsador				; Comprueba si es un rebote.
	goto	Fin						; Era un rebote y sale fuera.
	call	IncrementaVisualiza		; Incrementa el contador y lo visualiza.
EsperaDejePulsar
	btfss	Pulsador				; ¿Dejó de pulsar?. ¿(Pulsador)=1?
	goto	EsperaDejePulsar		; No. Espera que deje de pulsar.
Fin	goto	Principal
Loco
	goto	Configuracion_0
	goto	Configuracion_1
	goto	Configuracion_2
Configuracion_0
	bsf		LED
;	call	Retardo_1s
	bcf		LED
;	call	Retardo_1s
;	goto	Principal
Configuracion_1
	bsf		LED
;	call	Retardo_0.5s
	bcf		LED
;	call	Retardo_0.5s
;	goto	Principal
Configuracion_2
	bsf		LED
;	call	Retardo_0.1s
	bcf		LED
;	call	Retardo_1s
	goto	Principal
; Subrutina "IncrementaVisualiza" ---------------------------------------------------------
IncrementaVisualiza
	incf	Contador,F				; Incrementa el contador y comprueba si ha
	movlw 	d'3'					; llegado a su valor máximo mediante una
	subwf	Contador,W				; resta. (W)=(Contador)-10.
	btfsc	STATUS,C				; ¿C=0?, ¿(W) negativo?, ¿(Contador)<10?
InicializaContador
	clrf	Contador				; No, era igual o mayor. Por tanto, resetea.
	goto	Loco
	return
	INCLUDE	<RETARDOS_12F629.INC>	; Subrutinas de retardos.
	END