Реализация функции времени (1086953)
Текст из файла
Реализация функций времени:
-
1. Программное формирование временной задержки
-
2. Формирование временной задержки на основе таймеров
-
3. Измерение временных интервалов
1. Программное формирование временной задержки
Временная задержка малой длительности. Процедура реализации временной задержки использует метод программных циклов. При этом в некоторый рабочий регистр загружается число, которое затем в каждом проходе цикла уменьшается на 1. Так продолжается до тех пор, пока содержимое рабочего регистра не станет равным нулю, что интерпретируется программой как момент выхода из цикла. Время задержки при этом определяется числом, загруженным в рабочий регистр, и временем выполнения команд, образующих программный цикл. Схема алгоритма такой программы показана на рис. 6.8. Программа имеет символическое имя DELAY.
Предположим, что в управляющей программе необходимо реализовать временную задержку 100 мкс. Фрагмент программы, реализующей временную задержку, требуется оформить в виде подпрограммы, так как предполагается, что основная управляющая программа будет производить к ней многократные обращения для формирования выходных импульсных сигналов, длительность которых кратна 100 мкс:
версия для МК48
DELAY: MOV R2, #X ;(R2) <--- X
COUNT: DJNZ R2, COUNT ;декремент R2 и цикл,если не нуль
RET ;возврат
Для получения требуемой временной задержки необходимо определить число Х, загружаемое в рабочий регистр. Определение числа Х выполняется на основе расчета времени выполнения команд, образующих данную подпрограмму. При этом необходимо учитывать, что команды MOV и RET выполняются однократно, а число повторений команды DJNZ равно числу Х. Кроме того, обращение к подпрограмме временной задержки осуществляется по команде CALL DELAY, время исполнения которой также необходимо учитывать при подсчете временной задержки. В описании команд МК указывается, за сколько машинных циклов (МЦ) исполняется каждая команда. На основании этих данных определяется суммарное число машинных циклов в подпрограмме: CALL-2МЦ, MOV-2МЦ, DJNZ-2МЦ, RET-2МЦ.
При тактовой частоте 6 МГц каждый машинный цикл выполняется за 2,5 мкс. Таким образом, подпрограмма выполняется за время 5+5+5Х+5=15+5Х мкс. Для реализации временной задержки 100 мкс число Х =(100-15)/5=17.
В данном случае при загрузке в регистр R2 числа 17 требуемая временная задержка (100 мкс) реализуется точно. Если число Х получается дробным, то временную задержку можно реализовать лишь приблизительно. Для более точной подстройки в подпрограмму могут быть включены команды NOP, время выполнения каждой из которых равно 2,5 мкс.
Минимальная временная задержка, реализуемая подпрограммой DELAY, составляет 20 мкс (Х=1).Временную задержку меньшей длительности программным путем можно реализовать, включая в программу цепочки команд NOP.
Максимальная длительность задержки, реализуемая подпрограммой DELAY, составляет 1,29 мс (Х=255).
Для реализации задержки большей длительности можно рекомендовать увеличить тело цикла включением дополнительных команд или использовать метод вложенных циклов. Так, например, если в подпрограмму DELAY перед командой DJNZ вставить дополнительно две команды NOP, то максимальная задержка составит 15+Х(5+5)=15+10*255=2565 мкс (т.е. почти в 2 раза больше).
Временная задержка большой длительности. Схема алгоритма программной реализации временной задержки большой длительности методом вложенных циклов показана на рис.6.9. Там же обозначено, сколько раз выполняется каждый фрагмент программы. Числа Х и Y выбираются из соотношения Т=5+5+Х(5+5Y+5)+5, где Т - реализуемый временной интервал в микросекундах. Максимальный временной интервал, реализуемый таким способом, при Х=Y=255 составляет 327,69 мс, т.е. приблизительно 0,3 с.
В качестве примера рассмотрим подпрограмму, реализующую временную задержку 100 мс:
версия для МК48
DELAY : MOV R1, #84 ;загрузка Х
LOOPEX: MOV R2, #236 ;загрузка Y
LOOPIN: DJNZ R2, LOOPIN ;декркмент R2 и внутренний цикл,
;если (R2) не равно нулю
DJNZ R1, LOOPEX ;декремент R1 и внешний цикл,
;если (R1) не равно нулю
MOV R3, #4 ;точная подстройка
LOOPAD: DJNZ R3, LOOPAD ;временной задержки
RET
Здесь два вложенных цикла реализуют временную задержку длительностью 15+84(10+5*236)= 99 975 мкс, а дополнительный цикл LOOPAD реализует задержку 25 мкс и тем самым обеспечивает точную подстройку временного интервала.
Временная задержка длительностью 1с. Из рассмотренного примера видно, что секунда является очень большим интервалом времени по сравнению с частотой тактирования МК. Такие задержки сложно реализовать методом вложенных циклов, поэтому их обычно набирают из точно настроенных задержек меньшей длительности. Например, задержку в 1 с можно реализовать десятикратным вызовом подпрограммы, реализующей задержку 100 мс:
ONESEC: MOV R3, #10 ;загрузка в R3 числа
;вызовов подпрограммы DELAY
LOOP: CALL DELAY ;задержка 100 мс
DJNZ R3, LOOP ;декремент R3 и цикл,если R3
;не равно нулю
Погрешность подпрограммы составляет 55 мкс. Для очень многих применений это достаточно высокая точность, хотя реализованные на основе этой программы часы астрономического времени за сутки "убегут" примерно на 5 с.
2. Формирование временной задержки на основе таймеров
Задержка малой длительности. Недостатком программного способа реализации временной задержки является нерациональное использование ресурсов МК: во время формирования задержки МК практически простаивает, так как не может решать никаких задач управления объектом. В то же время аппаратурные средства МК позволяют реализовать временные задержки на фоне основной программы работы.
При использовании таймера в МК48 можно получить временные задержки длительностью от 80 мкс до 20 мс.
Например, для реализации временной задержки 240 мкс необходимо выполнить следующие действия:
MOV A, #NOT(240/80-1) ;загрузка таймера
MOV T, A
STRT T ;запуск таймера
EN TCNTI ;разрешение прерывания
Появление сигнала прерывания от таймера соответствует истечению временного интервала 240 мкс. Погрешность будет составлять 7,5 мкс (время выполнения команды передачи управления по вектору прерывания и команды STOP TCNT) .
В МК51 на вход таймера/счетчика (Т/С) могут поступать сигналы синхронизации с частотой 1 МГц (Т/С в режиме таймера) или сигналы от внешнего источника (Т/С в режиме счетчика) . Оба эти режима могут быть использованы для формирования задержек. Если использовать Т/С в режиме таймера полного формата (16 бит) , то можно получить задержки в диапазоне 1 - 65536 мкс.
В качестве примера рассмотрим организацию временной задержки длительностью 50 мс в МК51. Предполагается, что бит IE.7 установлен.
;организация перехода к метке NEXT при переполнении Т/С0
ORG 0BH ;адрес вектора прерывания от Т/С0
CLR TCON.4 ;останов Т/С0
RETI ;выход из подпрограммы
;обработки прерывания
ORG 100H ;начальный адрес программы
MOV TMOD, #01H ;настройка Т/С0
MOV TLO, #LOW(NOT(5000-1)) ;загрузка таймера
MOV THO, #HIGH(NOT(5000-1))
SETB TCON.4 ;старт Т/С0
SETB IE.1 ;разрешение прерывания от Т/С0
SETB PCON.0 ;переход МК51 в режим холостого хода
NEXT: ...
3. Измерение временных интервалов
В задачах управления часто возникает необходимость измерения промежутка времени между двумя событиями. Схема алгоритма типовой процедуры измерения (MEASURE) приведена на рис.6.10. Обычно события в объекте управления представляются сигналами от двоичных датчиков. Считая событиями фронт и спад импульса, можно определять временные характеристики импульсных сигналов: длительность, период и скважность. Кроме того, с помощью процедуры MEASURE можно определять скорость перемещения подвижного органа объекта по эталонному (заданной длины) участку. Начало и конец участка должны быть снабжены датчиками (концевыми выключателями).
Простейшим способом измерения длительности импульса является программный. Для обнаружения событий (фронт и спад импульсного сигнала) в этом случае используются типовые процедуры WAIT, а отсчет времени ведется программным способом. Для "положительного" импульсного сигнала, поступающего на вход Т0, программа измерения его длительности будет иметь вид:
;версия для МК48
MSCONT: MOV R7, #0 ;сброс счетчика
WAITO: JNT0 WAITO ;ожидание фронта сигнала
COUNT: INC R7 ;инкремент счетчика
JT0 COUNT ;ожидание спада сигнала
EXIT: ... ;выход из процедуры
После выхода из процедуры содержимое счетчика (R7) пропорционально длительности импульса.
Для нормальной работы этой программы необходимо, чтобы обращение к ней производилось в моменты, когда на входе Т0 присутствует сигнал нулевого уровня. Верхний предел измеряемой длительности "положительного" импульса составит 255*(1+2)*2,5 мкс=8,925 мс. Этот предел может быть увеличен включением в цикл COUNT дополнительных команд NOP. Максимальная погрешность измерений 7,5 мкс.
Для измерения длительности сигнала может быть использован таймер. Особенно эффективно использование для этой цели таймера в МК51, имеющего вход разрешения счета (альтернативная функция входа ¬ЗПР). Измеряемый сигнал можно, например, подавать на вход ¬ЗПР0 измерение длительности при этом будет выполняться в Т/С0. Программа измерения длительности "положительного" импульса будет выглядеть так:
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.