RE: 509 flasher

I did notice that the program is full of instances of consecutive bit operations on the GPIO port, never a good thing to do.

Also I think the delay routine may be a bit dodgy.  The coments are mine, but I'm trying to illustrate the fact that to work properly, the timer would have to roll over to zero exactly as the MOVF TMR0,W instruction is being executed.  It's hardly worth using the timer for delays like this.  As you are using 100% cpu time polling the timer, you might just as well use a pure software delay.

DLY100          MOVLW   100             ; do 100 timer loops
DLYMS   MOVWF   LOOP1  
DY0             MOVLW   -125            ; pre-load TMR0 with -125
                        MOVWF   TMR0
DY1             MOVF   TMR0,W   ; grab TMR0 register (timer must be zero here to work properly)
                        IORLW   0                       ; is it zero?  (might roll over to zero here)
                        BTFSS   STATUS,Z                    (or here)
                        GOTO    DY1             ; no check again (or here)
                        DECFSZ  LOOP1,F ; yes, decrement outer loop
                        GOTO    DY0

The fact that the voltage on the ports is rising to 1.7 volts suggests that the pin is configured as an input and is floating.  This ties in with the incorrect CONFIG.  The ports default to input on power up, and if the PIC isn't running it'll never get configured as an output.

Mike