.include "tn2313def.inc"
.cseg
.ORG $0000
		rjmp start
		rjmp sel ;INT0addr = 0x001      External Interrupt0
		rjmp timer ;INT1addr = 0x002      External Interrupt1
		RETI ;ICP1addr = 0x003      Input capture interrupt 1
		RETI ;OC1Aaddr = 0x004      Timer/Counter1 Compare Match A
		RETI ;OVF1addr = 0x005      Overflow1 Interrupt
		RETI ;OVF0addr = 0x006      Overflow0 Interrupt
		RETI ;URXC0addr = 0x007     USART0 RX Complete Interrupt
		RETI ;UDRE0addr = 0x008     USART0 Data Register Empty Interrupt
		RETI ;UTXC0addr = 0x009     USART0 TX Complete Interrupt
		RETI ;ACIaddr = 0x00A       Analog Comparator Interrupt
		RETI ;PCINTaddr = 0x00B     Pin Change Interrupt
		RETI ;OC1Baddr = 0x00C      Timer/Counter1 Compare Match B
		rjmp timer ;OC0Aaddr = 0x00D      Timer/Counter0 Compare Match A
		RETI ;OC0Baddr = 0x00E      Timer/Counter0 Compare Match B
		RETI ;USI_STARTaddr = 0x00F USI start interrupt
		RETI ;USI_OVFaddr = 0x010   USI overflow interrupt
		RETI ;ERDYaddr = 0x011      EEPROM write complete
		RETI ;WDTaddr = 0x012       Watchdog Timer Interrupt

	 	.ORG   INT_VECTORS_SIZE      

; Peripherals configuration ------------------------------------

start:  	ldi R16, RAMEND		
	        out SPL, R16
		
		ldi r16, 0x80
		out ACSR,r16

		cli

		ldi r16,0b00001111     
		out MCUCR,r16	

		ldi r16,0b11000000
		out eifr,r16

		ldi r16,0b11000000     ;разрешение INT0, INT1
		out GIMSK,r16
	

		ldi r16, 0b11111111    ;Program OC1A as an output
		out DDRB, r16          ;порт B на выход

		ldi r16, 0b00000001    ;pin 0 порта D на выход
		out DDRD,r16

		rcall pr0	
			
;==============================================================
;               MINE
;==============================================================
mine:	        ;ldi r16, $20           ;Configure sleep mode
		;out MCUCR, r16
		;sleep
		;ldi r16,$00
		;out MCUCR,r16
		rjmp mine
;==============================================================
;               обработчик прерывания включения мотора
;==============================================================
timer:	        ldi r16,0b00000001
		out PORTD,r16
		
		ldi r21,0          
        	ldi r22,0
		ldi r23,3
 
loop3:          dec r21
         	brne loop3
          	dec r22
     	        brne loop3
		dec r23
		brne loop3

		ldi r16,0
		out PORTD, r16
		reti
		
;==============================================================
;               задержка отображения цифры
;==============================================================
delay:	        ldi r21,0           
                ldi r22,0
		ldi r23,2

loop4:          dec r21
                brne loop4
                dec r22
	        brne loop4
		dec r23
		brne loop4
		ret		 

;==============================================================
;               обработчик прерывания выбора подпрограмм
;==============================================================
sel:	        rcall delay
		andi r17,0b00000011
		inc r17
		cpi r17,0
		breq prog0
		cpi r17,1
		breq prog1
		cpi r17,2
		breq prog2
		cpi r17,3
		breq prog3
	
prog0:          rcall pr0
		reti
prog1:          rcall pr1
		reti
prog2:          rcall pr2
		reti
prog3:          rcall pr3
		reti
;==============================================================
;               задержка 15 мин prog 0
;==============================================================
pr0:	        rcall delay
		ldi r16,0b00110000     ;отображение 15 мин 
		out portb,r16
		rcall delay
		ldi r16,0b00000000     ;гашение
		out portb,r16

		ldi r16, $40           ;Program TCCR1A to toggle
		out TCCR1A, r16        ;OC1A on each compare match

		ldi r16, $13           ;Program the output compare
		out OCR1AH, r16        ;register for a division
		ldi r16, $88           ;ratio of 5000
		out OCR1AL, r16     

		ldi r16, 0b00000111    ;Enable T/C0 interrupt
		out TIMSK, r16

		ldi r16,0b00000010     ;режим СТС
		out TCCR0A,r16

		ldi r16,0x02           ;TOP 2
		out OCR0A,r16

		ldi r16,0x00
		out TCNT0,r16

		ldi r16, $00           ;Reset timer 1 value
		out TCNT1H, r16
		ldi r16, $00
		out TCNT1L, r16

		ldi R16, $0C           ;Start timer 1 for a prescale
		out TCCR1B, r16        ;ratio of 256

		ldi r16, 0b00000110    ;Start counter 0 for
		out TCCR0B, r16        ;external pin T0 source
	                               ;синх. заднему фронту
		sei
		ret

