Федеральное агентство по образованию бийский технологический институт (филиал)

Вид материалаДокументы
4.3Реализация функций реального времени
4.3.1Программное формирование временной задержки
4.3.2Формирование временной задержки с использованием таймеров
4.3.3Измерение временных интервалов
Контрольные вопросы
Подобный материал:
1   ...   6   7   8   9   10   11   12   13   14

4.3Реализация функций реального времени


Любая система реального времени должна иметь возможность вести счёт времени. Универсальные микропроцессорные системы, как правило, включают в свой состав часы реального времени.

В микроконтроллер встроены таймеры-счетчики, которые позволяют отсчитывать временные интервалы. Кроме того, возможно формирование временных задержек путём организации циклов (как одиночных, так и вложенных). Оба способа имеют как преимущества, так и недостатки.

4.3.1Программное формирование временной задержки


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





а)




б)



Рисунок 4.18 – Блок-схемы процедур временных задержек, формируемых программно


Расчёт числа, загружаемого в рабочий регистр, выполняется на основе расчета времени выполнения команд, образующих подпрограмму. В описании команд МК указывается, сколько машинных циклов (МЦ) исполняется каждая команда. На основании этих данных определяется суммарное число машинных циклов, затрачиваемых на выполнение подпрограммы.

При тактовой частоте кварцевого резонатора Fosc каждый машинный цикл выполняется за 12/Fosc секунд.

Ниже приведён листинг программы, реализующий временную задержку 100 мкс, при частоте кварцевого резонатора 12 МГц (листинг 4.23).


Листинг 4.23 – Программа временной задержки




.ORG 8000h

MOV R2, #49

DJNZ R2, $



; Адрес начала программы

; Загрузка рабочего регистра

; Декремент R2 и цикл, если не ноль

; Продолжение программы



Число 49 получено следующим образом: команды MOV и DJNZ выполняются по 2 МЦ. Команда MOV выполняется 1 раз, DJNZ – 49 раз. При этом суммарное количество МЦ будет составлять 2+249=100. При тактовой частоте кварцевого резонатора 12 МГц цикл выполняется за 12/12000000100=0,0001 с, т.е. за 100 микросекунд.

В данном примере при загрузке в регистр R2 числа 49 требуемая временная задержка реализуется точно. Если число, загружаемое в регистр R2, получается дробным, то временную задержку можно реализовать лишь приблизительно. Например, для реализации временной задержки 100 мкс, при частоте кварцевого резонатора 10 МГц R2=40,641.

Минимальная временная задержка, реализуемая подпрограммой, составляет 48/Fosc секунд (при R2=1). Временную задержку меньшей длительности программным путем можно реализовать, включая в программу цепочки команд NOP, выполняющиеся в течение 1 МЦ.

Максимальная длительность задержки, реализуемая подпрограммой, составляет 6144/Fosc секунд (при R2=255).

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

4.3.2Формирование временной задержки с использованием таймеров


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

Временные задержки можно получить при использовании таймера-счетчика.

Если использовать таймер-счётчик в режиме таймера, то временную задержку можно реализовать следующим образом (листинг 4.24):


Листинг 4.24 – Программа временной задержки с использованием
таймера-счётчика

F:


COUNT:



.EQU 18432000


.EQU 65535-(F/(1000*12))


.ORG 0000H

JMP BEGIN


.ORG 000BH


JMP TIME

; Частота кварцевого

; резонатора

; Число, определяющее

; время счёта таймера от

; момента его загрузки до

; переполнения (1 мс)


; Адрес начала программы

; Переход к основной части


; Адрес обработки

; прерывания таймера

; Переход на процедуру

; обработки прерывания

BEGIN:


MOV SP, #30H


MOV IE, #00H

CLR TR0

CLR 20H.0

MOV R0, #10


MOV TL0, #
MOV TH0, #>COUNT


MOV TMOD, #01H

SETB TR0

JNB 20H.0, $

CLR TR0



; Переопределение

; вершины стека

; Запрет прерываний

; Запрет счёта

; Сброс флага конца паузы

; Загрузка счетчика
; прерываний


; Загрузка регистров таймера

; счетчика TC0


;Настройка таймера-счетчика

; на режим 1

; Ожидание конца паузы

; Запрещение работы таймера

; Продолжение программы

; В любом месте программы

; достаточно очистить флаг

; 20h.0, загрузить числа в

; TL0,TL1 и запустить счет,

; чтобы получить требуемую

; задержку

TIME:


EXIT:

CLR TR0


MOV A, TL0

ADD A, #13

ADD A, #
MOV TL0, A

MOV A, TH0

ADDC A, #>COUNT

MOV TH0, A


SETB TR0

DJNZ R0, EXIT


SETB 20H.0

RETI

; Запрещение работы таймера


; Добавление к содержимому

; регистров TL0 TH0

; коэффициента счёта и

; времени, затраченного на

; выполнение данного

; суммирования


; Разрешение работы таймера

; Декремент счётчика

; прерываний и выход из

; прерывания, если значение

; счётчика не равно нулю

; Установка флага конца паузы

; Выход из прерывания

4.3.3Измерение временных интервалов


В задачах управления часто возникает необходимость измерения промежутка времени между двумя событиями. Обычно события в объекте управления представляются сигналами от двоичных датчиков. Считая событиями фронт и спад импульса, можно определять временные характеристики импульсных сигналов: длительность, период и скважность.

Простейшим способом измерения длительности импульса является программный.

Для обнаружения событий (фронт и спад импульсного сигнала) в этом случае используются типовые процедуры (см. п. 1.1), а отсчет времени ведется программным способом.

Для положительного импульсного сигнала, поступающего на вход Т0, программа измерения его длительности будет иметь вид, представленный в листинге 4.25).

После выхода из процедуры содержимое счетчика (DPTR) пропорционально длительности импульса логической единицы.

Листинг 4.25 – Программа измерения длительности положительного импульсного сигнала




.ORG 0000h

; Адрес начала программы



NEXT:

MOV DPTR, #00h

JB P3.2, $

JNB P3.2, $

INC DPTR

JB P3.2, NEXT



; Обнуление счётчика времени

; Ожидание логического нуля

; Ожидание логической единицы

; Инкремент счётчика времени

; Ожидание логического нуля




Для измерения длительности сигнала может быть использован таймер. Особенно эффективно использование для этой цели таймера T/C0 (T/C1) совместно со входом разрешения счета (альтернативная функция входа INT0 (INT1)). Измеряемый сигнал можно, например, подавать на вход INT0. Измерение длительности при этом будет выполняться в Т/С0. Программа измерения длительности положительного импульса представлена листингом 4.26.


Листинг 4.26 – Программа измерения длительности положительного импульсного сигнала с использованием таймер-счётчика




.ORG 0000h







CLR TR0

MOV IE, #00h

MOV TMOD, #09h

MOV TL0, #00h

MOV TH0, #00h

JB INT0, $

SETB TR0

JNB INT0, $

JB INT0, $

CLR TR0



; Запрещение работы таймера

; Запрет прерываний

; Настройка таймера на режим 1

; счет при логической единице на

; входе INT0

; Ожидание логического нуля

; Разрешение счёта

; Ожидание логической единицы

; Ожидание логического нуля

; Запрещение счёта

По завершению программы в Т/С0 будет находиться число, пропорциональное длительности положительного импульса на входе INT0.

Контрольные вопросы
  1. Для чего необходим счет времени в микроконтроллерных системах?

Каковы принципы формирования временной задержки? Какой из них имеет преимущества и какие?

Как организуется измерение интервала времени между двумя событиями?