Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
 
inquisitor
15 / 6 / 16
Регистрация: 22.12.2015
Сообщений: 1,763
1

Как работает функция задержки на ассемблере?

20.12.2018, 21:05. Просмотров 254. Ответов 20
Метки нет (Все метки)

Следующая программа зажигает светодиод на 1000 милисекунд и на такое же время тушит.
Я хочу универсальную функцию delay_1_sec,что задержка была на указанное мной число милисекунд.Кто занет пишите.

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/*
 * AssemblerApplication1.asm
 *
 *  Created: 20.12.2018 19:45:22
 *   Author: ????? ????
 */ 
 
 
 Start:             ;int main(void)
sbi DDRC,0          ;DDRC=0xFF;
main_loop:          ;while(1)
sbi PORTC,0         ;PORTC = 0xFF;
rcall delay_1_sec   ;_delay_ms(1000);
cbi PORTC,0          ;PORTC = 0x00;
rcall delay_1_sec   ;_delay_ms(1000);
rjmp main_loop
 
delay_1_sec:
    ldi r18, 41
    ldi r19, 150
    ldi r20, 128
 delay_1_sec_loop:
    dec r20
    brne delay_1_sec_loop   ;Перейти если не равно
    dec r19
    brne delay_1_sec_loop
    dec r18
    brne delay_1_sec_loop
ret
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.12.2018, 21:05
Ответы с готовыми решениями:

Создать на ассемблере функцию задержки в микросекундах
Помогите пожалуста. Нужна функция задержки времени (0-100 микросекунд) никак найти не могу именно...

Функция задержки в МК AVR
Речь идёт о программировании микроконтроллеров с помощью C/C++. Очень нужна библиотека,...

ATmega8 странно работает процедура задержки.
Здравствуйте, уважаемые. Подскажите, пожалуйста, начинающему. Вообщем, такая ситуация: ATmega8 +...

v-usb, как работает функция usbFunctionRead
Помогите разобраться в алгоритме работы функции usbFunctionRead упомянутой в этой статье. Я так...

Функция задержки
Пробую для эксперимента написать чтоб при нажатии на кнопку происхдила задержка картинки, но при...

20
Rius
Эксперт .NET
5257 / 3450 / 838
Регистрация: 25.05.2015
Сообщений: 10,528
Записей в блоге: 11
Завершенные тесты: 4
20.12.2018, 21:50 2
Цитата Сообщение от inquisitor Посмотреть сообщение
Как работает функция задержки на ассемблере?
Асм авр-ки не знаю, но похоже на обычный цикл, подогнанный под количество тактов в секунду.
1
Voland_
1679 / 1024 / 97
Регистрация: 04.01.2010
Сообщений: 3,436
20.12.2018, 22:44 3
Цитата Сообщение от inquisitor Посмотреть сообщение
Я хочу универсальную функцию delay_1_sec,что задержка была на указанное мной число милисекунд.
Лучше всего сделать на таймере. Делаете старт таймера, без прерываний, с тиком, который легко посчитать в миллисекунды. Ну, и в цикле ожидаете сработку события таймера. Потом оборачиваете этот код в еще один цикл, который будет считать количество "миллисекунд". Для точности придется конечно подобрать цикл таймера, если нужно очень точно.

Assembler
1
sbi DDRC,0          ;DDRC=0xFF;
^^ это работает совсем не так, как написано в комментарии. Хотя код работать будет, да.

PS: не забудьте об инициализации стека...
1
inquisitor
15 / 6 / 16
Регистрация: 22.12.2015
Сообщений: 1,763
21.12.2018, 00:13  [ТС] 4
Цитата Сообщение от Voland_ Посмотреть сообщение
Лучше всего сделать на таймере. Делаете старт таймера, без прерываний, с тиком, который легко посчитать в миллисекунды. Ну, и в цикле ожидаете сработку события таймера. Потом оборачиваете этот код в еще один цикл, который будет считать количество "миллисекунд". Для точности придется конечно подобрать цикл таймера, если нужно очень точно.
Хочется пример
0
Ethereal
5200 / 1943 / 251
Регистрация: 17.02.2013
Сообщений: 2,882
21.12.2018, 05:22 5
Частоту кварца мы должны телепатически определить ?
0
Voland_
1679 / 1024 / 97
Регистрация: 04.01.2010
Сообщений: 3,436
21.12.2018, 13:44 6
Цитата Сообщение от inquisitor Посмотреть сообщение
Хочется пример
вот, супер-классный пример, как это делается.

