;Belső RC oszcillátor, 1Mhz-re hangolva. Bemenetek RA0 an, 1 dig, 2 ref-, 3 ref+, 4 dig
;Kimenetek RB0, 1, 2, 3, 4, 5, 6, 7, RA7
;adcon bit 1111: AN0 - Analóg be, AN1 - DigitIO, AN2 - Vref-, AN3 - Vref+, AN4 - digitIO
;MCRL(RA5 láb:4.) az +5V-on, CLKOUT-on(RA6 láb:15.)az órajel/4 mérhető!
;A 18.láb pluszra kötve(jumper)teszt program indítható(csak áram alá helyezéskor vizsgálja!!).
;Ilyenkor a nyolc PORTB kimenetre ledeket kötve a mérő potméter állásától függően a PORTB a mérési eredményt mutatja
;(az alsó -első- nyolc bitjét)
;2011.08.07. 

	LIST P=16F819
	#INCLUDE "P16F819.INC"
	__CONFIG _CP_OFF &_LVP_OFF &_BODEN_OFF &_PWRTE_ON &_WDT_OFF &_INTRC_CLKOUT
	
	
;Port definiciók
#DEFINE	be_poti		PORTA,0			;17.láb	mérő potméter bemenet
#DEFINE	be_teszt	PORTA,1			;18.láb	teszt bemenet
#DEFINE	be_refmin	PORTA,2			;1. láb	referencia negatív		
#DEFINE	be_refmax	PORTA,3			;2. láb	referencia pozitív	
#DEFINE	be_RA4		PORTA,4			;3. láb	xxx   digit bemenet	
#DEFINE ki_szivatty	PORTA,7			;16.láb	led/relé szivattyú kapcsoló
#DEFINE	ki_RB0		PORTB,0			;6. láb	xxx
#DEFINE	ki_minled	PORTB,1			;7. láb	led minimum szint
#DEFINE	ki_kozled	PORTB,2			;8. láb	led középszint
#DEFINE	ki_maxled	PORTB,3			;9. láb	led maximum szint
#DEFINE	ki_RB4		PORTB,4			;10.láb	xxx   digit kimenet
#DEFINE	ki_RB5		PORTB,5			;11.láb	xxx   digit kimenet
#DEFINE ki_RB6		PORTB,6			;12.láb	xxx   digit kimenet
#DEFINE	ki_RB7		PORTB,7			;13.láb	xxx   digit kimenet



;változók definicioja
_I1		EQU		0x30			;idő változói
_I2		EQU		0x31			;idő változói
_I3		EQU		0x32			;idő változói
_MER		EQU		0x33			;mérés eredménye 1
_MIN		EQU		0x34			;minimum szint
_MAX		EQU		0x35			;maximum szint



		ORG		0x000
start:  
		CLRF	STATUS
		CLRF	PCLATH
		GOTO	konf


;Ports Iniciálás

konf: 
		BANKSEL	PORTA		;bank 0 kiválasztása
		CLRF	PORTA		;porta törlése
		CLRF	PORTB		;portb törlése
		MOVLW	B'01000001'	;Fosc/8, A/D enable, analóg port RA0/AN0
		MOVWF	ADCON0
		BANKSEL	TRISA		;bank 1 kiválasztása
		MOVLW	B'10001111'	;adress right justified(eredmény ADRESL-ben+ADRESH 0,1 bit), port beállítások leírása fenn!!
		MOVWF	ADCON1		;ha B'0***   akkor left justified, 6 legkisebb bit ADRESL-ben nulla!!
		MOVLW	B'00011111'	;RA bemenet-kimenet beállítás(0-kimenet, 1-bemenet)
		MOVWF	TRISA
		CLRWDT	
		MOVLW	B'10000111'
		MOVWF	OPTION_REG	;felhúzóellenállásokok tiltva
		CLRF	INTCON		;interruptok tiltása, megszakítás tiltva
		MOVLW	B'00000000'
		MOVWF	TRISB		;RB kimenet-bemenet beállítás(0-kimenet, 1-bemenet)
		CLRF	PIE1
		CLRF	PIE2
		MOVLW	B'00000001'
		MOVWF	PCON
		MOVLW	B'00000000'	;hangolás alap
		MOVWF	OSCTUNE
		MOVLW	B'01000000'	;oszci 1Mhz-en
		MOVWF	OSCCON
		BANKSEL	PORTA		;Bank 0 kiválasztása
		MOVLW	B'00000000'
		MOVWF	CCP1CON
		CLRF	_MER		;_MER törlése
		MOVLW	B'00000100'	;minimum szint beállítási érték,A MINIMUM MINDIG KISEBB LEGYEN, MINT A MAXIMUM!!
		MOVWF	_MIN		;minimum szint beállítás
		MOVLW	B'00100000'	;maximum szint beállítási érték
		MOVWF	_MAX		;maximum szint beállítás, minimum érték:00000100
		BCF	ki_szivatty	;induláskor 0-ra,relé meghúz, szivattyú a nyitó érintkezőjén!!!!!!!
		BCF	ki_RB0		;induláskor 0
		BCF	ki_minled	;induláskor 0
		BCF	ki_kozled	;induláskor 0
		BCF	ki_maxled	;induláskor 0
		BCF	ki_RB4		;induláskor 0
		BCF	ki_RB5		;induláskor 0
		BCF	ki_RB6		;induláskor 0
		BCF	ki_RB7		;induláskor 0

