Подскажите функцию задержки на языке си
-
lelik-balabolik
- Первый раз сказал Мяу!
- Сообщения: 28
- Зарегистрирован: Чт май 14, 2015 22:18:43
Подскажите функцию задержки на языке си
Привет. задачка. нужна функция временной задержки на языке си для мк атмега 8. _delay_ms() не подходит поскольку она работает только с константой, нужна функция работающая с переменными.
Re: Подскажите функцию задержки на языке си
lelik-balabolik писал(а):_delay_ms() не подходит поскольку она работает только с константой, нужна функция работающая с переменными
Код: Выделить всё
void delay(int ms) {
for (;ms;ms--)
_delay_ms(1);
}Платы для HLDI - установки лазерной засветки фоторезиста.
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com
-
lelik-balabolik
- Первый раз сказал Мяу!
- Сообщения: 28
- Зарегистрирован: Чт май 14, 2015 22:18:43
Re: Подскажите функцию задержки на языке си
не совскм понимаю как это работает
прокомментируйте пож-ста
прокомментируйте пож-ста
Re: Подскажите функцию задержки на языке си
Да вроде примитивнее спичечного коробка - объявляется функция delay, принимающая в качестве аргумента целочисленную переменную ms, в которой находится требуемое количество миллисекунд задержки. В теле функции в цикле for переменная ms декрементируется на 1 при каждой итерации до тех пор пока не обнулится, также при этом осуществляется задержка на 1 мс. - _delay_ms(1).lelik-balabolik писал(а):не совскм понимаю как это работает
То есть, передав, например, в ms значение 1000, Вы прокрутите цикл 1000 раз, каждый раз вызывая задержку в 1 мс.
Платы для HLDI - установки лазерной засветки фоторезиста.
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com
-
lelik-balabolik
- Первый раз сказал Мяу!
- Сообщения: 28
- Зарегистрирован: Чт май 14, 2015 22:18:43
Re: Подскажите функцию задержки на языке си
Ладно. зайду с другого конца. у меня есть переменная int а=0. при каких то условиях я её увеличиваю (например если pinc1= 1), далее. Хочу что бы длительность свечения светодиода на pinb1 увеличилась на 1 мс. как привязать _delay_ms () к а? понимаю что глупости спрашиваю Б я совсем пока чайник.
Re: Подскажите функцию задержки на языке си
Раньше Вы писали - "_delay_ms() не подходит поскольку она работает только с константой" - что должно означать, что где-то в тексте Вашей программы Вы вызываете _delay_ms(а) и получаете ошибк(у\и), так?lelik-balabolik писал(а):как привязать _delay_ms () к а?
Если так, тогда в начале Вашей программы вставляете (с новой строки):
Код: Выделить всё
void delay(int ms) {
for (;ms;ms--)
_delay_ms(1);
}А все _delay_ms(а) заменяете на delay(а)
Платы для HLDI - установки лазерной засветки фоторезиста.
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com
Re: Подскажите функцию задержки на языке си
С чего бы функции "работать только в константой"?
Если нужно увеличить задержку после входа в эту функцию (по прерыванию, например), то нужно дождаться ее завершения, и только после этого сделать еще один delay.
Либо писать свою функцию, которая будет принимать указатель на счетчик, который можно будет инкрементить извне.
Если нужно увеличить задержку после входа в эту функцию (по прерыванию, например), то нужно дождаться ее завершения, и только после этого сделать еще один delay.
Либо писать свою функцию, которая будет принимать указатель на счетчик, который можно будет инкрементить извне.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Подскажите функцию задержки на языке си
с того, что _delay_ms на самом деле макрос, оформленный, как функция. параметр у него подставляется в выражение, вычисляющее дробное значение. если параметр будет не константа, а переменная, это будет порождать код вычислений с float, в итоге разрастание объема кода и несоответствие задержки ожиданию. если параметр константа, то все вычисляется на этапе компиляции и в итоге получается ровно то, что необходимо.E.S. писал(а):С чего бы функции "работать только в константой"?
знать предмет надо, если пытаешься отвечать на вопросы.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Подскажите функцию задержки на языке си
Поделитесь своими знаниями с Atmel, в документации про это не слова: http://www.atmel.com/webdoc/AVRLibcRefe ... 5e9d3.html
Re: Подскажите функцию задержки на языке си
Не спорьте, ибо Вы неправы сейчас.E.S. писал(а):Поделитесь своими знаниями с Atmel
Платы для HLDI - установки лазерной засветки фоторезиста.
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com
Re: Подскажите функцию задержки на языке си
lelik-balabolik писал(а):не совскм понимаю как это работает
прокомментируйте пож-ста
Может так будет понятнее:
Код: Выделить всё
void delay(int ms)
{
while (ms--)
_delay_ms(1);
}
С компиляторами для AVR не работал, но если _delay_ms - макрос, то возможно, нужно так:
Код: Выделить всё
void delay(int ms)
{
while (ms--)
{
_delay_ms(1);
}
}
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Подскажите функцию задержки на языке си
без разницыshindax писал(а):но если _delay_ms - макрос, то возможно, нужно так:
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Подскажите функцию задержки на языке си
lelik-balabolik писал(а):Ладно. зайду с другого конца. у меня есть переменная int а=0. при каких то условиях я её увеличиваю (например если pinc1= 1), далее.
Думаю лучше бы сразу начинать с таймерами работать. Заведите себе таймер, который, например, будет отчитывать системное время в мс или секундах, и сравнивайте текущее время с запомненным при включении светодиода.
Re: Подскажите функцию задержки на языке си
Действительно. Человек не в состоянии функцию в свой код вставить, ему таймеры в самую точку.ks0 писал(а):Думаю лучше бы сразу начинать с таймерами работать
Платы для HLDI - установки лазерной засветки фоторезиста.
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com
-
lelik-balabolik
- Первый раз сказал Мяу!
- Сообщения: 28
- Зарегистрирован: Чт май 14, 2015 22:18:43
Re: Подскажите функцию задержки на языке си
Ребята вы меня окончательно запутали. Я уже дымлюсь. и про таймеры действительно в самую точку. вот совсем просто спрашиваю . есть переменная int a=0 её я увеличиваю или уменьшаю двумя кнопками. вот хочу чтобы _delay_ms(a) работало. вот на примере переменной "а" подскажите. и можно ли в _delay_ms( как то сюда подставить выражение, например (1000*а)).
Re: Подскажите функцию задержки на языке си
Ещё немного и начнёт казаться, что Вы нас троллите - http://radiokot.ru/forum/viewtopic.php?p=2451178#p2451178 - уже даже расписано по шагам.lelik-balabolik писал(а):хочу чтобы _delay_ms(a) работало. вот на примере переменной "а" подскажите
Или Вы совсем не умеете объяснять, что требуется.
Платы для HLDI - установки лазерной засветки фоторезиста.
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com
Re: Подскажите функцию задержки на языке си
Про таймеры забудь, пока с этим не разберёшься, да кстати товарищ shindax уже ответил на твой вопрос, а именно:
Код: Выделить всё
void delay(int ms)
{
while (ms--) // тут твоё значение а
_delay_ms(1000); //вот тут множитель на 1000 как и просил
}-
lelik-balabolik
- Первый раз сказал Мяу!
- Сообщения: 28
- Зарегистрирован: Чт май 14, 2015 22:18:43
Re: Подскажите функцию задержки на языке си
Спасибо. Я наконец разобрался. По ночам мозги не работают. Кому пива выслать пишите куда. Вышлю.
Re: Подскажите функцию задержки на языке си
Платы для HLDI - установки лазерной засветки фоторезиста.
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com
-
lelik-balabolik
- Первый раз сказал Мяу!
- Сообщения: 28
- Зарегистрирован: Чт май 14, 2015 22:18:43
Re: Подскажите функцию задержки на языке си
грешно глумиться над новичками