;***********************************************************
;*               ПРОЦЕССОР LITE 2         
;*                 AT90S1200    
;* CLK   8.000 MGz
;* CIKL  125ns 
;* 
;* 
;***********************************************************


.include "1200def.inc";указан тип проца и подключен листинг 
                      ;его переменных


;НОМЕР ЭФФЕКТА ХРАНИТСЯ В 63 ЯЧЕЙКЕ EEPROM
;ЗНАЧЕНИЕ MAX ХРАНИТСЯ В 62 ЯЧЕЙКЕ EEPROM
;ЗНАЧЕНИЕ COMP ХРАНИТСЯ В 61 ЯЧЕЙКЕ EEPROM

;ЗНАЧЕНИЕ ПЕРЕМЕННОЙ СКОРОСТИ Q ХРАНИТСЯ ДЛЯ КАЖДОГО ЭФФЕКТА
;В СВОЕЙ ЯЧЕЙКЕ EEPROM. 
;                       В 60 ЯЧЕЙКЕ ХРАНИТСЯ СКОРОСТЬ ЭФФЕКТА 0
;                       В 59 ЯЧЕЙКЕ ХРАНИТСЯ СКОРОСТЬ ЭФФЕКТА 1
;			  В 58 ЯЧЕЙКЕ ХРАНИТСЯ СКОРОСТЬ ЭФФЕКТА 2 
;			  И Т.Д.


;МИНИМАЛЬНОЕ ЗНАЧЕНИЕ СКОРОСТИ Q=2!!!!!! (МАКСИМАЛЬНО БЫСТРО)
;МИНИМАЛЬНОЕ ЗНАЧЕНИЕ ЯРКОСТИ - 15 ЕДЕНИЦ(НИТИ НАКАЛА ПРАКТИЧЕСКИ ТЛЕЮТ)
;МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ ЯРКОСТИ - 0
;ОДНА ГРАДАЦИЯ ЯРКОСТИ РАВНА ~6 процентов


;РЕГИСТРОВЫЕ ПЕРЕМЕННЫЕ


.DEF  COMP   =r24	;ФЛАГ ОБРАБОТКИ КОМПАРАТОРА (НА ПРЕВЫШЕНИЕ НАПРЯЖЕНИЯ)

.DEF  MAX    =r16	;ЗДЕСЬ ХРАНИТСЯ УРОВЕНЬ МАКСИМАЛЬНОЙ ЯРКОСТИ (0 ИЛИ 2)

.DEF  S      =r26    ;НОМЕР  ЭФФЕКТА (ПОРЯДКОВЫЙ)

.DEF  SS     =r18    ;НОМЕР ЯЧЕЙКИ EEPROM ДЛЯ ПРОЦЕДУР С EEPROM

.DEF  T	      =r19    ;ПЕРЕМЕННАЯ ДЛЯ ПРОЦЕДУРЫ ЭФФЕКТОВ (КОЛ-ВО ПОВТОРОВ ОДНОГО ЭФФЕКТА)

.DEF  Q      =r20	;СКОРОСТЬ (КОЛ-ВО ПОВТОРОВ ОДНОЙ ГРАДАЦИИ ЯРКОСТИ)

.DEF  J      =r21	;КОПИЯ Q (ИСПОЛЬЗУЕТСЯ В ПРОЦЕДУРАХ УПРАВЛЕНИЯ ТИРИСТОРОВ)	

.DEF  G      =r22     ;ФЛАГ ДЛЯ ПРАВИЛЬНОГО ВОЗВРАТА ИЗ ПРОВЕРКИ КНОПОК

.DEF  A      =r23	;АККУМУЛЯТОР

.DEF  AA     =r29	;АЛЬТЕРНАТИВНЫЙ АККУМУЛЯТОР

.DEF  DELAY  =r25	;ПЕРЕМЕННАЯ В ПРОЦЕДУРЕ PAUSE_ms

.DEF  X      =r17	;ПЕРЕМЕННАЯ В ПРОЦЕДУРЕ PAUSE_ms

.DEF  DEL    =r27	;ЗАДЕРЖКА ПЕРЕД ВКЛ.ПЕРВОГО КАНАЛА (ЯРКОСТЬ)  

.DEF  DELL   =r28	;ЗАДЕРЖКА ПЕРЕД ВКЛ.ВТОРОГО КАНАЛА (ЯРКОСТЬ)

.DEF  EF1    =r15

.DEF  EF2    =r30	;ПЕРЕМЕННЫЕ ДЛЯ ЭФФЕКТОВ(КОПИИ DEL И DELL)



.CSEG                  ;НАЧАЛО КОДОВОГО СЕГМЕНТА
.ORG 0

        RJMP RESET      ;ПЕРЕХОД ПО reset
        NOP             ;ПЕРЕХОД ПО int
        NOP             ;ПЕРЕХОД ПО tmr0  
        RJMP COMPARATOR ;ПЕРЕХОД по compare

;-------------------------------------------------------------------
;ОБРАБОТКА ПРЕРЫВАНИЙ ОТ КОМПАРАТОРА
;-------------------------------------------------------------------
COMPARATOR:
	
	RJMP OFF		;ЕСЛИ СРАБОТАЛ КОМПАРАТОР ОТКЛЮЧИТЬ ВСЕ

;-------------------------------------------------------------------


;********************************************************************
;ИНСТАЛЯЦИЯ
;********************************************************************

RESET:	
	CLI			;ЗАПРЕТИТЬ ПРЕРЫВАНИЯ

	LDI A,0B00001111	
	OUT WDTCR,A		;РАЗРЕШИТЬ WDT
	

       	LDI A,0B00000000
	OUT TIMSK,A		;ВЫКЛЮЧИТЬ tmr0
       
	LDI A,0B00000000
	OUT MCUCR,A		;ВЫКЛЮЧИТЬ sleep
                  		;УСТАНОВКА ПРЕРЫВАНИЯ ОТ int0 УРОВНЮ ЛОГ 0

	LDI A,0B00000000
	OUT GIMSK,A		;ЗАПРЕТИТЬ ПРЕРЫВАНИЯ ОТ int0

	
	LDI A,0B00001000 		
	OUT ACSR,A		;РАЗРЕШИТЬ КОМПАРАТОР,РАЗРЕШИТЬ ПРЕРЫВАНИЯ ОТ
				;КОМПАРАТОРА,ПРЕРЫВАНИЯ ПО ПЕРЕКЛЮЧЕНИЮ.

	LDI A,0B00111100	
	OUT DDRB,A		;НАСТРОЙКА ПОРТА Б.1-ВЫХОД,0-ВХОД
	LDI A,0B00000000
	OUT PORTB,A		;ИНСТАЛЯЦИЯ УСТРОЙСТВ ПОДКЛЮЧЕНЫХ К ПОРТУ В.
				;ВЫКЛ.СИММИСТОРЫ,ПОТУШИТЬ ИНД.СЕТЬ,ВЫКЛ.КЛЮЧ
				;РЕЛЕ
	

	LDI A,0B01110000
	OUT DDRD,A		;НАСТРОЙКА ПОРТА D.1-ВЫХОД,0-ВХОД
	LDI A,0B00001011
	OUT PORTD,A		;ВКЛЮЧИМ ПОДТЯГИВАЮЩИЕ РЕЗИСТОРЫ НА ТЕХ ВХОДАХ
				;К КОТОРЫМ ПОДКЛЮЧЕНЫ КНОПКИ УПРАВЛЕНИЯ
	
	

L55:	SBIC PIND,2
	RJMP L55 	;ЖДЁМ НАЧАЛА ПЕРЕХОДА ФАЗЫ ЧЕРЕЗ НОЛЬ
