Показано с 1 по 3 из 3

Тема: функция задержки delay_us();

  1. #1
    Без позывного
    Регистрация
    21.01.2006
    Сообщений
    28
    Поблагодарили
    0
    Поблагодарил
    0

    функция задержки delay_us();

    здравствуйте всем, в общем дело состоит вот в чем. Требуется создать задержку с изменяющейся величиной в микросекундах, вот пример:
    1. a=1000;
    2. delay_us(a);
    3. здесь какой то цикл;
    4. a--;
    5. go to 2;
    пробовал так же со стандартной функцией, но она требует только числа, переменные не принимает. Пишу прогу в компиляторе CodeVisionAVR. Помогите кто чем сможет, заранее благодарен за помощь.
    почтовый адрес: babincev@vi-mail.ru


  2. #2
    Very High Power Аватар для LY1CE
    Регистрация
    07.06.2002
    Адрес
    Каунас
    Возраст
    72
    Сообщений
    1,610
    Поблагодарили
    178
    Поблагодарил
    154
    Во первых для этого надо знать тактовую частоту.
    Во вторых такую функцию лучше писать на ассемблере, т.к. на С определить длительность выполнения цикла сложнее (надо анализировать ассемблерный листинг и считать такты). Да еще и оптимизация кода может преподнести неожиданности.
    В третьих, получить разрешение в 1 микросекунду пожалуй можно будет только при довольно высокой тактовой частоте.
    Да и то, неизбежно будет присутствовать "мертвое время" входа и возврата из функции.
    В общем случае функция задержки на С может выглядет так:

    delay_us(char a)
    {while (a--)
    { // здесь делаем что-то, чтобы занять время
    // одного дискрета задержки.
    // Или не делаем вообще ничего, тогда дискрет задержки
    // будет минимально возможным.
    }
    }

    Но точность высокой не будет из за упомянутого "мертвого времени".

  3. #3
    Без позывного
    Регистрация
    01.11.2006
    Сообщений
    4
    Поблагодарили
    0
    Поблагодарил
    0
    я бы для этой цели использовал прерывание от одного из таймеров, меняя Кд таймера или предделителя можно получить все что угодно..., и перед использованием функции delay_us необходимо запрещать все прерывания

Похожие темы

  1. Функция TOT в Alinco DR-600
    от RW6MIR в разделе УКВ: ALINCO
    Ответов: 0
    Последнее сообщение: 03.02.2005, 14:32
  2. Ответов: 2
    Последнее сообщение: 05.03.2004, 09:39
  3. Проектирование схемы задержки.
    от Sprinter в разделе Радиолюбительские технологии
    Ответов: 0
    Последнее сообщение: 03.03.2004, 08:45

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
Похоже, что вы используете блокировщик рекламы :(
Форум QRZ.RU существует только за счет рекламы, поэтому мы были бы Вам благодарны если Вы внесете сайт в список исключений!
как отключить
×
Рейтинг@Mail.ru
eXTReMe Tracker
Яндекс.Метрика


Похоже, что вы используете блокировщик рекламы :(
Форум QRZ.RU существует только за счет рекламы, поэтому мы были бы Вам благодарны если Вы внесете сайт в список исключений!
как отключить
×