Учебное пособие: Цифровые вычислительные устройства и микропроцессоры приборных комплексов
Пример 3.8. Организовать ожидание
появления нулевого уровня на входе T0:
WAIT: JT0 WAIT ; переход на WAIT, если на входе T0 единица
Пример 3.9. Организовать ожидание
появление единичного уровня на входе в предположении, что внешние
прерывания запрещены:
DIS I ;
запрет прерываний по INT
WAIT: JNI WAIT ; переход на WAIT, если на входе INT нуль
3.4.4.
Изучение средств реального времени микроконтроллера ВЕ48
1) Изучить
организацию таймера/счетчика и системы прерываний микроконтроллера ВЕ48;
2)
Рассмотреть команды управления средствами реального времени;
3)
Ознакомиться с приведенными ниже примерами программ на языке ассемблера;
4) Произвести
ввод, отладку и трансляцию в объектный код этих программ;
5) Выполнить
программы по шагам с просмотром результатов выполнения в регистрах и
оперативной памяти.
Пример 4.1. Дождаться поступления
на вход T1 100
импульсов и перейти по метке PULSE:
MOV A,#156D ; A = (256-100)
MOV T,A ;
предустановка счетчика
STRT CNT ; запуск
счетчика
WAIT: JTF PULSE ; переход, если
прошло 100 импульсов
JMP WAIT ;
PULSE: …
Пример 4.2. Запретить прерывания от
таймера, но разрешить прерывание после восьми сигналов переполнения таймера.
При переходе к процедуре обработки прерывания остановить таймер. Сигналы
переполнения подсчитывать в регистре 5:
START: DIS TCNTI ; запрет
прерываний от таймера
CLR A ; сброс
аккумулятора
MOV T,A ; сброс
таймера
MOV R5,A ; сброс
регистра R5
STRT T ;
запуск таймера
M1: JTF COUNT ; если TF=1, то переход к COUNT и сброс TF
JMP M1 ; цикл
COUNT: INC R5 ; инкремент
регистра R5
MOV A,R5 ; пересылка
содержимого R5
в аккумулятор
JB3 INT ; переход к
подпрограмме обслуживания
;
прерывания INT, если бит A.3 равен 1
JMP M1 ;
переход, если бит A.3 не равен 1
… ;
INT: STOP TCNT ; останов
таймера
JMP 07 ;
переход к ячейке 7 (вектор прерывания
;
от счетчика событий)
Пример 4.3. Программное
формирование временной задержки. Предположим, что в управляющей программе
необходимо реализовать временную задержку 100 мкс. Подпрограмма формирования
временной задержки будет иметь вид:
DELAY: MOV R2,#X ; (R2) ← X
COUNT: DJNZ R2,COUNT ; декремент R2 и цикл, если не нуль
RET ;
возврат
Для получения
требуемой временной задержки необходимо определить число X, загружаемое в рабочий
регистр. Определение числа X выполняется на основе расчета времени выполнения команд,
образующих данную подпрограмму. При этом необходимо учитывать, что команды MOV и RET выполняются однократно,
а число повторений команды DJNZ равно числу X. Кроме того, обращение к
подпрограмме временной задержки осуществляется по команде CALL DELAY, время исполнения
которой также необходимо учитывать при подсчете временной задержки. В описании
команд микроконтроллера указывается, за сколько машинных циклов (МЦ)
исполняется каждая команда. На основании этих данных определяется суммарное
число машинных циклов в подпрограмме: CALL – 2 МЦ, MOV – 2 МЦ, DJNZ – 2 МЦ, RET – 2 МЦ.
При тактовой
частоте 6 МГц каждый машинных цикл выполняется за 2,5 мкс. Таким образом,
подпрограмма выполняется за время 5+5+5X+5=15+5X мкс. Для реализации
временной задержки 100 мкс число X = (100-15)/5 = 17.
Пример 4.4. Временная задержка
большой длительности. В качестве примера рассмотрим подпрограмму, реализующую
временную задержку 100 мс:
DELAY: MOV R1,#84 ; загрузка X
LOOPEX: MOV R2,#236 ; загрузка Y
LOOPIN: DJNZ R2,LOOPIN ; декремент R2 и внутренний цикл,
;
если R2
не равно нулю
DJNZ R1,LOOPEX ; декремент R1 и внешний цикл,
;
если R1
не равно нулю
MOV R3,#4 ; точная
подстройка временной задержки
LOOPAD: DJNZ R3,LOOPAD ;
RET ;
Числа X и Y выбираются из
соотношения T
= 5+5+X(5+5Y+5)+5, где T – реализуемый временной
интервал в микросекундах. Максимальный временной интервал, реализуемый таким
образом, при X=Y=255 составляет 327,69
мс, т.е. приблизительно 0,3 с.
В примере два
вложенных цикла реализуют временную задержку длительностью
15+84(10+5*236)=99975 мкс, а дополнительный цикл LOOPAD реализует задержку 25
мкс и тем самым обеспечивает точную подстройку временного интервала.
Временная
задержка длительностью 1 с. Секунда является очень большим интервалом времени
по сравнению с частотой тактирования микроконтроллера. Такие задержки сложно
реализовать методом вложенных циклов, поэтому их обычно набирают из точно
подстроенных задержек меньшей длительности. Например, задержку в 1 с можно
реализовать десятикратным вызовом подпрограммы, реализующей задержку 100 мс:
ONESEC: MOV R3,#10 ; загрузка в
R3 числа вызовов
;
подпрограммы DELAY
LOOP: CALL DELAY ; задержка 100 мс
DJNZ R3,LOOP ;
декремент R3
и цикл, если R3
не равно 0
Погрешность
программы составляет 55 мкс.
Пример 4.5. Формирование временной
задержки на основе таймеров. Недостатком программной реализации временной
задержки является нерациональное использование ресурсов микроконтроллера: во
время формирования задержки микроконтроллер практически простаивает, так как не
может решать задачи управления объектом. В то же время аппаратурные средства
микроконтроллера позволяют реализовать временные задержки на фоне основной программы
работы.
При
использовании таймера в МК48 можно получить временные задержки длительностью от
80 мкс до 20 мс.
Например, для
реализации временной задержки 240 мкс необходимо выполнить следующие действия:
MOV A,#NOT(240/80-1) ;
загрузка таймера
MOV T,A ;
STRT T ;
запуск таймера
EN TCNTI ; разрешение
прерывания
Появление
сигнала прерывания от таймера соответствует истечению временного интервала 240
мкс. Погрешность будет составлять 7,5 мкс (время выполнения команды передачи
управления по вектору прерывания и команды STOP TCNT).
Вывод: изучил
структурную схему однокристального микроконтроллера ВЕ48, его центральный
процессор, организацию памяти программ и данных, средства расширения памяти
программ и данных; рассмотрел систему команд по пересылке и обработке данных;
ознакомился с приведенными ниже примерами программ на языке ассемблера;
произвел ввод, отладку и трансляцию в объектный код этих программ; выполнил
программы по шагам с просмотром результатов выполнения в регистрах и
оперативной памяти.
|