L66:	SBIS PIND,2	
	RJMP L66 	;ЖДЁМ ОКОНЧАНИЯ ПЕРЕХОДА ФАЗЫ ЧЕРЕЗ НОЛЬ
	
	LDI DELAY,18
	RCALL PAUSE_MS	;ПОДГАДАЕМ К КОНЦУ ПЕРИОДА
	
				


	SBI PORTB,5		;ВКЛЮЧИТЬ УДЕРЖАНИЕ РЕЛЕ
	LDI DELAY,254
	RCALL PAUSE_MS
	LDI DELAY,254
	RCALL PAUSE_MS
	LDI DELAY,254
	RCALL PAUSE_MS
				;ПЕРЕХОД НА ПРОЦЕДУРУ ЗАДЕРЖКИ,ДЛЯ ОТРАБОТКИ РЕЛЕ

	SBI PORTB,3		;ЗАЖЕЧЬ ИНДИКАТОР СЕТЬ	

 	


INSTAL1:

	;ВОССТАНОВИМ ИЗ EEPROM НОМЕР ЭФФЕКТА (ЕСЛИ S=0 ТОГДА АВТОМАТ)

	LDI A,63
 	OUT EEAR,A	;УКАЖЕМ НОМЕР СЧИТЫВАЕМОЙ ЯЧЕЙКИ
	SBI EECR,EERE	;РАЗРЕШИТЬ ЧТЕНИЕ
	IN S,EEDR	;ЗАНЕСЕМ В S НОМЕР ЭФФЕКТА
	
 	LDI A,5
	CP A,S
	BRMI ERROR1	;ЕСЛИ S>5 ТОГДА ПЕРЕХОД НА ERROR1	
	RJMP INSTAL2	;ИНАЧЕ ПЕРЕХОДИМ НА INSTAL2
	
ERROR1:
	WDR		;СБРОСИМ СОБАКУ
	LDI S,0		;НАСИЛЬНО ВКЛЮЧИМ АВТОМАТ И СОХРАНИМ ЕГО В EEPROM
	LDI SS,63
 	MOV A,S		;ПОДГОТОВИМ ДАННЫЕ ДЛЯ ПРОЦЕДУРЫ ЗАПИСИ
	RCALL WR	;НАЧАТЬ ПРОЦЕДУРУ ЗАПИСИ


;ВОССТАНОВИМ ИЗ EEPROM ЗНАЧЕНИЕ MAX (ЕСЛИ MAX=0 ТОГДА ПОЛНАЯ ЯРКОСТЬ)
;                                   (ЕСЛИ MAX=3 ТОГДА ПРИТУШЕНО)
INSTAL2:

	LDI A,62
 	OUT EEAR,A	;УКАЖЕМ НОМЕР СЧИТЫВАЕМОЙ ЯЧЕЙКИ
	SBI EECR,EERE	;РАЗРЕШИТЬ ЧТЕНИЕ
	IN MAX,EEDR	;ЗАНЕСЕМ В MAX
	
 	
	CPI MAX,0	;ЕСЛИ МАХ=0 (МАКСИМАЛЬНАЯ ЯРКОСТЬ) ,ТО МАХ ВЫКЛЮЧЕН
	BREQ INSTAL3	;ПЕРЕХОД НА INSTAL3
	
	CPI MAX,3	;ЕСЛИ МАХ=3 (НОНИЖЕННАЯ ЯРКОСТЬ) ,ТО МАХ ВКЛЮЧЕН
	BREQ INSTAL3	;ПЕРЕХОД НА INSTAL3

   ;ЕСЛИ МАХ НЕ=0 И НЕ=3 ТОГДА ИДЕМ ДАЛЕЕ НА ERROR11


ERROR11:
	
	LDI MAX,3	;НАСИЛЬНО ВКЛЮЧИМ MAX (ПОНИЖЕННУЮ ЯРКОСТЬ) И ЗАПИШЕМ В EEPROM
	LDI SS,62
	MOV A,MAX	;ПОДГОТОВИМ ДАННЫЕ К ЗАПИСИ
	RCALL WR	;НАЧАТЬ ПРОЦЕДУРУ ЗАПИСИ

	;ИДЕМ НА INSTAL3




	

;ВОССТАНОВИМ ИЗ EEPROM ЗНАЧЕНИЕ COMP (ЕСЛИ COMP=0 ТОГДА НЕКОНТРОЛИРУЕМ СЕТЬ)
;ЭТА ПРОЦЕДУРА УБРАНА.ТЕПЕРЬ СОМР ВКЛЮЧАЕТСЯ КАЖДЫЙ РАЗ ПРИ ВКЛЮЧЕНИИ ПИТАНИЯ,
;И ЕГО МОЖНО ОТКЛЮЧИТЬ ТОЛЬКО ДО СЛЕДУЮЩЕГО ВЫКЛЮЧЕНИЯ ПИТАНИЯ.ЗНАЧЕНИЕ
;ПЕРЕМЕННОЙ МАХ НЕ СОХРАНЯЕТСЯ В EEPROM.


INSTAL3:

	;LDI A,61
 	;OUT EEAR,A	;УКАЖЕМ НОМЕР СЧИТЫВАЕМОЙ ЯЧЕЙКИ
	;SBI EECR,EERE	;РАЗРЕШИТЬ ЧТЕНИЕ
	;IN COMP,EEDR	;ЗАНЕСЕМ В COMP ЗНАЧЕНИЕ

	;TST COMP	;КОМПОРАТОР РАЗРЕШЕН?
	;BREQ COMPA	;ЕСЛИ НЕТ ТОГДА ИДЕМ НА COMPA
	;SBI PORTD,6	;ДА-ТОГДА ЗАЖЖЕМ ИНДИКАТОР COMP
	;SEI		;РАЗРЕШИМ ПРЕРЫВАНИЯ
	;RJMP INSTAL4	;ИДЕМ НА INSTAL4
	
;COMPA:
	;CBI PORTD,6  	;ПОТУШИМ ИНДИКАТОР COMP И ИДЕМ ДАЛЕЕ НА INSTAL4
	;CLI		;ЗАПРЕТИМ ПРЕРЫВАНИЯ

	LDI COMP,1	;РАЗРЕШИМ РАБОТУ КОМПОРАТОРА.
	SBI PORTD,6	;ЗАЖЖЕМ ИНДИКАТОР COMP
	SEI		;РАЗРЕШИМ ПРЕРЫВАНИЯ   


INSTAL4:
	
	TST MAX		;MAX ВЫКЛЮЧЕН?
	BREQ MAXA	;ЕСЛИ ДА ТОГДА ИДЕМ НА MAXA 
	SBI PORTD,4	;ЕСЛИ НЕТ (MAX-ВКЛЮЧЕН) ЗАЖЖЕМ ИНДИКАТОР MAX
	RJMP INSTAL5	;ИДЕМ НА INSTAL5
	
MAXA:	CBI PORTD,4	;ПОТУШИМ ИНДИКАТОР MAX И ИДЕМ НА INSTAL5
			
	


