.NOLIST
.INCLUDE "m16def.inc"
.LIST

.CSEG

.ORG $00
rjmp MAIN
.org $006
rjmp int_timer2
.ORG $00C
rjmp int_timer1_A 
.ORG $002A
.EQU cislo1=0
.EQU cislo10=19
.EQU cislo100=175
.EQU cislo=3

SETUP:

ldi R16, 0xFF
ldi R17, 0x00
out DDRA, R16			//port input or output
out DDRB, R16
ldi R19, 0b00001101	//1024 prescaler on timer1, clear on compare
out TCCR1B,R19		//setup register, 1024prescaler on timer1, clear on compare
ldi R19, 0b00010000	//interrupt on compare OCR1A with timer1
out TIMSK, R19		//interrupt on compare OCR1A with timer1
ldi R19, 128		//setup OCR1A
out OCR1AL, R19		//setup OCR1A
ldi R23, cislo		//R23=99
ldi R25, 1			//set Register 25 to 1
sei

MAIN:
	CPI R25,1		//compare R25 with 1
	BRNE SETUP		//if not equal jump,
	out PORTA,R23
	CPI R23,0
	BREQ ZERO
	rjmp MAIN
	


int_timer1_A:
	ldi R19, 0b00010000	//interrupt disable on compare OCR2 with timer2
	out TIMSK, R19		//interrupt disable on compare OCR2 with timer2
	DEC R23
	BRMI NEGATIVE
	out TCNT2, R17		//set timer2 to 0
	out PORTB, R17		//disable leds
	reti

int_timer2:
	out PORTB, R16		//enable leds
	in R19, PORTB		//read led status
	cpi R19, 255		//if leds on
	BREQ Disable_Leds	//disable leds
	reti

Disable_Leds:
	out PORTB, R17		//disable leds
	reti

ZERO:
	ldi R19, 16			//setup OCR2
	out OCR2, R19		//setup OCR2
	ldi R19, 0b0001111	//clear timer2 on compare, 1024prescaler
	out TCCR2, R19		//clear timer2 on compare, 1024prescaler
	ldi R19, 0b10010000	//interrupt enable on compare OCR2 with timer2
	out TIMSK, R19		//interrupt on compare OCR2 with timer2
	ret

NEGATIVE:
	ldi R23, cislo
	reti