;****************************************************************
;							ШИМ от АЦП
;****************************************************************
.INCLUDE "tn13DEF.INC"
.list

.def tmp=r16
.def tmp0=r17
.def cnt=r19
.def shim=r20
.def obr=r21
.def test=r22
.def obr_2=r23

.DSEG

;obr:		.byte 1
acp:		.byte 1
;shim:		.byte 1
ckeyh:		.byte 1
nmenu:		.byte 1

.cseg
.org $0a

RESET:
	ldi tmp,low(RAMEND)
	out spl,tmp


.macro   OUTI
	LDI   R16,@1
	OUT   @0,R16
.endm
	OUTI   ADCSRA,(1<<ADEN)|(1<<ADIE)|(0<<ADPS2)|(1<<ADPS0) ;Включаем АЦП, его прерывание, настраиваем предделитель тактовой частоты
	OUTI ADCSRB,0 ;источник автосрабатывания отключен
	OUTI   ADMUX,(1<<ADLAR)|(1<<MUX1) ;выравнивание влево (ADCH - 8 старших бит), 
	OUTI   tccr0a,(1<<com0a1)|(0<<COM0A0)|(1<<wgm01)|(1<<wgm00);НАСТРОЙКА ШИМ



	ldi tmp,low(RAMEND)
	out spl,tmp

	ldi tmp,$02	;преддилитель 64
	out tccr0b,tmp
ldi tmp,0b00001111
out ddrb,tmp
ldi tmp,0
out portb,tmp
ldi tmp0,0
	sei

main:
	SBI   ADCSRA,ADSC	;опрашиваем АЦП
	ldi tmp,10
noop:
	subi tmp,1
	brne noop			;ждем ответа АЦП


ldi tmp,$00
cp cnt,tmp
breq main
cp test,tmp
brne minus

	mov tmp0,cnt

nooop:
	ldi tmp,2
	rcall delay_us
	subi tmp0,1
	brne nooop			;ждем пока значение ацп дойдет до 0

	ldi tmp,1
	add shim,tmp

ldi tmp,$ff
cp shim,tmp
brne next
minus:

	mov tmp0,cnt

m_nop:
	ldi test,1
	ldi tmp,2
	rcall delay_us
	subi tmp0,1
	brne m_nop			;ждем пока значение ацп дойдет до 0

	ldi tmp,1
	sub shim,tmp
	
ldi tmp,$00
cp shim,tmp
brne next

ldi test,0
rcall delay_100ms

next:
	out ocr0a,shim




rjmp main

adc_inc:		;мы тут если сработала SBI ADCSRA,ADSC
		push tmp	;сохраняем все подряд
		push tmp0	;сохраняем все подряд
		in tmp,sreg	;сохраняем все подряд
		push tmp	;сохраняем все подряд

	IN cnt,ADCH	;запихиваем значение АЦП в регистр 
;sbi portb,2	;это для проверки

		pop tmp		;востанавливаем сохраненное все ранее	
		out sreg,tmp;востанавливаем сохраненное все ранее	
		pop tmp0	;востанавливаем сохраненное все ранее
		pop tmp		;востанавливаем сохраненное все ранее
	reti


delay_100ms:
	ldi tmp0,$a0
	rjmp delay_ms1
delay_10ms:
	ldi tmp0,$10
	rjmp delay_ms1
delay_ms:
	ldi tmp,0
delay_ms1:
	rcall delay_us
	rcall delay_us
	rcall delay_us
	rcall delay_us
	subi tmp0,1
	brne delay_ms
	ret

delay_us:
	subi tmp,1
	nop
	brne delay_us
	ret




;		Address Labels Code Comments
.org $00
rjmp RESET ; Reset Handler
reti	;rjmp EXT_INT0 ; IRQ0 Handler
	reti	;rjmp PCINT0 ; PCINT0 Handler
reti	;rjmp TIM0_OVF ; Timer0 Overflow Handler
	reti	;rjmp EE_RDY ; EEPROM Ready Handler
	reti	;rjmp ANA_COMP ; Analog Comparator Handler
	reti	;rjmp TIM0_COMPA ; Timer0 CompareA Handler
	reti	;rjmp TIM0_COMPB ; Timer0 CompareB Handler
	reti	;rjmp WATCHDOG ; Watchdog Interrupt Handler
rjmp ADC_inc ; ADC Conversion Handler

.exit
