- •Movx @dptr,a ; Вывод следующего знакоместа
- •Контрольные вопросы.
- •Лабораторная работа №10 вВод информации с Клавиатуры
- •Контрольные вопросы.
- •Лабораторная работа №9 организация Динамической индикации Практическая часть.
- •Порядок выполнения работы
- •Задания.
- •Подпрограмма обслуживания 8-и разрядного семисегментного индикатора.
- •Задания.
- •Контрольные вопросы
- •Лабораторная работа №2. Команды пересылки данных. Практическая часть.
- •Формирование временной задержки на основе таймера.
- •3. Считывание текущего состояния таймера без нарушения процесса синхронизации.
- •4. Измерение длительности сигнала.
- •Задание 2
- •1. Инициализация Таймера 1 для автозагрузки с частотой 32х2400 Гц.
- •III. Работа с внешней памятью данных (впд).
- •1. Запомнить в впд содержимое регистров банка 0.
- •IV.Операции со стеком.
- •Индивидуальное задание на лабораторную работу
- •6. Ввод данных с тумблеров, подключенных к линиям 3 и 4 порта 1 и выдача их на светодиоды, подключенные к линиям 4 и 5 порта 3.
- •7. Воспроизведение звука через динамик, подключенный к p3.5.
- •Задание 1
- •5. Передача символьной строки через последовательный порт.
- •Задания 2
- •Контрольные вопросы.
- •Лабораторная работа №3. Арифметические команды Практическая часть.
- •I. Инкремент и декремент.
- •II. Сложение и вычитание.
- •2. Формирование импульсных сигналов
- •3. Измерение длительности импульса
- •Устранение дребезга контактов
- •3. Программа вычитает строку, указанную регистром r1, из строки, указанной регистром r0, с точностью, указанной регистром r2. После выполнения операции проверяется переполнение результата.
- •III. Умножение и деление.
- •Задания 1.
- •1. Ввод информации с датчиков
- •Задания 1.
- •Задания 2
- •Контрольные вопросы.
- •Лабораторная работа №4 логические команды. Команды сдвига и работы с битами Практическая часть.
- •1. Маскирование при вводе.
- •Контрольные вопросы.
- •Лабораторная работа №6 изучение системы прерываний Практическая часть.
- •1. Сохранение состояния центрального процессора во время прерываний
- •Вычислить булеву функцию трех переменных :
- •Задания 1.
- •Задания 2.
- •Задания 1.
- •Индивидуальные задания 2
- •6. Последовательная передача параметров
- •Задания 3.
- •Контрольные вопросы.
- •Лабораторная работа №5 команды передачи управления. Практическая часть.
- •Временная задержка малой длительности.
- •Временная задержка большой длительности.
- •3. Временная задержка длительностью 1с:
- •4. Передать управление одной из восьми программ rout0 - rout7 при появлении нулевого уровня на соответствующем входе порта 0. Наивысшим приоритетом обладает вход р1.0:
- •5. Множественное ветвление программы:
Задания 1.
Написать программу сложения или вычитания двух n-байтовых чисел, где число n будет являться параметром.
Написать программу, вычисляющую сумму чисел от 1 до n с помощью цикла.
Написать программу, вычисляющую первые n чисел Фибоначчи. (Т.е. последовательность, в которой каждый последующий член является суммой двух предыдущих: 0,1,1,2,3,...)
Написать программу нахождения наибольшего общего делителя по алгоритму Евклида. (Берется исходная пара чисел. Из большего числа вычитается меньшее, потом меньшее число из первой пары и разность первой пары становятся следующей парой, и алгоритм повторяется снова до тех пор, пока в паре не окажутся одинаковые числа. Это и будет наибольшим общим делителем.)
Написать программы умножения и деления, используя команды сложения и вычитания.
Написать программу поиска максимального элемента в массиве.
Перемножить два беззнаковых 16-разрядных числа, используя команду 8-разрядного умножения.
13
Написать программы для вычисления приведенных ниже выражений, где переменные являются 8-разрядными положительными числами. Частное и остаток результата отдельно записать в память: Y=12/(14*A+(B-C+35))
Y=(A*B-78)/(27*C+78)
Y=((4*A+B)-(2*A-45))/C
Y=(A+2*B-165)^2/(C+124)
Y=A^2/(25*B-C+119)
Y=A/(B-15*C+37).
Задания 2
Составить программу на основе команд арифметических операций для вычисления следующего выражения согласно своему варианту:
1. Y = (А + В) / С
2. Y = (А - В) * (С - В)
3. Y = А - С / В
4. Y = (А + В - С) * В
5. Y = А * В + С
6. Y = А - В + С
7. Y = (А - С) / В
8. Y=A + C-B*C
Принять значения А равным 14, В равным 2, С равным 4.
Контрольные вопросы.
Объясните логику работы команд сложения и вычитания с учетом флагов С и OV.
Опишите способы адресации команд ADD, ADDC, SUBB.
Опишите способы адресации команд MUL, DIV.
Опишите способы адресации команд INC, DEC.
Как работает команда DA .
Для чего чаще всего используются команды INC и DEC .
7. В чем различие команд арифметических операций без учета и с учетом переноса.
8. Для каких целей применяются команды инкрементирования и декрементирования содержимого отдельных регистров.
9. Каким образом и с какой целью осуществляется десятичная коррекция аккумулятора.
10. В чем особенности команд умножения и деления MUL и DIV. В каком случае при их выполнении взводится флаг переполнения OV.
Лабораторная работа №4 логические команды. Команды сдвига и работы с битами Практическая часть.
1. Маскирование при вводе.
Ввести в регистр R7 информацию из линий 0,1,3,4 и 7:
MOV A,P1 ; Ввод байта из порта 1
ANL A,#10011011B ; Маскирование
MOV R7,A ; Передача
14
;Выполнение подпрограммы
ORG LOC ; Восстановление счетчика адреса SERV:
PUSH PSW ; Запоминание регистра PSW
PUSH AСС
PUSH В
PUSH DPI
PUSH DPH
MOV PSW,#1000B ; Выбор регистрового банка 1
;..................;Тело подпрограммы
POP DPH ; Восстановление регистров
POP DPL ; в обратном порядке
POP В
POP AСС
POP PSW
RETI ; Возврат к основной программе
2. Все биты, которые вызывают прерывания (IE0, IE1, TF0, TF1, RI, TI), могут быть программно установлены или сброшены с тем же результатом, что и в случае их аппаратной установки или сброса. Т. е. прерывания могут программно вызываться или ожидающие обслуживания прерывания могут программно ликвидироваться. Кроме того, прерывания по ~INT0, ~INT1 могут вызываться программной установкой Р3.2=0 и РЗ.З=0, как показано в приведенном ниже примере:
EA EQU IE.7
MAIN: MOV IE, #00000101b
MOV IP, #04H
SETB EA
MOV P3,#11110011B
В предложенном примере запросы прерывания ~INT0 и ~INT1, имеющие различный приоритет, поступают одновременно. При этом обслуживается прерывание с высшим приоритетом.
Пример простейшей организации обслуживания прерываний представлен в приведенной ниже демо-программе.
В этой программе с помощью директивы Ассемблера А51 ORG задаются векторы процедур обслуживания прерывания INT0, которое возникает по срезу сигнала на входе РЗ.2, и прерывания по переполнению таймера Т0. В основной программе производится разрешение и настройка этих прерываний. При пошаговом запуске программы в отладчике DS51 можно контролировать состояния системы прерываний и таймера, вызывая соответствующие команды мз меню Peripheral. Чтобы вызвать прерывание необходимо установить соответствующие флаги в регистре TCON: TF0 - TCON.5 или IE0 - TCON.1. Сделать это можно с помощью команды >ТСОN.1 = 1 в окне выполнения Ехе (смотри Приложение).
23
бит аккумулятора записывается единица.
4. Написать подпрограмму, определяющую четность числа единиц в аккумуляторе без использования флага паритета Р.
6. Написать программу, вычисляющую 12 значений массива А по формуле А[i]=(3 * (i + 4)) and 0FEH; i = 1...12.
Полученный массив записать в ВПД, начиная с адреса С200Н.