Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Иногда Таймер 0 (TCNT0) может потребоваться для других целей (для подсчета импульсов на выводе T0/PD4), Сформируем временные интервалы без использования таймера. Каждая команда выполняется вполне определенное время поэтому, используя написанные соответствующим образом циклы, можно формировать задержки с такой же точностью, что и при использовании Таймера 0. Единственным недостатком такого подхода является то, что в отличие от Таймера 0 цикл нельзя прерывать (по нажатию кнопки), иначе длительность получаемой задержки будет больше требуемой.
В основе этого способа лежит определение количества тактов, которое требуется пропустить, и постепенное уменьшение этого значения до нуля. Если это число больше 255 (что бывает практически всегда), то возникают определенные проблемы. В этом случае необходимо распределить это число по нескольким регистрам и последовательно их обрабатывать. Младший байт при этом декрементируется до тех пор, пока его значение не изменится с 00 на FF (при этом устанавливается флаг переноса), затем декрементируется следующий по порядку старший байт и т.д.
Определим, сколько тактов потребуется для формирования заданной задержки. Для секундной задержки при использовании резонатора на 4 МГц нам потребуется «убить» 4 миллиона тактов. Цикл, который мы напишем, будет выполняться за «х» тактов.
1. Формируем задержку длительностью 1с, соответственно х = 5. За тем делим 4 000 000 на 5, получаем 800 000.
2. Переводим это число в шестнадцатеричную систему, получаем 0хС3500.
3. Записываем это число, используя четное количество разрядов (добавляем нулевой старший разряд, если количество разрядов нечетное), и затем делим его на группы по два разряда.
4. В данном случае будет 0x00, 0x35 и 0х0С.
В начале задержки в программе мы загружаем эти числа в рабочие регистры.
Дата публикования: 2015-02-03; Прочитано: 315 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!