хочу сделать задержку от 1с и более в курсе для начинающих нашел такой пример. Прошу помогите разобраться в нём. Меня мучает более всеговопрос откуда взялась цифра 185 и что делать если к примеру я хочу использовать кварц 4 MГц. Заранее благодарен.
unsigned short i, j, k, ms; // объявляем переменные ms = 1500; for (i = 0; i < ms; i++) // главный цикл формирования задержки { for (j = 0; j < 185; j++) // вложенный цикл формирования задержки { k++; // произвольное действие } }
Данный пример реализует задержку длительностью в полторы секунды (для кварца 8 МГц), которая определяется значением переменной ms.
То есть если я всё правильно понял в курсе, то для того чтоб сделать задержку в 1,5 секунды надо написать delay_ms(1500), а для задержки в 2 секунды delay_ms(2000) так?. PS прогу я пишу на CVAVR
st354 писал(а):То есть если я всё правильно понял в курсе, то для того чтоб сделать задержку в 1,5 секунды надо написать delay_ms(1500), а для задержки в 2 секунды delay_ms(2000) так?. PS прогу я пишу на CVAVR
Да. но в начале проги надо подключить библу-хидер delay.h Там же в курсе написано.
А пример из какго курса вы в начале привели ?Кто так делать учит ? интересно ...
ну библу-хидер само сабой) а нужно ли после #define <delay.h> писать #define F_CPU 4000000? всё это вычитал на сайте myrobot.ru и еще где то встречалось. AVR123 спасибо огромное!!!!
/***************** Функция задержки ****************/ void delay(unsigned short ms) // Минимальная задержка с кварцем 8 МГц - 1 мс { unsigned short i, j, k; // объявляем переменные
for (i=0; i<ms; i++) // главный цикл формирования задержки for (j=0; j<185; j++) // вложенный цикл формирования задержки k++; // произвольное действие }
----------------------------------------------------------------------------- // Обработка прерывания от переднего бампера (INT0 = PD2) //------------------------------------------------------------------------------ interrupt [EXT_INT0] void ext_int0_isr(void) { if(this_move==R) go(L); if(this_move==L) go(R); else go(B); [b]Delay_ms(250); // отъезд в течение 2.5 х 2 сек[/b] Delay_ms(250); this_move=B; } и еще вот здесь // разрешаем прерывания по входам int0, int1 [b]outp((1<)|(1<), GIMSK);[/b] // запрос на прерывание по спадающим фронтам на входах int0 и int1 outp((0<)|(1<)|(0<)|(1<), MCUCR);
// разрешаем прерывания #asm("sei")
заранее благодарен
Добавлено спустя 3 минуты 17 секунд: #define <delay.h> вписал хотя взял её из WinAVR-20080610
Для какого компилятора? Тут вижу характерные для старого GCC и для CVAVR конструкции. И определения того, на что ругается компилятор не вижу (он тоже, вот и ругается)
Добавлено спустя 9 минут 49 секунд: outp(); это устаревший макрос, он помогал старому AVR GCC компилировать более оптимальный код. Используйте простое присвоение вместо него.
В delay.h нет delay_ms() и т.д., есть _delay_ms() и прочие. Внимательно прочтите, какие ограничения имеет функция _delay_ms(); (прямо в заголовочнике, в комментарии к функции)