Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЦиМТ ИЗ 1

.docx
Скачиваний:
3
Добавлен:
21.06.2023
Размер:
87.9 Кб
Скачать

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное бюджетное образовательное учреждение высшего образования

«Томский государственный университет систем управления и радиоэлектроники» (ТУСУР)

Кафедра промышленной электроники

Индивидуальное задание №1 по дисциплине

Цифровая и микропроцессорная техника

Программная модель и система команд МК51

Вариант 19

Выполнил

Студент гр. 362-1

_________ Цвинтарный И.В

«___»__________20___ г.

Проверил

Доцент кафедры ПрЭ

____________ Воронин.А.И

«___»__________20___ г.

Томск 2023

Задание:

Положительные числа массива 20Н-27Н РПД микроконтроллера семейства МК51 переписать в предварительно обнуленный массив 28Н-2FH, а среднее арифметическое вывести на семисегментный индикатор.

Реализация задания:

R

С помощью цикла обнуляем массив памяти 20h-27h. С помощью команды mov загружаем положительные числа в массив памяти 28h-2fh. В цикле с переносом данных из массивов организуем загрузку в регистр R3 значения с ячейки памяти и сумы с следующим содержимого с регистром. Так мы получим суму всех значений из массива. После этого поделим нашу суму на 8 так как это количество наших чисел. Результирующие значение суммируем с DPTR и по этой ячейки возьмем код из памяти программ и выведем значение на порт P0. Порт P0 подключим к семисигментному индикатору. На Рис.1 показана функциональная схема устройства на МК51 для реализации задания.

Рисунок 1 - Функциональная схема устройства

Резисторы R1…R8 служат для увеличения помехозащищенности ТТЛ выходов микроконтроллера.

Порт P0 настроим на вывод данных.

Ниже на Рисунке 2 представлен алгоритм работы прикладной программы:

Рисунок 2 - Алгоритм прикладной программы

Ниже приводится исходный текст программы на языке Ассемблер МК51:

org 0

MOV DPTR, #050H

MOV R0, #020H ; Установить регистр R0 в значение 028H

MOV R1, #020H ; Установить регистр R1 в значение 020H

MOV A, #8 ; Установить регистр A в значение 8

M1: MOV @R0, #0 ; Записать значение 0 по адресу, указанному в R0

INC R0 ; Увеличить значение R0 на 1

DEC A ; Уменьшить значение A на 1

JNZ M1 ; Перейти к метке M1, если значение A не равно нулю

MOV 20h, #9 ; Записать значение 9 по адресу 20h

MOV 21h, #6

MOV 22h, #8

MOV 23h, #2

MOV 24h, #8

MOV 25h, #3

MOV 26h, #9

MOV 27h, #3

MOV A, #8 ; Установить аккумулятор в значение 8

M2: PUSH ACC ; Положить значение регистра ACC на стек

MOV A, @R1 ; Загрузить значение из адреса, указанного в R1, в A

MOV @R0, A ; Записать значение из регистра A по адресу, указанному в R0

ADD A, R3 ; Прибавить значение регистра R3 к A

MOV R3, A ; Сохранить значение A в регистр R3

INC R0 ; Увеличить значение R0 на 1

INC R1 ; Увеличить значение R1 на 1

POP A ; Извлечь значение из стека в A

DEC A ; Уменьшить значение A на 1

JNZ M2 ; Перейти к метке M2, если значение A не равно нулю

MOV A, R3 ; Загрузить значение регистра R3 в A

MOV B, #08 ; Установить регистр B в значение 08

DIV AB ; Выполнить деление регистров A и B

MOVC A, @A+DPTR

MOV P0, A ; Записать значение из A в порт P0

JMP $

org 50h

db 11000000b ; 0

db 11111001b ; 1

db 10100100b ; 2

db 10110000b ; 3

db 10011001b ; 4

db 10010010b ; 5

db 10000010b ; 6

db 11111000b ; 7

db 10000000b ; 8

db 10010000b ; 9

end

Рисунок 3 – Результат работы программы