Label_01:           jmp Label_03	; Reset
					jmp Label_02	; External Interrupt Request 0
                    jmp Label_02	; External Interrupt Request 1
                    jmp Label_02	; Pin Change Interrupt Request 0
                    jmp Label_02	; Pin Change Interrupt Request 0
                    jmp Label_02	; Pin Change Interrupt Request 1
                    jmp Label_02	; Watchdog Time-out Interrupt
                    jmp Int_T2M_01	; Timer/Counter2 Compare Match A
                    jmp Label_02	; Timer/Counter2 Compare Match B
                    jmp Label_02	; Timer/Counter2 Overflow
                    jmp Label_02	; Timer/Counter1 Capture Event
                    jmp Label_02	; Timer/Counter1 Compare Match A
                    jmp Label_02	; Timer/Counter1 Compare Match B
                    jmp Label_02	; Timer/Counter1 Overflow
                    jmp Label_02	; TimerCounter0 Compare Match A
                    jmp Label_02	; TimerCounter0 Compare Match B
                    jmp Label_02	; Timer/Couner0 Overflow
                    jmp Int_SPI_01	; SPI Serial Transfer Complete
                    jmp Label_02	; USART Rx Complete
                    jmp Label_02	; USART, Data Register Empty
                    jmp Label_02	; USART Tx Complete
                    jmp Label_02	; ADC Conversion Complete
                    jmp Label_02	; EEPROM Ready
                    jmp Label_02	; Analog Comparator
                    jmp Label_02	; Two-wire Serial Interface
                    jmp Label_02	; Store Program Memory Read
                    
Label_02:			cli
					jmp Label_01

					 ;поле констант
                     .dw	0x0001		;000037 0001
                     .dw	0x0025		;000040 0025
					 .dw	0x0028		;000041 0028
					 .dw	0x002B		;000042 002b

					 ;старт программы - инициализация
Label_03:           eor r1, r1			;r1 в ноль
					out SREG, r1		;в SREG ноль

                    ldi r28,low(RAMEND) 	;
                    ldi r29,high(RAMEND)	;конец рамы
                    out SPH, r29		; 
                    out SPL, r28		;загрузить стек 
					
					
					sei					;разрешить прерывание глобально
                    ;начальная инициализация таймеров и порта (из дизассемблированного примера Fade)
		            in r24, TCCR0A			;читать Timer/Counter Control Register A
                    sbr r24, 0x02			;установить регистр WGM01: Waveform Generation Mode
                    out TCCR0A, r24		;записать Timer/Counter Control Register A
                    in r24, TCCR0A			;читать Timer/Counter Control Register A
                    sbr r24, 0x01			;установить регистр WGM00: Waveform Generation Mode
                    out TCCR0A, r24		;записать Timer/Counter Control Register A		- Fast PWM	
                    in r24, TCCR0B			;читать TCCR0B – Timer/Counter Control Register B
                    sbr r24, 0x02			;
                    out TCCR0B, r24		;бит1 в единицу 
                    in r24, TCCR0B 		;читать TCCR0B – Timer/Counter Control Register B
                    sbr r24, 0x01 			;
                    out TCCR0B, r24		;бит0 в единицу  clkI/O/64 (From prescaler)
                    lds r24, TIMSK0		;читать TIMSK0 – Timer/Counter Interrupt Mask Register
                    sbr r24, 0x01			;	
                    sts TIMSK0, r24		;разрешить прерывание Bit 0 – TOIE0: Timer/Counter0 Overflow Interrupt Enable
                    sts TCCR1B, r1			;TCCR1B – Timer/Counter1 Control Register B  - в ноль
                    lds r24, TCCR1B		;читать TCCR1B – Timer/Counter1 Control Register B
                    sbr r24, 0x02 
                    sts TCCR1B, r24		;clkI/O/8 (From prescaler)
                    lds r24, TCCR1B		;читать TCCR1B – Timer/Counter1 Control Register B
                    sbr r24, 0x01 
                    sts TCCR1B, r24		;теперь clkI/O/64 (From prescaler)
                    lds r24, TCCR1A		;читать TCCR1A – Timer/Counter1 Control Register A
                    sbr r24, 0x01 
                    sts TCCR1A, r24		;до 00ff
                    lds r24, TCCR2B		;TCCR2B – Timer/Counter Control Register B
                    sbr r24, 0x04 
                    sts TCCR2B, r24		;clkT2S/64 (From prescaler)
                    lds r24, TCCR2A		;TCCR2A – Timer/Counter Control Register A
                    sbr r24, 0x01 
                    sts TCCR2A, r24		;0xFF TOP BOTTOM
                    lds r24, ADCSRA		; ADCSRA – ADC Control and Status Register A
                    sbr r24, 0x04 
                    sts ADCSRA, r24		;бит2 в 1
                    lds r24, ADCSRA 
                    sbr r24, 0x02	
                    sts ADCSRA, r24		;бит1 в 1 
                    lds r24, ADCSRA 
                    sbr r24, 0x01 
                    sts ADCSRA, r24		;бит0 в 1	Division Factor 128
                    lds r24, ADCSRA 
                    sbr r24, 0x80 
                    sts ADCSRA, r24		;бит7 в 1	Bit 7 – ADEN: ADC Enable
					sts UCSR0B, r1	    ;статусный регистр порта в ноль	
                    
					;Т2 настроить на 1 секунду
                    ldi r24, 0x02		;WGM21-WGM20 10 CTC сброс по совпадению
					sts TCCR2A, r24		;0xFF TOP BOTTOM
                    ldi r24, 0x07		;clk/1024
					sts TCCR2B, r24		;предделитель
                    ldi r24, 0x7F		;
					sts OCR2A, r24		;задать частоту
                    ldi r24, 0x02		;
					sts TIMSK2, r24		;прерывание по совпадению А
                    

					;в режим ожидания
					ldi r24, 0x01
					out SMCR, r24		;режим ожидания Idle
