Читаем PIC-микроконтроллеры. Все, что вам необходимо знать полностью

;*************************

; * ФУНКЦИЯ: Формирует задержку длительностью 1 мс *

; * при частоте резонатора 4 МГц *

; * ВХОД: Нет *

; * ВЫХОД: Изменяются флаги и W *

;**********************

N equ d’249’; Параметр задержки, см. текст


DELAY_1MS

          movlw N; Инициализируем цикл 1~

; ЦИКЛ -----------------

D_LOOP

          addlw -1; Декрементируем счетчик N-

          btfss STATUS,Z; Проверяем: равен нулю? N+1~

            goto D_LOOP; ЕСЛИ нет, ТО повторяем 2*(N—1)~

; -------------------------

return


Чтобы вычислить общее число машинных циклов, которое тратится на выполнение подпрограммы, и, таким образом, определить величину N, нужно оценить, сколько времени выполняется та или иная команда подпрограммы:

1. Команда call DELAY_1MS, используемая для перехода к подпрограмме, выполняется за 2 машинных цикла.

2. Команда movlw, предшествующая входу в цикл, выполняется за один машинный цикл.

3. Команды addlw, декрементирующие содержимое рабочего регистра, затрачивают в общей сложности N циклов (N проходов цикла).

4. Команда btfsc STATUS,Z, проверяющая состояние флага Z (не стал ли W равен нулю после предыдущего декрементирования?), также выполняется N-раз. Однако при последнем проходе происходит выход из цикла за счет пропуска команды перехода, что добавляет один цикл из-за сброса конвейера. Таким образом, общая задержка, вносимая этой командой, составляет N + 1 циклов.

5. Поскольку выход из цикла происходит за счет пропуска команды goto, она выполняется только N — 1 раз; каждое ее выполнение занимает 2 цикла. Ее вклад в общую задержку составляет, таким образом, (N — 1) х 2.

6. Заключительная команда return выполняется за 2 цикла.

Таким образом, общее число циклов равно

2(call) + 1(movlw) + N(addlw) + (N + 1)(btfss) + 2 x (N — 1)(goto) + 2(return)

Приравняв это выражение числу 1000, получим

2 + 1 + N + (N + 1) + 2 х (N — 1) + 2 = 1000

4 + (4 х N) = 1000

4 x N = 996

N = 249

Наша подпрограмма задержки в значительной степени ограничена тем, что рабочий регистр, как и все регистры данных микроконтроллеров PIC, является 8-битным, т. е. максимальное значение N равно b’11111111’, или десятичному 255. На самом деле значение N = 0 в нашей подпрограмме даст наибольшую задержку! Это происходит потому, что W декрементируется до проверки на ноль, т. е. его содержимое будет изменяться следующим образом: h’00’ —> h’FF’ —> h’FE’ — >… -> h’01’ —> h’00’. To есть запись нуля аналогична записи числа d’256’. Таким образом, максимальная задержка, формируемая нашей подпрограммой, составляет 4 + (4 х 256) = 1028 циклов, или 1.028 мс при частоте резонатора 4 МГц.

Задержку можно немного увеличить, добавляя в тело цикла команды пор (нет операции). Каждая команда пор добавляет один машинный цикл, не влияя при этом на флаги регистра STATUS. Таким образом, вставка после команды addlw -1 четырех команд пор, как показано в Программе 6.2, даст суммарную задержку длительностью 4 + 8 х N машинных циклов. Для N = 249 мы теперь получим 4 + 1992 = 1996 циклов, или примерно 2 мс при длительности машинного цикла 1 мкс. Подумайте, как можно использовать дополнительные команды пор для достижения точного значения в 2000 циклов?


Программа 6.2. Подпрограмма формирования 2-мс задержки

; ***********************

; * ФУНКЦИЯ: Формирует задержку длительностью 2 мс *

; * при частоте резонатора 4 МГц… *

; * ВХОД: Нет *

; * ВЫХОД: Изменяются флаги и W *

; ***********************

N equ d’249’; Параметр задержки, см. текст


DELAY_2MS

           movlw N; Инициализируем цикл 1~

; ЦИКЛ ----------------

D_LOOP

            addlw -1; Декрементируем счетчик N~

            nop; Добавляем четыре дополнительных N~

            nор; цикла с помощью команд N~

            nор; «нет операции» N~

            nop; N~

            btfss STATUS,Z; Проверяем: равен нулю? N+1~

               goto D_LOOP; ЕСЛИ нет, ТО повторяем 2*(N-1)~

; ------------------------

            return


Перейти на страницу:

Все книги серии Программируемые системы

PIC-микроконтроллеры. Все, что вам необходимо знать
PIC-микроконтроллеры. Все, что вам необходимо знать

Данная книга представляет собой исчерпывающее руководство по микроконтроллерам семейства PIC компании Microchip, являющегося промышленным стандартом в области встраиваемых цифровых устройств. В книге подробно описывается архитектура и система команд 8-битных микроконтроллеров PIC, на конкретных примерах изучается работа их периферийных модулей.В первой части излагаются основы цифровой схемотехники, математической логики и архитектуры вычислительных систем. Вторая часть посвящена различным аспектам программирования PIC-микроконтроллеров среднего уровня: описывается набор команд, рассматривается написание программ на ассемблере и языке высокого уровня (Си), а также поддержка подпрограмм и прерываний. В третьей части изучаются аппаратные аспекты взаимодействия микроконтроллера с окружающим миром и обработки прерываний. Рассматриваются такие вопросы, как параллельный и последовательный ввод/вывод данных, временные соотношения, обработка аналоговых сигналов и использование EEPROM. В заключение приводится пример разработки реального устройства. На этом примере также демонстрируются простейшие методики отладки и тестирования, применяемые при разработке реальных устройств.Книга рассчитана на самый широкий круг читателей — от любителей до инженеров, при этом для понимания содержащегося в ней материала вовсе не требуется каких-то специальных знаний в области программирования, электроники или цифровой схемотехники. Эта книга будет также полезна студентам, обучающимся по специальностям «Радиоэлектроника» и «Вычислительная техника», которые смогут использовать ее в качестве учебного пособия при прослушивании соответствующих курсов или выполнении курсовых проектов.

Сид Катцен

Радиоэлектроника

Похожие книги

Электроника для начинающих
Электроника для начинающих

В ходе практических экспериментов рассмотрены основы электроники и показано, как проектировать, отлаживать и изготавливать электронные устройства в домашних условиях. Материал излагается последовательно от простого к сложному, начиная с простых опытов с электрическим током и заканчивая созданием сложных устройств с использованием транзисторов и микроконтроллеров. Описаны основные законы электроники, а также принципы функционирования различных электронных компонентов. Показано, как изготовить охранную сигнализацию для защиты от проникновения в дом, елочные огни, электронные украшения для одежды, устройство преобразования звука, кодовый замок, автономную роботизированную тележку и др. Приведены пошаговые инструкции и более 500 наглядных рисунков и фотографий.Для начинающих радиолюбителей

Паоло Аливерти , Чарльз Платт

Радиоэлектроника / Технические науки