#include <io.h>
#include <mega16.h>
#include <PDU.h>   


unsigned char temp[13];
unsigned char spad=1;
long unsigned int new_signal=0;
unsigned char i=0;
unsigned char j=0;
int state=0;


interrupt [TIM0_OVF] void end_signal(void)
{   
    TCCR0 &=(0<<CS02);      //остановка таймера
    TCNT0=0;                          //сброс счётчика 
    MCUCR &=(0<<ISC10);               //прерывание по спаду 
    spad=1;  
    i=0;   
}

interrupt [EXT_INT1] void set_text(void)
{
    if(spad)
    {   
        state=0;
        TCNT0=0;                     //сброс счётчика
        TCCR0 |=(1<<CS02); //запуск таймера
        spad=0;     
        MCUCR |=(1<<ISC10);          //прерывание по возрастанию
    }
    else
    {
        temp[i++]=TCNT0;
        MCUCR &=(0<<ISC10);          //прерывание по спаду
        spad=1;  
        TCNT0=0;                     //сброс счётчика
    }  
    if(i>=13)
    {      
        TCCR0 &=(0<<CS02); //остановка таймера
        i=0; 
        state=1;
    } 
}

unsigned long int get_comand(void)
{
    if(state)
    {     
        state=0;
        new_signal=0;
        for(j=1; j<13; j++)
        {
            if((temp[j]>35)&&(temp[j]<50)) new_signal=new_signal*2;
            if((temp[j]>75)&&(temp[j]<90)) new_signal=new_signal*2+1;
        } 
        return new_signal;   
    }
    else
        return 0;
}

void PDUInit(void)
{ 
    TIMSK |=(1<<TOIE0);           //используется таймер T0
    GICR |=(1<<INT1);             //используется вход INT1 (к нему подключать датчик)
    MCUCR |=(1<<ISC11);
}