INSTAL5:
	CBI PORTD,5		;ПОТУШИТЬ СВЕТОДИОД (АВТОМАТ
	
;ПРОЦЕДУРА ПРОВЕРЯЕТ НАЖАТИЯ КЛАВИШ ПОСЛЕ ВКЛ.ПИТАНИЯ (ОДИН РАЗ)
	
	SBIS PIND,0	;SPEED НАЖАТА?
	RCALL MAX_S	;ДА,УХОДИМ НА MAX_S
	SBIS PIND,1	;PROG НАЖАТА?
	RCALL COMP_S	;ДА,УХОДИМ НА COMP_S
			;ЕСЛИ НИ ОДНА НЕ НАЖАТА ТОГДА ИДЁМ НА ЭФФЕКТЫ

	RCALL KM7

	RJMP DD


;-------------------------------------------------------------------
;        КОМПОНЕНТЫ ДЛЯ СОСТАВЛЕНИЯ ЭФФЕКТОВ
;*******************************************************************








;-------------------------------------------------------------------
;КОМПОНЕНТ 1 ПЕРВЫЙ ГОРИТ ВТОРОЙ ПРИТУШЕН 
;ЗАТЕМ ПЕРВЫЙ ПЛАВНО ТУХНЕТ ,А ВТОРОЙ РАЗГОРАЕТСЯ
;ПЕРВЫЙ КАНАЛ ПРИТУШЕН,А ВТОРОЙ ГОРИТ
;-------------------------------------------------------------------

KM1:
	MOV DEL,MAX
	LDI DELL,13                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          	
M0:	MOV J,Q		;ПОДГОТОВИМ J
	MOV EF1,DEL	;СОХРАНИМ DEL
	MOV EF2,DELL	;СОХРАНИМ DELL
	RCALL START	;ВЫЗОВ ПРОЦЕДУРЫ УПРАВЛЕНИЯ ТИРИСТОРАМИ
	MOV DEL,EF1	;ВОССТАНОВИМ DEL
	MOV DELL,EF2	;ВОССТАНОВИМ DELL
	CPI DEL,13	;МЫ ВЫШЛИ НА МИНИМАЛЬНУЮ ЯРКОСТЬ?
	BREQ M1 	;ЕСЛИ ДА-ТО ВЫХОД
	INC DEL		;УЬЕНЬШИТЬ ЯРКОСТЬ
	DEC DELL	;УВИЛИЧИТЬ ЯРКОСТЬ
	RJMP M0 	;ЕЩЁ КРУГ
M1:	RET
;===================================================================


;-------------------------------------------------------------------
;КОМПОНЕНТ 2 ПЕРВЫЙ ПРИТУШЕН ВТОРОЙ ГОРИТ 
;ЗАТЕМ ПЕРВЫЙ ПЛАВНО РАЗГОРАЕТСЯ ,А ВТОРОЙ ТУХНЕТ
;ПЕРВЫЙ КАНАЛ ГОРИТ НА ВСЮ ЯРКОСТЬ,А ВТОРОЙ ПРИТУШЕН.
;-------------------------------------------------------------------

KM2:
	LDI DEL,13
	MOV DELL,MAX                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          	
M2:	MOV J,Q		;ПОДГОТОВИМ J
	MOV EF1,DEL	;СОХРАНИМ DEL
	MOV EF2,DELL	;СОХРАНИМ DELL
	RCALL START	;ВЫЗОВ ПРОЦЕДУРЫ УПРАВЛЕНИЯ ТИРИСТОРАМИ
	MOV DEL,EF1	;ВОССТАНОВИМ DEL
	MOV DELL,EF2	;ВОССТАНОВИМ DELL
	CP DEL,MAX	;МЫ ВЫШЛИ НА ПОЛНУЮ ЯРКОСТЬ?
	BREQ M3 	;ЕСЛИ ДА-ТО ВЫХОД
	DEC DEL		;УВЕЛИЧИТЬ ЯРКОСТЬ
	INC DELL	;УМЕНЬШИТЬ ЯРКОСТЬ
	RJMP M2 	;ЕЩЁ КРУГ
M3:	RET
;===================================================================



;-------------------------------------------------------------------
;КОМПОНЕНТ 3 ОБА ПРИТУШЕНЫ 
;ЗАТЕМ ПЕРВЫЙ ПЛАВНО НАРАСТАЕТ,ВТОРОЙ БЕЗ ИЗМЕНЕНИЙ
;ПРИ ВЫХОДЕ ПЕРВЫЙ ГОРИТ ,ВТОРОЙ ПРИТУШЕН
;-------------------------------------------------------------------

KM3:
	LDI DEL,11	
	LDI DELL,11	
M4:	MOV J,Q		;ПОДГОТОВИМ J
	MOV EF1,DEL	;СОХРАНИМ DEL
	MOV EF2,DELL	;СОХРАНИМ DELL
	RCALL START	;ВЫЗОВ ПРОЦЕДУРЫ УПРАВЛЕНИЯ ТИРИСТОРАМИ
	MOV DEL,EF1	;ВОССТАНОВИМ DEL
	MOV DELL,EF2	;ВОССТАНОВИМ DELL
	CP DEL,MAX	;МЫ ВЫШЛИ НА МАКСИМАЛЬНУЮ ЯРКОСТЬ?
	BREQ M5 	;ЕСЛИ ДА-ТО ВЫХОД
	DEC DEL 	;УВЕЛИЧИВАЕМ ЯРКОСТЬ ПЕРВОГО
	RJMP M4 	;ЕЩЁ КРУГ
M5:	RET
;===================================================================


;-------------------------------------------------------------------
;КОМПОНЕНТ 4 ОБА ПРИТУШЕНЫ
;ЗАТЕМ ВТОРОЙ ПЛАВНО НАРАСТАЕТ,ПЕРВЫЙ БЕЗ ИЗМЕНЕНИЙ
;ПРИ ВЫХОДЕ ВТОРОЙ ГОРИТ ПЕРВЫЙ ПРИТУШЕН
;-------------------------------------------------------------------

KM4:
	LDI DEL,11
	LDI DELL,11	
M6:	MOV J,Q		;ПОДГОТОВИМ J
	MOV EF1,DEL	;СОХРАНИМ DEL
	MOV EF2,DELL	;СОХРАНИМ DELL
	RCALL START	;ВЫЗОВ ПРОЦЕДУРЫ УПРАВЛЕНИЯ ТИРИСТОРАМИ
	MOV DEL,EF1	;ВОССТАНОВИМ DEL
	MOV DELL,EF2	;ВОССТАНОВИМ DELL
	CP DELL,MAX	;МЫ ВЫШЛИ НА МАКСИМАЛЬНУЮ ЯРКОСТЬ?
	BREQ M7 	;ЕСЛИ ДА-ТО ВЫХОД
	DEC DELL 	;УВЕЛИЧИЬ ЯРКОСТЬ ВТОРОГО
	RJMP M6 	;ЕЩЁ КРУГ
M7:	RET
;===================================================================





;-------------------------------------------------------------------
;КОМПОНЕНТ 5 ОБА ГОРЯТ 
;ЗАТЕМ ПЕРВЫЙ ПЛАВНО ТУХНЕТ,ВТОРОЙ БЕЗ ИЗМЕНЕНИЙ
;ПРИ ВЫХОДЕ ПЕРВЫЙ ПРИТУШЕН ,ВТОРОЙ ГОРИТ
;-------------------------------------------------------------------

KM5:
	MOV DEL,MAX	
	MOV DELL,MAX	
M8:	MOV J,Q		;ПОДГОТОВИМ J
	MOV EF1,DEL	;СОХРАНИМ DEL
	MOV EF2,DELL	;СОХРАНИМ DELL
	RCALL START	;ВЫЗОВ ПРОЦЕДУРЫ УПРАВЛЕНИЯ ТИРИСТОРАМИ
	MOV DEL,EF1	;ВОССТАНОВИМ DEL
	MOV DELL,EF2	;ВОССТАНОВИМ DELL
	CPI DEL,15	;МЫ ВЫШЛИ НА МИНИМАЛЬНУЮ ЯРКОСТЬ?
	BREQ M9 	;ЕСЛИ ДА-ТО ВЫХОД
	INC DEL 	;УМЕНЬШАЕМ ЯРКОСТЬ ПЕРВОГО
	RJMP M8 	;ЕЩЁ КРУГ
M9:	RET
;===================================================================





;-------------------------------------------------------------------
;КОМПОНЕНТ 6 ОБА ГОРЯТ
;ЗАТЕМ ВТОРОЙ ПЛАВНО ТУХНЕТ,ПЕРВЫЙ БЕЗ ИЗМЕНЕНИЙ
;ПРИ ВЫХОДЕ ПЕРВЫЙ ГОРИТ ,ВТОРОЙ ПРИТУШЕН
;-------------------------------------------------------------------

KM6:
	MOV DEL,MAX	
	MOV DELL,MAX	
M10:	MOV J,Q		;ПОДГОТОВИМ J
	MOV EF1,DEL	;СОХРАНИМ DEL
	MOV EF2,DELL	;СОХРАНИМ DELL
	RCALL START	;ВЫЗОВ ПРОЦЕДУРЫ УПРАВЛЕНИЯ ТИРИСТОРАМИ
	MOV DEL,EF1	;ВОССТАНОВИМ DEL
	MOV DELL,EF2	;ВОССТАНОВИМ DELL
	CPI DELL,15	;МЫ ВЫШЛИ НА МИНИМАЛЬНУЮ ЯРКОСТЬ?
	BREQ M11 	;ЕСЛИ ДА-ТО ВЫХОД
	INC DELL 	;УМЕНЬШАЕМ ЯРКОСТЬ ВТОРОГО
	RJMP M10 	;ЕЩЁ КРУГ
M11:	RET
;===================================================================





;-------------------------------------------------------------------
;КОМПОНЕНТ 7 РОЗЖИГ
;-------------------------------------------------------------------

KM7:
	LDI DEL,18
	LDI DELL,18                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          	
M12:	LDI J,254 	;ПОДГОТОВИМ J
	MOV EF1,DEL	;СОХРАНИМ DEL
	MOV EF2,DELL	;СОХРАНИМ DELL
	RCALL START	;ВЫЗОВ ПРОЦЕДУРЫ УПРАВЛЕНИЯ ТИРИСТОРАМИ
	MOV DEL,EF1	;ВОССТАНОВИМ DEL
	MOV DELL,EF2	;ВОССТАНОВИМ DELL
	CP DEL,MAX	;МЫ ВЫШЛИ НА МАКСИМАЛЬНУЮ ЯРКОСТЬ?
	BREQ M13 	;ЕСЛИ ДА-ТО ВЫХОД
	DEC DEL		;УВЕЛИЧИТЬ ЯРКОСТЬ
	DEC DELL	;УВЕЛИЧИТЬ ЯРКОСТЬ
	RJMP M12 	;ЕЩЁ КРУГ
M13:	RET
;===================================================================























;------------------------------------------------------------------
;ПРОГРАММЫ  ЭФФЕКТОВ
;------------------------------------------------------------------

DD:	TST S
	BREQ AUTO	;ЕСЛИ S=0 (АВТОМАТ) ПЕРЕХОДИМ НА AUTO

	RJMP DD1	;ЕСЛИ S НЕ 0 (НЕ АВТОМАТ) ПЕРЕХОДИМ НА DD1

AUTO:  SBI PORTD,5
	RJMP EFEKT1	;ЕСЛИ S=0 ЗАЖИГАЕМ ИНДИКАТОР "АВТОМАТ" СТАРТУЕМ С ПЕРВОГО ЭФФЕКТА И АВТОМАТ


DD1:	CBI PORTD,5	;ПОТУШИМ ИНДИКАТОР "АВТОМАТ" 
	CPI S,1
	BREQ EFEKT1	;ЕСЛИ S=1  КРУТИМ  ПЕРВЫЙ ЭФФЕКТ	
	CPI S,2
	BREQ EFEKT2	;ЕСЛИ S=2  КРУТИМ  ВТОРОЙ ЭФФЕКТ
	CPI S,3
	BREQ EFEKT3	;ЕСЛИ S=3  КРУТИМ  ТРЕТИЙ ЭФФЕКТ
	CPI S,4
	BREQ EFEKT4	;ЕСЛИ S=4  КРУТИМ  ЧЕТВЕРТЫЙ ЭФФЕКТ
	CPI S,5
	BREQ STEK5	;ЕСЛИ S=5  КРУТИМ  ПЯТЫЙ ЭФФЕКТ
	CPI S,6
	BREQ STEK6	;ЕСЛИ S=6  КРУТИМ ШЕСТОЙ ЭФФЕКТ



STEK5:	RJMP EFEKT5 	;СЛИШКОМ ДЛИННЫЙ ПЕРЕХОД
STEK6:	RJMP EFEKT6 	;СЛИШКОМ ДЛИННЫЙ ПЕРЕХОД





EFEKT1:
	LDI SS,60
	RCALL EEPROM_RD
	MOV Q,A		;ВОССТАНОВИМ ИЗ EEPROM СКОРОСТЬ EFEKT1
	LDI T,100	;ЗАГРУЗИМ КОЛИЧЕСТВО ПОВТОРОВ ДЛЯ АВТОМАТА
	

EFEK1:	SBI PORTB,3	;МИГНЕМ СЕТЬЮ
	RCALL KM1
	CBI PORTB,3	;МИГНЕМ СЕТЬЮ
	RCALL KM2

	

	DEC T
	TST T
	BRNE EFEK1	;КРУТИМ ЭФФЕКТ ПОКА  Т НЕ=0
	TST S		;ЕСЛИ S=0 ЗНАЧИТ АВТОМАТ,ПЕРЕХОД К СЛЕДУЮЩЕМУ ЭФФЕКТУ
	BRNE EFEKT1	;ЕСЛИ S HE=0 ЗНАЧИТ РУЧНОЙ,КРУТИМ ЭТОТ ЭФФЕКТ.



;************************************************************************
EFEKT2:
	LDI SS,59
	RCALL EEPROM_RD
	MOV Q,A		;ВОССТАНОВИМ ИЗ EEPROM СКОРОСТЬ EFEKT2
	LDI T,100	;ЗАГРУЗИМ КОЛИЧЕСТВО ПОВТОРОВ ДЛЯ АВТОМАТА

	

EFEK2:	SBI PORTB,3	;МИГНЕМ СЕТЬЮ
	RCALL KM1
	CBI PORTB,3	;МИГНЕМ СЕТЬЮ
	RCALL KM2

	
	DEC T
	TST T
	BRNE EFEK2
	TST S		;ЕСЛИ S=0 ЗНАЧИТ АВТОМАТ,ПЕРЕХОД К СЛЕДУЮЩЕМУ ЭФФЕКТУ
	BRNE EFEKT2	;ЕСЛИ S HE=0 ЗНАЧИТ РУЧНОЙ,КРУТИМ ЭТОТ ЭФФЕКТ
;************************************************************************


		
	
;************************************************************************
EFEKT3:
	LDI SS,58
	RCALL EEPROM_RD
	MOV Q,A		;ВОССТАНОВИМ ИЗ EEPROM СКОРОСТЬ EFEKT3

	LDI T,100 	;ЗАГРУЗИМ КОЛИЧЕСТВО ПОВТОРОВ ДЛЯ АВТОМАТА

	

EFEK3:	SBI PORTB,3	;МИГНЕМ СЕТЬЮ
	RCALL KM1
	CBI PORTB,3	;МИГНЕМ СЕТЬЮ
	RCALL KM2	

	
	
	DEC T
	TST T
	BRNE EFEK3
	TST S		;ЕСЛИ S=0 ЗНАЧИТ АВТОМАТ,ПЕРЕХОД К СЛЕДУЮЩЕМУ ЭФФЕКТУ
	BRNE EFEKT3	;ЕСЛИ S HE=0 ЗНАЧИТ РУЧНОЙ,КРУТИМ ЭТОТ ЭФФЕКТ.
;*************************************************************************


EFEKT4:
	LDI SS,57
	RCALL EEPROM_RD
	MOV Q,A		;ВОССТАНОВИМ ИЗ EEPROM СКОРОСТЬ EFEKT4
	
	LDI T,100	;ЗАГРУЗИМ КОЛИЧЕСТВО ПОВТОРОВ ДЛЯ АВТОМАТА

	
EFEK4:	
	SBI PORTB,3	;МИГНЕМ СЕТЬЮ
	RCALL KM3
	CBI PORTB,3	;МИГНЕМ СЕТЬЮ
	RCALL KM4

	

	DEC T
	TST T
	BRNE EFEK4	;КРУТИМ ЭФФЕКТ ПОКА  Т НЕ=0
	TST S		;ЕСЛИ S=0 ЗНАЧИТ АВТОМАТ,ПЕРЕХОД К СЛЕДУЮЩЕМУ ЭФФЕКТУ
	BRNE EFEKT4	;ЕСЛИ S HE=0 ЗНАЧИТ РУЧНОЙ,КРУТИМ ЭТОТ ЭФФЕКТ.




	




EFEKT5:
	LDI SS,56
	RCALL EEPROM_RD
	MOV Q,A		;ВОССТАНОВИМ ИЗ EEPROM СКОРОСТЬ EFEKT5
	LDI T,100	;ЗАГРУЗИМ КОЛИЧЕСТВО ПОВТОРОВ ДЛЯ АВТОМАТА

	

EFEK5:	SBI PORTB,3	;МИГНЕМ СЕТЬЮ
	RCALL KM3
	CBI PORTB,3	;МИГНЕМ СЕТЬЮ
	RCALL KM4

	

	
	DEC T
	TST T
	BRNE EFEK5
	TST S		;ЕСЛИ S=0 ЗНАЧИТ АВТОМАТ,ПЕРЕХОД К СЛЕДУЮЩЕМУ ЭФФЕКТУ
	BRNE EFEKT5	;ЕСЛИ S HE=0 ЗНАЧИТ РУЧНОЙ,КРУТИМ ЭТОТ ЭФФЕКТ.







EFEKT6:
	LDI SS,55
	RCALL EEPROM_RD
	MOV Q,A		;ВОССТАНОВИМ ИЗ EEPROM СКОРОСТЬ EFEKT6
	LDI T,100	;ЗАГРУЗИМ КОЛИЧЕСТВО ПОВТОРОВ ДЛЯ АВТОМАТА
	
	

EFEK6:	SBI PORTB,3	;МИГНЕМ СЕТЬЮ
	RCALL KM5
	CBI PORTB,3	;МИГНЕМ СЕТЬЮ
	RCALL KM6

	


	
	DEC T
	TST T
	BRNE EFEK6
	TST S		;ЕСЛИ S=0 ЗНАЧИТ АВТОМАТ,ПЕРЕХОД К СЛЕДУЮЩЕМУ ЭФФЕКТУ
	BRNE EFEKT6	;ЕСЛИ S HE=0 ЗНАЧИТ РУЧНОЙ,КРУТИМ ЭТОТ ЭФФЕКТ.

















	RJMP EFEKT1	;ЕСЛИ ПРОГРАММА АВТОМАТ ЗАКОНЧИЛАСЬ,ТОГДА НАЧНЕМ ЕЕ СНОВА







;------------------------------------------------------------------
;     ПРОГРАММА УПРАВЛЕНИЯ ТИРИСТОРАМИ  И КНОПКАМИ  



;******************************************************************
;ПРОЦЕДУРА ОПРЕДЕЛЯЕТ ЯРКОСТЬ КАНАЛОВ БОЛЬШЕ,МЕНЬШЕ ИЛИ  РАВНЫ
;******************************************************************


START:
	
	WDR		;СБРОС ТАИМЕРА

	CP DEL,DELL
	BREQ RAVNO	;DEL=DELL	
	BRHS MENSE	;DEL<DELL
	RJMP BOLSE	;DEL>DELL
	
;************ END PROCEDURE ***************************************






;******************************************************************
;ПРОЦЕДУРА УПРАВЛЕНИЯ ТИРИСТОРАМИ ЕСЛИ DEL=DELL
;******************************************************************


RAVNO:
	

	DEC J		;ПОВТОРЫ  НА ОДНОЙ ГРАДАЦИИ ЯРКОСТИ КОНЧИЛИСЬ?
	BRNE L1 	;ЕСЛИ НЕТ ТОГДА УЙТИ НА L1 ИНАЧЕ ВЫХОД
	RET
	
	
L1:	SBIC PIND,2
	RJMP L1 	;ЖДЁМ НАЧАЛА ПЕРЕХОДА ФАЗЫ ЧЕРЕЗ НОЛЬ
	
	

L2:	SBIS PIND,2
	
	RJMP L2 	;ЖДЁМ ОКОНЧАНИЯ ПЕРЕХОДА ФАЗЫ ЧЕРЕЗ НОЛЬ


	MOV DELAY,DEL	
	RCALL PAUSE_MS	;УСТАНОВКА ЗАДЕРЖКИ (КОЛИЧЕСТВО ВЫДЕЛЯЕМОЙ МОЩНОСТИ)


	SBI PORTB,2
	SBI PORTB,4	;ОТКРЫЛИ ТИРИСТОРЫ
	LDI A,255
L3:	DEC A
	BRNE L3
	CBI PORTB,2
	CBI PORTB,4	;ЗАКРЫЛИ ТИРИСТОРЫ (ИМПУЛЬС ОКОЛО 9МКС.)
	
	
	LDI G,0		;УСТАНОВИМ ФЛАГ ДЛЯ ВОЗВРАТА ИЗ KNOPKI
	
	RJMP KNOPKI 	;ПЕРЕХОД НА ПРОВЕРКУ КНОПОК
	
	

;************ END PROCEDURE ****************************************




;*******************************************************************
;ПРОЦЕДУРА УПРАВЛЕНИЯ ТИРИСТОРАМИ ЕСЛИ DEL<DELL
;*******************************************************************

MENSE:
	
	
	SUB DELL,DEL	;НАХОДИМ РАЗНИЦУ В ЗАДЕРЖКАХ (В DELL РАЗНИЦА)
	
MENS:	DEC J		;ПОВТОРЫ  НА ОДНОЙ ГРАДАЦИИ ЯРКОСТИ КОНЧИЛИСЬ?
	BRNE L4 	;ЕСЛИ НЕТ ТОГДА УЙТИ НА L4 ИНАЧЕ ВЫХОД
	RET
	
	
L4:	SBIC PIND,2
	RJMP L4 	;ЖДЁМ НАЧАЛА ПЕРЕХОДА ФАЗЫ ЧЕРЕЗ НОЛЬ

	

L5:	SBIS PIND,2
	
	RJMP L5 	;ЖДЁМ ОКОНЧАНИЯ ПЕРЕХОДА ФАЗЫ ЧЕРЕЗ НОЛЬ


	MOV DELAY,DEL	
	RCALL PAUSE_MS	;УСТАНОВКА ЗАДЕРЖКИ ДЛЯ ПЕРВОГО КАНАЛА
			;(КОЛИЧЕСТВО ВЫДЕЛЯЕМОЙ МОЩНОСТИ)


	SBI PORTB,2	;
	LDI A,255
L6:	DEC A
	BRNE L6		; ФОРМИРУЕМ УПРАВЛЯЮЩИЙ ИМПУЛЬС ДЛЯ
	CBI PORTB,2	; ТИРИСТОРА ПЕРВОГО КАНАЛА ИМПУЛЬС ОКОЛО 9МКС.)

	MOV DELAY,DELL	
	RCALL PAUSE_MS	;УСТАНОВКА ЗАДЕРЖКИ ДЛЯ ВТОРОГО КАНАЛА
			;(КОЛИЧЕСТВО ВЫДЕЛЯЕМОЙ МОЩНОСТИ)

	SBI PORTB,4	;
	LDI A,255
