#include <mega8.h>
#include <delay.h>
#define ADC_VREF_TYPE 0x40 
//  кнопка №1
//  0101100101 0101011011 010110010-1-11111     // пакет 30 бит - 31дел -00011111.
//  - - - - - - -код- - - - - - -  -c-пауза

//  кнопка №2
//  0101001101 1010010101 010100110-1-11111     // пакет 30 бит - 31дел -00011111.
//  - - - - - - -код- - - - - - -  -c-пауза

//  ацп №1
//  0-0101-0101010101-1010-1010101010-1-11111   // пакет 30 бит - 31дел -00011111.
//  с- №  -  -ацп-   - и№ - и ацп -  -c-пауза

//  ацп №2
//  0-1010-0101010101-0101-1010101010-1-11111   // пакет 30 бит - 31дел -00011111.
//  с- №  -  -ацп-   - и№ - и ацп -  -c-пауза

/////////////////////////////////////////////////////////////////////////////
char a=0,u=0,b=0,y=0,w=0,e=0; // u-напряжение вход ацп №1,y-напряжение вход ацп №2
/////////////////////////////////////////////// ацп
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;        // вход ацп №2
PORTC.0=1;        // вход кнопка №1
PORTC.1=1;        // вход кнопка №2
DDRD=0b11111111;  // выход индикатор
PORTD=0b00000000; // индикатор
DDRB.1=1;         // выход 
PORTB.1=1;        // выход - передатчик 
ADMUX=ADC_VREF_TYPE & 0xff; // настройка ацп
ADCSRA=0x83;
///////////////////////////////////////////// вкл 
mesto_1:
PORTD=w;
//////////////////////////////////////////// измерение ацп №1(PC5)
read_adc(5); // вызов функции. измерение №1 PC5.
u=ADCW/16; //u=ADCW/16;-5v-00111111-63, 63/2=31  -5v-31-00011111.   
//////////////////////////////////////////// фильтр входа - гистерезис
if (u>a+1) { 
PORTD=u/2;   //+63/2=31-00011111
a=u;
    }
if (u<a-1) { 
PORTD=u/2;   //-63/2=31-00011111
a=u;
    }
//////////////////////////////////////////// передача ацп  №1      
PORTB.1=0;         //1 старт бит  "0"
delay_ms(1);
/////////////////////////////////// № ацп №1
PORTB.1=0;   //2 бит  
delay_ms(1);
PORTB.1=1;   //3 бит
delay_ms(1);
PORTB.1=0;   //4 бит   
delay_ms(1);
PORTB.1=1;   //5 бит
delay_ms(1);
////////////////////////////////// +ацп  №1
PORTB.1=PORTD.0;   //6 бит  +1
delay_ms(1);
PORTB.1=~PORTD.0;  //7 бит
delay_ms(1);
PORTB.1=PORTD.1;   //8 бит  +2
delay_ms(1);
PORTB.1=~PORTD.1;  //9 бит
delay_ms(1);
PORTB.1=PORTD.2;   //10 бит  +3
delay_ms(1);
PORTB.1=~PORTD.2;  //11 бит
delay_ms(1);
PORTB.1=PORTD.3;   //12 бит  +4
delay_ms(1);
PORTB.1=~PORTD.3;  //13 бит
delay_ms(1);
PORTB.1=PORTD.4;   //14 бит  +5
delay_ms(1);
PORTB.1=~PORTD.4;  //15 бит
delay_ms(1);
////////////////////////////////  инверсия
PORTD=~PORTD;   
/////////////////////////////////// № -ацп №1
PORTB.1=1;   //16 бит  
delay_ms(1);
PORTB.1=0;   //17 бит
delay_ms(1);
PORTB.1=1;   //18 бит   
delay_ms(1);
PORTB.1=0;   //19 бит
delay_ms(1);
////////////////////////////////// -ацп  №1
PORTB.1=PORTD.0;   //20 бит  -1
delay_ms(1);
PORTB.1=~PORTD.0;  //21 бит
delay_ms(1);
PORTB.1=PORTD.1;   //22 бит  -2
delay_ms(1);
PORTB.1=~PORTD.1;  //23 бит
delay_ms(1);
PORTB.1=PORTD.2;   //24 бит  -3
delay_ms(1);
PORTB.1=~PORTD.2;  //25 бит
delay_ms(1);
PORTB.1=PORTD.3;   //26 бит  -4
delay_ms(1);
PORTB.1=~PORTD.3;  //27 бит
delay_ms(1); 
PORTB.1=PORTD.4;   //28 бит  -5
delay_ms(1);
PORTB.1=~PORTD.4;  //29 бит
delay_ms(1); 
PORTB.1=1;         //30 стоп бит  "1"
////////////////////////////////  инверсия
PORTD=~PORTD;   
w=PORTD;        // запись ацп №1
//////////////////////////////// коррекция пауза
delay_ms(5);
PORTD=e;
//////////////////////////////////////////// измерение ацп №2(PC4)
read_adc(4); // вызов функции. измерение №2 PC4.
y=ADCW/16; //u=ADCW/16;-5v-00111111-63, 63/2=31  -5v-31-00011111.   
//////////////////////////////////////////// фильтр входа - гистерезис
if (y>b+1) { 
PORTD=y/2;   //+63/2=31-00011111
b=y;
    }
