 LIST P=16F877
 #INCLUDE "P16F877.INC"
 ERRORLEVEL	0,	-302		; suppress bank selection messages
 __CONFIG _XT_OSC&_CP_OFF&_WDT_OFF&_LVP_OFF
	CBLOCK	0x70			;A Minden BANK-ból látható GPR kezdőcím
		W_SAVE
		STATUS_SAVE
	ENDC

#include "m_bank.asm"

	ORG	0
	GOTO	MAIN			;Beugrunk a MAIN loopba

	ORG	4
	; Elmentjük a Work és Status regisztereket
	MOVWF	W_SAVE			;Először a Work regisztert
	MOVFW	STATUS			;STATUS-t bele a már lementett Workbe
	MOVWF	STATUS_SAVE		;Status_save-be beletölti a Worköt

	BCF		INTCON,INTF		;Töröljük az INTF flag bitet (Jelezzük, kezeltük a megszakítást RB0)
	MOVLW	B'11111111'
	XORWF	PORTD,F			;XOR PORTD bitjeit

	; Visszatöltjük a Work és Status regisztereket
	MOVFW	STATUS_SAVE
	MOVWF	STATUS
	MOVFW	W_SAVE

	RETFIE					;Visszajövünk az interruptból


MAIN
	BANK1					;Unit az m_bank.asm-ben
	MOVLW	B'00000000'		;Betöltjük az akksiba a TRISD-be valót
	MOVWF	TRISD			;Beletöltjük (mind kimenet a nulla miatt)
	MOVLW	B'00000001'		;Betöltjük az akksiba a TRISB-be valót
	MOVWF	TRISB			;Beletöltjük az 0. PORTB bemenet lesz

	BCF		OPTION_REG,INTEDG	;Lefutó élre interruptol (1 = felfutó, 0 = lefutó él)
	BANK0					;BANK0-ba visszalépünk

	MOVLW	B'01010101'		;Betöltjük az akksiba a PORTD-be valót
	MOVWF	PORTD			;Beletöltjük a PORTD-be

	;Beállítjuk az RB0 interruptot
	BSF		INTCON,INTE			;Engedélyezzük az interruptot az INT0-ra
	BSF		INTCON,GIE			;General Interrupt Enable bitet 1-re állítva bekapcsolunk mindent

LOOP
	NOP
	GOTO LOOP					;Vissza a végtelen ciklusba

 	END							;Teljes program végét jelentő END