Страница 2 из 2

Re: Помогите с алгоритмом!

Добавлено: 12 апр 2011, 19:44
rhf-admin
8-битный таймер, 16-битный предделитель, 16-битный постделитель.
Итого, 16*2^8*16*4/Fosc=13,1 мс максимум, но можно выделить для этого пользовательский регистр, записать в него какое-то значение и декрементировать при установке флага TMR2IF (ага этот флаг говорит о том, что отсчитано "предделитель*PR2*постделитель*4/Fosc" секунд) и так до нуля. Получим возможность отсчитать до 256 интервалов таймера, т.е. максимально свыше 3-х секунд. Но в этом случае во первых надо будет учитывать время, затрачиваемое на операции декремента и сравнения, а во вторых контроллер в это время не сможет ничем другим заниматься.

P.S. Хотя, нет. Это же всё можно оформить в подпрограмме прерывания, тогда проц будет свободен.

Re: Помогите с алгоритмом!

Добавлено: 13 апр 2011, 02:59
Андрей
RHF, спасибо за оперативный ответ...
Я пока обдумаю, что Вы написали...
Да, но мне надо, чтобы проц был свободен и мог заниматься так сказать "Другими делами"...
Надо сделать подпрограмму обработки прерываний по переполнению TMR2?????????????????????????????
А то, что с декрементом дополнительный регистр надо будет вводить в этой подпрограмме или нет?

Re: Помогите с алгоритмом!

Добавлено: 13 апр 2011, 15:54
rhf-admin
Примерно так:
В основной программе:
1) настраиваем предделитель и постделитель как нам надо
2) загружаем нужное значение PR2
3) записываем в какой-то пользовательский регистр (пусть будет Counter) сколько раз должен отработать таймер, чтобы отсчитать нужное время
4) включаем таймер и разрешаем прерывания от него и глобальные
5) занимаемся своими делами

В подпрограмме прерывания:
1) проверяем флаг TMR2IF (узнаём от таймера ли прерывание)
2) если от таймера, то
decfsz Counter
goto exit
call Podprogramma ; - делаем то, что нам надо сделать по истечении заданного интервала
exit
3) сбрасываем флаг таймера и выходим из прерывания

Re: Помогите с алгоритмом!

Добавлено: 13 апр 2011, 20:34
Андрей
RHF, я понял идею, спасибо огромное за подробное описание действий!!!
rhf-admin писал(а): Итого, 16*2^8*16*4/Fosc=13,1 мс
Я правильно понял, что 13,1 мс получится максимум это, если мы предделитель и постделитель поставим 1:16 (уменьшим частоту =>увеличится время)

Re: Помогите с алгоритмом!

Добавлено: 14 апр 2011, 01:16
rhf-admin
Да, всё правильно.