;LZ4GV   12-2003
;Ver. 17

	list		p=12F629	; list directive to define processor
	#include	<p12F629.inc>	; processor specific variable definitions

	__CONFIG	_INTRC_OSC_NOCLKOUT & _PWRTE_ON & _CP_OFF & _CPD_OFF & _BODEN_ON & _MCLRE_OFF & _WDT_OFF
;			_HS_OSC               _PWRTE_OFF  _CP_ON    _CPD_ON    _BODEN_OFF  _MCLRE_ON    _WDT_ON
;			_EC_OSC
;			_LP_OSC
;			_XT_OSC
;			_INTRC_OSC_CLKOUT
;			_EXTRC_OSC_NOCLKOUT
;			_EXTRC_OSC_CLKOUT

#define	_GP0		GPIO,0		;Pin 7
#define	_GP1		GPIO,1		;Pin 6
#define	_GP2		GPIO,2		;Pin 5
#define	_GP3		GPIO,3		;Pin 4
#define	_GP4		GPIO,4		;Pin 3
#define	_GP5		GPIO,5		;Pin 2

#define	STATBIT		0x20,0


PCLMEM		EQU	0x59
TMR0MEM		EQU	0x5A
TMR1LMEM	EQU	0x5B
TMR1HMEM	EQU	0x5C
OPTIONMEM	EQU	0x5D
REEADR		EQU	0x5E
REEDATA		EQU	0x5F

TMR0IF		EQU	T0IF

	ORG	0x2100		;Initialize EEPROM locations
	DE	0x00,0x01,0x02,0x03

	ORG	0x0000
	GOTO	START
	ORG	0x0004
	GOTO	START
;
BEGIN

MAIN
;	MOVLW	.46		;
;	BCF	STATUS,C	;
;	SUBWF	ADRESH,W	;ADRESH > W	C=1
;	BTFSC	STATUS,C	;ADRESH = W	C=1
;	GOTO			;ADRESH < W	C=0
;	GOTO			;

;;;
	MOVLW	.100
	CLRF	TMR1L		;Нулира Timer1
	MOVWF	TMR1HMEM	;
	COMF	TMR1HMEM,W	;
	MOVWF	TMR1H		;
	BCF	PIR1,TMR1IF	;1-overflowed

;;;
	MOVLW	.100
	MOVWF	TMR0MEM		;Timer0
	COMF	TMR0MEM,W	;
	MOVWF	TMR0		;
	BCF	INTCON,T0IF	;1-overflowed
;;;

	GOTO	MAIN

;*******************************************************
WRITE				;In:F(REEADR,REEDATA)
	BSF     STATUS,RP0	;Page 1
	MOVF	REEADR,W
	MOVWF	EEADR
	MOVF	REEDATA,W
	MOVWF	EEDATA

	BCF	INTCON,GIE
	BSF     EECON1,WREN
	movlw   0x55
	movwf   EECON2
	movlw   0xAA
	movwf   EECON2
	BSF     EECON1,WR	;initiate write	
WRITE1
	BTFSC   EECON1,WR       ;write complete?
	GOTO    WRITE1
	;BSF	INTCON,GIE
	BCF     EECON1,WREN	;disable write
	BCF     STATUS,RP0	;Page 0
	RETURN
;
READE				;In:F(REEADR)	Out:F(REEDATA),W
	BSF     STATUS,RP0	;Page 1
	MOVF	REEADR,W
	MOVWF	EEADR
	
	BSF     EECON1,RD	;do a read
READE1				;
	BTFSC   EECON1,RD	;rd done?
	GOTO    READE1		;no then loop

	MOVF	EEDATA,W
	MOVWF	REEDATA
	BCF     STATUS,RP0	;Page 0
	RETURN
;

SET_VREF
	BSF	STATUS,RP0	;
	MOVLW	B'00001111'	;
	MOVWF	VRCON		;
	BSF	VRCON,VREN	;Vref Circuit Powered On
	BSF	VRCON,VRR	;Low Range-'1'	High Range-'0'
	BCF	STATUS,RP0	;
	RETURN
;

SET_TMR0
	BSF	STATUS,RP0	;Bank1
	MOVWF	OPTION_REG	;
	BSF	OPTION_REG,NOT_GPPU ;'1' - Pull-ups Disabled
	BSF	OPTION_REG,INTEDG ;'1' -Rising RB0 Interrupt
	BCF	STATUS,RP0	;Bank0
	RETURN
;

SET_TMR1			;Timer1 Module:	Max period 8uS * 65536 = 524,288mS
	BCF	T1CON,TMR1GE	;
	BSF	T1CON,T1CKPS1	;Timer prescaler /1 - 0   /2 - 0   /4 - 1   /8 - 1
	BSF	T1CON,T1CKPS0	;Timer prescaler      0        1        0        1
	BCF	T1CON,T1OSCEN	;Oscillator is shut off.
	BCF	T1CON,NOT_T1SYNC ;Asinchronous Operration
	BCF	T1CON,TMR1CS	;Internal Clock Fosc/4	4MHz = 8uS
	BSF	T1CON,TMR1ON	;Timer1 On bit.
	RETURN
;

START
	CLRF	GPIO

	CLRF	INTCON

	MOVLW	B'00000111'	;Comparator OFF.
	MOVWF	CMCON

	BSF	STATUS,RP0
	CALL	A3FFh
	MOVWF	OSCCAL		;

	CLRF	WPU
	BCF	STATUS,RP0

	MOVLW	B'00000111'	;Fosc/4/256	4MHz = 0,256mS
	CALL	SET_TMR0

	CALL	SET_TMR1

	BSF	STATUS,RP0
	MOVLW	B'11001111'
	MOVWF	TRISIO		;Port
	BCF	STATUS,RP0

	;CALL	SET_VREF

	GOTO	BEGIN
;

	ORG	0x03FF
A3FFh				;Oscillator calibration.
	RETLW	0x80		;x0,x4,x8,xC
END