Добавлено через 51 секунду
Цитата Сообщение от Ethereal Посмотреть сообщение
Частоту кварца мы должны телепатически определить ?
а вдруг его нет?
0
liv
859 / 724 / 154
Регистрация: 07.10.2015
Сообщений: 2,598
Завершенные тесты: 1
21.12.2018, 14:30 7
Цитата Сообщение от Voland_ Посмотреть сообщение
а вдруг его нет?
Все равно есть Пусть внутренний, но строго определенный
0
inquisitor
15 / 6 / 16
Регистрация: 22.12.2015
Сообщений: 1,763
21.12.2018, 15:03  [ТС] 8
Цитата Сообщение от Voland_ Посмотреть сообщение
вот, супер-классный пример, как это делается.
Самый плохой пример,который я видел.
0
COKPOWEHEU
1169 / 827 / 197
Регистрация: 09.09.2017
Сообщений: 3,567
21.12.2018, 15:24 9
Цитата Сообщение от liv Посмотреть сообщение
Все равно есть Пусть внутренний
Где же это вы видели контроллер во встроенным кварцем? С RC-генератором их полно, но с кварцем не видел.
А вообще, у AVR возможно несколько источников тактирования: внешний кварц, внешняя RC-цепочка, внутренняя RC-цепочка, внешний тактовый сигнал.
Это не отменяет того, что частота тактирования нам неизвестна.
0
liv
859 / 724 / 154
Регистрация: 07.10.2015
Сообщений: 2,598
Завершенные тесты: 1
21.12.2018, 15:35 10
COKPOWEHEU, я ж не спорю. Я имел в виду внутренний источник тактирования. С точки зрения программы неважно, каков источник. Главное, чтобы знать чему равна частота, а пока она нам неизвестна.
0
Ethereal
5200 / 1943 / 251
Регистрация: 17.02.2013
Сообщений: 2,882
21.12.2018, 16:23 11
Цитата Сообщение от inquisitor Посмотреть сообщение
Самый плохой пример,который я видел.
Так ты частоту тактирования назовешь или нет ? Без нее дело все равно не сдвинется с места.
0
liv
859 / 724 / 154
Регистрация: 07.10.2015
Сообщений: 2,598
Завершенные тесты: 1
21.12.2018, 16:27 12
inquisitor, да и контроллер не мешало бы знать...
0
COKPOWEHEU
1169 / 827 / 197
Регистрация: 09.09.2017
Сообщений: 3,567
21.12.2018, 17:47 13
Как раз контроллер для этого не важен
0
liv
859 / 724 / 154
Регистрация: 07.10.2015
Сообщений: 2,598
Завершенные тесты: 1
21.12.2018, 18:00 14
COKPOWEHEU, речь идет об использовании таймера, а имена регистров и биты могут быть разными.
Возьмите, к примеру, ATtiny15L и ATmega48. У одного TCCR0, у другого TCCR0A, TCCR0B
0
COKPOWEHEU
1169 / 827 / 197
Регистрация: 09.09.2017
Сообщений: 3,567
21.12.2018, 22:07 15
это если на таймере, но кто будет делать простую задержку на таймере
0
liv
859 / 724 / 154
Регистрация: 07.10.2015
Сообщений: 2,598
Завершенные тесты: 1
21.12.2018, 22:37 16
COKPOWEHEU, разумеется, для простой задержки надо знать только частоту

Добавлено через 3 минуты
Я обычно занимает проектами, которые сродни системам реального времени. Поэтому ждать 1 сек - непозволительная роскошь

Добавлено через 7 минут
И даже ожидание 1мс недопустимо ...
0
COKPOWEHEU
1169 / 827 / 197
Регистрация: 09.09.2017
Сообщений: 3,567
22.12.2018, 09:12 17
но там используются не "тупые" задержки как хочет ТС, а постоянное переключение процессов.
В более простом случае - конечный автомат.
В еще более простом - глобальный отсчет времени и синхронизация с ним.
0
Voland_
1679 / 1024 / 97
Регистрация: 04.01.2010
Сообщений: 3,436
22.12.2018, 10:34 18
Цитата Сообщение от liv Посмотреть сообщение
Все равно есть Пусть внутренний, но строго определенный
Вы немного спутали кварц с генератором. В случае внутреннего генератора или генератора с внешней RC, кварц не используется.
Цитата Сообщение от inquisitor Посмотреть сообщение
Самый плохой пример,который я видел.
Самый хороший пример в даташите на микроконтроллер. Откройте ДШ на ваш МК, прочитайте о его таймере, регистрах управления. Определитесь, как можно записать в них данные.

PS: даже в даташитах есть простые примеры кода. Вы просто внимательнее просмотрите контент - там не все так сложно.

Добавлено через 4 минуты
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
там используются не "тупые" задержки как хочет ТС, а постоянное переключение процессов.
Постоянное переключение делается на прерываниях. То есть задачи так и смотрятся, как обычные интервалы (с задержками), с какими-то действиями между ними.
Поэтому, ничего не вижу плохого в "тупых задержках". Есть задачи в которых нет смысла использовать RTOS, ну или городить схемы с таймлайнами. От этого простой код лучше не станет.
0
liv
859 / 724 / 154
Регистрация: 07.10.2015
Сообщений: 2,598
Завершенные тесты: 1
22.12.2018, 11:19 19
Цитата Сообщение от Voland_ Посмотреть сообщение
Вы немного спутали кварц с генератором
Не спутал, а обобщил. Для программы без разницы, кварц ли, генератор ли. Главное - знать конкретную цифру.

И похоже, для ТС, на данном этапе, вполне достаточно простой программной задержки...
Просто надо четко увязать циклы с частотой.
0
pyzhman
786 / 481 / 65
Регистрация: 15.05.2012
Сообщений: 2,728
22.12.2018, 12:12 20
Цитата Сообщение от inquisitor Посмотреть сообщение
на указанное мной
Где планируется указывать?
0
22.12.2018, 12:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.12.2018, 12:12

функция задержки
Подскажите, как называется функция задержки? например в делфи delay(1000)-подождать секунду, а в...

Функция задержки времени
Здравствуйте! Пишу программу на Visual Studio C++, и возник вопрос. Как сделать допустим вывод...

Функция задержки в stm8 iar - моя реализация delay_us
Когда я начинал програмить на stm8 в среде iar, мне жутко не хватало задержек по типу привычных...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru