;******************************************************************************
;
;			OSCILLATORE per LED (versione n°3)
;
;			Federico Battaglin
;
;			Copyright @ 19 Luglio 2002
;
;			www.febat.com  -  info@febat.com
;
;******************************************************************************

	title "Osc_Led3"
	processor pic12c508a

        IFNDEF __12C508A
           MESSG "Processor-header file mismatch.  Verify selected processor."
        ENDIF

        __MAXRAM 0x1F

;******************************************************************************
;			VERIFY PROCESSOR
;******************************************************************************

        IFNDEF __12C508A
           MESSG "Processor-header file mismatch.  Verify selected processor."
        ENDIF

;******************************************************************************
;			CONFIGURATION BITS
;******************************************************************************
_CP_ON          equ     0x0FF7
_CP_OFF         equ     0x0FFF
_PWRTE_ON       equ     0x0FFF
_PWRTE_OFF      equ     0x0FEF
_WDT_ON         equ     0x0FFF
_WDT_OFF        equ     0x0FFB
_LP_OSC         equ     0x0FFC
_XT_OSC         equ     0x0FFD
_IntRC_OSC      equ     0x0FFE
_ExtRC_OSC      equ     0x0FFF

	__CONFIG _ExtRC_OSC & _PWRTE_OFF & _WDT_ON & _CP_OFF

;******************************************************************************
;			REGISTERS
;******************************************************************************
INDF		equ	0x00
TMR0            equ	0x01
PCL             equ	0x02
STATUS          equ	0x03
FSR             equ	0x04
OSCCAL          equ	0x05
GPIO            equ	0x06

;******************************************************************************
;			BITS
;******************************************************************************
GPWUF           equ	0x07
PA0             equ	0x05
NOT_TO          equ	0x04
NOT_PD          equ	0x03
Z               equ	0x02
DC              equ	0x01
C               equ	0x00
W		equ	0x01
F               equ	0x01

;******************************************************************************
NOT_GPWU        equ	0x07
NOT_GPPU        equ	0x06
T0CS            equ	0x05
T0SE            equ	0x04
PSA             equ	0x03
PS2             equ	0x02
PS1             equ	0x01
PS0             equ	0x00

;******************************************************************************
OSCFST          equ	0x03
OSCSLW          equ	0x02

;******************************************************************************
;			VARIABLES
;******************************************************************************
DLY_1		equ	0x10
DLY_2		equ	0x11
DLY_3		equ	0x12
LED		equ	0x13

;******************************************************************************
;			PIN-OUT
;******************************************************************************
;	GP0=	nc	(input)
;	GP1=	nc	(input)
;	GP2=	led out	(output)
;	GP3=	nc	(input)
;	GP4=	nc 	(input)
;	GP5=	nc	(input)

;******************************************************************************
;			VECTORS
;******************************************************************************
		org	0x0000

;******************************************************************************
;			MAIN PROGRAM
;******************************************************************************
		clrwdt
		movlw	0x9f		;0b 1001 1111
		option			;enable pull-up on: GP0, GP1, GP3
		movlw	0xfb		;0b 1111 1011
		tris	GPIO		;set I/O
		clrf	GPIO
		clrf	LED

;******************************************************************************
loop		clrwdt
		call	delay
		call	blink
		goto	loop

;******************************************************************************
;			SUBROUTINES
;******************************************************************************
blink		clrwdt
		movlw	0x04
		xorwf	LED,f
		movf	LED,w
		movwf	GPIO
		return



delay		clrwdt
		movlw	0x07
		movwf	DLY_1
d_1		movlw	0x3c
		movwf	DLY_2
d_2		movlw	0xff
		movwf	DLY_3
d_3		clrwdt
		decfsz	DLY_3,f
		goto	d_3
		decfsz	DLY_2,f
		goto	d_2
		decfsz	DLY_1,f
		goto	d_1
		return
		
;******************************************************************************
;			PROGRAM END
;******************************************************************************

	End

