;**********************************************************
;*  ora_59_1 - 16F628a
;**********************************************************

				list p=16F628a

				include "P16F628a.INC"

    __CONFIG	_BOREN_OFF & _DATA_CP_OFF & _CP_OFF &  _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT

;------------------------------------------------------------
#define     RELE_PORT   PORTB
#define     RELE        PORTB,1
;------------------------------------------------------------
                cblock  0x70
                saveWREG
                saveSTATUS
                masodperc
                endc
;------------------------------------------------------------

Reset_Vector	org		0x000
				goto	Start

Int_Vector		org		0x004
                ; mas int egyenlore nincs, ugyhogy meg context savings sem kellene igazandiol...
                movwf   saveWREG
                swapf   STATUS,W
                movwf   saveSTATUS

                ; mas interrupt nincs is, ugyhogy meg ellenorizni
                ; sem kellene mi okozta az interruptot...
                banksel PIR1 
                btfss   PIR1,TMR1IF
                goto    ISR_return
                
ISR_timer0
                bcf     PIR1,TMR1IF
                incf    masodperc,f
                
                movf    masodperc,W
                sublw   d'58' /2    ; 2 masodpercenkent van interrupt...
                btfsc   STATUS,Z    ; 58. masodpercben vagyunk?
                bsf     TMR1H,7     ; igen, most mar csak 1 mp-et varunk
                
                addlw   d'1'        ; 59. masdperc?
                btfsc   STATUS,Z
                goto    rele_be
                
                addlw   d'1'        ; 60. masodperc?
                btfsc   STATUS,Z
                goto    rele_ki
                
                goto    ISR_return
                
rele_be
                bsf     TMR1H,7     ; itt is csak 1 mp-et varunk
                banksel RELE_PORT
                bsf     RELE
                goto    ISR_return

rele_ki
                banksel RELE_PORT
                bcf     RELE
                clrf    masodperc
                goto    ISR_return

ISR_return
                swapf   saveSTATUS,W
                movwf   STATUS
                swapf   saveWREG,f
                swapf   saveWREG,W
				retfie

Start
                ; PORTA outputra kapcsoljuk hogy keveset fogyasszon
                banksel PORTA
                clrf    PORTA
                movlw   0x07
                movwf   CMCON
                banksel TRISA
                clrf    TRISA
                
				banksel	RCSTA	; turn off USART
				clrf	RCSTA
				banksel	PORTB	; set all outputs high
				clrf	PORTB
				banksel	TRISB	; set all of PORTB to outputs
				clrf	TRISB
				clrf    OPTION_REG
				
				; timer felprogramozasa
				banksel T1CON
				movlw   b'00001111' ; T1OSCEN:1 T1SYNC:OFF, TMR1CS:External, TMR1ON:1
				movwf   T1CON				
				banksel TMR1L
				clrf    TMR1L
				clrf    TMR1H
                clrf    masodperc
				; engedelyezzuk az interruptot
				clrf    INTCON
				banksel PIR1
				clrf    PIR1
				banksel PIE1
				clrf    PIE1
				bsf     PIE1,TMR1IE
				bsf     INTCON,PEIE
				bsf     INTCON,GIE

;------------------------------------------------------------
alszunk ; itt szepen sporolunk az energiaval
                sleep
                goto    alszunk
;------------------------------------------------------------
				end
