Код:
;Подпрограмма обработки чтения по прерыванию АЦП
;==============================================================
ADC_INT:
cli ;запрет всех прерываний
in ADC_value,ADCL ;читаем АЦП
in temp,ADCH
cpi ADC_value,220 ;сравниваем результат измерения с константой
brlo Temparature_step_0
cpi ADC_value,221 ;сравниваем результат измерения с константой
brlo Temparature_step_1
cpi ADC_value,222 ;сравниваем результат измерения с константой
brlo Temparature_step_2
cpi ADC_value,223 ;сравниваем результат измерения с константой
brlo Temparature_step_3
cpi ADC_value,224 ;сравниваем результат измерения с константой
brlo Temparature_step_4
cpi ADC_value,225 ;сравниваем результат измерения с константой
brlo Temparature_step_5
cpi ADC_value,226 ;сравниваем результат измерения с константой
brlo Temparature_step_6
cpi ADC_value,226 ;сравниваем результат измерения с константой
brsh Temparature_step_7
Temparature_step_0:
cbr Flag,0b00000001 ;сбрасываем флаг работы вентилятора
cbr Flag,0b00000010 ;сбрасываем флаг работы в режиме-1
ldi Skvazhnost,0
sei ;разрешение всех прерываний
ret
Temparature_step_1:
sbr Flag,0b00000001 ;устанавливаем флаг работы вентилятора
sbr Flag,0b00000010 ;устанавливаем флаг работы в режиме-1
ldi Skvazhnost,40
ldi Razr0,255 ;загружаем число обеспечивающее
ldi Razr1,255 ;работу вентилятора на _ сек.
ldi Razr2,70
sei ;разрешение всех прерываний
ret
Temparature_step_2:
sbr Flag,0b00000001 ;устанавливаем флаг работы вентилятора
cbr Flag,0b00000010 ;сбрасываем флаг работы в режиме-1
ldi Skvazhnost,83
sei ;разрешение всех прерываний
ret
Temparature_step_3:
sbr Flag,0b00000001 ;устанавливаем флаг работы вентилятора
cbr Flag,0b00000010 ;сбрасываем флаг работы в режиме-1
ldi Skvazhnost,126
sei ;разрешение всех прерываний
ret
Temparature_step_4:
sbr Flag,0b00000001 ;устанавливаем флаг работы вентилятора
cbr Flag,0b00000010 ;сбрасываем флаг работы в режиме-1
ldi Skvazhnost,169
sei ;разрешение всех прерываний
ret
Temparature_step_5:
sbr Flag,0b00000001 ;устанавливаем флаг работы вентилятора
cbr Flag,0b00000010 ;сбрасываем флаг работы в режиме-1
ldi Skvazhnost,212
sei ;разрешение всех прерываний
ret
Temparature_step_6:
sbr Flag,0b00000001 ;устанавливаем флаг работы вентилятора
cbr Flag,0b00000010 ;сбрасываем флаг работы в режиме-1
ldi Skvazhnost,255
sei ;разрешение всех прерываний
ret
Temparature_step_7:
sbr Flag,0b00000001 ;устанавливаем флаг работы вентилятора
cbr Flag,0b00000010 ;сбрасываем флаг работы в режиме-1
ldi Skvazhnost,255
sei ;разрешение всех прерываний
ret
;----------------------Конец подпрограммы----------
;Подпрограмма обработки прерывания по переполнению таймера 1 частота ШИМ
;======================
OVF0:
cli
clr temp
out TCCR0,temp
out TCCR2,temp
out TCNT0,temp
out TCNT2,temp
ldi temp,0b10000000 ;фронт импульса
OUT PortB,temp
;Запускаем таймер_2 формирующий скважность ШИМ
mov temp,Skvazhnost
out TCNT2,temp
ldi temp,4
out TCCR2,temp
;Запускаем таймер_0 формирующий частоту ШИМ
ldi temp,0
out TCNT0,temp
ldi temp,4
out TCCR0,temp
sbrs Flag,1 ;если флаг установлен АЦП не запускаем
sbi ADCSRA,ADSC
sei
ret
;---------------------------Конец подпрограммы---------------------
;Подпрограмма обработки прерывания по переполнению таймера 2 скважность ШИМ
;==================================
OVF2:
cli
clr temp
out TCCR2,temp
sbrc Flag,0 ;если флаг сброшен не включаем вентилятор
out PortB,temp ;спад импульса
sei
ret
;------------------------Конец подпрограммы----------------
Delay_bad:
subi Razr0,1
sbci Razr1,0
sbci Razr2,0
brcc Delay_bad
cbr Flag,0b00000001 ;сбрасываем флаг работы вентилятора
sbr Flag,0b00000010 ;устанавливаем флаг работы в режиме-1
ldi Razr0,255 ;загружаем число обеспечивающее
ldi Razr1,255 ;задержку на 30 сек.
ldi Razr2,150
ldi temp,0b10000000 ;фронт импульса
OUT PortB,temp
Delay_bad_2:
subi Razr0,1
sbci Razr1,0
sbci Razr2,0
brcc Delay_bad_2
cbr Flag,0b00000001 ;сбрасываем флаг работы вентилятора
cbr Flag,0b00000010 ;сбрасываем флаг работы в режиме-1
ret