.include "C:\incfiles\tn2313def.inc"


	.def	TempH=R16	;обзовем регистры
	.def	TempL=R17
	.def	PWM=R18
	.def	PDA=R19
	.def	PDB=R20
	.def 	Temp=R22
	.def 	MCUCRT=R21
	
	.equ	OC1A=3
	.equ	KEY1=PIND,0
	.equ	KEY2=PIND,1


.cseg		;начало програмного стека
.org 0		;начальный адрес

	rjmp	RESET		; Reset Handler
	rjmp	INT_0		; External Interrupt0 Handler
	rjmp	INT_1		; 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

INT_0:			
INT_1:		
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	TempL,0b1111100
	out	DDRD, TempL
		
	ldi	TempH,RamEnd       	;установка указателя стека
	out	SPL,TempH

	ldi	MCUCRT,0b00100000 	;разрешение sleep 
	out	MCUCR,MCUCRT

	ldi	TempH, 0b10000000	;прерывание по 0 ШИМ
	out	TIMSK, TempH

	ldi	PWM, 10
	ldi	TempH, 200			;инициаизация ШИМ
	out	OCR1AH, TempH
	out	OCR1AL, PWM			;значение ШИМ 

	ldi	TempL, 0b10000001	;установка ШИМ 8 бит
	out	TCCR1A, TempL

	ldi	TempH, 0b00000010	;деление на 8
	out	TCCR1B, TempH

	sbi	DDRB,OC1A			;выход ОС1

	ldi	Temp,1

	sei

loop:
 						;безконечный цикл
	sleep
	rjmp	loop

TIM1_OVF:					;преывание ШИМ

	in		PDA,KEY1
	eor		Temp,PDA
	in		PDB,KEY2
	eor		Temp,PDB
	brne	end
	rcall	Delay
	
	cpi		PDA,0b0000010
	brne	minus
	subi	PWM,-10
	cpi	PWM, 250			;сравниваем с переполнением
	brlo	end1			;если верно переход 
	ldi	PWM,250				;пишем 90 в PWM
	rjmp	end1            ;если нет, установка ШИМ +10%

minus:

	cpi		PDB,0b0000001
	brne	end
	subi	PWM,10
	cpi	PWM, 10				;сравниваем с мин знач ШИМ
	brsh	end1
	ldi	PWM,10				;пишем 10 в PWM

end1:
	out	OCR1AL, PWM			;если нет, установка ШИМ -10%

end:	

	reti
;	rjmp 	loop			;выход из прерывания ШИМ


Delay:						;процеура задержки 
	ldi	TempL,0
	ldi	TempH,0
l_res:
	dec	TempL
	brne	l_res
	dec	TempH
	brne	l_res
	ret						;выход из процедуры

