
 
 	LIST P=16F628A
	INCLUDE<P16F628A.INC>
	__CONFIG _PWRTE_ON & _WDT_OFF & _MCLRE_OFF & _BODEN_OFF & _LVP_OFF & _INTRC_OSC_NOCLKOUT

W_save 		equ 	20h
Sta_sav 	equ 	21h
PCL_sav 	equ 	22h
FSR_sav 	equ 	23h
CNT			equ		24h

#DEFINE		PIPAK	PORTB,4	

org 0x000

	GOTO	INIT
	
org 0x004

	movwf 	W_save
	movf 	STATUS,W
	clrf 	STATUS
	movwf 	Sta_sav
	movf 	PCLATH,w
	movwf 	PCL_sav
	movf 	FSR,w
	movwf 	FSR_sav
	GOTO	INTERRUPT
	retfie

INIT
	MOVLW	.200		;pre 100ms pipnutie
	MOVWF	CNT
	
	MOVLW	B'00000111'	; typ komparatoru (off)
	MOVWF	CMCON
	BSF	STATUS,RP0
	MOVLW	B'00000000'
	MOVWF	TRISB
	MOVLW	B'11111111'
	MOVWF	TRISA

	
	;Timer0 Registers Prescaler= 256 - TMR0 Preset = 61 - Freq = 20.03 Hz - Period = 0.049920 seconds
	BCF		OPTION_REG,T0CS;  	; bit 5  TMR0 Clock Source Select bit...0 = Internal Clock (CLKO) 1 = Transition on T0CKI pin
	BCF		OPTION_REG,T0SE;  	; bit 4 TMR0 Source Edge Select bit 0 = low/high 1 = high/low
	BCF		OPTION_REG,PSA;   	; bit 3  Prescaler Assignment bit...0 = Prescaler is assigned to the Timer0
	BCF		OPTION_REG,PS2;   	; bits 2-0  PS2:PS0: Prescaler Rate Select bits
	BCF		OPTION_REG,PS1;
	BCF		OPTION_REG,PS0;
		
	BCF		STATUS,RP0
	
	MOVLW	.131
	MOVWF	TMR0   
	
	BCF		INTCON,T0IE
	BSF 	INTCON,GIE  

GOTO 	MAIN

INTERRUPT

	BTFSC 	INTCON,T0IF 
    GOTO 	TMRINT
    GOTO	KONIEC
    

TMRINT
	BCF		INTCON,T0IF
	MOVLW	.131
	MOVWF	TMR0  
	
	BTFSC 	PIPAK
	GOTO	NEXT
	BSF		PIPAK
	GOTO	NEXT1
	
NEXT	
	BCF		PIPAK
	DECFSZ	CNT,F
	GOTO	NEXT1
	BCF		INTCON,T0IE		; zakazeme prerusenie od TMR0
	
NEXT1
	
	GOTO	KONIEC
	

KONIEC
	movf 	FSR_sav,w
	movwf 	FSR
	movf 	PCL_sav,w
	movwf 	PCLATH
	movf 	Sta_sav,w
	movwf 	STATUS
	swapf 	W_save,f
	swapf 	W_save,w
	retfie
	
MAIN
	MOVLW	.131
	MOVWF	TMR0 
	
	MOVLW	.200
	MOVWF	CNT			; nastavime dlzku pipnutue POZOR MAX 255 200 = 0.1s
	
	BSF		INTCON,T0IE ; povolime prerusenie TMR0 = spustime pipanie na 0.1s
	
	NOP
	GOTO $-1			; konec
	
	end
