	;Expt1d.asm
        ;Project: LED turns on for 0.5sec after Sw pushed
	;List P = 16F84
	;#include <p16F84.inc>
	;__CONFIG 1Bh    ;_CP_OFF & _PWRTE_ON & _WDT_OFF & _RC_OSC


	ORG 0		;This is the start of memory for the program.
SetUp	BSF 03,5	;Go to Bank 1
	CLRF 06		;Make all port B output
	MOVLW 01	;Load W with 0000 0001
	MOVWF 05	;Make RA0 input
	BCF 03,5	;Go to Bank 0 - the program memory area.
	CLRF 1F		;Clear the button file
	CLRF 06		;Blank the output
	GOTO Main
		
Delay	NOP		;Create approx 250mS delay
	DECFSZ 1A,1
	GOTO Delay
	DECFSZ 1B,1
	GOTO Delay
	RETURN	

Delay2	NOP		;Create 1mS debounce delay	
	DECFSZ 1A,1
	GOTO Delay2
	RETURN		;Return

Sw	BTFSS 05,0	;Test the push button
	GOTO Sw2	;Button not pressed
	BSF 1F,0	;Button is pressed. Set the button-press flag	
	RETURN		;Return 	
Sw2	BTFSS 1F,0
	RETURN
	BSF 06,0	;Illuminate LED
	CALL Delay	;Keep LED on
	CALL Delay	;Keep LED on
	BCF 1F,0	;Clear button flag bit
	BCF 06,0	;Turn LED off
	RETURN

Main	CALL Sw
	CALL Delay2	;Debounce switch	
	GOTO Main

	END		;Tells assembler end of program