Label_End:          //sleep
					nop
					nop
					rjmp Label_End



Int_T2M_01:		;Timer/Counter1 Overflow
					cli
					ret
					 
					 /*
					 ldi r24, 0x09			;в r24 = 9
                     call Label_28			;вызов процедурки 2
                     ldi r16, 0x71 
                     ldi r17, 0x00			;r16r17 = 0071
                     ldi r25, 0x00 
	                 mov r14, r25			;r14=0
                     ldi r25, 0x00 
                     mov r15, r25			;r15=0
Label_48:            lds r28, 0x010B		;из sram 
                     lds r29, 0x010C		;из sram 
                     ldi r24, 0x09				
                     call Label_28			;второй вызов процедурки 2 так же на входе r24=9
                     sbiw r29:r28, 0x00		;минус ноль	
                     brne Label_29			;если Y регистр не ноль
Label_42:            ldi r22, 0x00 
                     rjmp Label_30 
Label_29:            cpi r28, 0xFF 
                     cpc r29, r1 
                     brne Label_31 
Label_41:            ldi r22, 0x01 
Label_30:            ldi r24, 0x09 
                     call Label_32 
                     rjmp Label_33 
Label_31:            movw r31:r30, r17:r16 
                     lpm r24, Z 
                     cpi r24, 0x03 
                     breq Label_34 
                     brsh Label_35 
                     cpi r24, 0x01 
                     breq Label_36 
                     cpi r24, 0x02 
                     brne Label_37 
                     in r24, TCCR0A 
                     sbr r24, 0x20 
                     out TCCR0A, r24 
                     out OCR0B, r28 
                     rjmp Label_33 
Label_35:            cpi r24, 0x07 
                     breq Label_38 
                     cpi r24, 0x08 
                     breq Label_39 
                     cpi r24, 0x04 
                     brne Label_37 
                     lds r24, TCCR1A 
                     sbr r24, 0x20 
                     sts TCCR1A, r24 
                     sts OCR1BH, r29 
                     sts OCR1BL, r28 
                     rjmp Label_33 
Label_36:            in r24, TCCR0A 
                     sbr r24, 0x80 
                     out TCCR0A, r24 
                     out OCR0A, r28 
                     rjmp Label_33 
Label_34:            lds r24, TCCR1A 
                     sbr r24, 0x80 
                     sts TCCR1A, r24 
                     sts OCR1AH, r29 
                     sts OCR1AL, r28 
                     rjmp Label_33 
Label_38:            lds r24, TCCR2A 
                     sbr r24, 0x80 
                     sts TCCR2A, r24 
                     sts OCR2A, r28 
                     rjmp Label_33 
Label_39:            lds r24, TCCR2A 
                     sbr r24, 0x20 
                     sts TCCR2A, r24 
                     sts OCR2B, r28 
                     rjmp Label_33 
Label_37:            cpi r28, 0x80 
                     cpc r29, r1 
                     brlt Label_40 
                     rjmp Label_41 
Label_40:            rjmp Label_42 
Label_33:            lds r18, 0x0100 
                     lds r19, 0x0101 
                     lds r24, 0x010B 
                     lds r25, 0x010C 
                     add r24, r18 
                     adc r25, r19 
                     sts 0x010C, r25 
                     sts 0x010B, r24 
                     sbiw r25:r24, 0x01 
                     cpi r24, 0xFE 
                     cpc r25, r1 
                     brlo Label_43 
                     neg r19 
                     neg r18 
                     sbc r19, r1 
                     sts 0x0101, r19 
                     sts 0x0100, r18 
Label_43:            call Label_44 
                     movw r5:r4, r23:r22 
                     movw r7:r6, r25:r24 
                     ldi r24, 0x1E 
                     mov r8, r24 
                     mov r9, r1 
                     mov r10, r1 
                     mov r11, r1 
Label_46:            call Label_44 
                     movw r27:r26, r25:r24 
                     movw r25:r24, r23:r22 
                     sub r24, r4 
                     sbc r25, r5 
                     sbc r26, r6 
                     sbc r27, r7 
                     cpi r24, 0xE8 
                     sbci r25, 0x03 
                     cpc r26, r1 
                     cpc r27, r1 
                     brlo Label_45 
                     ldi r31, 0x01 
                     sub r8, r31 
                     sbc r9, r1 
                     sbc r10, r1 
                     sbc r11, r1 
                     ldi r18, 0xE8 
                     add r4, r18 
                     ldi r18, 0x03 
                     adc r5, r18 
                     adc r6, r1 
                     adc r7, r1 
Label_45:            cp r8, r1 
                     cpc r9, r1 
                     cpc r10, r1 
                     cpc r11, r1 
                     brne Label_46 
                     cp r14, r1 
                     cpc r15, r1 
                     brne Label_47 
                     rjmp Label_48 
Label_47:            call Label_09 
                     rjmp Label_48 
					 

Label_8:             cli					;запрет прерываний
Label_49:            rjmp Label_49 
						*/


						/*
					 ;процедурка 2	на входе r24 (вызов из процедурки1 r24=09) манипуляции с константами
Label_28:            ldi r25, 0x00 
                     movw r31:r30, r25:r24  ;загрузка Z-регистра входными данными
                     subi r30, 0x5C			;
                     sbci r31, 0xFF			;Z минус FF5C (z = 0009 - ff5c = 00ad (/2=56) )  
                     lpm r18, Z				;чтение из программной памяти по адресу Z  (01)
                     movw r31:r30, r25:r24	;загрузка Z-регистра входными данными
                     subi r30, 0x70			; 
                     sbci r31, 0xFF			;Z минус FF70 (z = 0009 - ff70 = 0099 (/2=4c старший байт) ) 
                     lpm r24, Z				;чтение из программной памяти по адресу Z (02)
                     and r24, r24			;финт с флагами
                     breq Label_10			;если r24=0 переход на выход
                     ldi r25, 0x00			;r25=0
                     add r24, r24			;
                     adc r25, r25			;
                     movw r31:r30, r25:r24 
                     subi r30, 0x7A 
                     sbci r31, 0xFF			;0004 - FF7A = 008A (WORD 0045)
                     lpm r26, Z+ 
                     lpm r27, Z				;в X = 0024
                     movw r31:r30, r25:r24 
                     subi r30, 0x84 
                     sbci r31, 0xFF			;0004 - FF84 = 0080 (WORD 0040)
                     lpm r24, Z+ 
                     lpm r25, Z				;в r24r25 = 0025
	                 in r24, SREG			;сохранить в r24 регистр флагов
                     cli					;запретить прерывания
                     ld r30, X 
                     or r30, r18			;в r18 01
                     st X, r30				;ddrb0 в 1
                     out SREG, r24			;восстановить из r24 регистр флагов
Label_10:            ret 

Label_32:            ldi r25, 0x00 
                     movw r31:r30, r25:r24 
                     subi r30, 0x98 
                     sbci r31, 0xFF 
                     lpm r19, Z 
                     movw r31:r30, r25:r24 
                     subi r30, 0x5C 
                     sbci r31, 0xFF 
                     lpm r18, Z 
                     movw r31:r30, r25:r24 
                     subi r30, 0x70 
                     sbci r31, 0xFF 
                     lpm r30, Z 
                     and r30, r30 
                     brne Label_11 
                     rjmp Label_12 
Label_11:            and r19, r19 
                     breq Label_13 
                     cpi r19, 0x03 
                     breq Label_14 
                     brsh Label_15 
                     cpi r19, 0x01 
                     breq Label_16 
                     cpi r19, 0x02 
                     brne Label_13 
                     in r24, TCCR0A 
                     andi r24, 0xDF 
                     rjmp Label_17 
Label_15:            cpi r19, 0x07 
                     breq Label_18 
                     cpi r19, 0x08 
                     breq Label_19 
                     cpi r19, 0x04 
                     brne Label_13 
                     lds r24, TCCR1A 
                     andi r24, 0xDF 
                     rjmp Label_20 
Label_14:            lds r24, TCCR1A 
                     andi r24, 0x7F 
Label_20:            sts TCCR1A, r24 
                     rjmp Label_13 
Label_16:            in r24, TCCR0A 
                     andi r24, 0x7F 
Label_17:            out TCCR0A, r24 
                     rjmp Label_13 
Label_18:            lds r24, TCCR2A 
                     andi r24, 0x7F 
                     rjmp Label_21 
Label_19:            lds r24, TCCR2A 
                     andi r24, 0xDF 
Label_21:            sts TCCR2A, r24 
Label_13:            ldi r31, 0x00 
                     add r30, r30 
                     adc r31, r31 
                     subi r30, 0x84 
                     sbci r31, 0xFF 
                     lpm r26, Z+ 
                     lpm r27, Z 
                     in r24, SREG 
                     cli 
                     ld r30, X 
                     cpse r22, r1 
                     rjmp Label_22 
                     com r18 
                     and r18, r30 
                     rjmp Label_23 
Label_22:            or r18, r30 
Label_23:            st X, r18 
                     out SREG, r24 
Label_12:            ret 

Label_44:            in r19, SREG 
                     cli 
                     lds r24, 0x0107 
                     lds r25, 0x0108 
                     lds r26, 0x0109 
                     lds r27, 0x010A 
                     in r18, TCNT0 
                     sbis TIFR0, TOV0 
                     rjmp Label_24 
                     cpi r18, 0xFF 
                     breq Label_24 
                     adiw r25:r24, 0x01 
                     adc r26, r1 
                     adc r27, r1 
Label_24:            out SREG, r19 
                     mov r27, r26 
                     mov r26, r25 
                     mov r25, r24 
                     eor r24, r24 
                     add r24, r18 
                     adc r25, r1 
                     adc r26, r1 
                     adc r27, r1 
                     movw r23:r22, r25:r24 
                     movw r25:r24, r27:r26 
                     ldi r20, 0x02 
Label_25:            add r22, r22 
                     adc r23, r23 
                     adc r24, r24 
                     adc r25, r25 
                     dec r20 
                     brne Label_25 
                     ret 
					 */

					 ;обработка прерывания spi
