Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств
212 Микроконтроллеры AVR от азов программирования... мисты стараются применять подобный прием в каждой подпрограмме, независимо от того, полезен он в данном конкретном случае или нет. Не исключена ситуация, когда в процессе доработки программы вам все же придется повторно использовать какие-либо регистры. Заранее обеспечить корректную работу вашей подпрограммы — это хороший стиль программирования. В соответствии с алгоритмом (рис. 5.5) подпрограмма задержки в нашей программе вызывается два раза. Первый раз — после окончания цикла ожидания нажатия кнопки (строка 20). Второй раз — после окон чания цикла ожидания отпускания (строка 30). Программа на языке СИ С программой на языке СИ мы поступим так же, как с программой на Ассемблере. Мы просто возьмем предыдущий вариант (листинг 5.4) и вставим в него задержки. Для языка СИ добавить задержку в программу гораздо проще, чем для Ассемблера. Для того, чтобы ввести задержку, мы воспользуемся стандартной библиотекой процедур задержки. Эта библиотека входит в состав программного комплекса CodeVisionAVR. Название этой библиотеки delay . Һ. Посмотрите на новый вариант программы (листинг 5.6). В строке 2 мы присоединяем библиотеку delay . Һ к тексту нашей программы. Так же, как в строке 1 мы присоединили файл описания микросхемы. После присоединения библиотеки в нашем распоряжении появляется несколько функций, реа лизующих задержку. Воспользуемся одной из них. Имя этой функции delay_us (задержка в микросекундах). Она обеспечивает задержку в любое целое количество микросекунд. Количество микросекунд задержки передается в функцию в качестве параметра. В строке 34 программы (листинг 5.6) функция задержки вызывается первый раз. Она обеспечивает задержку на 200 мкс после окончания цикла ожидания нажатия кнопки. В строке 40 такая же задержка вызывается после окончания цикла ожидания отпускания кнопки. Теперь немного поговорим о функции delay_us. Данная функция обеспечивает формирование задержки при помощи бесконечного цикла. Такого же цикла, который мы применяли в программе на Ассемблере. Но теперь нам не нужно описывать цикл в подробностях. Достаточно при менить готовую функцию. В процессе трансляции пустой цикл формируется автоматически. Начальное значение высчитывается, исходя из заданной величины задержки и частоты тактового генератора, указанной при создании про екта.
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==