;belso Vref a komparatorhoz rendelve CMCON,CM<2:0>=010
;ekkor a belso Vref a (+) labra megy...

;CMCON,CIS=0 =>az R0-as lab a (-) bemenete a COMP1-nek

;LOW RANGE Vref eseten egy bit (4 biten allithato): [(VREF<3:0>)/24]*Vdd
;ennek az erzekenysege: 0.208 V; maximalis ertek: 3.125 V

;HIGH RANGE: 0.25*Vdd+[(VREF<3:0>)/32]*Vdd
;ennek az erzekenysege: 0.156 V; minimalis erteke: 1.25 V

LIST p=16f628a
#INCLUDE<p16f628a.inc>

ERRORLEVEL -302

__CONFIG (_INTRC_OSC_NOCLKOUT & _PWRTE_ON & _MCLRE_OFF & _BODEN_OFF & _WDT_OFF &_LVP_OFF)

CBLOCK 0x30
	R1
	R2
	MAX
	ANDREG
ENDC

ORG 0x00
	GOTO MAIN


;_______________________________________________________________________________________
;MEGSZAKITASVEKTOR
;_______________________________________________________________________________________

ORG 0x04	
	
	BCF STATUS,RP0		;visszvaltas BANK0-ra, ahol CMCON van	
	BTFSS CMCON,C1OUT	;vajon magas a comp1 kiemnete?ha igen, akkor a kovi utasitas skip
	GOTO VEGE
	
	BSF STATUS,RP0		;valtas BANK1-re
	MOVF VRCON,0		;A digitalis ertek W-be toltese, 
						;de ennek csak az also 4 bitje kell
	BCF STATUS,RP0		;valtas BANK0-ra, ahol PORTB van

	ANDWF ANDREG,0		;az also negy biten kivul mindent kinullaz es az eredm. a W-be kerul  
	MOVWF PORTB			;a VRCON beallitott ertekenek kiiratasa PORTB-re (4bit)

	BSF STATUS,RP0		;VRCON ertekenek visszaallitasa
	MOVLW b'10000000'	
	MOVWF VRCON
	BCF STATUS,RP0
	
VEGE:	
	BCF PIR1,CMIF		;komparator kimenetenek valtozasat jelzi ||toroljuk...
	BSF STATUS,RP0		;miutan toroltuk a flaget, BANK1-re valtunk
RETFIE

;_______________________________________________________________________________________
;FOPROGRAM
;_______________________________________________________________________________________

MAIN:
	BSF STATUS,RP0		
	MOVLW 0x00
	MOVWF TRISB		;PORTB kimenet
	MOVLW 0x01		;RA0 bemenet
	MOVWF TRISA
	BCF STATUS,RP0

		;VALTOZOK ERTEKADASA
	MOVLW b'00001111'
	MOVWF ANDREG
	MOVLW b'00001111'
	MOVWF MAX
	CALL INIT_01s
	

		;KOMPARATOR ES VREF BEALLITASA (CMCON,VRCON)

	;CMCON beallitasa, BANK0-ban van
	MOVLW b'00000010'	;010=Vref a (+) labra...RA0 az analog bemenet,oda megy a jel...
	MOVWF CMCON

	;VRCON beallitasa
	BSF STATUS,RP0		;VRCON a BANK1-ben van
	MOVLW b'10000000'	;Vref=on;RA2-rol lekapcsolva;HIGH RANGE, Vref kezdeti erteke=0
	MOVWF VRCON
	
		;MEGSZAKITAS BEKAPCSOLASA

				;PIE reg. a BANK1-ben van
	BSF PIE1,CMIE		;komparator megszak. bekapcs.
		
	BSF INTCON,PEIE		;periferia megszak. bekapcs.
	NOP					;nehogy fals legyen a beallitas...(read-modify-write)
	BSF INTCON,GIE		;minden interrupt bekapcs
	
	BCF STATUS,RP0		;valtas BANK0-ra, ahol a PIR1 van
	BCF PIR1,CMIF		;komp-flag torlese (biztos, ami biztos...)
	BSF STATUS,RP0		;valtas BANK1-re, ahol VRCON van

START:
	INCF VRCON,1
	CALL INIT_01s
	CALL KESLELTETES
	CALL VIZSGALAT		;ha tulhaladnank a novelessel az elso 4 bitet
	GOTO START
	

;_______________________________________________________________________________________
;SZUBRUTINOK
;_______________________________________________________________________________________

VIZSGALAT:	;elvileg most BANK1-ben vagyunk	
	MOVF VRCON,0
	ANDWF ANDREG,0  	;a VRCON also 4 bitje lesz a W-ben
	SUBWF MAX,0			;Kivonjuk belole a 0000|1111-t 
	
	BTFSS STATUS,Z		;vajon az eredmeny 0?Ha Z=1 akkor skip a kovi
	GOTO CIMKE
	MOVLW b'10000000'
	MOVWF VRCON	

  CIMKE:
	RETURN




INIT_01s:				;0.1 sec-es kesleltetes 4MHz-re
	MOVLW 0xFF
	MOVWF R1
	MOVLW 0x80  		;128
	MOVWF R2
	
	RETURN

KESLELTETES:
	DECFSZ R1,1
	GOTO KESLELTETES
	DECFSZ R2,1 
	GOTO KESLELTETES
	RETURN

	
END