;****************************************************************
;* Winkasm.asm
;* Ejemplo de programa que hace parpadear un LED
;* conectado al PORTB.0
;****************************************************************

	LIST	p=16F628		;Decimos al ensamblador qué micro estamos usando
	include "P16F628.inc"		;Incluimos las definiciones de nuestro micro
	__config 0x3D18			;configuramos (oscilador, tipo etc.)

	cblock 	0x20 			;Comienzo de los registros de proposito general
					;RAM en el Bank0
		count1 			;Usado en la rutina Delay
		counta 			;idem
		countb 			;idem
	endc
	
	org	0x0000			;org coloca el programa en el origen, 0x0000 para el 16F628,
					;Por aquí es por donde empieza el programa a ejecutarse
	movlw	0x07
	movwf	CMCON			;Deshabilito los comparadores

   	bsf 	STATUS,		RP0	;Selecciono el Bank 1 para poder acceder a TRISB
   	movlw 	b'00000000'		;Configuro todo el PortB para que sea de salida
   	movwf 	TRISB
	bcf	STATUS,		RP0	;Selecciono de nuevo el Bank 0

Loop	
	movlw	b'00000001'		;Pongo a '1' el primer bit del PortB
	movwf	PORTB
	nop				;nop no hace nada (nada mas que incrementar el Program Counter ...)
	nop				;
	call	Delay			;Llamo a la rutina que espera ...
	movlw	b'00000000'		;Pongo a '0' el primer bit del PortB
	movwf	PORTB
	call	Delay			;Llamo de nuevo a la rutina que espera ...
	goto	Loop			;Salto al comienzo y así hasta el infinito

Delay	movlw	d'250'			;Espero 250 ms (Para un reloj de 4 MHz)
	movwf	count1
d1	movlw	0xC7
	movwf	counta
	movlw	0x01
	movwf	countb
Delay_0
	decfsz	counta, f
	goto	$+2
	decfsz	countb, f
	goto	Delay_0

	decfsz	count1	,f
	goto	d1
	retlw	0x00

	end      