- •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. Инициализация Таймера 1 для автозагрузки с частотой 32х2400 Гц.
TR1 EQU TCON.6
TINIT: MOV TCON,#1101001B
MOV ТН1,#-13
SETB TR1
…
30
…
DB 11111111B ; SIN(89)=0.999
Примечательно, что данная программа обходится без использования указателя данных DPTR. Инкремент А перед обращением к таблице необходим из-за наличия однобайтной команды возврата, расположенной между командой MOVC и началом таблицы значений синуса.
2. Вычислить произведение двух 4-х битных чисел, расположенных в младших тетрадах регистров R0 и R1. Для вычисления используется таблица произведений для всех комбинаций сомножителей (всего 256). Произведение двух младших тетрад имеет формат 1 байт.
; Вычисление Z=X*Y
; R0=0000.XXXX
; R1=0000.YYYY
; X и Y принимают значения 0 и 1
ORG 0C100H ; Директива ассемблера, задающая
; начальный адрес программы
MOV DPTR, #MAS ; Загрузка адреса массива
; в регистр-указатель данных
MOV A,R0 ; Пересылка множимого в аккумулятор
SWAP A ; Обмен тетрад аккумулятора
ORL A,R1 ; Формирование в аккумуляторе адреса
; произведения
MOVC A,@A+DPTR ; Загрузка в аккумулятор произведения
ORG 0C300H ; Директива ассемблера, задающая
; начальный адрес таблицы
; Директивы ассемблера, формирующие таблицу произведений
MAS DB 0,0,0,0,0,0,0,0 ; Z=0*Y
DB 0,0,0,0,0,0,0,0
DB 0,1,2,…..,0FH ; Z=1*Y (1*0,1*1,1*2,…,1*0FH)
…
…
DB 0,0FH,1EH,…,0E1 ; Z=0F*Y
; (0FH*0,0FH*1,0FH*2,…,0FH*0FH)
III. Работа с внешней памятью данных (впд).
1. Запомнить в впд содержимое регистров банка 0.
Начальный адрес ВПД – 0D000h
MOV PSW,#01000B ; Выбор банка регистров 1
MOV R0,#8 ; Счетчик = 8
MOV DPTR,#0D000H ; Определение начального адреса ВПД
MOV R1,#0 ; Определение начального адреса РПД
L: MOV A,@R1 ; (А) = (регистр)
MOVX @DPTR,A ; Передача из аккумулятора в ВПД
INC R1 ; Переход к следующему регистру
INC DPTR ; Приращение указателя адреса
DJNZ R0,L ; R0=R0-1, если R0>0, то повторить
7
IV.Операции со стеком.
1. Перед загрузкой в стек содержимое регистра-указателя стека (SP) инкрементируется, а после извлечения из стека – декрементируется.
По сигналу системного сброса в SP заносится значение 07h. Для переопределения SP можно воспользоваться командой MOV SP,#D
Пример:
ORG 0h
MOV SP,#BUFSTEK ; Инициализация стека
… ; Программа
…
ORG 40h
BUFSTEK DS 10 ; Резервирование памяти для стека
2. Классический пример работы со стеком – подпрограмма обработки прерывания должна сохранить в стеке содержимое тех регистров, которые она сама будет использовать, а перед возвратом в прерванную программу должна восстановить их значения.
ORG 0C003H ; Задание адреса вектора прерывания
LJMP SUB ; Переход на подпрограмму обработки
ORG 0C100H
SUB: PUSH PSW ; Сохранение в стеке PSW
PUSH A ; Сохранение аккумулятора
PUSH B ; Сохранение B
PUSH DPL ; Сохранение DPTR
PUSH DPH
MOV PSW,#1000B ; Выбор банка регистров 1
… ; Обработка прерывания
…
POP DPH ; Восстановление сохраненного
POP DPL
POP B
POP A
POP PSW ; Восстановление PSW и номера регистрового банка
RETI ; Возврат