L7:	DEC A
	BRNE L7		; ФОРМИРУЕМ УПРАВЛЯЮЩИЙ ИМПУЛЬС ДЛЯ
	CBI PORTB,4	; ТИРИСТОРА ВТОРОГО КАНАЛА ИМПУЛЬС ОКОЛО 9МКС.)

	LDI G,1		;УСТАНОВИМ ФЛАГ ДЛЯ ВОЗВРАТА ИЗ KNOPKI
	
	RJMP KNOPKI 	;ПЕРЕХОД НА ПРОВЕРКУ КНОПОК	

	
	
;************ END PROCEDURE ****************************************

YY:	RJMP RAVNO	;ПОМОЩЬ ПРИ ПЕРЕХОДЕ


;*******************************************************************
;ПРОЦЕДУРА УПРАВЛЕНИЯ ТИРИСТОРАМИ ЕСЛИ DEL>DELL
;*******************************************************************


BOLSE:
	

	SUB DEL,DELL	;НАХОДИМ РАЗНИЦУ В ЗАДЕРЖКАХ (В DEL РАЗНИЦА)
	
BOLS:	DEC J		;ПОВТОРЫ  НА ОДНОЙ ГРАДАЦИИ ЯРКОСТИ КОНЧИЛИСЬ?
	BRNE L8 	;ЕСЛИ НЕТ ТОГДА УЙТИ НА L8 ИНАЧЕ ВЫХОД
	RET
	
	
