ЦиМТ ИЗ 1
.docxМИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное бюджетное образовательное учреждение высшего образования
«Томский государственный университет систем управления и радиоэлектроники» (ТУСУР)
Кафедра промышленной электроники
Индивидуальное задание №1 по дисциплине
Цифровая и микропроцессорная техника
Программная модель и система команд МК51
Вариант 19
Выполнил
Студент гр. 362-1
_________ Цвинтарный И.В
«___»__________20___ г.
Проверил
Доцент кафедры ПрЭ
____________ Воронин.А.И
«___»__________20___ г.
Томск 2023
Задание:
Положительные числа массива 20Н-27Н РПД микроконтроллера семейства МК51 переписать в предварительно обнуленный массив 28Н-2FH, а среднее арифметическое вывести на семисегментный индикатор.
Реализация задания:
R
Рисунок 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 – Результат работы программы