Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств

Шаг 5. Переходим непосредственно к разработке устройств и программ 217 ряется 255 раз. Число 255 — это самое большое значение, которое можно записать в один восьмиразрядный регистр. Как уже говорилось, задержка, формируемая таким циклом, может быть лишь чуть больше, чем 200 мкс. Для увеличения задержки организован второй цикл. Второй цикл использует регистр 1оор2. Перед началом цикла в этот регистр записыва ­ ется число 100 (строка 34). Цикл организован при помощи оператора dec (строка 35), который последовательно уменьшает содержимое регистра 1оор2 оператора сравнения breq (строка 36), проверяет, не достигло ли значение регистра нуля. Пока в loop 2 не равно нулю, выполняется тело цикла (строки 37 — 40). В тело второго цикла включен первый цикл, использующий регистр loopl. Таким образом, цикл loopl выполняется при каждом проходе цикла 1оор2. Общее суммарное количество проходов обоих циклов будет равно 255x100 = 25500. Но и этого недостаточно для создания нужной задержки. Даже если начальное значение для 1оор2 мы выберем равным 255, и тогда мы не получим искомые 200 мс. Поэтому вокруг первых двух циклов органи ­ зован третий. Третий цикл использует регистр ІоорЗ и построен точно так же, как второй. Перед началом работы в регистр ІоорЗ записыва ­ ется число 15 (строка 31). Выполнение цикла обеспечивают оператор dec (строка 32) и оператор сравнения (строка 33). При каждом проходе цикла ІоорЗ выполняются вложенные циклы loopl и 1оор2. В резуль ­ тате общее количество проходов строенного цикла возрастает еще в 15 раз, что обеспечивает требуемую задержку. Кроме построенного цикла, подпрограмма задержки содержит уже знакомые нам операторы сохранения и восстановления используемых регистров. В нашем случае подпрограмма использует три регистра. Поэтому в начале подпрограммы содержимое всех трех регистров сохра ­ няется в стеке (строки 28,29,30). Перед выходом из подпрограммы содержимое всех этих регистров вос ­ станавливается (строки 41,42,43). Обратите внимание, что восстановле ­ ние регистров происходит в порядке, обратном порядку их запоминания. Регистр, который был записан в стек последним, извлекается первым. Программа на языке СИ Листинг 5.8 Project : Prog4 Пример 4 Мигающий светодиод Chip type • ATtiny2313 Clock frequency 4,000000 MHz */

RkJQdWJsaXNoZXIy MTExODQxMg==