Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
microproc_lab.doc
Скачиваний:
9
Добавлен:
23.04.2019
Размер:
290.82 Кб
Скачать

Порядок выполнения работы

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. Мигать левым светодиодом, а по переполнению таймера вывести информацию с двух правых переключателей на остальные светодиоды.

  1. При каждом пятом прерывании таймера сдвигать содержимое светодиодов вправо. Освободившийся светодиод должен отображать состояние правого тумблера.

  2. Используя прерывания таймера организовать «тики» с периодом 20 мс. На их основе мигать светодиодами с чостотой 2 Гц.

  3. При каждом четвертом переполнении таймера инвертировать состояние светодиодов.

  4. Подсчитать количество нажатий на кнопку INTR1 за 5 сек. Отобразить на светодиодах.

  5. Программу генерации звука заданой частоты (тумблерами).

  6. Программу, которая фиксирует время нажатия и отпускания кнопки INTR1 в ячейках ОЗУ. Время должно быть выражнно в переполнениях таймера.После 20 отметок программа заканчивает работу.

  7. Программа точно 1 раз в секунду увеличивает содержимое светодиодов.

  1. Напишите программу, которая каждые 0,5 секунды увеличивает значение трех младших разрядов регистра R0 на 1 и выводит на светодиоды.

  2. Напишите программу, которая через секунду после запуска программы увеличивает значение регистра трех младших разрядов R0 на 1, через 2 секунды – на 2, через 3 – на 3 и т.д. и выводит на светодиоды.

  3. Напишите программу, которая последовательно считывает значения младшего байта содержимого таймера 0 и заполняет ими внешнюю память данных.

  4. Напишите программу, которая последовательно считывает 16-ти разрядное значение содержимого таймера 0 и заполняет ими внешнюю память данных.

  5. Напишите программу, подсчитывающую время в секундах с начала работы программы. Учтите переполнение.

  6. Напишите программу, которая каждые 500мс циклически сдвигает содержимое трех старших разрядов регистра R0 на один разряд вправо и выводит на светдиоды.

  7. Напишите программу, которая каждые 500мс циклически сдвигает содержимое регистровой пары (R2) (A) влево и младшие три разряда выводит на светодиоды.

  8. Написать подпрограмму, определяющую количество единичных бит в байтах РПД по адресу 20Н  23Н. Полученный результат выставить на линиях порта 0, сопроводив его стробом на линии РЗ.6 и длительностью в одну секунду.

  9. Написать программу, сканирующую линии порта 2. При наличии единицы на какой-либо линии записать в регистр с соответствующим номером текущее состояние младшего байта TL0 таймера Т0, предварительно запустив таймер на счет.

33

WAIT0: JNB P3.2,WAIT0 ; Ожидание “1”

WAITC: JB P3.2,WAITC ; Ожидание “0”

CLR TCON.4 ; Стоп Т/С0

EXIT: RET ; Выход из процедуры

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]