L8:	SBIC PIND,2
	RJMP L8 	;ЖДЁМ НАЧАЛА ПЕРЕХОДА ФАЗЫ ЧЕРЕЗ НОЛЬ

	

L9:	SBIS PIND,2
	
	RJMP L9 	;ЖДЁМ ОКОНЧАНИЯ ПЕРЕХОДА ФАЗЫ ЧЕРЕЗ НОЛЬ


	MOV DELAY,DELL	
	RCALL PAUSE_MS	;УСТАНОВКА ЗАДЕРЖКИ ДЛЯ ВТОРОГО КАНАЛА
			;(КОЛИЧЕСТВО ВЫДЕЛЯЕМОЙ МОЩНОСТИ)

	SBI PORTB,4
	LDI A,255
L10:	DEC A
	BRNE L10	; ФОРМИРУЕМ УПРАВЛЯЮЩИЙ ИМПУЛЬС ДЛЯ
	CBI PORTB,4	; ТИРИСТОРА ВТОРОГО КАНАЛА ИМПУЛЬС ОКОЛО 9МКС.)
	

	MOV DELAY,DEL	
	RCALL PAUSE_MS	;УСТАНОВКА ЗАДЕРЖКИ ДЛЯ ПЕРВОГО КАНАЛА
			;(КОЛИЧЕСТВО ВЫДЕЛЯЕМОЙ МОЩНОСТИ)

	SBI PORTB,2
	LDI A,255
