реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> AVR assembler задержки
photon_62
сообщение Jun 25 2010, 21:39
Сообщение #1





Группа: Участник
Сообщений: 4
Регистрация: 25-06-10
Пользователь №: 58 150



кто как делает задержки и как правильно и точно подсчитать время?
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 25 2010, 21:51
Сообщение #2


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Длительные задержки - по таймеру.
Короткие :

Код
wait:
    dec rn
     brne wait


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

nop
nop

Количество тактов за сколько выполняется та или иная команда можно найти в AVR Instruction Set Reference.
Go to the top of the page
 
+Quote Post
x736C
сообщение Jun 25 2010, 21:57
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



Здравствуйте.
Я делаю на таймере примерно так:

Код
.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


Задержки по-простому см. выше.

Сообщение отредактировал x736C - Jun 25 2010, 22:00
Go to the top of the page
 
+Quote Post
photon_62
сообщение Jun 25 2010, 22:14
Сообщение #4





Группа: Участник
Сообщений: 4
Регистрация: 25-06-10
Пользователь №: 58 150



я только учусь. Допустим нужна 1с задержка как правильне ее реализовать?
Go to the top of the page
 
+Quote Post
x736C
сообщение Jun 25 2010, 22:33
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



Такие задержки нужно делать на таймере.

В общих чертах.
Необходимо правильно загрузить таймер. Если число вами жестко определено и в процессе работы не меняется, то расчет лучше делать средствами самой среды разработки, которая может посчитать необходимое для таймера число, как в приведенном мной примере.
Этим числом вы загружаете соответствующий регистр таймера, разрешаете счет, разрешаете прерывания. Таймер с определенной вами скоростью начинает отсчитывать определенное количество тактов, соответствующее нужному вам временному интервалу.
Время вызова обработчика прерывания относительно начала счета (или загрузки таймера, если счет в этот момент был уже активирован) совпадет с необходимым вам временным интервалом с точностью до разрешающей способности таймера, которая будет зависеть от частоты тактирования (fClk / Pre).

Сообщение отредактировал x736C - Jun 25 2010, 22:39
Go to the top of the page
 
+Quote Post
photon_62
сообщение Jun 26 2010, 05:29
Сообщение #6





Группа: Участник
Сообщений: 4
Регистрация: 25-06-10
Пользователь №: 58 150



Цитата(x736C @ Jun 26 2010, 02:33) *
Такие задержки нужно делать на таймере.


спасибо! а можеш пример привести для полной ясности

Сообщение отредактировал rezident - Jun 26 2010, 21:02
Причина редактирования: Нарушение п.3.4 Правил форума.
Go to the top of the page
 
+Quote Post
x736C
сообщение Jun 26 2010, 09:06
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



Можешь. Смотрите выше.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 26 2010, 10:32
Сообщение #8


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(x736C @ Jun 26 2010, 01:33) *
Такие задержки нужно делать на таймере.
Не обязательно. Одну задержку, скажем, "после включения на секунду зажечь все светодиоды чтобы показать их рабоспособность", т.е. задержки, не требующие большой точности, вполне можно делать и циклом. Хоть секундные, хоть минутные.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
x736C
сообщение Jun 26 2010, 10:41
Сообщение #9


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



Спасибо за замечание, изменю формулировку.
Такие задержки грамотнее делать на таймере и длинных циклов лучше избегать.
Если речь о мигании светодиодом в элементарном проекте, можно, конечно же, делать с помощью цикла. Или на вложенных циклах.

Сообщение отредактировал x736C - Jun 26 2010, 10:42
Go to the top of the page
 
+Quote Post
photon_62
сообщение Jun 26 2010, 11:33
Сообщение #10





Группа: Участник
Сообщений: 4
Регистрация: 25-06-10
Пользователь №: 58 150



я все понимаю! просто я только учусь и вижу только то что в книжках написано. Просто хотелось увидеть кто как в жизни делает
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 23:48
Рейтинг@Mail.ru


Страница сгенерированна за 0.01414 секунд с 7
ELECTRONIX ©2004-2016