.include "c:\avrtools\incfiles\tn2313def.inc"

.def     TempH=R16	;обзовем регистры
.def     TempL=R17
.def     PWM=R18
.def     PD=R19

.cseg		;начало програмного стека
.org 0		;начальный адрес

rjmp RESET ; Reset Handler
rjmp INT0 ; External Interrupt0 Handler
rjmp INT1 ; External Interrupt1 Handler
rjmp TIM1_CAPT ; Timer1 Capture Handler
rjmp TIM1_COMPA ; Timer1 CompareA Handler
rjmp TIM1_OVF ; Timer1 Overflow Handler
rjmp TIM0_OVF ; Timer0 Overflow Handler
rjmp USART0_RXC ; USART0 RX Complete Handler
rjmp USART0_DRE ; USART0,UDR Empty Handler
rjmp USART0_TXC ; USART0 TX Complete Handler
rjmp ANA_COMP ; Analog Comparator Handler
rjmp PCINT ; Pin Change Interrupt
rjmp TIMER1_COMPB ; Timer1 Compare B Handler
rjmp TIMER0_COMPA ; Timer0 Compare A Handler
rjmp TIMER0_COMPB ; Timer0 Compare B Handler
rjmp USI_START ; USI Start Handler
rjmp USI_OVERFLOW ; USI Overflow Handler
rjmp EE_READY ; EEPROM Ready Handler
rjmp WDT_OVERFLOW ; Watchdog Overflow Handler

;RESET: 
;INT0:			;пришлось заремить, из-за ошибки, физически прерывание не используется
;INT1:			;пришлось заремить, из-за ошибки, физически прерывание не используется
TIM1_CAPT:
TIM1_COMPA:
;TIM1_OVF:
TIM0_OVF:
USART0_RXC:
USART0_DRE:
USART0_TXC:
ANA_COMP:
PCINT:
TIMER1_COMPB:
TIMER0_COMPA:
TIMER0_COMPB:
USI_START:
USI_OVERFLOW:
EE_READY:
WDT_OVERFLOW:

		reti   
Reset:
		ldi PWM, 10				;установка начального значения ШИМ

		sei						;разрешение прерываний




ldi TempH,RamEnd       			;установка указателя стека
out SPL,TempH

ldi TempH, 0b10000000			;прерывание по 0 ШИМ
out TIMSK, TempH

ldi TempH, 128					;инициаизация ШИМ
out OCR1AH, TempH

out OCR1AL, PWM					;значение ШИМ 

ldi TempH, 128
out ICR1H, TempH

ldi TempL, 128
out ICR1L, TempL

ldi TempL, 0b10000001			;установка ШИМ 8 бит
out TCCR1A, TempL

ldi TempH, 0b00110010			;деление на 8
out TCCR1B, TempH

sbi DDRB, 3						;выход ОС1

sei

loop: rjmp loop					;безконечный цикл



TIM1_OVF:					;преывание ШИМ

	in  PD, PINB,1				;читаем PIN 1 на порте B 
rcall Delay						;задержка, антидребезг
	cpi PD, 0b00000001			;сравниваем
	brne minus					;если не равно переходим
	ldi TempL,10				;если равно прибавляем 10
	ADC PWM, TempL				;к PWM
	cpi PWM, 100				;сравниваем с переполнением
	brsh RES					;если верно переход 
	out OCR1AL, PWM            	;если нет, установка ШИМ +10%

minus:
	in  PD, PINB,2				;читаем PIN 2 на порте B	
rcall Delay						;задержка, антидребезг
	cpi PD, 0b0000010			;сравниваем	
	brne end					;если не равно переходим
	ldi TempL,10				;если равно вычитаем 10	
	SBC PWM, TempL				;из PWM
	cpi PWM, 10					;сравниваем с мин знач ШИМ
	brmi RES1					;если меньше, переход
	out OCR1AL, PWM				;если нет, установка ШИМ -10%

end: reti						;выход из прерывания ШИМ

RES:	ldi PWM,90				;пишем 90 в PWM
		out OCR1AL, PWM			;заносим в ШИМ
		rjmp end            	;переходим на выход из прерывания ШИМ

RES1: 	ldi PWM,10				;пишем 10 в PWM
		out OCR1AL, PWM         ;заносим в ШИМ   
		rjmp end				;переходим на выход из прерывания ШИМ

Delay:							;процеура задержки и антидребезга
		ldi TempL,0
        ldi TempH,0
l_res:
        dec TempL
        brne l_res
        dec TempH
        brne l_res
ret								;выход из процедуры