if (y<b-1) { 
PORTD=y/2;   //-63/2=31-00011111
b=y;
    }
//////////////////////////////////////////// передача ацп  №2      
PORTB.1=0;         //1 старт бит  "0"
delay_ms(1);
/////////////////////////////////// № ацп №2
PORTB.1=1;   //2 бит  
delay_ms(1);
PORTB.1=0;   //3 бит
delay_ms(1);
PORTB.1=1;   //4 бит   
delay_ms(1);
PORTB.1=0;   //5 бит
delay_ms(1);
////////////////////////////////// +ацп  №2
PORTB.1=PORTD.0;   //6 бит  +1
delay_ms(1);
PORTB.1=~PORTD.0;  //7 бит
delay_ms(1);
PORTB.1=PORTD.1;   //8 бит  +2
delay_ms(1);
PORTB.1=~PORTD.1;  //9 бит
delay_ms(1);
PORTB.1=PORTD.2;   //10 бит  +3
delay_ms(1);
PORTB.1=~PORTD.2;  //11 бит
delay_ms(1);
PORTB.1=PORTD.3;   //12 бит  +4
delay_ms(1);
PORTB.1=~PORTD.3;  //13 бит
delay_ms(1);
PORTB.1=PORTD.4;   //14 бит  +5
delay_ms(1);
PORTB.1=~PORTD.4;  //15 бит
delay_ms(1);
////////////////////////////////  инверсия
PORTD=~PORTD;   
/////////////////////////////////// № -ацп №2
PORTB.1=0;   //16 бит  
delay_ms(1);
PORTB.1=1;   //17 бит
delay_ms(1);
PORTB.1=0;   //18 бит   
delay_ms(1);
PORTB.1=1;   //19 бит
delay_ms(1);
////////////////////////////////// -ацп  №2
PORTB.1=PORTD.0;   //20 бит  -1
delay_ms(1);
PORTB.1=~PORTD.0;  //21 бит
delay_ms(1);
PORTB.1=PORTD.1;   //22 бит  -2
delay_ms(1);
PORTB.1=~PORTD.1;  //23 бит
delay_ms(1);
PORTB.1=PORTD.2;   //24 бит  -3
delay_ms(1);
PORTB.1=~PORTD.2;  //25 бит
delay_ms(1);
PORTB.1=PORTD.3;   //26 бит  -4
delay_ms(1);
PORTB.1=~PORTD.3;  //27 бит
delay_ms(1); 
PORTB.1=PORTD.4;   //28 бит  -5
delay_ms(1);
PORTB.1=~PORTD.4;  //29 бит
delay_ms(1); 
PORTB.1=1;         //30 стоп бит  "1"
////////////////////////////////  инверсия
PORTD=~PORTD;   
e=PORTD;        // запись ацп №2
//////////////////////////////// коррекция пауза
delay_ms(5);
//////////////////////////////////////////// № кн
if (PINC.0==0) {  /////////////// кнопка №1
PORTB.1=0; //1
delay_ms(1);
PORTB.1=1; //2
delay_ms(1);
PORTB.1=0; //3
delay_ms(1);
PORTB.1=1; //4
delay_ms(1);
PORTB.1=1; //5
delay_ms(1);
PORTB.1=0; //6
delay_ms(1);
PORTB.1=0; //7
delay_ms(1);
PORTB.1=1; //8
delay_ms(1);
PORTB.1=0; //9
delay_ms(1);
PORTB.1=1; //10
delay_ms(1);
PORTB.1=0; //11
delay_ms(1);
PORTB.1=1; //12
delay_ms(1);
PORTB.1=0; //13
delay_ms(1);
PORTB.1=1; //14
delay_ms(1);
PORTB.1=0; //15
delay_ms(1);
PORTB.1=1; //16
delay_ms(1);
PORTB.1=1; //17
delay_ms(1);
PORTB.1=0; //18
delay_ms(1);
PORTB.1=1; //19
delay_ms(1);
PORTB.1=1; //20
delay_ms(1);
PORTB.1=0; //21
delay_ms(1);
PORTB.1=1; //22
delay_ms(1);
PORTB.1=0; //23
delay_ms(1);
PORTB.1=1; //24
delay_ms(1);
PORTB.1=1; //25
delay_ms(1);
PORTB.1=0; //26
delay_ms(1);
PORTB.1=0; //27
delay_ms(1);
PORTB.1=1; //28
delay_ms(1);
PORTB.1=0; //29
delay_ms(1);
PORTB.1=1; //30
//////////////////////////////// коррекция пауза
delay_ms(5); 
  };