L11:	DEC A
	BRNE L11	; ФОРМИРУЕМ УПРАВЛЯЮЩИЙ ИМПУЛЬС ДЛЯ
	CBI PORTB,2	; ТИРИСТОРА ПЕРВОГО КАНАЛА ИМПУЛЬС ОКОЛО 9МКС.)	
		
	LDI G,2		;УСТАНОВИМ ФЛАГ ДЛЯ ВОЗВРАТА ИЗ KNOPKI
	
	RJMP KNOPKI 	;ПЕРЕХОД НА ПРОВЕРКУ КНОПОК
	
	
	
;************ END PROCEDURE ****************************************









;*******************************************************************
;   ПРОГРАММА ОБРАБОТКИ КНОПОЧЕК
;*******************************************************************


KNOPKI:
	
	WDR		;СБРОС ТАИМЕРА

	SBIS PIND,0	;SPEED НАЖАТА?
	RJMP SPEED	;ДА,УХОДИМ НА SPEED
	SBIS PIND,1	;PROG НАЖАТА?
	RJMP PROG	;ДА,УХОДИМ НА PROG
	SBIS PIND,3	;OFF?
	RJMP OFF	;ДА.УХОДИМ НА OFF
			;ЕСЛИ НИ ОДНА НЕ НАЖАТА ТОГДА ИДЁМ НА Y
Y:
	
	TST G
	BREQ YY 	;ЕСЛИ G=0 ТОГДА ВОЗВРАТ В RAVNO ЧЕРЕЗ YY (СЛИШКОМ ДАЛЬНИЙ ПЕРЕХОД)
	CPI G,1
	BREQ MENS	;ЕСЛИ G=1 ТОГДА ВОЗВРАТ В MENS
	RJMP BOLS	;ЕСЛИ НИ-ТО,НИ-ТО (G=2) ТОГДА ВОЗВРАТ В BOLS



	
SPEED:
	LDI DELAY,200
	RCALL PAUSE_MS ;ЗАДЕРЖКА 100МС.-ЗАЩИТА ОТ ДРЕБЕЗГА
	SBIS PIND,0	;SPEED ПО ПРЕЖНЕМУ НАЖАТА?
	RJMP SPEED1	;ДА,ТОГДА ПРОДОЛЖИМ ОБРАБОТКУ SPEED 
	RJMP Y		;ИНАЧЕ  ВЫХОД  

	
SPEED1:
	
	SBIS PIND,0	
	RJMP SPEED1	;ЖДЁМ ПОКА ОТПУСТЯТ КНОПКУ SPEED

	LDI DELAY,200
	RCALL PAUSE_MS ;ЗАДЕРЖКА 100МС.-ЗАЩИТА ОТ ДРЕБЕЗГА

	CPI Q,8		;ПРОВЕРИМ,Q НЕ ДОШЛО ДО 8?
	BREQ SPEED2	;ЕСЛИ ДОСТИГЛО ТОГДА ПЕРЕХОД НА SPEED2
	INC Q		;ЕСЛИ Q НЕ ДОСТИГЛО 8 ТОГДА УВЕЛИЧИТЬ Q НА 1

	
SR1:	SBIC EECR,EEWE	;ЖДЁМ РАЗРЕШЕНИЯ ЗАПИСИ
	RJMP SR1		
	OUT EEAR,SS	;УСТАНАВЛИВАЕМ АДРЕС ЯЧЕЙКИ ТЕКУЩЕГО ЭФФЕКТА
	OUT EEDR,Q	;УСТАНАВЛИВАЕМ ДАННЫЕ
	SBI EECR,EEWE	;СОХРАНЯЕМ СКОРОСТЬ В EEPROM
SR2:	SBIC EECR,EEWE	
	RJMP SR2	;ЖДЁМ ПОКА В EEPROM ЗАПИШЕТСЯ ИНФОРМАЦИЯ		
	
	RJMP Y  	;ВЫХОД

SPEED2:
	LDI Q,2		;ЕСЛИ Q ДОШЛО ДО 8 ТОГДА Q=2
	RJMP SR1	;ПЕРЕХОД НА ПРОЦЕДУРУ ЗАПИСИ С ПОСЛЕДУЮЩИМ ВЫХОДОМ



			


PROG:
	
	LDI DELAY,200
	RCALL PAUSE_MS ;ЗАДЕРЖКА 100МС.-ЗАЩИТА ОТ ДРЕБЕЗГА
	SBIS PIND,1	;PROG ПО ПРЕЖНЕМУ НАЖАТА?
	RJMP PROG1	;ДА,ТОГДА ПРОДОЛЖИМ ОБРАБОТКУ PROG
	RJMP DD		;ЕСЛИ НЕТ, ТОГДА ВЫХОД 