;==============================================================
;               задержка 30 мин prog 1
;==============================================================
pr1:	        rcall delay
		ldi r16,0b00110101     ;отображение 30 мин 
		out portb,r16
		rcall delay
		ldi r16,0b00000000     ;гашение
		out portb,r16

		ldi r16, $40           ;Program TCCR1A to toggle
		out TCCR1A, r16        ;OC1A on each compare match

		ldi r16, $13           ;Program the output compare
		out OCR1AH, r16        ;register for a division
		ldi r16, $88           ;ratio of 5000
		out OCR1AL, r16     

		ldi r16, 0b00000111    ;Enable T/C0 interrupt
		out TIMSK, r16

		ldi r16,0b00000010     ;режим СТС
		out TCCR0A,r16

		ldi r16,0x02           ;TOP 2
		out OCR0A,r16

		ldi r16,0x00
		out TCNT0,r16

		ldi r16, $00           ;Reset timer 1 value
		out TCNT1H, r16
		ldi r16, $00
		out TCNT1L, r16

		ldi R16, $0C           ;Start timer 1 for a prescale
		out TCCR1B, r16        ;ratio of 256

		ldi r16, 0b00000110    ;Start counter 0 for
		out TCCR0B, r16        ;external pin T0 source
	                               ;синх. заднему фронту
		sei
		ret

;==============================================================
;               задержка 2 часа  prog 2
;==============================================================
pr2:	        rcall delay
		ldi r16,0b11010101     ;отображение 2 часа 
		out portb,r16
		rcall delay
		ldi r16,0b00000000     ;гашение
		out portb,r16

		ldi r16, $40           ;Program TCCR1A to toggle
		out TCCR1A, r16        ;OC1A on each compare match

		ldi r16, $13           ;Program the output compare
		out OCR1AH, r16        ;register for a division
		ldi r16, $88           ;ratio of 5000
		out OCR1AL, r16     

		ldi r16, 0b00000111    ;Enable T/C0 interrupt
		out TIMSK, r16

		ldi r16,0b00000010     ;режим СТС
		out TCCR0A,r16

		ldi r16,0x02           ;TOP 2
		out OCR0A,r16


		ldi r16,0x00
		out TCNT0,r16

		ldi r16, $00           ;Reset timer 1 value
		out TCNT1H, r16
		ldi r16, $00
		out TCNT1L, r16

		ldi R16, $0C           ;Start timer 1 for a prescale
		out TCCR1B, r16        ;ratio of 256

		ldi r16, 0b00000110    ;Start counter 0 for
		out TCCR0B, r16        ;external pin T0 source
                                       ;синх. заднему фронту
		sei
		ret

;==============================================================
;                задержка 4 часа  prog 3
;==============================================================
pr3:	        rcall delay
		ldi r16,0b01100011     ;отображение 4 часа 
		out portb,r16
		rcall delay
		ldi r16,0b00000000     ;гашение
		out portb,r16

		ldi r16, $40           ;Program TCCR1A to toggle
		out TCCR1A, r16        ;OC1A on each compare match

		ldi r16, $13           ;Program the output compare
		out OCR1AH, r16        ;register for a division
		ldi r16, $88           ;ratio of 5000
		out OCR1AL, r16     

		ldi r16, 0b00000111    ;Enable T/C0 interrupt
		out TIMSK, r16

		ldi r16,0b00000010     ;режим СТС
		out TCCR0A,r16

		ldi r16,0x02           ;TOP 2
		out OCR0A,r16

		
		ldi r16,0x00
		out TCNT0,r16

		ldi r16, $00           ;Reset timer 1 value
		out TCNT1H, r16
		ldi r16, $00
		out TCNT1L, r16

		ldi R16, $0C           ;Start timer 1 for a prescale
		out TCCR1B, r16        ;ratio of 256

		ldi r16, 0b00000110    ;Start counter 0 for
		out TCCR0B, r16        ;external pin T0 source
	                               ;синх. заднему фронту
		sei