if (PINC.1==0) {  /////////////// кнопка №2
PORTB.1=0; //1
delay_ms(1);
PORTB.1=1; //2
delay_ms(1);
PORTB.1=0; //3
delay_ms(1);
PORTB.1=1; //4
delay_ms(1);
PORTB.1=0; //5
delay_ms(1);
PORTB.1=0; //6
delay_ms(1);
PORTB.1=1; //7
delay_ms(1);
PORTB.1=1; //8
delay_ms(1);
PORTB.1=0; //9
delay_ms(1);
PORTB.1=1; //10
delay_ms(1);
PORTB.1=1; //11
delay_ms(1);
PORTB.1=0; //12
delay_ms(1);
PORTB.1=1; //13
delay_ms(1);
PORTB.1=0; //14
delay_ms(1);
PORTB.1=0; //15
delay_ms(1);
PORTB.1=1; //16
delay_ms(1);
PORTB.1=0; //17
delay_ms(1);
PORTB.1=1; //18
delay_ms(1);
PORTB.1=0; //19
delay_ms(1);
PORTB.1=1; //20
delay_ms(1);
PORTB.1=0; //21
delay_ms(1);
PORTB.1=1; //22
delay_ms(1);
PORTB.1=0; //23
delay_ms(1);
PORTB.1=1; //24
delay_ms(1);
PORTB.1=0; //25
delay_ms(1);
PORTB.1=0; //26
delay_ms(1);
PORTB.1=1; //27
delay_ms(1);
PORTB.1=1; //28
delay_ms(1);
PORTB.1=0; //29
delay_ms(1);
PORTB.1=1; //30
//////////////////////////////// коррекция пауза
delay_ms(5);  
  };
////////////////////////////////////
goto mesto_1;
};