Electronic – PIC16f84A Unable to delay properly

embeddedpic

It was one of my first experiments related to embedded systems.I was following this document : http://groups.csail.mit.edu/lbr/stack/pic/pic-prog-assembly.pdf
Problem emerged at Tutorial 6.I was trying to blink the led at different pace when pressed button.First, I took what tutorial give as an example word by word ,however, it didn't work.When not pressing it sometimes blinks slower sometimes faster, when I push button it blinks in an expected frequency.Then I changed the code to the program below for simplification:

LIST p=16F84A
INCLUDE "p16f84a.inc"


RES_VECT  CODE    0x0000
GOTO    START


MAIN_PROG CODE

TIME equ 0x0f
Delay

COUNT1 equ 0x0c
COUNT2 equ 0x0d
COUNT3 equ 0x0e

    movlw   0xFF
    movwf   COUNT1
LOOP1

    movlw   0xFF
    movwf   COUNT2
LOOP2

    movfw   TIME
    movwf   COUNT3
LOOP3
    decfsz   COUNT3,1
    goto LOOP3

    decfsz   COUNT2,1
    goto LOOP2  

    decfsz   COUNT1,1
    goto LOOP1

    return 

START

    bsf     STATUS,5
    movlw   b'00011111'
    movwf   TRISA
    movlw   0x00
    movwf   TRISB
    bcf     STATUS,5
    movlw   0x00
    movwf   PORTB

MAIN_LOOP

    movlw   0x01
    btfss   PORTA,0
    movlw   0x14
    movwf   TIME

    bsf     PORTB,3
    call    Delay
    bcf     PORTB,3
    call    Delay

    goto MAIN_LOOP

END

Same thing happened. While it flashed irregularly without pressing the button, when I pressed button at RA0 it blinked faster. I want first phase to be always slow. Where is the problem ? Is the problem in circuit, in software, or in PIC itself. Given physical conditions, as if btfss doesn't work properly either because the switch is problematic or because PIC is burnt. It is more likely that I am failure rather than the hardware is. Maybe there is a logical error in software in spite of similar program flow being expressed with different codes.Could oscillator not have been set up properly ? I had difficulty to set up an RC oscillator. When I add its R it works normal(or I think so). But after adding a capacitor and connecting its other terminal to negative voltage the led always shines.Can you say exactly where the issue lies? What's going on the background?

Additional Information :

At first, I used RBO/INT to do bit test with the switch. But the INT part was suspicious to me. Then I changed it to RA0.(which is what is asked in the question) The result didn't change.

Additional Information 2 :
Configuration bits ->
__CONFIG _FOSC_EXTRC & _WDTE_OFF & _PWRTE_OFF & _CP_OFF

Additional Information 3 :
It turns out that there is no any unintentional reset.Problem remains unsolved.

Best Answer

From our discussion it looks like the problem is caused by false triggering due to a missing pull up/down resistor on the switch input.