villog:		CALL	ido1		;idő kb 1mp
		BCF	ki_kozled	;ki, induláskor közled villog néhány mp-ig
		CALL	ido1
		BSF	ki_kozled	;be1
		CALL	ido1
		BCF	ki_kozled	;ki
		CALL	ido1
		BSF	ki_kozled	;be2
		CALL	ido1
		BCF	ki_kozled	;ki
		CALL	ido1
		BSF	ki_kozled	;be3
		CALL	ido1
		BCF	ki_kozled	;ki
		CALL	ido1
		BSF	ki_kozled	;be4
		CALL	ido1
		BCF	ki_kozled	;ki
		CALL	ido1
		BSF	ki_kozled	;be5
		CALL	ido1
		BCF	ki_kozled	;ki
		CALL	ido1
		BSF	ki_kozled	;be6
		CALL	ido1
		BCF	ki_kozled	;ki
		CALL	ido1
		BSF	ki_kozled	;be7
		CALL	ido1
		BCF	ki_kozled	;ki
		CALL	ido1
		BSF	ki_kozled	;be8
		CALL	ido1
		BCF	ki_kozled	;ki
		CALL	ido1
		BSF	ki_kozled	;be9
		CALL 	ido1
		BCF	ki_kozled	;ki

		
mod:		BTFSS	be_teszt		;vár teszt parancsra-ha jumper plusszon (18.láb)
		GOTO	$+5			;nem jött
		CALL	ido7			;vár
		BTFSS	be_teszt		;újra ell, van e még teszt parancs
		GOTO	$+2			;már nincs parancs
		GOTO	meres			;jött teszt, megy végrehajtani - beállítás/teszt
		CALL	ido7			
		GOTO	szabaly			;megy a szabályzásra - normál működés
		
meres:		BSF	ki_RB0			;teszt üzemmód, futófény a 8db RB kimeneten sorban
		CALL 	ido1			;majd tényleges mérés, eredmény kiírása PORTB-re
		BSF	ki_minled
		BCF	ki_RB0
		CALL 	ido1
		BSF	ki_kozled
		BCF	ki_minled
		CALL 	ido1
		BSF	ki_maxled
		BCF	ki_kozled
		CALL 	ido1
		BSF	ki_RB4
		BCF	ki_maxled
		CALL 	ido1
		BSF	ki_RB5
		BCF	ki_RB4
		CALL 	ido1
		BSF	ki_RB6
		BCF	ki_RB5
		CALL 	ido1
		BSF	ki_RB7
		BCF	ki_RB6
		CALL 	ido1
		BCF	ki_RB7
meres1:		CALL 	ido1
		BSF	ADCON0,GO	;A/D Conversion start
varas:		BTFSC	ADCON0,GO	;(BTFSS	PIR1,ADIF),vár a konverzió végére
		GOTO	varas
		MOVLW	ADRESL		;eredmény olvasása(első 8 bit - 0-7.)
		MOVWF	_MER		;eredmény írása _MER-be
		BCF	PIR1,ADIF
		CALL	ido1
		MOVLW	_MER
		MOVWF	PORTB		;eredmény kiírása PORTB-re(binárisan) 
		GOTO	meres1

szabaly:	GOTO	mod		;ideiglenes sor, itt lesz a szabályzás


ido:
		MOVLW	.21
		MOVWF	_I1
		MOVLW	.150
		MOVWF	_I2
		MOVLW	.30
		MOVWF	_I3
		NOP
		DECFSZ	_I3,1
		GOTO	$-2
		DECFSZ	_I2,1
		GOTO	$-6
		DECFSZ	_I1,1
		GOTO	$-B'00001010'
		RETURN
		
ido7:	
		MOVLW	.160		;idő rövid
		MOVWF	_I1
		MOVLW	.150
		MOVWF	_I2
		NOP
		DECFSZ	_I2,1
		GOTO	$-2
		DECFSZ	_I1,1
		GOTO	$-6
		RETURN
		
ido1:
		MOVLW	.21
		MOVWF	_I1
		MOVLW	.150
		MOVWF	_I2
		MOVLW	.15
		MOVWF	_I3
		NOP
		DECFSZ	_I3,1
		GOTO	$-2
		DECFSZ	_I2,1
		GOTO	$-6
		DECFSZ	_I1,1
		GOTO	$-B'00001010'
		RETURN

	END