Dear Anatoly,
15 Nov 03 10:58, Anatoly Mashanov wrote to Serge Bryxin:
SB>>>> в прерывании таймера я перегружаю счетчик в регистры и обнуляю SB>>>> его. AM>>> Hельзя. SB>> Почему? AM> Если ты прибавляешь к счетчику, то вне зависимости от времени реакции AM> на прерывание ты получаешь один и тот же период счета. Если ты AM> сбрасываешь счетчик, то при задержке прерывания ты можешь получить AM> удлинение следующего цикла счета.
Я так и не понял ничего. Кроме того, что ты, кажется, перепутал таймер и счетчик. Таймер считает сам (время). А счетчик у меня считает _внешние_ события. При чем тут удлиннение периода и что можно прибавить к счетчику, не зная его содержимого?.. Если бы я знал заранее, сколько насчитает счетчик - зачем бы мне было считать? :-)
Да ладно, проехали. Программа работает на диво стабильно, гуляние входящей частоты не превышает одного периода. Эту единицу тоже можно побороть запуском счета по фронту импульса, но в данном случае мне это несущественно. И не хочется сбивать секундный отсчет из-за этого. Вранье в 200uS, конечно, существенно весьма, но поборото в лоб удлиннением "секунды". Hу и фиг с ним, работает - и хорошо.
AM> Да, еще, прибавление счетчика должно быть одной операцией counter += diff AM> а не reg=counter; reg += diff; counter=reg по очевидным причинам.
Эх, сишники... :-) Hе, я тоже Си люблю. И пишу на нем вот уже лет 12. Hо для однокристаллок все ж по старинке предпочитаю Асм. А то, чего доброго, через некоторое время тоже начну думать, что A+=B всегда выполняется за один такт.
Sincerely yours, Old Greaser.