Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Программная реализация временной задержки
Процедура реализации временной задержки использует метод программных циклов. При этом в некоторый рабочий регистр загружается число, которое затем в каждом проходе цикла уменьшается на 1. Так продолжается до тех пор, пока содержимое рабочего регистра не станет равным нулю, что интерпретируется программой как момент выхода из цикла. Время задержки при этом определяется числом, загруженным в рабочий регистр, и временем выполнения команд, образующих программный цикл. Ниже приведена подпрограмма формирования временной задержки, имеющее символическое имя DELAY. Предположим, что в управляющей программе необходимо реализовать временную задержку 25 мкс. Фрагмент программы, реализующей временную задержку, требуется оформить в виде подпрограммы, так как предполагается, что основная управляющая программа будет производить к ней многократные обращения для формирования выходных импульсных сигналов, длительность которых кратна 25 мкс:
AСALL DELAY ………………………………. DELAY: MOV R2, #X; загрузка числа циклов COUNT: PJNZ R2, COUNT; декремент R2 и цикл, если не нуль
Для получения требуемой временной задержки необходимо определить число X, загружаемое в рабочий регистр. Определение числа Х выполняется на основе расчета времени выполнения команд, образующих данную подпрограмму. При этом необходимо учитывать, что команды MOV и RET выполняются однократно, а число повторений команды DJNZ равно числу X. Кроме того, обращение к подпрограмме временной задержки осуществляется по команде ACALL DELAY, время исполнения которой также необходимо учитывать при подсчете временной задержки. В описании команд микроконтроллера указывается, за сколько машинных циклов (МЦ) исполняется каждая команда. На основании этих данных определяется суммарное число машинных циклов в программе: ACALL - 2 МЦ, MOV - 1 МЦ, DJNZ - 2 МЦ, RET - 2 МЦ. При тактовой частоте 12 МГц каждый машинный цикл выполняется за 1 мкс. Таким образом, подпрограмма выполняется за время 2+1+2Х+2=5+2Х (мкс). Для реализации временной задержки 25 мкс число Х= (25-5)/2= 10. В данном случае при загрузке в регистр R2 числа 10 требуемая временная задержка (25 мкс) реализуется точно. Если число Х получается дробным, то временную задержку можно реализовать лишь приблизительно. Для более точной подстройки в подпрограмму могут быть включены команды NOP, время каждой из которых равно 1 мкс. Максимальная длительность задержки, реализуемая подпрограммой DELAY, соответствует X=255. Для реализации задержки большей длительности можно рекомендовать увеличить тело цикла включением дополнительных команд или использовать метод вложенных циклов. В качестве примера рассмотрим подпрограмму:
DELAY: MOV Rl, #84; загрузка Х LOOPIN: DJNZ R2, LOOPIN; декремент R2 и внутренний цикл, если (R2) не равно нулю DJNZ Rl, LOOPEX; декремент R1 и внешний цикл, если (R1) не равно нулю LOOPAD: MOV R3, #4; точная подстройка DJNZ R3, LOOPAD; временной задержки RET; возврат из подпрограммы
Здесь два вложенных цикла, а дополнительный цикл LOOPAD обеспечивает точную подстройку временной задержки. Часто (при реализации функциональных зависимостей, при работе с экспериментальными данными) необходимо иметь в памяти программ таблицы готовых решений. Для возможности работы с такими таблицами, хранящимися в РПП и ВПП, имеются специальные команды обращения к памяти программ - MOVC. Поясним использование этих команд на следующем примере. Требуется составить подпрограмму вычисления синуса угла Х (X меняется в пределах от 0 до 89 градусов с дискретностью 1°). Наиболее быстрое вычисление функции можно получить путем выборки готового значения синуса из таблицы. Такая таблица для диапазона 0 - 89° займет 90 байтов при погрешности 0, 4%. Каждый байт таблицы будет содержать дробную часть двоичного представления синуса. Исходным параметром для подпрограммы служит значение угла Х, находящееся в аккумуляторе:
; вход: Х в А (аккумуляторе) в пределах от 0 до 89 градусов ; выход: дробная часть значения синуса в аккумуляторе ACALL SINX; вызов подпрограммы вычисления синуса … SINX: INC A; инкремент аккумулятора MOVC A, @A+PC; загрузка значения синуса из таблицы в аккумулятор RET; возврат из подпрограммы ; таблица значений синуса DB 0; sin(0)=0 DB 00000100B; sin(1)=0.017 ... ... DB 11111111B; sin(89)=0.999
Инкремент аккумулятора перед обращением к таблице необходим из-за наличия однобайтной команды возврата RET, расположенной между командой MOVC и началом таблицы значений синуса. Тема 1.2 Цифровые устройства микроконтроллерных и микропроцессорных систем ТРИГГЕРЫ Общие сведения. Активные и пассивные логические уровни элементов И-НЕ и ИЛИ-НЕ. Интегральные триггеры обычно реализуются на логических элементах И-НЕ, ИЛИ-НЕ. Обратимся к таблицам истинности функции, реализуемых логическими элементами И-НЕ и ИЛИ-НЕ (табл. 4.1). Легко убедиться, что каждый из этих элементов характеризуется некоторым логическим уровнем (лог. 0 или 1), действие которого на одном из входов полностью определяет логический уровень на выходе. При этом логический уровень на выходе элемента не изменяется, какие бы комбинации логических уровней ни подавались на другие входы этого элемента. Такими логическими уровнями для элементов И-НЕ является уровень лог. 0, для ИЛИ-НЕ - уровень лог. 1. Действительно, если на один из входов элемента И-НЕ подан лог. 0, то на выходе этого элемента возникает лог. 1 независимо от того, каковы логические уровни на других входах; лог. 1, поданная на один из входов элемента ИЛИ-НЕ, установит на выходе уровень лог. 0, который не будет зависеть от логических уровней, действующих на других входах элемента. Такие логические уровни, которые, действуя на одном из входов элемента, однозначно задают логический уровень на его выходе независимо от уровней на других входах, будем называть активными логическими уровнями. Таким образом, активный логический уровень для элементов И-НЕ - уровень лог. 0, для элементов ИЛИ-НЕ - уровень лог. 1. Так как при подаче активного логического уровня на один из входов элемента он и определяет уровень на выходе элемента (выходной уровень элемента при этом не зависит от уровней на других входах), можно говорить, что при этом происходит логическое отключение остальных входов элемента. Уровни, обратные активным, будем называть пассивными логическими уровнями. Пассивными уровнями для элементов И-НЕ служит уровень лог. 1, для ИЛИ-НЕ - уровень лог. 0. При действии на одном из входов пассивного логического уровня уровень на выходе элемента определяется логическими уровнями на других его входах. Пользование понятиями активного и пассивного логических уровней облегчает анализ функционирования триггеров, построенных на элементах И-НЕ при ИЛИ-НЕ. Назначение триггера. Триггер - устройство, предназначенное для хранения значения одной логической переменной (или значения одноразрядного двоичного числа, при хранении многоразрядных двоичных чисел для запоминания значения каждого разряда числа используется отдельный триггер). В соответствии с этим триггер имеет два состояния: одно из них обозначается как состояние лог. 0, другое - состояние лог. 1. Воздействуя на входы триггера, его устанавливают в нужное состояние. Основные обозначения. Триггер имеет два выхода: прямой Q и инверсный . Уровнями напряжения на этих выходах определяется состояние, в котором находится триггер: если напряжение на выходе Q соответствует уровню лог. 0 (Q = 0), то принимается, что триггер находится в состоянии лог. 0, при Q = 1 триггер находится в состоянии лог. 1. Логический уровень на инверсном выходе представляет собой инверсию состояния триггера (в состоянии 0 Q = 1 и наоборот). Триггеры имеют различные типы входов. Приведем обозначение и назначение входов триггеров: R (от английского RESET) - раздельный вход установки в состояние 0; S (от английского SET) - раздельный вход установки в состояние 1; K - вход установки универсального триггера в состояние 0; J - вход установки универсального триггера в состояние 1; T - счетный вход; D (от английского DELAY) - информационный вход установки триггера в состояние, соответствующее логическому уровню на этом входе; C - управляющий (синхронизирующий) вход. Наименование триггера определяется типами его входов. Например, RS-триггер - триггер, имеющий входы типов R и S. По характеру реакции на входные сигналы триггеры делятся на два типа: асинхронные и синхронные. Асинхронный триггер характеризуется тем, что входные сигналы действуют на состояние триггера непосредственно с момента их подачи на входы, в синхронных триггерах - только при подаче синхронизирующего сигнала на управляющий вход С. Типы триггеров. Рассмотрим общие характеристики основных типов триггеров. Каждый тип триггера характеризует таблица переходов (табл. 4.1).
Таблица переходов (табл. 1, а) соответствует работе RS-триггера. Здесь Q0 - текущее состояние триггера (состояние до подачи на вход активного сигнала). При отсутствии на входах R и S активного уровня триггер сохраняет текущее состояние Q0. Активный сигнал R = 1 устанавливает триггер в состояние 0, а сигнал S = 1 - в состояние 1. Звездочкой в таблице отмечено состояние, соответствующее запрещенной комбинации входных сигналов. Таблица 1, б является таблицей переходов JK-триггера. Этот тип триггера отличается от RS-триггера отсутствием запрещенной комбинации входных сигналов, при J = K = 1 триггер устанавливается в состояние, противоположное текущему состоянию Q0. Таблица 1, в является таблицей переходов D-триггера. Триггер устанавливается в состояние, соответствующее уровню сигнала на входе 0. Таблица 1, г определяет работу Т-триггера. При входном сигнале Т = 0 триггер сохраняет текущее состояние Q0, при входном сигнале Т = 1 триггер переключается в состояние, противоположное текущему. Асинхронные триггеры. RS-триггер с прямыми входами. Логическая структура триггера представлена на рис. 1, а. Триггер построен на двух логических элементах ИЛИ-НЕ, связанных таким образом, что выход каждого элемента подключен к одному из входов другого. Такое соединение элементов в устройстве обеспечивает два устойчивых состояния, в чем легко убедиться. Пусть на входах R и S действуют пассивные для элементов ИЛИ-НЕ уровни лог. 0, которые не влияют на состояние триггера. В состоянии 0 триггера на выходе элемента A Q = 0; этот уровень подается на вход элемента B, при этом на обоих входах элемента B действует уровень лог. 0 и на выходе элемента = 1; с выхода элемента В уровень лог. 1 поступает на вход элемента А, что и обеспечивает на его выходе уровень 0. Это одно из устойчивых состояний триггера. В состоянии 1 триггера на выходе элемента А Q = 1, что обусловливает на выходе элемента В = 0, при этом на обоих входах элемента А действуют уровни 0, что и обеспечивает на выходе этого элемента уровень лог, 1. Таким образом, в каждом из состоянии триггера элементы А и В оказываются в противоположных состояниях. рис. 4.1 Переключение триггера из одного устойчивого состояния в другое происходит при подаче активных сигналов на входы. Под действием уровня R = 1 элемент А установится в состояние, при котором на его выходе Q = 0, следовательно, на инверсионном выходе = 1, и, таким образом, триггер устанавливается в состояние 0. Если триггер и прежде, до подачи сигнала R = 1, находился в состоянии 0, то его состояние не изменяется. Если же триггер находился в состоянии 1, то при подаче сигнала R = 1 произойдет переключение элемента А и на его выходе установится уровень Q = 0; далее этот уровень, действуя на входе элемента К, переключит его и на выходе элемента В установится уровень Q = 1, после чего триггер оказывается установленным в состояние 0. Таким образом, при переключении триггера из одного состояния в другое его элементы последовательно переключаются и время переключения равно удвоенному среднему времени задержки распространения сигнала в логическом элементе ИЛИ-НЕ:
Очевидно, чем меньше t пер, тем большее число переключений триггера удастся произвести в единицу времени, т.е. будет выше допустимая частота переключений или, иначе говоря, быстродействие триггера. Процесс установки триггера в состояние 1 при подаче на вход S уровня лог. 1 аналогичен описанному. Одновременная подача активных уровней 1 на оба входа R и S не допускается, так как при этом на обоих выходах установится уровень 0, а после снятия со входов активных уровней состояние триггера окажется неопределенным: в силу случайных причин триггер может установиться в состояние 0 либо 1. На рис. 1, б приведена таблица состояний RS-триггера в форме таблицы Вейча. Из этой таблицы может быть построено логическое выражение, определяющее функционирование RS-триггера:
т.е. триггер устанавливается в состояние 1 под действием входного уровня S = 1 либо остается в этом состоянии 1, если R = 0 и прежнее состояние триггера Q0 = 1. На рис. 1, в показано условное обозначение асинхронного RS-триггера. Популярное:
|
Последнее изменение этой страницы: 2016-05-28; Просмотров: 1703; Нарушение авторского права страницы