;-- Выведение цифры на экран, динамическое!
TIMER0_COMPA: ;ЖЖЖЖЖЖЖЖЖЖ  Динамич. индикац.   ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
	
	push reg	 ;I
	in	reg,SREG ;I
	push reg	 ;I
;============+
	sbis pinD,3 	;Проверка на недокрут колеса
	rjmp NE_P  
	in reg,GIMSK	
	sbr reg,0b10000000
	out GIMSK,reg
NE_P:

	in reg,portB
	bst reg,7       ; !Бит розетки сбереч!
	sbic portD,4
	rjmp PIATIY
	rjmp CHETVERTIY 
CHETVERTIY:  
	sbi portD,4
	cbi portD,6
	bld obraz_L,7
	out portB,obraz_L
	rjmp END_PEREKID_
PIATIY:      
	cbi portD,4
	sbi portD,6
	bld obraz_H,7
	out portB,obraz_H
END_PEREKID_:
;============+
	pop reg		 ;I
	out	SREG,reg ;I
	pop reg		 ;I
reti ;----------------------------------------------------

;-- Выявляет в которую сторану его крутнули(цифру крутит), запускает 
	;обратны отсчёт ВСЕГДА, а патом красиво счёлкнуть ;)
intt_1: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ  колёсеко  ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
	;cli
	push reg	 ;I
	in reg,SREG  ;I
	push reg	 ;I
	push reg_1	 ;I
	push reg_2	 ;I
;============+
	rcall TIM_0A_INDICAT
	
	cbr flajki,0b01001000 ;--- прервать визжание(и гимн) 
	sbic pinD,0   ;--- Проверка состояния бита направления колеса
	rjmp X_V_PLIUS
	rjmp X_V_MINUS
X_V_PLIUS: 
	rcall V_PLIUS
	rjmp X_V_end
X_V_MINUS:
	rcall V_MINUS 	  
X_V_end:
    cbr flajki,0b00000100		;--- Флажок штоб считало до 0 при тайминге
;--- Фитча с проверкой на ноль(ато не нравится что считает когда накрутил зеро)
    cpi slot_H,10
    brne NE_V_NULE     
    cpi slot_L,0
    brne NE_V_NULE 
	rcall STOP_OTS4ETA	

;--- Чтоб при попытке RE не считало от 99, а скручивало дулю, и серенило!
	sts POSLEDNIY_slot_L,slot_L
	sts POSLEDNIY_slot_H,slot_H
    ldi reg,1
	sts POSLEDNIY_TIK_TAK,reg
	rjmp NE_PROKRUTILI


	

NE_V_NULE:
;--- Сейвить последнее значение таймера для перезапуска (вроде это здесь 
;от глюков, при отсчёте обратном тоже сейвит-же)
	sts POSLEDNIY_slot_L,slot_L
	sts POSLEDNIY_slot_H,slot_H	
	ldi reg,240
	sts POSLEDNIY_TIK_TAK,reg
	sts TIK_TAK,reg ;Сохранить для (на случай RE)
	rcall ZAPUSK_OTS4ETA
	
; удерживать от самонакручивания(ато выскочит из прерывания, и пайдёт кружить .)
NE_PROKRUTILI:
	
	sbic pinD,3		;Проверка на недокрут колеса
	rjmp NE_PR  	
	in reg,GIMSK		
	cbr reg,0b10000000
	out GIMSK,reg 

	;dec reg_1
	;brne E_P
	;dec reg
	;brne E_P
	
	
NE_PR:	
;============+
	pop reg_2		;I
	pop reg_1		;I
	pop reg			;I
	out	SREG,reg	;I
	pop reg			;I
reti ;----------------------------------------------------

;-- Сам механизм тайминга(по четвертьсекунды)
TIM1_COMPA: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ  Отсчёт  ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
	out TCNT1L,Nolik
	out TCNT1H,Nolik 	; не влияет на флаги, патаму и вынес вперёд
;---------------------------------------------------------
	push reg		;I
	in	reg,SREG	;I
	push reg		;I
	push reg_1		;I
	push reg_2		;I
;============+  ;--- Направление отсчёта определить
	sbrc flajki,4   
	rcall SEKUNDOMER     ;Когда еденичка, тогда секундомер считает
	sbrs flajki,4 
	rcall TIMER           ;Если нолик, таймер
	sbr flajki,0b00100000 ;выйдя из прерывания красиво счЁлкнет
