#include int mm; unsigned int T; unsigned char max,min; unsigned int counter, count2,i; unsigned char adc(void); main() { max = 0; // инициализация максимального значения min = 0x70; // инициализация минимального значения counter = adc(); // adc() возвращает результат преобразования while((i != 2)) // пока мы не прошли период { count2=adc(); if(counter == count2) i++; if (count2 > max) {max = P2;} // установка максимума if (count2 < min) {min = P2; }// установка минимума } mm = (max + min) / 2;// вычисление среднего значения TMOD = 1; // Режим измерений задается в управл. регистре TH0 = TL0 = 0; // младший и старший байты таймеров TR0 = 0; // Бит разрешения счетчика0. Запрет while(adc() <= mm); // Доходим до начала периода while(adc() >= mm); TR0 = 1; // Бит разрешения счетчика0. Разрешение while(adc() <= mm); // Проходим период TR0 = 0; // Запрещаем счетчик T = (TH0 << 8) + TL0; // Записываем период while(3 < 5); } unsigned char adc(void) { unsigned char x; DAPR = 0; while(BSY); return P2 = x = ADDAT;