PROG1:
	SBIS PIND,1	
	RJMP PROG1	;ЖДЁМ ПОКА ОТПУСТЯТ КНОПКУ PROG

	LDI DELAY,200
	RCALL PAUSE_MS ;ЗАДЕРЖКА 100МС.-ЗАЩИТА ОТ ДРЕБЕЗГА

	CPI S,6		;ПРОВЕРИМ,S НЕ ДОШЛО ДО 6?
	BREQ PROG2	;ЕСЛИ ДОСТИГЛО ТОГДА ПЕРЕХОД НА PROG2
	INC S		;ЕСЛИ S НЕ ДОСТИГЛО 6 ТОГДА УВЕЛИЧИТЬ S НА 1

	
PR1:	SBIC EECR,EEWE
	RJMP PR1	;ЖДЁМ РАЗРЕШЕНИЯ ЗАПИСИ	
	LDI A,63	
	OUT EEAR,A	;УСТАНАВЛИВАЕМ АДРЕС ЯЧЕЙКИ
	OUT EEDR,S	;УСТАНАВЛИВАЕМ ДАННЫЕ
	SBI EECR,EEWE	;СОХРАНЯЕМ НОМЕР ЭФФЕКТА В EEPROM
PR2:	SBIC EECR,EEWE
	RJMP PR2	;ЖДЁМ ПОКА В EEPROM ЗАПИШЕТСЯ ИНФОРМАЦИЯ	

			
	RJMP DD  	;ВЫХОД (ЗАПУСКАЕМ ЭФФЕКТЫ СНОВА,С НОВЫМ НОМЕРОМ)

PROG2:
	LDI S,0		;ЕСЛИ S ДОШЛО ДО 6 ТОГДА S=0
	RJMP PR1	;ПЕРЕХОД НА ПРОЦЕДУРУ ЗАПИСИ С ПОСЛЕДУЮЩИМ ВЫХОДОМ

	
	













	
	
;******************************************************************
;Данная процедура формирует задержку кратную 0.5 милисекунде при
;частоте генератора 8 МГц.Интервал задержки от 0 до 127,5 мс.
;Длительность задержки указывается в переменной delay перед вызовом
;процедуры.Если delay=0 тогда время задержки составляет 9 тактов
;(1.125мкс).Команда CALL и идущая за ней не входят в длительность.
;******************************************************************

PAUSE_MS:

   	cpi delay,0   ;ЕСЛИ 0 ТОГДА ВЫХОД ИЗ ПОДПРОГРАММЫ ИНАЧЕ POINT
	brne POINT
	ret
POINT:	nop
	
	ldi x,12	;ПЕРЕМЕННАЯ x КОЛИЧЕСТВО ПОВТОРОВ ЦИКЛА cikl

	ldi a,9
pool:	dec a
	brne pool
	
cikl:	ldi a,109
pool1:	dec a
	brne pool1
	dec x
	brne cikl	;ГРУБЫЙ ЦИКЛ
	dec delay	;УМЕНЬШИМ delay НА 1
	brne next	;ЕСЛИ 0 ТОГДА ВЫХОД ИЗ ПОДПРОГРАММЫ ИНАЧЕ next
 	ret 
next:	nop
	ldi a,2
pool2:	dec a
	brne pool2	;ТОЧНАЯ ПОДГОНКА ЕСЛИ delay НЕ = 0
	rjmp POINT
;*******************************************************************
;Конец процедуры
;*******************************************************************   









;*******************************************************************
;ПРОЦЕДУРА ЧТЕНИЯ ИЗ EEPROM (СКОРОСТИ ТЕКУЩЕГО ЭФФЕКТА)
;*******************************************************************


EEPROM_RD:

 	OUT EEAR,SS	;УКАЖЕМ НОМЕР СЧИТЫВАЕМОЙ ЯЧЕЙКИ
	SBI EECR,EERE	;РАЗРЕШИТЬ ЧТЕНИЕ
	IN A,EEDR	;ЗАНЕСЕМ В АККУМУЛЯТОР ДАННЫЕ ИЗ ИСКОМОЙ ЯЧЕЙКИ

	CPI A,2
	BRMI ERR	;ЕСЛИ А<2 ТОГДА ПЕРЕХОД НА ERR (ОШИБКА)
	LDI AA,8
	CP AA,A
	BRMI ERR	;ЕСЛИ А>8 ТОГДА ПЕРЕХОД НА ERR (ОШИБКА)
	
	RET		;ВОЗВРАТ

ERR:	LDI A,2		;ИСПРАВИМ ЗНАЧЕНИЕ СКОРОСТИ И ЗАПИШЕМ ЕГО В EEPROM

WR:

	SBIC EECR,EEWE
	RJMP WR 	;ЖДЁМ РАЗРЕШЕНИЯ ЗАПИСИ

	OUT EEAR,SS	;УКАЖЕМ НОМЕР ЗАПИСЫВАЕМОЙ ЯЧЕЙКИ
 	OUT EEDR,A	;ПОДГОТОВИМ ДАННЫЕ К ЗАПИСИ
	SBI EECR,EEWE	;НАЧАТЬ ПРОЦЕДУРУ ЗАПИСИ

WRR:	SBIC EECR,EEWE
	RJMP WRR 	;ЖДЁМ ПОКА В EEPROM ЗАПИШЕТСЯ ИНФОРМАЦИЯ	
	
	RET		;ВОЗВРАТ
	

;*******************************************************************
; 		КОНЕЦ ПРОЦЕДУРЫ
;*******************************************************************






MAX_S:
	TST MAX		;MAX РАЗРЕШЕН? (ЕСДИ 0 - НЕТ)
	BREQ MAX_SA	;ЕСЛИ НЕТ ТОГДА ИДЕМ НА MAX_SA (ИНАЧЕ ДАЛЕЕ)

	LDI MAX,0
	MOV A,MAX
	LDI SS,62	;ПОДГОТОВКА ПЕРЕМЕННЫХ ДЛЯ ПРОЦЕДУРЫ ЗАПИСИ В EEPROM
	RCALL WR	;ЕСЛИ MAX РАЗРЕШЕН ТОГДА ЗАПРЕТИМ ЕГО И ЗАПИШЕМ В EEPROM
	CBI PORTD,4	;ПОТУШИМ ИНДИКАТОР MAX
	RJMP OUT	;ВЫХОД
MAX_SA:
	LDI MAX,3
	MOV A,MAX
	LDI SS,62	;ПОДГОТОВКА ПЕРЕМЕННЫХ ДЛЯ ПРОЦЕДУРЫ ЗАПИСИ В EEPROM
	RCALL WR	;ЕСЛИ MAX ЗАПРЕЩЕН ТОГДА РАЗРЕШИМ ЕГО И ЗАПИШЕМ В EEPROM
	SBI PORTD,4	;ЗАЖЖЕМ ИНДИКАТОР MAX
	RJMP OUT	;ВЫХОД


COMP_S:
	;TST COMP	;COMP РАЗРЕШЕН? (ЕСДИ 0 - НЕТ)
	;BREQ COMP_SA	;ЕСЛИ НЕТ ТОГДА ИДЕМ НА COMP_SA (ИНАЧЕ ДАЛЕЕ)

	
	LDI COMP,0	;ЗАПРЕТИТЬ РАБОТУ КОМПАРАТОРА
	;MOV A,COMP
	;LDI SS,61	;ПОДГОТОВКА ПЕРЕМЕННЫХ ДЛЯ ПРОЦЕДУРЫ ЗАПИСИ В EEPROM
	;RCALL WR	;ЕСЛИ COMP РАЗРЕШЕН ТОГДА ЗАПРЕТИМ ЕГО И ЗАПИШЕМ В EEPROM
	CBI PORTD,6	;ПОТУШИМ COMP
	CLI 		;ЗАПРЕТИМ ПРЕРЫВАНИЯ
	;RJMP OUT1	;ВЫХОД

