	LIST P=12f683
	#include <p12f683.inc>
	__CONFIG H'3FD4'

	CBLOCK	0x20			;Szabad memória hely
	T1						;20	Delay-hez kell
	T2						;21	Delay-hez kell
	T3						;22	Delay-hez kell
	
	TOL						;23
	IG						;24
	FREKI					;25
	
	ENDC

	org 0

START 						;Alap beállítások
	clrf GPIO 				;GPIO mind 0 rá
	movlw b'111' 			;Comparator OFF bitkódja
	movwf CMCON0 			;Comparator OFF (Bank0)

	banksel ANSEL 			;Bank 1

	clrf ANSEL 				;minden port digitálisra

	movlw b'111001'			;4, 5-ős láb kimenetre PWM+led (0 ki, 1 be)
	movwf TRISIO			;ki/be menet beállítása;

	movlw b'01110000'		;8 Mhz bitkódja
	movwf OSCCON			;Belső oszcillátor beállítása

	banksel CCP1CON			;Bank 0

	movlw b'00001100'		;PWM mód bittek
	movwf CCP1CON	 		;PWM mód aktiválás

	clrf TMR2		 		;TMR2 nullázás

;változók alap érték adása
	movlw d'32'				;60606 kHz
	movwf TOL
	movlw d'99'				;20000 kHz
	movwf IG
;jumperek vizsgálata (GP0,3,4,5)
	movf GPIO,1				;jumperek beolvasás

	movlw b'110'			;Timer2 is on, előosztó 16
	btfsc GPIO,0			;teszt jumper vizsgálata (hallható tartományba)
	movwf T2CON		 		;Timer2 16-os előosztóra állítása
	
	clrf FREKI
	movlw d'7'				;freki tiltás mérték beállítása
	btfsc GPIO,3			;jumper 1
	addwf FREKI,f		 	;+7

	btfsc GPIO,4			;jumper 2
	addwf FREKI,f		 	;+7
	btfsc GPIO,4			;jumper 2
	addwf FREKI,f		 	;+7

	btfsc GPIO,5			;jumper 3
	addwf FREKI,f		 	;+7
	btfsc GPIO,5			;jumper 3
	addwf FREKI,f		 	;+7
	btfsc GPIO,5			;jumper 3
	addwf FREKI,f		 	;+7
	btfsc GPIO,5			;jumper 3
	addwf FREKI,f		 	;+7

	movf FREKI,w		;FREKI W-be
	subwf IG,1   		;frekvenia alsó határ beállítása
	
PWM
	banksel PR2				;Bank1
	
	movlw d'32'				;fervencia beállítása 60606 kHz (8Mhz mellett)
	movwf PR2				;ferki szabályozás

;50%-os kitöltési tényező beállítása PR2-höz (számolja magától frekiből)
	banksel CCPR1L			;Bank0
	movwf CCPR1L			
	bcf CCP1CON,5				
	btfsc CCPR1L,0
	bsf CCP1CON,5				
	rrf CCPR1L,1
	bcf CCPR1L,7

	bsf T2CON,2				;Timer2 on


MOD1
	call Delay2
	movf IG,0				;IG betölrése W-be
	banksel PR2				;Bank 1

	xorwf PR2,0				;PR2 összehasonlítása IG-el
    btfsc STATUS,Z			;ha elérte IG-et akkor kihagyja a köv sort.
	goto NOVEL				;frekvencia nő -> PR2 csökken
	goto CSOKKENT			;frekvencia csökken -> PR2 nő


MOD2
	call Delay2
	movf TOL,0				;TOL betölrése W-be
	banksel PR2				;Bank 1
	
	xorwf PR2,0				;PR2 összehasonlítása TOL-al
    btfsc STATUS,Z			;ha elérte TOL-t akkor kihagyja a köv sort.
	goto CSOKKENT			;frekvencia csökken -> PR2 nő
	goto NOVEL				;frekvencia nő -> PR2 csökken
	

CSOKKENT	;freki csokken PR2 nő
	banksel PIR1			;Bank 0
	bcf PIR1,1				;Timer2 tulcsorudló jelző nullázása
CS_V
	btfss PIR1,1			;Ha van tulcsorulás továb megy
	goto CS_V				;Ha nincs vár

	banksel PR2				;Bank 1
	incf PR2,1				;PR2 1-el növelése
	movf PR2,0				;PR2 W-be
;50%-os kitöltési tényező beállítása PR2-höz (számolja magától frekiből)
	banksel CCPR1L			;Bank0
	movwf CCPR1L			
	bcf CCP1CON,5				
	btfsc CCPR1L,0
	bsf CCP1CON,5				
	rrf CCPR1L,1
	bcf CCPR1L,7

	goto MOD1

NOVEL	;freki nő PR2 csökken
	banksel PIR1			;Bank 0
	bcf PIR1,1				;Timer2 tulcsorudló jelző nullázása
N_V
	btfss PIR1,1			;Ha van tulcsorulás továb megy
	goto N_V				;Ha nincs vár

	banksel PR2				;Bank 1
	decf PR2,1				;PR2 1-el csökkentése
	movf PR2,0				;PR2 W-be
;50%-os kitöltési tényező beállítása PR2-höz (számolja magától frekiből)
	banksel CCPR1L			;Bank0
	movwf CCPR1L			
	bcf CCP1CON,5				
	btfsc CCPR1L,0
	bsf CCP1CON,5				
	rrf CCPR1L,1
	bcf CCPR1L,7
	
	goto MOD2

;időzitések
Delay		;8Mhz 0,3 sec
		
	movlw	0xD1			;D1
	movwf	T1
	movlw	0x4F			;4F
	movwf	T2
	movlw	0x02			;02
	movwf	T3
Delay_0
	decfsz	T1, f
	goto	$+2
	decfsz	T2, f
	goto	$+2
	decfsz	T3, f
	goto	Delay_0

	return

Delay2		;8Mhz 1,7 sec

	banksel GPIO			;Bank 0
	bsf GPIO,1				;led be
	call Delay
	bcf GPIO,1				;led ki

	movlw	0x51			;51
	movwf	T1
	movlw	0x6A			;6A
	movwf	T2
	movlw	0x08			;08
	movwf	T3
Delay_02
	decfsz	T1, f
	goto	$+2
	decfsz	T2, f
	goto	$+2
	decfsz	T3, f
	goto	Delay_02

	return


	end; Teljes program lezáró