Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
shamr_voprosy.docx
Скачиваний:
6
Добавлен:
26.06.2024
Размер:
161.73 Кб
Скачать

Вариант 21. В порты микроконтроллера р0-р3 поступают двоично-десятичные данные. Перевести данные в шестнадцатеричный формат и разместить в рпд последовательно с адреса 30h.

ORG 0 ; Установка начального адреса

MOV R1, #0 ; Инициализация счетчика

MOV R2, #16 ; Установка количества данных для обработки

CONVERSION_LOOP:

MOV A, P0 ; Загрузка двоично-десятичного числа из порта P0 в аккумулятор A

CLR C ; Сброс флага переноса

ADD A, #6 ; Добавление 6 для преобразования в ASCII-код шестнадцатеричной цифры

JNC SKIP_ADDITION ; Пропустить добавление 7, если нет переноса

ADD A, #7 ; Добавление 7 для преобразования в ASCII-код шестнадцатеричной цифры

SKIP_ADDITION:

ADD A, #30h ; Преобразование в ASCII-код цифры

MOV @R1, A ; Сохранение результата в РПД

INC R1 ; Увеличение указателя РПД

DJNZ R2, CONVERSION_LOOP ; Повторение цикла для следующего элемента

EXIT:

SJMP EXIT

END ; Конец программы

Вариант 22. Выдать последовательно в порты р1 и р2 микроконтроллера содержимое младших байт счетчиков в двоично-десятичном формате (в р1 – сотни, в р2 – десятки и единицы).

MOV A, R0 ; Загрузка содержимого счетчика R0 в аккумулятор A

MOV B, #100

DIV AB ; Деление аккумулятора A на 100, результат будет содержаться в AB

MOV R1, B ; Сохранение сотен в порт Р1

MOV A, B ; Загрузка содержимого B в аккумулятор A

MOV B, #10

DIV AB ; Деление аккумулятора A на 10, результат будет содержаться в AB

MOV R2, B ; Сохранение десятков в порт Р2

MOV A, B ; Загрузка содержимого B в аккумулятор A

MOV R3, A ; Сохранение единиц в порт Р3

Вариант 23. В порты р0÷р3 поступают шестнадцатеричные данные. Занести в рпд, начиная с адреса 40h количество единиц, поступивших в каждый порт.

ORG 0h ; Начальный адрес программы

START:

MOV R0, #40h ; Инициализация регистра R0 с адресом начала РПД (40h)

MOV R1, #0 ; Инициализация регистра R1

MOV R2, #0 ; Инициализация регистра R2

MOV R3, #0 ; Инициализация регистра R3

LOOP:

MOV A, P0 ; Загрузка значения из порта P0 в аккумулятор A

INC P0 ; Увеличение значения в порте P0

MOV @R0, A ; Запись значения аккумулятора A в РПД с адресом, указанным в R0

INC R0 ; Увеличение значения в регистре R0

INC R1 ; Увеличение значения в регистре R1

MOV A, P1 ; Загрузка значения из порта P1 в аккумулятор A

INC P1 ; Увеличение значения в порте P1

MOV @R0, A ; Запись значения аккумулятора A в РПД с адресом, указанным в R0

INC R0 ; Увеличение значения в регистре R0

INC R2 ; Увеличение значения в регистре R2

MOV A, P2 ; Загрузка значения из порта P2 в аккумулятор A

INC P2 ; Увеличение значения в порте P2

MOV @R0, A ; Запись значения аккумулятора A в РПД с адресом, указанным в R0

INC R0 ; Увеличение значения в регистре R0

INC R3 ; Увеличение значения в регистре R3

MOV A, P3 ; Загрузка значения из порта P3 в аккумулятор A

INC P3 ; Увеличение значения в порте P3

MOV @R0, A ; Запись значения аккумулятора A в РПД с адресом, указанным в R0

INC R0 ; Увеличение значения в регистре R0

CJNE R0, #50h, LOOP ; Проверка значения в регистре R0, если не достигнуто конечное значение (50h), перейти к LOOP

EXIT:

SJMP EXIT ; Бесконечный цикл, чтобы программа не завершалась случайно

END