; кварц на 16 мгц
; внутренний делитель отключен
;






.include 	"tn2313adef.inc"	; используем tiny2313a


.def	Temp=R16
.def	Temp1=R17
.def	Temp2=R18
.def	Temp3=R19
.def	Temp4=R20			; регистр сохранения регистра SREG
.def	Temp5=R21
.def	Temp6=R22			; флаг
.def	Temp7=R23			; 
.def	Temp8=R24
.def	Temp9=R25










;******************************************************************************
; оперативка
;******************************************************************************



.dseg					; оперативка





;******************************************************************************
; константы
;******************************************************************************



.EQU	Chastota_const=0x9C40		; вершина ШИМ для серопривода ( частота 50 Гц )





;******************************************************************************
; программный сегмент 
;******************************************************************************

.cseg

			

.org 0

rjmp RESET				; External Pin, Power-on Reset, Brown-out Reset, and Watchdog Reset





.org INT_VECTORS_SIZE





;******************************************************************************
; старт ***********************************************************************
;******************************************************************************

reset:					; включение микроконтроллера



	cli				; глобальный запрет на прерывания


	ldi Temp,low(RamEnd)		; инициализации стека	
	out SPL,Temp			;



	
	ldi Temp,0b11111111		; настроили порт "В" (0-ввод, 1-вывод)
	out DDRB,Temp			; 
					 
		
	ldi Temp,0b00000000		; выводим лог_0
	out PortB,Temp			; 



		
												 
	ldi Temp,0b00111111		; настраиваем порт "D" (0-ввод, 1-вывод)
	out DDRD,Temp 			; 00xxxxxx - вывод информации на сервы
					; 0х000000 - вход с приемника (ICP)



	ldi Temp,0b00000000		; выводим лог_0
	out PortD,Temp			;




;******************************************************************************
;  настраиваем таймер_1
;******************************************************************************



; ШИМ для сервы ( аппаратный )


					

	ldi Temp, (1<<COM1A1)|(1<<COM1B1)|(1<<WGM11)
	out TCCR1A,Temp	
				
					; быстрый ШИМ с вершиной в icr // очистить по совпадению, установить при сбросе
					; *1 ( ШИМ с регулируемой частотой )
					; генерации на OC1A в этом режиме нет! по идее можно отключить!


					; COM1A1  / поведение вывода OC1A // 
					; COM1A0  / поведение вывода OC1A // 
					; COM1B1  / поведение вывода OC1B // 
					; COM1B0  / поведение вывода OC1B //  
					; WGM11=1 / режим *
					; WGM10=0 / режим *





	ldi Temp, (1<<WGM13)|(1<<WGM12)|(1<<cs11)	
	out TCCR1B,Temp					
	

					; тактовый сигнал = CK 1:8 (16МГц/8=2Мгц) 1 тик таймера = 0,5 мкс
					; таймер начал считать!!!

					; ICNC1=0 / фильтр шума на контакте ICP // отключено
					; ICES1=0 / захват с ноги ICP по падающему фронту
					; WGM13=1 / режим *
					; WGM12=1 / режим * Быстрый ШИМ ( Fast PWM )
					; CS12=0  / тактовый сигнал
					; CS11=1  / тактовый сигнал 
					; CS10=0  / тактовый сигнал = CK 1:8 (16МГц/8=2Мгц) 1 тик таймера = 0,5 мкс




	LDI Temp,high(Chastota_const)	; зададим Частоту ШИМ ( частота ШИМ 50Гц )
	OUT ICR1H,Temp			; и выведем ее в порт сравнения
	LDI Temp,low(Chastota_const)							
	OUT ICR1L,Temp 



	LDI Temp,0			; длина импульса на ноге OC1A = 0 мс ( не используется )
	OUT OCR1AH,Temp			
	LDI Temp,0							
	OUT OCR1AL,Temp  



	LDI Temp, 0x0F			; длина импульса на ноге OC1B = 2 мс ( 4000 )
	OUT OCR1BH,Temp		
	LDI Temp, 0xA0							
	OUT OCR1BL,Temp 




;******************************************************************************
; сброс таймеров
;******************************************************************************



	ldi Temp,0			; обнуление таймера_1
	out TCNT1H,Temp
	out TCNT1L,Temp

	sei				; глобальное разрешение прерываний




	

;*******************************************************************************
; главный цикл *****************************************************************
;*******************************************************************************


Main_cicle:


	
	rjmp Main_cicle			; циклимся





