 LIST P=16F877
 #INCLUDE "P16F877.INC"
 __CONFIG _XT_OSC&_CP_OFF&_WDT_OFF&_LVP_OFF
	CBLOCK	0x20			;A 0x20 egy szabad memória rész kezdő címe
	T1
	T2
	T3
	KITOLTES
	MAX
	MIN
	ENDC

	ORG	0

START
	clrf	PORTD	
	BSF		STATUS,RP0			;BANK1-be átlépünk
	MOVLW	0x06			
	MOVWF	ADCON1			;Mindegyik PORTA digitális
	MOVLW	B'00011111'		;Betöltjük az akksiba a TRISA-ba irandót
	MOVWF	TRISA			;Beállítjuk a PORTA-t bemenetre (beírjuk a TRISA-ba)
 	bcf		TRISC,2	;a CCP1 kivezetés kimenetként való beállítása
 	movlw	d'255'	;W = 3Fh
 	movwf	PR2	;a periódusidő értékének bevitele
 	bcf		STATUS,5	;a 0. adatmemória lap kiválasztása
 	clrf	TMR2	;a Timer 2 számlálóregiszter nullázása
 	bsf		T2CON,0	;a Timer 2 előosztás beállítása K=4-re
 	movlw	H'0F'	;W = 0Fh
 	movwf	CCP1CON	;DC1B1 és DC1B0 érték bevitele, PWM indítása
 	bsf		T2CON,2	;a Timer 2 indítása
	
ERTEKADAS

	MOVLW	B'11111111'
	MOVWF	MAX
	MOVLW	B'00000000'
	MOVWF	MIN
	MOVLW	B'00000000'
	MOVWF	KITOLTES

KEZDES

	BTFSC	PORTA,0
	GOTO	KEZDES

BEKAPCS

	MOVFW	KITOLTES
	movwf 	CCPR1L ;ADAT KIÍRÁSA IDE
	CALL	DELAY
	MOVF	KITOLTES,0
	SUBWF	MAX,0
	BTFSC	STATUS,2
	GOTO	BEVIZS1
	INCF	KITOLTES
	GOTO	BEKAPCS

BEVIZS1

	BTFSS	PORTA,0
	GOTO	KIKAPCS
	GOTO	BEVIZS1

KIKAPCS

	MOVFW	KITOLTES	
	movwf 	CCPR1L ;ADAT KIÍRÁSA IDE
	CALL	DELAY
	MOVF	KITOLTES,0
	SUBWF	MIN,0
	BTFSC	STATUS,2
	GOTO	BEVIZS2
	DECF	KITOLTES
	GOTO	KIKAPCS

BEVIZS2

	BTFSC	PORTA,0
	GOTO	BEVIZS2
	GOTO	BEKAPCS

DELAY						;Delay labelje
	MOVLW	d'5'			
	MOVWF	T1				;T1-be bekerül a 200
DEL
	MOVLW	d'25'
	MOVWF	T2				;T2-be bekerül a 255
DEL1
	MOVLW	d'20'
	MOVWF	T3				;T3-ba bekerült a 10
DEL2
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	DECFSZ	T3,f			;Csökkenti a T3-at, addíg, amig nem nulla
	GOTO	DEL2			; mindig visszaugruk a DEL2-re, vagyis a sok NOP-ra
	DECFSZ	T2,f			;Ha már nulla, akkor ugyanez eljátszódik a T2-vel
	GOTO	DEL1
	DECFSZ	T1,f			;Majd a T1-el is
	GOTO	DEL
	RETURN					;Visszatér a DELAY szubrutinból

 	END						;Teljes program végét jelentő END