Цифровые вычислительные устройства и микропроцессоры приборных комплексов
2) Рассмотреть команды, которые обслуживают пространство ввода/вывода;
3) Ознакомиться с приведенными ниже примерами программ на языке ассемблера;
4) Произвести ввод, отладку и трансляцию в объектный код этих программ;
5) Выполнить программы по шагам с просмотром результатов выполнения в регистрах и оперативной памяти.
Пример 3.1. Ввести байт из порта 1 и передать его в п
орт 2:
TRAN: MOV A,#0FF ; настройка порта 1 на ввод
OUTL P1,A ;
IN A,P1 ; ввод байта из порта 1
OUTL P2,A ; вывод байта в порт 2
Пример 3.2. Ввести данные из порта P7:
INPUT: MOVD A,P7 ; пересылка четырех битов из порта 7
; в младшую тетраду аккумулятора
Пример 3.3. Маскирование при вводе. Ввести в регистр R7 информацию из линий 0, 1, 3, 4 и 7 порта 1:
IN A,P1 ; ввод байта из порта 1
ANL A,#10011011B ; маскирование
MOV R7,A ; передача
Пример 3.4. Ввести в аккумулятор данные из порта 2 и выделить требуемые биты по маске, находящейся в R0:
IN A,P2 ; ввод байта из порта 2
ANL A,R0 ; маскирование
Пример 3.5. Выдать содержимое аккумулятора в последовательном коде через нулевую линию порта 1, оставляя без изменения остальные биты порта. Передачу вести, начиная с младшего бита:
MOV R1,#8 ; счетчик бит
LOOP: JB0 ONE ; переход, если бит A.0 = 1
ANL P1,#(NOT 1) ; сброс P1.0
JMP NEXT ;
ONE: ORL P1,#1 ; установка P1.0
JMP NEXT ; избыточная команда для выравнивания
; времени передачи 0 и 1
NEXT: RR A ; сдвиг аккумулятора вправо (подготовка к
DJNZ R1,LOOP ; передаче очередного бита)
Пример 3.6. Настроить биты 0–3 порта 1 на ввод:
ORL P1,#0F ; установка битов P1.0… P1.3
Пример 3.7. Очистить биты 4–7 порта 2:
ANL P2,#0F ; сброс битов P2.4… P2.7
Пример 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. Формирование временной задержки на основе таймеров. Недостатком программной реализации временной задержки является нерациональное использование ресурсов микроконтроллера: во время формирования задержки микроконтроллер практически простаивает, так как не может решать задачи управления объектом. В то же время аппаратурные средства микроконтроллера позволяют реализовать временные задержки на фоне основной программы работы.
Другие рефераты на тему «Коммуникации, связь и радиоэлектроника»:
- Анализ погрешностей спутниковой радионавигационной системы, работающей в дифференциальном режиме
- Разработка технологического процесса сборки усилителя мощности звуковой частоты
- Исследование характеристик одиночных и связанных колебательных контуров
- Измерение фокусных, вершинных фокусных и рабочих расстояний оптических систем
- Расчет технико-экономических показателей системы контроля
Поиск рефератов
Последние рефераты раздела
- Микроконтроллер системы управления
- Разработка алгоритмического и программного обеспечения стандарта IEEE 1500 для тестирования гибкой автоматизированной системы в пакете кристаллов
- Разработка базы данных для информатизации деятельности предприятия малого бизнеса Delphi 7.0
- Разработка детектора высокочастотного излучения
- Разработка микропроцессорного устройства для проверки и диагностики двигателя внутреннего сгорания автомобиля
- Разработка микшерного пульта
- Математические основы теории систем