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.