.include	"m8def.inc"		; @8MHz


.def	sreg_temp				=	r15
.def	datreg1     			=	r16

;------------------------------------

.equ	timer0_run				=	0b00000101
.equ	timer0_stop				=	0b00000000
.equ	ocr0					=	0xFF-0x03			; timer0 komparálási érték

.dseg

;	bcd_konvert:		.byte 3
;	dig1_1:				.byte 1
;	dig2_1:				.byte 1
;	dig1_2:				.byte 1
;	dig2_2:				.byte 1
;	time_ram:			.byte 1
;	count_ram:			.byte 1


.cseg

	
.org		0x0000 rjmp RESET 				; Reset Handler
;.org		0x0001 rjmp EXT_0
.org		0x0003 rjmp TIMER2_COMPA
;.org		0x0004 rjmp TIMER2_OVF
;.org		0x0006 rjmp TIMER1_COMPA
;.org		0x0008 rjmp TIMER1_OVF
.org		0x0009 rjmp TIMER0_OVF




ini:

;----------------------------------


								; kezdőértékek, ha vannak
;----------------------------------
	ldi	datreg1,0b00111110
	out	ddrb,datreg1
	ldi	datreg1,0b11000001
	out	portb,datreg1			; kimenetek / felhúzók beállítása
;----------------------------------
	ldi	datreg1,0b00111111
	out	ddrc,datreg1
	ldi	datreg1,0b11000000
	out	portc,datreg1			; kimenetek / felhúzók beállítása
;----------------------------------
	ldi	datreg1,0b00000000
	out	ddrd,datreg1
	ldi	datreg1,0b11111111
	out	portd,datreg1			; kimenetek / felhúzók beállítása
;----------------------------------

timer_interrupts:

	ldi	datreg1,(1<<OCIE2)|(1<<TOIE0)
	out	TIMSK,datreg1


timer_0:
	
	ldi	datreg1,ocr0
	out	tcnt0,datreg1
	ldi	datreg1,(1<<CS02)|(1<<CS00)							; timer0_start, /1024 prescaler
	out	tccr0,datreg1


timer_2:				;~17ms CTC
	ldi	datreg1,0x84										; komparálási érték
	out	ocr2,datreg1

	ldi	datreg1,(1<<WGM21)|(1<<CS22)|(1<<CS21)|(1<<CS20)	; CTC, port disconnect, /1024 prescaler
	out	tccr2,datreg1
;------------------------------------

	sei

	main:

		rjmp	main
;-------------------------------------






;-------------------------------------------------------------------------
;   Megszakítás-kiszolgálás
;-------------------------------------------------------------------------
	reset:	ldi r16,high(RAMEND) ; Main program start
			out SPH,r16 ; Set Stack Pointer to top of RAM
			ldi r16,low(RAMEND)
			out SPL,r16
			
			rjmp	ini
;====================================================

;====================================================
		TIMER0_OVF:
			in	sreg_temp,sreg
			push	datreg1

			ldi	datreg1,ocr0
			out	tcnt0,datreg1		

			inc	r13
			bst	r13,0
			in	datreg1,portb
			bld	datreg1,4
			out	portb,datreg1		; toggle PORTB,4

			pop	datreg1				
			out	sreg,sreg_temp		
			reti



		TIMER2_COMPA:
			in	sreg_temp,sreg
			push	datreg1

			inc	r14
			bst	r14,0
			in	datreg1,portb
			bld	datreg1,2
			out	portb,datreg1		; toggle PORTB,2

			pop	datreg1
			out	sreg,sreg_temp		
			reti			




