Полная версия этой страницы:
AVR assembler задержки
photon_62
Jun 25 2010, 21:39
кто как делает задержки и как правильно и точно подсчитать время?
defunct
Jun 25 2010, 21:51
Длительные задержки - по таймеру.
Короткие :
Код
wait:
dec rn
brne wait
Очень короткие
nop
nop
Количество тактов за сколько выполняется та или иная команда можно найти в AVR Instruction Set Reference.
Здравствуйте.
Я делаю на таймере примерно так:
Код
.equ fClk = 10000000;Hz
.equ TimeUntilReceive = 100;us
.equ Pre = 1024
.equ TUR_Timer = 0xFFFF - (TimeUntilReceive * (fClk / Pre) / 1000)
outiw TCNT1,TUR_Timer
stbp TIMSK,TOIE1
Задержки по-простому см. выше.
photon_62
Jun 25 2010, 22:14
я только учусь. Допустим нужна 1с задержка как правильне ее реализовать?
Такие задержки нужно делать на таймере.
В общих чертах.
Необходимо правильно загрузить таймер. Если число вами жестко определено и в процессе работы не меняется, то расчет лучше делать средствами самой среды разработки, которая может посчитать необходимое для таймера число, как в приведенном мной примере.
Этим числом вы загружаете соответствующий регистр таймера, разрешаете счет, разрешаете прерывания. Таймер с определенной вами скоростью начинает отсчитывать определенное количество тактов, соответствующее нужному вам временному интервалу.
Время вызова обработчика прерывания относительно начала счета (или загрузки таймера, если счет в этот момент был уже активирован) совпадет с необходимым вам временным интервалом с точностью до разрешающей способности таймера, которая будет зависеть от частоты тактирования (fClk / Pre).
photon_62
Jun 26 2010, 05:29
Цитата(x736C @ Jun 26 2010, 02:33)

Такие задержки нужно делать на таймере.
спасибо! а можеш пример привести для полной ясности
Сергей Борщ
Jun 26 2010, 10:32
Цитата(x736C @ Jun 26 2010, 01:33)

Такие задержки нужно делать на таймере.
Не обязательно. Одну задержку, скажем, "после включения на секунду зажечь все светодиоды чтобы показать их рабоспособность", т.е. задержки, не требующие большой точности, вполне можно делать и циклом. Хоть секундные, хоть минутные.
Спасибо за замечание, изменю формулировку.
Такие задержки грамотнее делать на таймере и длинных циклов лучше избегать.
Если речь о мигании светодиодом в элементарном проекте, можно, конечно же, делать с помощью цикла. Или на вложенных циклах.
photon_62
Jun 26 2010, 11:33
я все понимаю! просто я только учусь и вижу только то что в книжках написано. Просто хотелось увидеть кто как в жизни делает
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.