LIST P=16F627
#INCLUDE "P16F627.INC"
__CONFIG _INTRC_OSC_NOCLKOUT & _CP_OFF & _WDT_OFF & _MCLRE_OFF & _LVP_OFF

;ez a progi azt csinálja, hogy ha az ra2-es láb pozitívabb, mint az ra1-es
;akkor elkezd villogni az rb0-ás lábra rakott led

; Változók
CBLOCK 0x20
	; Időzítő
	Coarse_Delay
	Fine_Delay
	M_Delay
ENDC

ORG	0
	goto	START
	; Itt kezdődik a megszakítás
	ORG	4
	BCF	PIR1,CMIF		;itt ezt lenullázom, hogy ha kilépek a megszakításból, akkor megint lehessen megszakítás
	MOVLW	B'01000000' ;itt a portb6-os lábon egy ideig 1 lesz
	MOVWF	PORTB
	;CALL	Delay
	;CLRF	PORTB		;törlöm portb-t
	;CALL	Delay		;ez itt nem fontos
	RETFIE				;kilépek

START
	CLRF	PORTA
	MOVLW	B'00000101'	;beállítom a komparátorokat, így csak 1 komparátor fog működni, az RA1 RA2-es
	MOVWF	CMCON
	; Portok beállítása
	BSF		STATUS,RP0
	MOVLW	B'00011111'	; PORTA --> bemenet
	MOVWF	TRISA
	MOVLW	B'00000000'	; PORTB --> kimenet
	MOVWF	TRISB
	BCF 	STATUS,RP0
	; Megszakítás
	BCF	PIR1,CMIF	;megszakítással kapcsolatos
	BSF	STATUS,RP0
	BSF	PIE1,CMIE	;engedélyezem a komparátoros megszakítást
	BCF	STATUS,RP0
	BSF	INTCON,GIE	;engedélyezem a főmegszakításkapcsolót
	BSF	INTCON,PEIE	;ezt is engedélyezem(megszakítással kapcsolatos)
	CLRF	PORTB	;lenullázom portb-t

VISSZA:				;nem csinál semmit, csak vár a megszakításra
	MOVLW	B'10000000' ;itt a portb7-es lábon egy ideig 1 lesz
	MOVWF	PORTB
;	call	Delay
	GOTO	VISSZA

Delay
	movwf	Coarse_Delay
	Delay_M
		movlw	H'0A'
		movwf	M_Delay
		Delay01
			movlw	H'FF'
			movwf	Fine_Delay
			Delay02
				NOP
				decfsz  Fine_Delay,F	; this loop takes approx 1mSec
				goto    Delay02
				decfsz  M_Delay,F
				goto    Delay01
				decfsz  Coarse_Delay,F
				goto    Delay_M
				retlw   0

END