; LED_1.ASM (12C509)
;
; Shows how to flash an LED on GPIO, Bit 0.  Logic 0 turns LED on.
;
; Timing is done with a simple loop.  Nominally 250 ms on and 250 ms off.
; This assumes an oscillator of 4.0 MHz or 1 usec per instruction.
;
; Peter H. Anderson, MSU, June 1, '97
;

	LIST p=12c509
#include <p12c509.inc>

	__CONFIG 1AH	; MCLR enabled, CP Off, WDT dis, OSC INTRC
	
LOOP1	EQU 10H		
LOOP2	EQU 11H

	ORG 000H	;program code to start at 000H

	MOVLW 1EH	; 1 1110, least sign bit is an input
	TRIS GPIO	; only valid arg for 12C509 is GPIO

TOP:
	BCF	GPIO, 0	; bit 0 to logic 0
	CALL	DELAY
	BSF	GPIO, 0	; turn LED off
	CALL	DELAY
	GOTO	TOP

DELAY	; when running set LOOP1 to .250 and LOOP2 to .110.
	; this will result in 250 ms delay.
	MOVLW	.250
	MOVWF 	LOOP1
OUTTER
	MOVLW	.110	; close to 1.0 msec delay when set to .110
	MOVWF 	LOOP2
INNER
	NOP
	NOP
	DECFSZ	LOOP2, F	; decrement and leave result in LOOP2 
				; skip next statement if zero
	GOTO INNER
	DECFSZ 	LOOP1, F
	GOTO OUTTER
	RETURN

	END