OUT1:
	
	SBIS PIND,1
	RJMP OUT1	;ЖДЕМ ПОКА ОТПУСТЯТ КНОПКУ PROG
	LDI DELAY,250
	RCALL PAUSE_MS;ЗАДЕРЖКА ОТ ДРЕБЕЗГА 125 МС
	
	SBIS PIND,1
	RJMP OUT1	;ЕСЛИ КНОПКА ВСЕ ЕЩЕ ОТПУЩЕНА ТОГДА ВЫХОД,ИНАЧЕ
			;ПРОДОЛЖАЕМ ЖДАТЬ ПОКА ОТПУСТЯТ

	
	RET		

;COMP_SA:

	;
	;LDI COMP,1
	;MOV A,COMP
	;LDI SS,61	;ПОДГОТОВКА ПЕРЕМЕННЫХ ДЛЯ ПРОЦЕДУРЫ ЗАПИСИ В EEPROM
	;RCALL WR	;ЕСЛИ COMP ЗАПРЕЩЕН ТОГДА РАЗРЕШИМ ЕГО И ЗАПИШЕМ В EEPROM
	;SBI PORTD,6	;ЗАЖЖЕМ COMP
	;SEI		;РАЗРЕШИМ ПРЕРЫВАНИЯ
	;RJMP OUT1	;ВЫХОД
	


OUT:
	
	SBIS PIND,0
	RJMP OUT	;ЖДЕМ ПОКА ОТПУСТЯТ КНОПКУ SPEED
	LDI DELAY,250
	RCALL PAUSE_MS;ЗАДЕРЖКА ОТ ДРЕБЕЗГА 125 МС
	
	SBIS PIND,0
	RJMP OUT	;ЕСЛИ КНОПКА ВСЕ ЕЩЕ ОТПУЩЕНА ТОГДА ВЫХОД,ИНАЧЕ
			;ПРОДОЛЖАЕМ ЖДАТЬ ПОКА ОТПУСТЯТ
	
	
	RET
		






OFF:	WDR		;СБРОС ТАИМЕРА
	CBI PORTD,4
	CBI PORTD,5
	CBI PORTD,6
	CBI PORTB,3	;ТУШИМ ВСЕ ИНДИКАТОРЫ




	CBI PORTB,2
	CBI PORTB,4	;ТУШИМ ОБА ТИРИСТОРА

	
	LDI DELAY,254
	RCALL PAUSE_MS	;ЗАДЕРЖКА ПЕРЕД ОТРАБОТКОЙ РЕЛЕ



END:	CBI PORTB,5	;ОТКЛЮЧАЕМ РЕЛЕ

	LDI DELAY,254
	RCALL PAUSE_MS	;ЗАДЕРЖКА	

	WDR		;СБРОС ТАИМЕРА
	
	RJMP END	;БЕСКОНЕЧНЫЙ ЦИКЛ








; ПРОГРАММА НАПИСАНА 21.05.2001.

; РАБОТАЕТ РЕГУЛИРОВКА СКОРОСТИ  КНОПКОЙ SPEED,С ЗАПОМИНАНИЕМ ВЫБРАННОЙ
;СКОРОСТИ ДЛЯ КАЖДОГО ЭФФЕКТА В EEPROM 

; ПЕРЕКЛЮЧЕНИЕ ЭФФЕКТОВ КНОПКОЙ PROG C ЗАПОМИНАНИЕМ ТЕКУЩЕГО НОМЕРА
;В EEPROM.ПРИ ВКЛЮЧЕНИИ ПИТАНИЯ ВКЛЮЧАЕТСЯ ТОТ ЭФФЕКТ-КОТОРЫЙ БЫЛ ВЫБРАН
;ПЕРЕД ВЫКЛЮЧЕНИЕМ.ПРИ ВКЛЮЧЕНИИ АВТОМАТИЧЕСКОГО ПЕРЕБОРА ПРОГРАММ
;ЗАЖИГАЕТСЯ ИНДИКАТОР AUTO.

; ЕСЛИ ПРИ ВКЛЮЧЕНИИ УДЕРЖИВАТЬ КНОПКУ SPEED,ТОГДА ВКЛЮЧАЕТСЯ,ИЛИ ВЫКЛЮ-
;ЧАЕТСЯ,РЕЖИМ MAX.ЗАГОРАЕТСЯ ИЛИ ТУХНЕТ ИНДИКАТОР MAX.ПРИ ВКЛЮЧЕНИИ РЕЖИМА
;MAX ЛАМПОЧКИ ГОРЯТ НА 85 ПРОЦЕНТОВ ЯРКОСТИ,ЭТО СДЕЛАНО ДЛЯ УВЕЛИЧЕНИЯ
;СРОКА СЛУЖБЫ ЛАМПОЧЕК.СОСТОЯНИЕ РЕЖИМА МАХ ТАКЖЕ ЗАПОМИНАЕТСЯ В EEPROM.

; ЕСЛИ ПРИ ВКЛЮЧЕНИИ УДЕРЖИВАТЬ КНОПКУ PROG,ТОГДА ВКЛЮЧАЕТСЯ,
;РЕЖИМ СОМР.ТУХНЕТ ИНДИКАТОР СОМР.ПРИ ВКЛЮЧЕНИИ РЕЖИМА СОМР
;ВКЛЮЧАЕТСЯ КОМПАРАТОР КОТОРЫЙ КОНТРОЛИРУЕТ НАПРЯЖЕНИЕ СЕТИ,ПРИ ПРЕВЫШЕНИИ
;235 ВОЛЬТ(НАСТРАИВАЕТСЯ ПРЕЦЕНЗИОННЫМ ПОТОНЦИОМЕТРОМ)ВЫКЛЮЧАЮТСЯ СИМИСТОРЫ,
;А ЗАТЕМ ПОЛНОСТЬЮ ОБЕСТОЧИВАЕТСЯ ВСЯ СИСТЕМА.СОСТОЯНИЕ РЕЖИМА СОМР НЕ ЗАПОМИ-
;НАЕТСЯ В EEPROM.

; ЕСЛИ ПРОИСХОДИТ СБОЙ ПАМЯТИ - ТОГДА ДЛЯ ВСЕХ ВЫСТАВЛЯЕТСЯ САМАЯ БЫСТРАЯ
;СКОРОСТЬ (ЗНАЧЕНИЕ Q=2), ВКЛЮЧАЕТСЯ АВТОМАТ (ЗНАЧЕНИЕ S=0),ВКЛЮЧАЮТСЯ
;РЕЖИМЫ МАХ И СОМР.


;

; ПОКА ВСЕГО ПЯТЬ ЭФФЕКТОВ. ПРИ ИЗМЕНЕНИИ КОЛ-ВА ЭФФЕКТОВ ОТСЛЕДИТЬ
;В ПОДПРОГРАММАХ "ИНСТАЛЯЦИИ" , "ОБРАБОТКИ КНОПОК" И "ЭФЕКТАХ"
;ПЕРЕМЕННУЮ S.

; УПРАВЛЕНИЕ ПРОГРАММЫ РАСЧИТАНО НА ОПТОСИМИСТОРЫ.ПРИ ПЕРЕХОДЕ НА ТИРИСТОРЫ
;НЕОБХОДИМО ИНВЕРТИРОВАТЬ В ПРОГРАММЕ ИМПУЛЬС УПРАВЛЕНИЯ 





    