Показать сообщение отдельно
Старый 19.10.2009, 21:24   #344   
Форумец
 
Сообщений: 1,532
Регистрация: 19.02.2009
Возраст: 54
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от _vka Посмотреть сообщение
[/CODE]
СПАСИБО ЗА УЧАСТИЕ! ЭТО МОЯ ПЕРВАЯ ПРОГА НА СИ.
Что эта прога делает? Меняет частоту импульсов от 60 - 100 гц, при нажатии кнопки частота увеличивается пока count не достиг значения 178 (100гц) после уменьшается
пока count не достиг значения 126 (60 гц) все.
( Вы серьезно настроены по ходу программы что-то писать в TMR0, чего настоятельно не рекомендуется делать (мнение не только мое и я с этим согласен) )
Не понял, а почему нельзя? Обьясните пожалуйста чем черевата запись в TMR0
зарание спасибо.
Мое мнение - такой код - не вариант. Точнее не код, а путь избранный для решения такой задачи не совсем верный.
1. Задержки в прерывании - это минус, код обработчика прерывания должен быть коротким (опять не мое мнение). В обработчике все должно быть коротким и по делу (обычно принято так).
2. Если Вы решили работать с частотой, то временные отсчеты должны быть точными, а перезапись TMR0 этому никак не способствует. Для таких целей применяют модуль CCP и TMR2, еще у TMR2 есть замечательное свойство как прерывание по совпадению TMR2 и PR2. Если используется PIC18, то имеются два вектора прерываний, а с ними обоими уже вычисление точных отсчетов при Вашем подходе проблематично.
3. Про TMR0:
- после записи в TMR0 в течении 2-х тактов счетчик не увеличивается. Если используется предделитель, то не особо проблема, а если без него, то надо как-то уже компенсировать;
- и главное - при записи в TMR0 предделитель-то обнуляется, а предделитель мы считать, увы, не можем обычными средствами. И что в нем было на момент записи TMR0 нам уже не узнать.
Поэтому если уж так надо, то надо добиваться того, чтобы TMR0 катился и катился без перезаписи.
P.S. Я просто высказал свое мнение. Выбирать все равно Вам.
  Ответить с цитированием