Разработка, производство и продажа радиоэлектронной аппаратуры
|
Карта сайта
|
Пишите нам
|
В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:
jobsmp@pochta.ru
Телесистемы
|
Электроника
|
Конференция «Микроконтроллеры и их применение»
Tiny 2313 микросекундная пауза
Отправлено
indepth
29 апреля 2008 г. 01:44
Ка создать функцию паузы под тини 2313
компилятор C - CodeVisionAVR 1.25.7
c шагом 1 микросекунда но аргументом чтобы была переменная а не конетсанта
сейчас пришло пока в голову только вот так
void Mydelay(long int msec)
{
int i;
for (i=1; i<msec; i++ )
{
delay_us(1);
}
};
--
есть более лучшее решение ?
Составить ответ
|
Вернуться на конференцию
Ответы
в PICе например зависимую от переменной микросекундную задержку можно сделать сложив переменную со счётчиком адреса. Запас поле NOP-ов, и по переменной "прыгнул" - дальше прыгнул - короче задержка, дискрет по времени равен 1 NOPу (1 мкс при 4Мгц у обычных)... Юсаю такое много лет
—
basilmak
(29.04.2008 14:18:20
82.142.173.231
,
пустое
)
Таймер задействовать? Через нужное время будет прерывание.
—
ВВС
(29.04.2008 02:06:22
92.36.18.27
,
пустое
)
Дык в качестве аргумента "delay_us()" и переменную можно юзать. Или 16 бит не устраивает?
—
Гудвин
(29.04.2008 02:00:31
89.232.124.29
,
пустое
)
в CVAVR нельзя, а в WinAVR и IAR можно ?
—
Labib
(29.04.2008 10:35:12
85.140.168.239
,
пустое
)
В IAR нельзя
—
war4one
(29.04.2008 14:03:27
192.168.0.15, 81.30.216.72
,
пустое
)
Почему в IAR нельзя? Я делаю так:
—
DC
(29.04.2008 14:33:18
81.30.193.79
, 298 байт)
а разрешение таки mS или μS ?
—
DASM
(29.04.2008 02:05:15
212.58.208.91, 212.58.192.14
,
пустое
)
Ответ:
—
indepth
(29.04.2008 02:02:51
195.91.143.142
, 111 байт)
Пардон, пробовал delay_ms()... В случае us действительно только константа. Оно и понятно... Ваша подпрограмма будет вносить дополнительные задержки. Если уж нужны точные микросекундные интервалы, лучше задействовать таймер. Иначе придется опытным путем подбирать...
—
Гудвин
(29.04.2008 02:13:24
89.232.124.29
,
пустое
)
ну таймер юзай... а так вообще нормальное решение, delay_us макрос походу, раз ругается на const expression
—
DASM
(29.04.2008 02:06:18
212.58.208.91, 212.58.192.14
,
пустое
)
Да. В зависимости от величины задержки компилятор пересчитывает в свое, зависящее от тактовой, и подставляет нужный макроc:
—
Гудвин
(29.04.2008 02:19:53
89.232.124.29
, 302 байт)
Скорее всего эта самая delay_us(1) в N-ное кол-во NOPов компилируется. Поэтому и требуется константа, что для переменной весьма точно такую задержку сформировать тяжело.
—
rezident
(29.04.2008 02:06:8
77.43.219.195
,
пустое
)
В IAR в NOP-ы она компилируется только для малых задержек. Иначе - цикл.
—
Леонид Иванович
(29.04.2008 02:41:34
87.252.227.57
,
пустое
)
Я не утверждал, а лишь предположил. 1мкс на 4 МГц это всего 4 такта. Цикл тут не получится.
—
rezident
(29.04.2008 02:44:29
77.43.219.195
,
пустое
)
Вот что генерится:
—
Леонид Иванович
(29.04.2008 02:52:29
87.252.227.57
, 316 байт)
а какая библиотека должна быть в ключена в IAR ?
—
Labib
(29.04.2008 10:40:45
85.140.168.239
,
пустое
)
Да мне-то понятно. Главное чтобы вопрошающий понял отчего там константа требуется, а не переменная.
—
rezident
(29.04.2008 02:56:4
77.43.219.195
,
пустое
)
А это довольно интересное упражнение, сделать задержку в циклах, задаваемую переменной. Вот один из примеров:
—
Леонид Иванович
(29.04.2008 03:08:23
87.252.227.57
, 368 байт)
почему ? dec brne - 3 такта.
—
DASM
(29.04.2008 02:50:36
212.58.208.91, 212.58.192.14
,
пустое
)
Дык все равно одним NOP-ом дополнить нужно :)
—
rezident
(29.04.2008 02:55:8
77.43.219.195
,
пустое
)
Отправка ответа
Имя*:
Пароль:
E-mail:
Тема*:
Сообщение:
Ссылка на URL:
URL изображения:
если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
умножьте 2 на три:
Перейти к списку ответов
|
Конференция
|
Раздел "Электроника"
|
Главная страница
|
Карта сайта
Web
telesys.ru