Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы микропроцессорной техники.Вариант 12..doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
592.9 Кб
Скачать

5. Формирование инвертирущей маски.

Требуется инвертировать следующие биты ­– 0, 4, 8, 9, 12, 15. Сформируем инвертирующую маску. Для этого запишем двоичное число, в котором эти биты равны 1, а все остальные 0.

15

14

13

12

11

10

09

08

07

06

05

04

03

02

01

00

Номера битов

1

1

1

1

1

1

Биты для сброса

1

0

0

1

0

0

1

1

0

0

0

1

0

0

0

1

Маска

Итак, устанавливающая маска для указанных битов следующая:

1001 0011 0001 0001B = 4311H = 111421O

Произведем наложение инвертирующей маски на результат, полученный в п. 1. Для этого требуется выполнить логическую операцию Исключающее ИЛИ (XOR) числа с маской.

XOR

0

0

0

0

0

1

0

0

0

1

1

1

0

0

0

0

Число

1

0

0

1

0

0

1

1

0

0

0

1

0

0

0

1

Маска

1

0

0

1

0

1

0

0

0

1

1

0

0

0

0

1

результат

В результате наложения маски биты с номерами 0, 4, 8, 9, 12, 15 инвертированы, остальные биты не изменили своего состояния.

Задание №3. Программирование микроконтроллеров. Работа с массивами.

Разработать программы, выполняющие следующие задачи (для каждой задачи, разрабатывается отдельная программа):

  1. Имеется массив элементов размером байт. Массив начинается с адреса ADDR1. Количество элементов массива N. Требуется заполнить элементы массива в соответствии со способом, указанным в варианте задания.

  2. Имеется два массива элементов размером байт. Количество элементов для обоих массивов N. Первый массив находится с адреса ADDR1, второй – с адреса ADDR2. Требуется переслать элементы первого массива во второй массив.

  3. Требуется произвести сложение всех элементов массива, начинающегося с адреса ADDR2. Сложение производит с удвоенной точностью (два байта).

Значения ADDR1, ADDR2, N и способ заполнения массива выбирается из таблицы 3.1 для требуемого варианта.

Требования по оформлению программ

  • привести алгоритм (блок-схему) для каждой, разработанной программы

  • текст программы с подробными комментариями.

Таблица 3.1. Варианты для задания №3

Номер варианта

ADDR1

Адрес первого массива

ADDR2

Адрес второго массива

N количество элементов массива

Действие при заполнении массива

1

20H

30H

8

Начать с числа 000H, увеличивать число на 1 для каждой новой ячейки

2

28H

30H

6

3

30H

40H

8

4

38H

40H

6

5

40H

50H

8

6

20H

30H

8

Начать с числа 0FFH, уменьшать число на 1 для каждой новой ячейки

7

28H

30H

6

8

30H

40H

8

9

38H

40H

6

10

40H

50H

8

11

20H

30H

8

Начать с числа 000H, увеличивать число на 2 для каждой новой ячейки

12

28H

30H

6

13

30H

40H

8

14

38H

40H

6

15

40H

50H

8

16

20H

30H

8

Начать с числа 0FFH, уменьшать число на 2 для каждой новой ячейки

17

28H

30H

6

18

30H

40H

8

19

38H

40H

6

20

40H

50H

8

Пример выполнения задания №3

1. Программа, заполняющая массив из 8 элементов, начиная с адреса 50H, числа в ячейках начинаются с 000H, и для каждой новой ячейки увеличиваются на 1.

Блок-схема алгоритма.

Текст программы.

; начальная настройка

MOV A, #00H ; в аккумуляторе число которое надо занести в ячейку,

; начинаем с 00H

MOV R0, #50H ; в R0 – указатель на текущую ячейку массива

; первая ячейка имеет адрес 050H

MOV R2, #8H ; в R2- счетчик количества элементов = 8

M0:

; запись числа в массив

MOV @R0, A ; записываем текущее значение числа

; в текущую ячейку памяти

; изменение значения числа

ADD A, #01H ; увеличиваем значение числа на 1

; переход к следующей ячейке массива