        LIST    p=16F628                ;tell assembler what chip we are using
        include "P16F628.inc"           ;include the defaults for the chip
        __config 0x3D18                 ;sets the configuration settings (oscillator type etc.)
					; Set config from programmer menu (just to try it out)
        cblock  0x20                    ;start of general purpose registers
                count1                  ;used in delay routine
                counta                  ;used in delay routine 
                countb                  ;used in delay routine
        endc
        
        org     0x0000                  ;org sets the origin, 0x0000 for the 16F628,
                                        ;this is where the program starts running       
        movlw   0x07
        movwf   CMCON                   ;turn comparators off (make it like a 16F84)

        bsf     STATUS,         RP0     ;select bank 1
        movlw   b'00000000'             ;set PortB all outputs
        movwf   TRISB
        movwf   TRISA                   ;set PortA all outputs
        bcf     STATUS,         RP0     ;select bank 0
        
FLASH	macro	val
	        movlw   val
	        movwf   PORTB
	        call    Delay                   ;this waits for a while!
		endm

Loop
		variable i
		variable count=0x20
		
		variable i=0
		
		while i < count
			FLASH i
			variable i=i+1
		endw
		
        goto    Loop                    ;go back and do it again

Delay   movlw   d'100'                  ;delay 250 ms (4 MHz clock)
        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
