Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AVR assembler задержки
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
photon_62
кто как делает задержки и как правильно и точно подсчитать время?
defunct
Длительные задержки - по таймеру.
Короткие :

Код
wait:
    dec rn
     brne wait


Очень короткие

nop
nop

Количество тактов за сколько выполняется та или иная команда можно найти в AVR Instruction Set Reference.
x736C
Здравствуйте.
Я делаю на таймере примерно так:

Код
.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
я только учусь. Допустим нужна 1с задержка как правильне ее реализовать?
x736C
Такие задержки нужно делать на таймере.

В общих чертах.
Необходимо правильно загрузить таймер. Если число вами жестко определено и в процессе работы не меняется, то расчет лучше делать средствами самой среды разработки, которая может посчитать необходимое для таймера число, как в приведенном мной примере.
Этим числом вы загружаете соответствующий регистр таймера, разрешаете счет, разрешаете прерывания. Таймер с определенной вами скоростью начинает отсчитывать определенное количество тактов, соответствующее нужному вам временному интервалу.
Время вызова обработчика прерывания относительно начала счета (или загрузки таймера, если счет в этот момент был уже активирован) совпадет с необходимым вам временным интервалом с точностью до разрешающей способности таймера, которая будет зависеть от частоты тактирования (fClk / Pre).
photon_62
Цитата(x736C @ Jun 26 2010, 02:33) *
Такие задержки нужно делать на таймере.


спасибо! а можеш пример привести для полной ясности
x736C
Можешь. Смотрите выше.
Сергей Борщ
Цитата(x736C @ Jun 26 2010, 01:33) *
Такие задержки нужно делать на таймере.
Не обязательно. Одну задержку, скажем, "после включения на секунду зажечь все светодиоды чтобы показать их рабоспособность", т.е. задержки, не требующие большой точности, вполне можно делать и циклом. Хоть секундные, хоть минутные.
x736C
Спасибо за замечание, изменю формулировку.
Такие задержки грамотнее делать на таймере и длинных циклов лучше избегать.
Если речь о мигании светодиодом в элементарном проекте, можно, конечно же, делать с помощью цикла. Или на вложенных циклах.
photon_62
я все понимаю! просто я только учусь и вижу только то что в книжках написано. Просто хотелось увидеть кто как в жизни делает
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.