#include <mega8.h>
#include <delay.h>
#define ADC_VREF_TYPE 0x40 
//////////////////////////////////////////////////////////////////////////////////////////////////////          
//  кнопка №1
//  c   x1=178   x2=171   x3=107   x4=37    c пауза
//  1- 10110010 10101011 01101011 00100101 -1-0000 // пакет 38 бит  
//////////////////////////////////////////////////////////////////////////////////////////////////////          
//  кнопка №2
//  c   x1=166   x2=210   x3=170   x4=101   c пауза
//  1- 10100110 11010010 10101010 01100101 -1-0000 // пакет 38 бит  
//////////////////////////////////////////////////////////////////////////////////////////////////////          
//  кнопка №3
//  c   x1=181   x2=43    x3=43    x4=37    c пауза
//  1- 10110101 00101011 00101011 00100101 -1-0000 // пакет 38 бит  
//////////////////////////////////////////////////////////////////////////////////////////////////////          
//  кнопка №4
//  c   x1=155   x2=84    x3=205   x4=101   c пауза
//  1- 10011011 01010100 11001101 01100101 -1-0000 // пакет 38 бит  
//////////////////////////////////////////////////////////////////////////////////////////////////////          
//  кнопка №5
//  c   x1=105   x2=181   x3=85    x4=165   c пауза
//  1- 01101001 10110101 01010101 10100101 -1-0000 // пакет 38 бит  
//////////////////////////////////////////////////////////////////////////////////////////////////////          
//////////////////////////////////////////////////////////////////////////////////////////////////////          
// АЦП 00:
//       № АЦП |  00                                           
//     код АЦП |    111111                                      
//          y=    00111111
// > манчестер    01011010 10101010~10100101 01010101           
//             с     x1       x2       x3       x4     c пауза
//     выход:  1- 01011010 10101010~10100101 01010101 -1-0000  пакет 38 бит  - 500 Hz - 13,5 пак/c.
//////////////////////////////////////////////////////////////////////////////////////////////////////          
//////////////////////////////////////////////////////////////////////////////////////////////////////          
// ШИМ 11:
//       № ШИМ |  11                                           
//     код ШИМ |    111111                                      
//                11111111
// > манчестер    10101010 10101010~01010101 01010101           
//             с     x1       x2       x3       x4     c пауза
//     выход:  1- 10101010 10101010~01010101 01010101 -1-0000  пакет 38 бит  - 500 Hz - 13,1 пак/c.
//////////////////////////////////////////////////////////////////////////////////////////////////////          
char a,u,y;        // u-вход АЦП №1 y-выход АЦП №1
char b,c,z;        // c-вход ШИМ №1 z-выход ШИМ №1
char t,r,w,x;      // передача АЦП и ШИМ
/////////////////////////////////////////////// ацп
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
delay_us(10);
ADCSRA|=0x40;
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////          
void main(void)
{
DDRC=0b00000000;  // вход 
PORTC.5=0;        // вход АЦП №1
PORTC.4=0;        // вход ШИМ №1
PORTC.3=1;        // вход кнопка №4
PORTC.2=1;        // вход кнопка №3
PORTC.1=1;        // вход кнопка №2
PORTC.0=1;        // вход кнопка №1
DDRB.2=0;         // вход кнопка №5
PORTB.2=1;        // вход кнопка №5
DDRD=0b11111111;  // выход индикатор
PORTD=0b00000000; // индикатор
DDRB.1=1;         // выход 
PORTB.1=0;        // выход - передатчик 
ADMUX=ADC_VREF_TYPE & 0xff; // настройка ацп
ADCSRA=0x83;
//////////////////////////////////////////////////////////////////////////////////////////////////////          
///////////////////////////////////////////// вкл 
mesto_1:
//////////////////////////////////////////////////////////////////////////////////////////////////////          
//////////////////////////////////////////// измерение АЦП №1(PC5)
read_adc(5); // вызов функции. измерение №1 PC5.
u=ADCW/8;    //u=ADCW/8;-5v-01111111-128, 128/2=64  -5v-64-00111111.   
//////////////////////////////////////////// фильтр входа - гистерезис
if (u>a+1) { 
y=u/2;   //+128/2=64-00111111
a=u;
    }
if (u<a-1) { 
y=u/2;   //-128/2=64-00111111
a=u;
    }              // код АЦП №1 = 00000000
//////////////////////////////////////////////////////////////////////////////////////////////////////          
//////////////////////////////////////////// измерение ШИМ №1(PC4)
read_adc(4); // вызов функции. измерение №1 PC5.
c=ADCW/8;    //c=ADCW/8;-5v-01111111-128, 128/2=64  -5v-64-00111111.   
//////////////////////////////////////////// фильтр входа - гистерезис
if (c>b+1) { 
z=c/2;   //+128/2=64-00111111
b=c;
    }
if (c<b-1) { 
z=c/2;   //-128/2=64-00111111
b=c;
    }
////////// 
z|=(1<<7)|(1<<6); // код ШИМ №1 = 11000000
//////////////////////////////////////////////////////////////////////////////////////////////////////          
///////////////////////////////////////////// передача АЦП №1 и ШИМ №1:      
x=y;                 // x - буфер передатчика
for (t=0;t<2;t++) {         
  /////////////////////////////////////////////      
  PORTB.1=1;         // - старт бит  "1"
  delay_us(957);
  /////////////////////////////////// код: АЦП №1 = 00000000, ШИМ №1 = 11000000 
  for (r=0;r<2;r++) {         
    for (w=0;w<8;w++) {         
      if ((x&(1<<7-w))>0) {  // x 00111111                 
      PORTB.1=1;             // & 10000000                
      }                      // & 01000000                       
      else  {                // & 00100000                    
      PORTB.1=0;             // & 00010000                               
      };                     // & 00001000                      
      delay_us(957);         // & 00000100                  
      PORTB.1=~PORTB.1;      // & 00000010
      delay_us(957);         // & 00000001                                    
    };                                                       
  x=~x;
  };                                       
  //////////////////////////////////////////////////
  PORTB.1=1;         // - стоп бит  "1"
  delay_us(957);
  ////////////////////////////////////////////////////////////////////////////////////////////////////           
  PORTB.1=0;         // пауза 35 36 37 38
  delay_ms(4);
  ////////////////////////////////////////////////////////////////////////////////////////////////////           
x=z;
};
//////////////////////////////////////////////////////////////////////////////////////////////////////          
if (PINC.0==0) {  /////////////// кнопка №1
PORTB.1=1; //1  старт бит  "1" 
delay_us(979);
PORTB.1=1; //2 
delay_us(979);
PORTB.1=0; //3 
delay_us(979);
PORTB.1=1; //4 
delay_us(979);
PORTB.1=1; //5 
delay_us(979);
PORTB.1=0; //6 
delay_us(979);
PORTB.1=0; //7 
delay_us(979);
PORTB.1=1; //8 
delay_us(979);
PORTB.1=0; //9 
delay_us(979);
PORTB.1=1; //10 
delay_us(979);
PORTB.1=0; //11 
delay_us(979);
PORTB.1=1; //12 
delay_us(979);
PORTB.1=0; //13 
delay_us(979);
PORTB.1=1; //14 
delay_us(979);
PORTB.1=0; //15 
delay_us(979);
PORTB.1=1; //16 
delay_us(979);
PORTB.1=1; //17 
delay_us(979);
PORTB.1=0; //18 
delay_us(979);
PORTB.1=1; //19 
delay_us(979);
PORTB.1=1; //20 
delay_us(979);
PORTB.1=0; //21 
delay_us(979);
PORTB.1=1; //22 
delay_us(979);
PORTB.1=0; //23 
delay_us(979);
PORTB.1=1; //24 
delay_us(979);
PORTB.1=1; //25 
delay_us(979);
PORTB.1=0; //26 
delay_us(979);
PORTB.1=0; //27 
delay_us(979);
PORTB.1=1; //28 
delay_us(979);
PORTB.1=0; //29 
delay_us(979);
PORTB.1=0; //30 
delay_us(979);
PORTB.1=1; //31  
delay_us(979);
PORTB.1=0; //32 
delay_us(979);
PORTB.1=1; //33 
delay_us(979);
PORTB.1=1; //34 стоп бит  "1"
delay_us(979);
//////////////////////////////// коррекция пауза
PORTB.1=0; //35 36 37 38
delay_ms(4); 
};
/////////////////////////////////
if (PINC.1==0) {  /////////////// кнопка №2
PORTB.1=1; //1  старт бит  "1" 
delay_us(979);
PORTB.1=1; //2 
delay_us(979);
PORTB.1=0; //3 
delay_us(979);
PORTB.1=1; //4 
delay_us(979);
PORTB.1=0; //5 
delay_us(979);
PORTB.1=0; //6 
delay_us(979);
PORTB.1=1; //7 
delay_us(979);
PORTB.1=1; //8 
delay_us(979);
PORTB.1=0; //9 
delay_us(979);
PORTB.1=1; //10 
delay_us(979);
PORTB.1=1; //11 
delay_us(979);
PORTB.1=0; //12 
delay_us(979);
PORTB.1=1; //13 
delay_us(979);
PORTB.1=0; //14 
delay_us(979);
PORTB.1=0; //15 
delay_us(979);
PORTB.1=1; //16 
delay_us(979);
PORTB.1=0; //17 
delay_us(979);
PORTB.1=1; //18 
delay_us(979);
PORTB.1=0; //19 
delay_us(979);
PORTB.1=1; //20 
delay_us(979);
PORTB.1=0; //21 
delay_us(979);
PORTB.1=1; //22 
delay_us(979);
PORTB.1=0; //23 
delay_us(979);
PORTB.1=1; //24 
delay_us(979);
PORTB.1=0; //25 
delay_us(979);
PORTB.1=0; //26 
delay_us(979);
PORTB.1=1; //27 
delay_us(979);
PORTB.1=1; //28 
delay_us(979);
PORTB.1=0; //29 
delay_us(979);
PORTB.1=0; //30 
delay_us(979);
PORTB.1=1; //31  
delay_us(979);
PORTB.1=0; //32 
delay_us(979);
PORTB.1=1; //33 
delay_us(979);
PORTB.1=1; //34 стоп бит  "1"
delay_us(979);
//////////////////////////////// коррекция пауза
PORTB.1=0; //35 36 37 38
delay_ms(4); 
};
/////////////////////////////////
if (PINC.2==0) {  /////////////// кнопка №3
PORTB.1=1; //1  старт бит  "1" 
delay_us(979);
PORTB.1=1; //2 
delay_us(979);
PORTB.1=0; //3 
delay_us(979);
PORTB.1=1; //4 
delay_us(979);
PORTB.1=1; //5 
delay_us(979);
PORTB.1=0; //6 
delay_us(979);
PORTB.1=1; //7 
delay_us(979);
PORTB.1=0; //8 
delay_us(979);
PORTB.1=1; //9 
delay_us(979);
PORTB.1=0; //10 
delay_us(979);
PORTB.1=0; //11 
delay_us(979);
PORTB.1=1; //12 
delay_us(979);
PORTB.1=0; //13 
delay_us(979);
PORTB.1=1; //14 
delay_us(979);
PORTB.1=0; //15 
delay_us(979);
PORTB.1=1; //16 
delay_us(979);
PORTB.1=1; //17 
delay_us(979);
PORTB.1=0; //18 
delay_us(979);
PORTB.1=0; //19 
delay_us(979);
PORTB.1=1; //20 
delay_us(979);
PORTB.1=0; //21 
delay_us(979);
PORTB.1=1; //22 
delay_us(979);
PORTB.1=0; //23 
delay_us(979);
PORTB.1=1; //24 
delay_us(979);
PORTB.1=1; //25 
delay_us(979);
PORTB.1=0; //26 
delay_us(979);
PORTB.1=0; //27 
delay_us(979);
PORTB.1=1; //28 
delay_us(979);
PORTB.1=0; //29 
delay_us(979);
PORTB.1=0; //30 
delay_us(979);
PORTB.1=1; //31  
delay_us(979);
PORTB.1=0; //32 
delay_us(979);
PORTB.1=1; //33 
delay_us(979);
PORTB.1=1; //34 стоп бит  "1"
delay_us(979);
//////////////////////////////// коррекция пауза
PORTB.1=0; //35 36 37 38
delay_ms(4); 
};
/////////////////////////////////
if (PINC.3==0) {  /////////////// кнопка №4
PORTB.1=1; //1  старт бит  "1" 
delay_us(979);
PORTB.1=1; //2 
delay_us(979);
PORTB.1=0; //3 
delay_us(979);
PORTB.1=0; //4 
delay_us(979);
PORTB.1=1; //5 
delay_us(979);
PORTB.1=1; //6 
delay_us(979);
PORTB.1=0; //7 
delay_us(979);
PORTB.1=1; //8 
delay_us(979);
PORTB.1=1; //9 
delay_us(979);
PORTB.1=0; //10 
delay_us(979);
PORTB.1=1; //11 
delay_us(979);
PORTB.1=0; //12 
delay_us(979);
PORTB.1=1; //13 
delay_us(979);
PORTB.1=0; //14 
delay_us(979);
PORTB.1=1; //15 
delay_us(979);
PORTB.1=0; //16 
delay_us(979);
PORTB.1=0; //17 
delay_us(979);
PORTB.1=1; //18 
delay_us(979);
PORTB.1=1; //19 
delay_us(979);
PORTB.1=0; //20 
delay_us(979);
PORTB.1=0; //21 
delay_us(979);
PORTB.1=1; //22 
delay_us(979);
PORTB.1=1; //23 
delay_us(979);
PORTB.1=0; //24 
delay_us(979);
PORTB.1=1; //25 
delay_us(979);
PORTB.1=0; //26 
delay_us(979);
PORTB.1=1; //27 
delay_us(979);
PORTB.1=1; //28 
delay_us(979);
PORTB.1=0; //29 
delay_us(979);
PORTB.1=0; //30 
delay_us(979);
PORTB.1=1; //31  
delay_us(979);
PORTB.1=0; //32 
delay_us(979);
PORTB.1=1; //33 
delay_us(979);
PORTB.1=1; //34 стоп бит  "1"
delay_us(979);
//////////////////////////////// коррекция пауза
PORTB.1=0; //35 36 37 38
delay_ms(4); 
};
/////////////////////////////////
if (PINB.2==0) {  /////////////// кнопка №5
PORTB.1=1; //1  старт бит  "1" 
delay_us(979);
PORTB.1=0; //2 
delay_us(979);
PORTB.1=1; //3 
delay_us(979);
PORTB.1=1; //4 
delay_us(979);
PORTB.1=0; //5 
delay_us(979);
PORTB.1=1; //6 
delay_us(979);
PORTB.1=0; //7 
delay_us(979);
PORTB.1=0; //8 
delay_us(979);
PORTB.1=1; //9 
delay_us(979);
PORTB.1=1; //10 
delay_us(979);
PORTB.1=0; //11 
delay_us(979);
PORTB.1=1; //12 
delay_us(979);
PORTB.1=1; //13 
delay_us(979);
PORTB.1=0; //14 
delay_us(979);
PORTB.1=1; //15 
delay_us(979);
PORTB.1=0; //16 
delay_us(979);
PORTB.1=1; //17 
delay_us(979);
PORTB.1=0; //18 
delay_us(979);
PORTB.1=1; //19 
delay_us(979);
PORTB.1=0; //20 
delay_us(979);
PORTB.1=1; //21 
delay_us(979);
PORTB.1=0; //22 
delay_us(979);
PORTB.1=1; //23 
delay_us(979);
PORTB.1=0; //24 
delay_us(979);
PORTB.1=1; //25 
delay_us(979);
PORTB.1=1; //26 
delay_us(979);
PORTB.1=0; //27 
delay_us(979);
PORTB.1=1; //28 
delay_us(979);
PORTB.1=0; //29 
delay_us(979);
PORTB.1=0; //30 
delay_us(979);
PORTB.1=1; //31  
delay_us(979);
PORTB.1=0; //32 
delay_us(979);
PORTB.1=1; //33 
delay_us(979);
PORTB.1=1; //34 стоп бит  "1"
delay_us(979);
//////////////////////////////// коррекция пауза
PORTB.1=0; //35 36 37 38
delay_ms(4); 
};
////////////////////////////////////////////////////////////////////////////////////////////////////           
goto mesto_1;
}