Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Программный способ формирования временных интервалов на языке Ассемблер

Читайте также:
  1. C) изменения в предполагаемом способе возмещения актива.
  2. II . Динамика работоспособности
  3. II этап - Начальный для формирования связной речи у детей с ОНР – овладение диалогической речью.
  4. II. 7.5. Развитие внимания у детей и пути его формирования
  5. IV. Биогенетические методы, способствующие увеличению продолжительности жизни
  6. V. 18. 5. Природные предпосылки способностей и талантов
  7. V. 18.1. Понятие о способностях

Временные интервалы в пределах нескольких тактов организуются с помощью команд NOP. По этой команде не выполняется никакой операции, но время выполнения этой команды составляет 1 такт (период частоты) тактового генератора микроконтроллера.

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

 

LDI R16, X; Х – число, определяющ. длит.задержки

LOOP: DEC R16; R16 -1 и может установиться флаг нуля; (Z)

BRNE LOOP; если Z=0 (регистр не пуст), то переход.

;иначе будет выполн. следующая команда

 

Время выполнения команд:

LDI – 1 такт,

DEC – 1 такт,

BRNE LOOP – 2 такта при переходе и 1 такт в последнем цикле.

Длительность каждого цикла, кроме последнего, составляет 3 такта (один такт команды DEC и два такта команды BRNE). Длительность последнего цикла составляет два такта, так как в нем команда BRNE выполняется за один такт (из памяти уже считана последующая команда).

Получим формулу длительности задержки в тактах:

N = 1+3*(X-1)+1+1, или N = 3X, тактов (2)

Если задержка выполнена в виде подпрограммы, то, учитывая время выполнения команды вызова подпрограммы RCALL (3 такта) и возврата из подпрограммы RET(4 такта), получим формулу для временного интервала в тактах:

N = 3*X+7, тактов. (3)

Из этой формулы может быть определено значение X.

Так как максимальное значение в регистре равно 255, то максимальная задержка составляет 3*255 + 7 = 772 такта.

Пример1 Рассчитать значение константы задержки Х для формирования временного интервала в тактах N = 402.

Подставляем в формулу: N = 3*X+7. 402=3*Х+7 или 395=3*Х.

Так как 395 не делится в целое число раз на 3, то выбираем ближайшее целое, чтобы получилось деление без остатка.

393 = 3*Х. Отсюда: Х=131.

Так как было произведено уменьшение, то очевидно что время задержки уменьшится на 2 такта. Для получения заданного значения временного интервала необходимо добавить две команды NOP. Подпрограмма задержки (имя которой DELAY) будет иметь вид:

 

DELAY: LDI R16, 131; 131– число, определяющ. длит.задержки

LOOP: DEC R16; R16 -1 и может устанавиться флаг нуля Z

BRNE LOOP; если Z=0 (регистр не пуст), то переход,

;иначе выполн. следующ. команда

NOP

NOP

RET;Выход из подпрогр. задержки

 

Для задержек больше 772 тактов используется процедура вложенных циклов. При использовании регистров R16 и R17 подпрограмма имеет вид:

 

DELAY: LDI R16, Y;Y –число внешних циклов

EXT_L: LDI R17, X;Х – число внутренних циклов

INT_L: DEC R17;

BRNE INT_L; внутренний цикл.

DEC R16;

BRNE EXT_L; внешний цикл.

RET

Сначала выполняется внутренний цикл циклическим уменьшением содержимого регистра R17. При обнулении регистра R17, происходит уменьшение содержимого регистра внешнего цикл R16 на 1. Если его содержимое не равно 0 (команда BRNE, EXT_L), то выполняется переход по метке EXT_L и снова выполняется внутренний цикл.

Если процедура является подпрограммой, то длительность задержки в тактах рассчитывается по формуле:

N = (3*X+3)*Y+7, тактов. (4)

(Число 3 – время выполнения команд BRNE EXT_L и LDI R17, X ).

Из этой формулы могут быть определены значения X и Y.

Максимальная задержка составляет (3*255 + 3)*255+7 = 195847 тактов.

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

N = [ (3*X+3)*Y+3]*Z + 7. (5)

 

Пример 2 Рассчитать значение констант X и Y для получения временной задержки равной 103 мкс, если тактовая частота микроконтроллера равна 16мГц.

Время задержки в тактах:

N = tsek*Fтакт = 103*10-6*16*106 = 1648 тактов.

Для получения такой задержки требуется процедура с вложенными циклами.

Подставляем в формулу значения:

N = (3*X+3)*Y+7; 1648=(3*Х+3)*Y+7, или 1641=(3*Х+3)*Y.

Уменьшаем N на единицу 1640=(3*Х+3)*Y, тогда можно взять Y=10.

Далее: 1640=(3*Х+3)*10. → 164=3*Х+3 → 161=3*Х.

Выбираем ближайшее целое (на два меньшее) 159=3*Х → Х=53.

При таких заменах время задержки не будет равно заданному. Поэтому во внешний цикл необходимо вставить команду NOP, а за пределами циклов вставить две команды NOP, т.е. получится фактически формула

N = (3*X+3+2)*Y+7+1.

Подставив в нее значения Х и Y получим N равное 1648.

 

Текст подпрограммы для примера:

 

DELAY: LDI R16, 10;Загрузка в R16 константы внешнего цикла

EXT_L: LDI R17, 53;Загрузка в R17 константы внутреннего цикла

INT_L: DEC R17; Уменьшение на 1 значения в R17

BRNE INT_L; Если R17 ≠ 0, то переход на команду по метке

;иначе будет выполняться следующ. команда

NOP

DEC R16; Уменьшение на 1 значения в R16

BRNE EXT_L; Если R16 ≠ 0, то переход на команду по метке

;иначе будет выполняться следующ. команда

NOP

NOP

RET

При необходимости уменьшения значения на значительную величину Nд (использование значительного числа команд NOP) рекомендуется вместо команд NOP добавить в подпрограмму задержки одиночный цикл со значением, рассчитанным по формуле: Nд=3X.

Недостатком формирования временных интервалов программным способом является не выполнение требований к основным функциям микроконтроллера: измерение параметров, обработка данных и формирование сигналов управления. В приведенных примерах микроконтроллер выполняет функцию двоичного счетчика.

 


Дата добавления: 2015-07-20; просмотров: 446 | Нарушение авторских прав


Читайте в этой же книге: Последовательный периферийный интерфейс - SPI | UART - универсальный последовательный порт | Аналоговый компаратор | Аналого-цифровой преобразователь | Энергонезависимая память данных | Язык Ассемблер | Типы данных, объявление данных | Операторы | Оператор if-else (ветвления ) | Оператор switch |
<== предыдущая страница | следующая страница ==>
Оператор цикла for| Программный способ формирования временных интервалов на языке СИ

mybiblioteka.su - 2015-2024 год. (0.008 сек.)