
- •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. Изучить краткие теоретические сведения к лабораторной работе.
2. Ознакомиться с описанием средств программирования и отладки микроконтроллера МК51 в приложениях.
3. Создать в любом текстовом редакторе текст демо-программы на языке А51:
NAME SAMPLE
first EQU FOH
PUBLIC START
SAMP SEGMENT CODE
RSEG SAMP
START: mov PSW,#011000b ; выбор банка регистров 3
LOOP clr C ; сброс флага переноса
mov R1,#first ; загрузка в регистр R1 числа 0xF0
inc R1 ; инкремент содержимого R1
3
mov A,#first ; загрузка в аккумулятор числа 0xF0
swap A ; обмен местами тетрад в аккумуляторе
xch A,R1 ; обмен содержимого аккумулятора и R1
add A,R1 ; сложение содержимого аккумулятора и R1
jc LOOP ; переход на метку LOOP, если
; возник перенос
END
Текст программы записать в файл sample. a51.
4. Произвести компиляцию программы с отладочной директивой DEBUG: \а51 sample. a51 DEBUG. Убедиться в отсутствии ошибок. Просмотреть созданные компилятором файлы sample. lst и sample. obj.
5. Произвести компоновку программы: \151 sample. obj. Убедиться в создании абсолютного объектного модуля - файл sample. .
6. Просмотреть map-файл sample. m51.
7. С помощью отладчика DS51 произвести запуск программы в пошаговом режиме и убедиться в правильном выполнении контроллером всех команд созданной программы. Оценить результаты выполнения программы.
Рассмотрим выполнение программы, суммирующей элементы массива из памяти программ с константой и заносящей результат в массив памяти данных.
Исходный текст программы представлен ниже.
CONST EQU 5 ; Определение константы
N EQU 10 ; Определение размера массива (счетчик)
DSEG AT 30H
ORG 30H
MAS2: DS N ; Резервирование памяти в памяти данных
CSEG AT 0C000H
ORG 0C000H
JMP MAIN
ORG 0C100H ; Установка программного счетчика
MAS1: DB 0,1,2,3,4,5,6,7,8,9 ; Массив в памяти программ
MAIN: MOV DPTR,#MAS1 ; Загрузка регистра-указателя данных
MOV R0,#MAS2 ; Загрузка регистра косвенного адреса R0
MOV R1,#N ; Загрузка регистра R1– установка счетчика
L: CLR A ; Очистка аккумулятора А
MOVC A,@A+DPTR ; Загрузка аккумулятора очередным элементом массива
ADD A,#CONST ; Сложение аккумулятора с константой
MOV @R0,A ;Сохранение результата в памяти данных
INC DPTR ; Увеличение DPTR на 1
INC R0 ; Увеличение R0 на 1
DJNZ R1,L ; Уменьшение R1 на 1 и переход на метку L, если R1<>0
SETB P3.5 ;Зажечь светодиод
JMP $ ;Зациклить
END ; Конец программы
4
Задания.
При выполнении заданий используйте Таймер 0.
1. Мигать левым светодиодом, а по переполнению таймера вывести информацию с двух правых переключателей на остальные светодиоды.
При каждом пятом прерывании таймера сдвигать содержимое светодиодов вправо. Освободившийся светодиод должен отображать состояние правого тумблера.
Используя прерывания таймера организовать «тики» с периодом 20 мс. На их основе мигать светодиодами с чостотой 2 Гц.
При каждом четвертом переполнении таймера инвертировать состояние светодиодов.
Подсчитать количество нажатий на кнопку INTR1 за 5 сек. Отобразить на светодиодах.
Программу генерации звука заданой частоты (тумблерами).
Программу, которая фиксирует время нажатия и отпускания кнопки INTR1 в ячейках ОЗУ. Время должно быть выражнно в переполнениях таймера.После 20 отметок программа заканчивает работу.
Программа точно 1 раз в секунду увеличивает содержимое светодиодов.
Напишите программу, которая каждые 0,5 секунды увеличивает значение трех младших разрядов регистра R0 на 1 и выводит на светодиоды.
Напишите программу, которая через секунду после запуска программы увеличивает значение регистра трех младших разрядов R0 на 1, через 2 секунды – на 2, через 3 – на 3 и т.д. и выводит на светодиоды.
Напишите программу, которая последовательно считывает значения младшего байта содержимого таймера 0 и заполняет ими внешнюю память данных.
Напишите программу, которая последовательно считывает 16-ти разрядное значение содержимого таймера 0 и заполняет ими внешнюю память данных.
Напишите программу, подсчитывающую время в секундах с начала работы программы. Учтите переполнение.
Напишите программу, которая каждые 500мс циклически сдвигает содержимое трех старших разрядов регистра R0 на один разряд вправо и выводит на светдиоды.
Напишите программу, которая каждые 500мс циклически сдвигает содержимое регистровой пары (R2) (A) влево и младшие три разряда выводит на светодиоды.
Написать подпрограмму, определяющую количество единичных бит в байтах РПД по адресу 20Н 23Н. Полученный результат выставить на линиях порта 0, сопроводив его стробом на линии РЗ.6 и длительностью в одну секунду.
Написать программу, сканирующую линии порта 2. При наличии единицы на какой-либо линии записать в регистр с соответствующим номером текущее состояние младшего байта TL0 таймера Т0, предварительно запустив таймер на счет.
33
WAIT0: JNB P3.2,WAIT0 ; Ожидание “1”
WAITC: JB P3.2,WAITC ; Ожидание “0”
CLR TCON.4 ; Стоп Т/С0
EXIT: RET ; Выход из процедуры