;============+
	pop reg_2		;I
	pop reg_1		;I
	pop reg			;I
	out	SREG,reg	;I
	pop reg			;I
reti ;----------------------------------------------------

;-- Визг из серены должен быть пи-п, пи-п, пи-п, пи-п, 
;	(его продолжительность здесь(пепрекидывая флажком))
TIMER1_COMPB: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ  Серена  ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
	out TCNT1L,Nolik
	out TCNT1H,Nolik
;------Пака мелодия не отзвучит, не серенить!
	sbrc flajki,3
	rjmp PI__end
;-------- инвертация флажка ВКЛ-непрерывного визка
	sbrc flajki,6
	rjmp PIS4IT
	rjmp MOL4IT
PIS4IT:
	cbr flajki,0b01000000
 	ldi obraz_H,0b01000000
	ldi obraz_L,0b01000000
	rjmp PI__end	;*00 на экран вывести* 
MOL4IT:
	sbr flajki,0b01000000
 	ldi obraz_H,0b01111111
	ldi obraz_L,0b01111111	PI__end:		;*   на экран вывести*  	  
reti ;----------------------------------------------------

;-- Перед уходом в сон выключает перефирию а с выходом, перебрасывает на ресет
intt_0: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ  sleep  (И ПРОЧИЕ РЕЖИМЫ) ЖЖЖЖЖЖЖЖЖЖЖЖ
	push reg		;I
	in	reg,SREG	;I
	push reg		;I
	push reg_1		;I
	push reg_2	;I
;>>>>>>>>---------- ;включить динамическую индикацию
	rcall TIM_0A_INDICAT
	cbr flajki,0b01001000 ;--- прервать визжание(и гимн) 
;--------------- Выключить прерывание кнопки (чтоб sei-индикация продолжалась)
	in reg,GIMSK
	cbr reg,0b01000000
	out GIMSK,reg   
sei
;>>>>>>>>-----------------------------Выход из сна методом ресета!
	sbrs flajki,7   ;ПЕРЕЗАПУСК?(по флагу) 
	rjmp NE_IZ_ZSNA 
	rjmp RESET
NE_IZ_ZSNA:
;>>>>>>>>-----------------------;определение нужды продцедуры останова секундомера 
	sbrs flajki,4   ;определение нужды продцедуры останова секундомера (по флагу) 
	rjmp NE_PAUZA
;--- иначе останавить/запустить секундомер
	in reg,TIMSK
	sbrs reg,6   ;Прям по состоянию бита TIM1_COMPA  определяю, вкл. или выкл. секундомера.
	rjmp START
	rjmp STOP
START:
	rcall ZAPUSK_OTS4ETA
	rjmp ST__end
STOP:
	rcall STOP_OTS4ETA 	  
ST__end:
;------------пауза, просто затем, чтоб не пошло перебирать режимы что далее по списку
	ldi reg_2,4 		;каличество пееропрашиваний
X_STSTOP_PAUZA_1:
	ldi reg,64
	rcall PAUZA_65536
	sbic pinD,2
	rjmp NU_VSIO_UJE
	dec reg_2
	brne X_STSTOP_PAUZA_1 
;>>>>>>>>----- ---------;------------------------------------------------------------

NE_PAUZA:
	in reg,TIMSK
	cbr reg,0b01100000
	out TIMSK,reg ;Вырубить таймер 1А-1В. дальше установятся, а тут нахер ненада
	rcall STOP_OTS4ETA ; на всякий случай(дп и палюбому, начнётся чтота новае)
PO_KRUGU: 
;=====================================Пауза "ОФФ".
	rcall s4el4ek 	;Щёлкнуть для наглядности
	ldi obraz_H,0b01000000
	ldi obraz_L,0b00001110 ;"ОФФ"
	ldi reg_2,7 		;каличество пееропрашиваний
X_SON_PAUZA_1:
	ldi reg,64
	rcall PAUZA_65536
	sbic pinD,2
	rjmp V_SON
	;-----------
	dec reg_2
	brne X_SON_PAUZA_1 ;Х5         Палучится ВДВЕ секунды!
;=====================================Пауза в 2сек, ***РЕ***
	rcall s4el4ek ;Щёлкнуть для наглядности
	ldi obraz_H,0b00001100
	ldi obraz_L,0b00000110	;*РЕ* 
	ldi reg_2,7 		;количество перепрошиваний