Int_SPI_01:          push r1 
                     push r0 
                     in r0, SREG 
                     push r0 
                     eor r1, r1 
                     push r18 
                     push r19 
                     push r24 
                     push r25 
                     push r26 
                     push r27 
                     lds r24, 0x0103 
                     lds r25, 0x0104 
                     lds r26, 0x0105 
                     lds r27, 0x0106 
                     lds r19, 0x0102 
                     ldi r18, 0x03 
                     add r18, r19 
                     cpi r18, 0x7D 
                     brsh Int_SPI_02 
                     adiw r25:r24, 0x01 
                     adc r26, r1 
                     adc r27, r1 
                     rjmp Int_SPI_03 
Int_SPI_02:          ldi r18, 0x86 
                     add r18, r19 
                     adiw r25:r24, 0x02 
                     adc r26, r1 
                     adc r27, r1 
Int_SPI_03:          sts 0x0102, r18 
                     sts 0x0103, r24 
                     sts 0x0104, r25 
                     sts 0x0105, r26 
                     sts 0x0106, r27 
                     lds r24, 0x0107 
                     lds r25, 0x0108 
                     lds r26, 0x0109 
                     lds r27, 0x010A 
                     adiw r25:r24, 0x01 
                     adc r26, r1 
                     adc r27, r1 
                     sts 0x0107, r24 
                     sts 0x0108, r25 
                     sts 0x0109, r26 
                     sts 0x010A, r27 
                     pop r27 
                     pop r26 
                     pop r25 
                     pop r24 
                     pop r19 
                     pop r18 
                     pop r0 
                     out SREG, r0 
                     pop r0 
                     pop r1 
                     reti 

					 
