А как-же тогда вообще МК считают импульсы....если с ваших слов,куда не ткнись в этом лабиринте-всюду тупик?
Ну давайте попробуем решить задачу.
Итак.
Имеем таймер 8 бит с предделителем 7 бит и с возможностью счета как частоты машинных циклов, так и внешних импульсов. Но остановить таймер невозможно.
Частота машинных циклов - 1 МГц.
Есть еще таймер вачдога с минимальным интервалом примерно 18 мс и 8 битным прескалером.
Если напрячь всю эту небывалую мощь, то можно вачдогом задать интервал счета, а таймером считать входные импульсы.
64*18 мс=1,152 с и 100 мкс (10 кГц). Получаем для 10 кГц счет до 11520. То есть два байта. Если предделитель вачдога поставить 32, то та же константа даст 20 кГц.
Алгоритм прост как две копейки. При старте контроллера проверяем причину сброса в STATUS - если ресет был по питанию, то инициализируем МК и переменные, а если по вачдогу, то производим расчет, сравнение и повторную инициализацию тех регистров, которые ресетятся при сбросе.
В самой программе просто считаем переполнения таймера в старшем байте счета. При расчете читаем таймер в первую очередь в буферный байт в ОЗУ - это будет младшим байтом результата. Сам таймер немедленно сбрасываем для следующего цикла счета. Так же немедленно восстанавливаем предделитель вачдога на требуемое значение. Сравниваем 2 байта результата с 2 байтами константы - получаем искомое.
Так реализовать задачу можно. Правда придется вручную калибровать под пороговую частоту в коде.
Учтите, что прескалер вачдога и прескалер таймера - это один и тот же прескалер. Либо одному, либо другому...
Удачи...
ЗЫ. Причем тут обучение, если я решил задачу за Вас?