X_RE_PAUZA_1:
	ldi reg,64
	rcall PAUZA_65536
	sbic pinD,2
	rjmp V_RE
	;-----------
	dec reg_2
	brne X_RE_PAUZA_1 ;Х5         Палучится ВДВЕ секунды!
;=====================================Пауза в 2сек, ***СЕкундамер***
	rcall s4el4ek ;Щёлкнуть для наглядности
	ldi obraz_H,0b01000110
	ldi obraz_L,0b00000110	;СЕ
	ldi reg_2,7 		;каличество пееропрашиваний
X_CE_PAUZA_1:
	ldi reg,64
	rcall PAUZA_65536
	sbic pinD,2
	rjmp V_CE
	;-----------
	dec reg_2 brne X_CE_PAUZA_1 ;Х5         Палучится ВДВЕ секунды!
	rjmp PO_KRUGU ;==================================

V_CE:
 	cli ;========;СЕККУНДОМЕР,.. Задать направление отсчёта (флагом)
	sbr flajki,0b00010100  	 ;Флажок штоб считало 2-1-0-99-стоп!! при тайминге
							
;--- обнуление для РЕ с нуля
	ldi slot_L,0
	sts POSLEDNIY_slot_L,slot_L
	rcall load_cifer_L  
	ldi slot_H,10
	sts POSLEDNIY_slot_H,slot_H
	rcall load_cifer_H  
	ldi reg,1
 	sts TIK_TAK,reg
	sts POSLEDNIY_TIK_TAK,reg  ;обнулить секунды(точнее обьеденичивание, от греха..)
;--- вЫключить калёсика(ано тепер незачем) 
	in reg,GIMSK
	cbr reg,0b10000000
	out GIMSK,reg   
	rjmp NU_VSIO_UJE ;-;-;-;-;-;-

V_RE:
 	cli ;========ПЕРЕЗАПУСК ТАЙМЕРА
 	cbr flajki,0b00010000   ;  поменял направление отсчёта на ТАЙМЕРное 
						;(бит 2 трогать нельзя!, ато вдруг после секундамера???)
;--- Загрузить,.. и на экран последнее значение..
	lds slot_L,POSLEDNIY_slot_L
	lds slot_H,POSLEDNIY_slot_H
	rcall load_cifer_L
	rcall load_cifer_H
;--- Загрузить последнее значение секунд в секундосчётчик			  	
	lds reg,POSLEDNIY_TIK_TAK
	sts	TIK_TAK,reg ;(востановить минутные доли)
	rcall ZAPUSK_OTS4ETA
	rjmp NU_VSIO_UJE ;-;-;-;-;-;-

V_SON:
	cli ;========СОН(подготовка)
	out ddrB,Nolik
	out portB,Nolik	 	    ;(погасить) Индикатор, розетка, 
	out ddrD,Nolik 			;-вся перефирия
	ldi reg,0b00000100
	out portD,reg			;кнопку оставить подтянутой(ей-же включать!!)

;--- ;Изалировать прерывание колёсика(чтоб не глюкноло ва сне(мот и нинада)) 
;((((кнопку включить, я-ж ее отрубал уходя в прерывание!))))  	 	
	in reg,GIMSK
	sbr reg,0b01000000
	cbr reg,0b10000000
	out GIMSK,reg     
	sbr flajki,0b10000000  ;Уйдёт в сон зная что следующее нажатие кнопы,
					;вызавит RESET!(он праписан в самам верху прерывания)
	sei   ;-ато ведь и не сможет выйти из сна!
    sleep  ;-;-;-;-;-;-;-;-

NU_VSIO_UJE:
	sei
	ldi reg,125
	rcall PAUZA_65536 ;Пауза от дребезга. 
	cli  ;В прерывании ведь дефолтам стаит запрет прерываний :) 
;(паэтаму нада вернуть как и було, чтоб ано благапалучно завершило сваи дела)
	in reg,GIMSK
	sbr reg,0b01000000
	out GIMSK,reg   ;В_ключить прерывание кнопки 
;============+
	pop reg_2		;I
	pop reg_1		;I
	pop reg			;I
	out	SREG,reg	;I
	pop reg			;I
reti ;----------------------------------------------------
