- •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. Множественное ветвление программы:
Индивидуальные задания 2
1. Написать программу, вычисляющую 20 значений массива А по формуле А[i]=7*i + 5; i = 0...19.
Полученный массив записать в РПД, начиная с адреса 40Н.
2. Написать подпрограмму, копирующую в цикле 10 байт из РПД, наложенных на маску 1001100lb, начиная с адреса 50Н, во внешнюю память данных (ВПД), начиная с адреса С200Н. В программе осуществить вызов этой процедуры и возврат из нее.
3. Написать подпрограмму, сканирующую в цикле состояние регистров R0-R7 текущего регистрового банка. Если значение регистра равно нулю - соответствующий
номеру регистра бит аккумулятор тоже сбрасывается. Если регистр не равен нулю - в
21
;Таблица векторов переходов
TABLE: DB ROUT0 ; Начальный адрес программы ROUT0
DB ROUT1
DB ROUT2
…
…
DB ROUTF ; Начальный адрес программы ROUTF
6. Последовательная передача параметров
Если подпрограмма вызывается часто, то наиболее эффективным программным способом передачи параметров является последовательный. Константы в этом случае являются частью программного кода и следуют непосредственно за инструкцией вызова подпрограммы. По адресу возврата в стеке подпрограмма определяет место расположения параметров для последующего считывания.
Например, подпрограмма LINE выполняет сложение 16-разрядной упакованной двоично-десятичной константы с двухбайтной двоично-десятичной переменной, хранящейся во внутренней памяти ЗУ, и запоминает сумму в другом двухбайтном буфере. В подпрограмму должны передаваться константа и оба адреса буферов. Вместо использования для этих целей четырех рабочих регистров используются 4 байта в памяти программ, следующих за командой вызова подпрограммы.
В приведенном ниже примере подпрограмма осуществляет сложение десятичной константы 1234 с содержимым адреса внутренней памяти 56Н и записывает результат в буфер по адресу 78Н. Подпрограмма LINE определяет, из какой точки был осуществлен ее вызов путем извлечения из стека адреса возврата в старший и младший байты указателя данных.
Инструкция MOVC затем считывает параметры из памяти программы по мере необходимости.
CALL LINE
DW 1234H ; BCD-константа
DB 56Н ; Адрес строки операнда
DB 78Н ; Адрес строки результата
; .......... Продолжение программы
LINE: POP DPH ; Извлечение адреса возврата в DPTR
POP DPL
MOV А, #2 ; Индекс строк источника параметров
MOVC A,@A+DPTR ; Извлечение адреса строки источника
MOV R0,A
MOV A,#3 ; Индекс строк приемника параметров
MOVC A,@A+DPTR ; Извлечение адреса строки приемника
MOV R1, А
MOV А,#1 ; Индекс мл.байта 16-разр. константы
MOVC A,@A+DPTR ; Извлечение мл. байта константы
ADD A,@R0 ; Вычисление мл. байта суммы
DA А ; Десятичная коррекция
MOV @R1,A ; Запись в буфер
INC R0
INC R1
CLR A ; Индекс ст. байта равен нулю
MOVC A,@A+DPTR ; Извлечение ст. байта константы
20
6. Определить и записать в регистры R3-R6 флажки, указывающие на то, были ли взведены во всех портах биты, соответствующие их номерам.
7. Определить и записать в регистры флажки, указывающие на то, взведены ли биты 0, 2, 4 порта Р1. Создать результирующий байт, в котором 1 в соответствующем бите свидетельствует о наличии высокого уровня сигнала на этой линии порта Р1. Байт сохранить в аккумуляторе.
8.Создать байт флагов, наличие единицы в каждом бите которого свидетельствует о наличии высокого уровня сигнала в данной линии хотя бы на одном из портов Р1-Р4.
