; Preruseni od pinu RB,0
; LED je pripojena na RA,1
; Prerušenie od pretečenia TMR0 TOTO JE PRIORITA!!!!!!!!!!

	LIST P=16F627, R=DEC
	INCLUDE<P16F627.INC>

	__CONFIG _PWRTE_ON & _WDT_OFF & _MCLRE_OFF & _BODEN_OFF & _LVP_OFF & _INTRC_OSC_NOCLKOUT

W_save	equ	20h	; zaloha pri preruseni
Sta_sav	equ	21h	; zaloha pri preruseni
PCL_sav	equ	22h	; zaloha pri preruseni
FSR_sav	equ	23h	; zaloha pri preruseni

#DEFINE	LED	PORTA,1


;-----------------------------------------------------------------------------------------------

	org	00h
	goto	INIT

	org	04h		; ulozeni hlavnich registru
	movwf	W_save		; W
	movf	STATUS,W
	clrf	STATUS		; Banka 0
	movwf	Sta_sav		; STATUS
	movf	PCLATH,w
	movwf	PCL_sav		; PCLATH
	movf	FSR,w
	movwf	FSR_sav		; FSR
	GOTO	PRERUS
	

;************************************************************************************************
;************************************************************************************************
;************************************************************************************************


INIT	MOVLW	B'00000111'	; typ komparatoru (off)
	MOVWF	CMCON
	BSF	STATUS,RP0	; nastaveni In / Out
	MOVLW	B'00000001'
	MOVWF	TRISA
	MOVLW	B'11111111'
	MOVWF	TRISB
	MOVLW	B'00000000'
	MOVWF	OPTION_REG

	BCF	STATUS,RP0
	MOVLW	B'10110000'	; povoleni preruseni pouze od RB0 a TMR0
	MOVWF	INTCON

	NOP	;1
	NOP;2
	NOP;3
	NOP;4
	NOP;5
	NOP	;6
	NOP;7
	NOP;8
	NOP	;9 vlastni program !
	GOTO	$-9


;-----------------------------------------------------------------     Preruseni

PRERUS	BTFSC	INTCON,2 ; bolo prerušenie od TMR0 ???
	GOTO	PRER01		; bolo od TMR0 !!!
	BTFSC	INTCON,1	; bolo prerušenie od RB0 ???
	GOTO	PRERO		;áno bolo od RB0 !!!
	GOTO	PRERKON		; nezname = nic

PRERO	BCF	INTCON,1	; smazat priznak
	BTFSS	LED		; zjistit stal LED a zmenit
	GOTO	$+3
	BCF	LED
	GOTO	PRERKON
	BSF	LED
	GOTO	PRERKON
PRER01	BCF	INTCON,2	; smazat priznak
		nop
		nop
		nop
		nop
		nop
GOTO	PRERKON


PRERKON	BSF	INTCON,7	; povolenie všetkých prerusení
	clrf	STATUS		; Banka 0	obnoveni ulozenych registru
	movf	FSR_sav,w	; FSR
	movwf	FSR
	movf	PCL_sav,w	; PCLATH
	movwf	PCLATH
	movf	Sta_sav,w	; Status
	movwf	STATUS
	swapf	W_save,f	; W
	swapf	W_save,w
	retfie

;--------------------------------------------------------

	END