- •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. Множественное ветвление программы:
3. Программа вычитает строку, указанную регистром r1, из строки, указанной регистром r0, с точностью, указанной регистром r2. После выполнения операции проверяется переполнение результата.
SUB: CLR C ; 3аем=0
BEG: MOV A,@R0 ; Загрузка байта уменьшаемого
SUBB A,@R1 ; Вычитание байта
MOV @R0,A ; Запоминание байта разности
INC R0 ; Установка указателей на следующее
INC R1 ; поле
DJNZ R2,BEG ; Выполнение цикла до завершения операции
; После завершения цикла проверяется ситуация переполнения в последней итерации.
JNB OV,OK
; .............
; Программа восстановления старших разрядов
OK: RET
III. Умножение и деление.
Команда MUL вычисляет произведение двух целых беззнаковых чисел, хранящихся в регистрах А и В. Младшая часть произведения размещается в А, а старшая – в регистре-расширителе В. Если содержимое В оказывается равным нулю, то флаг OV сбрасывается, иначе – устанавливается. Флаг переноса всегда сбрасывается.
Например, если аккумулятор содержал число 200 (0C8H), а расширитель 160 (0A0H), то в результате выполнения команды MUL АВ получится произведение 32000 (7D00H). Аккумулятор будет содержать нуль, а расширитель - 7DH, флаг OV будет установлен, а флаг С – сброшен.
1. Пусть требуется умножить целое двоичное число на константу. Исходное число размещается в резидентной памяти данных (РПД), адрес младшего байта находится в регистре R0. Формат числа в байтах хранится в R0:
CONST EQU 123
MOV A,#0 ; Сброс аккумулятора
L: ADD A,@R0 ; Загрузка множимого
11
MOV B,#CONST ; Загрузка множителя
MUL AB ; Умножение
MOV @R0,A ; Запись младшего байта частичного произведения
INC R0 ; Приращение адреса
MOV A,B ; Пересылка старшего байта частичного произведения в аккумулятор
XCH A,@R0 ; Предварительное формирование очередного байта произведения
DJNZ R1,L ; Цикл, если не все байты исходного числа умножены на константу
Полученное произведение размещается на месте исходного числа и занимает в РПД на один байт больше.
2. Команда DIV производит деление содержимого аккумулятора на содержимое регистра-расширителя. После деления аккумулятор содержит целую часть частного, а расширитель – остаток. Флаги C и OV сбрасываются. При делении на нуль устанавливается флаг переполнения, а частное остается неопределенным.
Команда деления может быть использована для перевода числа из одной системы счисления в другую.
Программа BINBCD выполняет преобразование целого двоичного 8-разрядного числа без знака, содержащегося в регистре А (значение в интервале 0-255), в трехзначное число двоично-кодированного формата BCD (два байта). Число сотен возвращается в поле переменной HUND, а числа десятков и единиц возвращаются в двоично-десятичном упакованном коде в поле другой переменной TENONE.
; BINBCD Выполняет преобразование 8-разрядного двоичного
; числа, хранящегося в регистре, в трехзначное число в
; двоично-десятичном упакованном формате.
; Число сотен размещено слева в поле переменной HUND,
; а числа десятков и единиц размещены в переменной TENONE.
ORG 21H
HUND DS 1
TENONE DS 1
BEG: MOV В,#100 ; Разделить на 100 для определения числа сотен
DIV АВ ; Разделить остаток на 10
MOV HUND,А ; для определения числа
MOV А,#10 ; сотен слева
ХСН А,В ; Цифра десятков в А
DIV АВ ; Остаток - цифра единиц
SWAP A ; В А цифры в двоично-десятичном упакованном формате
ADD А,В
MOV TENONE,A
RET
12