#include <mega32.h> 

#include <delay.h> 

#define ADC_VREF_TYPE 0x00 
int s, ss, o;
unsigned int m, n, result, result1 ; 
// Read the AD conversion result 
unsigned int read_adc(unsigned char adc_input) 
{ 
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff); 
// Delay needed for the stabilization of the ADC input voltage 
delay_us(10); 
// Start the AD conversion 
ADCSRA|=0x40; 
// Wait for the AD conversion to complete 
while ((ADCSRA & 0x10)==0); 
ADCSRA|=0x10; 
return ADCW; 
} 
interrupt [TIM1_COMPA] void timer1_compa_isr(void) // Обработка прерывания по совпадению
{
  s++; // увеличиваем переменную каждую секунду
         if (s<210) { // Режим 0 (Разрядка)
            o++;
        if(o>20)  
            {  
                PORTC.7=1;
            }
        if(o>(20+n))
            {   
                o=0;
                PORTC.7=0;   
            }
            }
        if (s>210) // Переключение режимов разрядки и зарядки    
        {    
            PORTC.6=0;
            PORTC.5=1;
            ss++;
             
                 if(ss>20)  
            {  
                PORTC.6=1;
            }
                if(ss>(20+m))
            {   
                ss=0;
                PORTC.6=0;   
            }
        } 
    TCNT1=0; //обнуляем таймер
}

void main(void) 
{ 
TCCR1A=0x00; //настройка таймера
TCCR1B=0x05;
TCNT1=0x00; //здесь увеличиваются тики
OCR1A=0x08; //записываем число в регистр сравнения
TIMSK=0x10; //запускаем таймер
#asm("sei")
  
PORTC=0x00;
DDRC=0x01;

ACSR=0x80;
SFIOR=0x00;

ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x81;

while (1) 
{ 
result=read_adc(0); 
result=(result*500L)/1024; // Тут мы измерили напряжение на резисторе 

result1=read_adc(1); 
result1=(result1*500L)/1024; // Тут мы измерили напряжение на резисторе 

if ((result<100)&&(n<65535)) n++; // и сравниваем, например, с 0,15В. В случае отклонения 
if ((result>100)&&(n>0)) n--; // измеренной величины от 0,15В меняем длительнось импульса n. 


if ((result1<30)&&(m<65535)) m++; // и сравниваем, например, с 0,15В. В случае отклонения 
if ((result1>30)&&(m>0)) m--; // измеренной величины от 0,15В меняем длительнось импульса n.

} 
}