- •Алматы 2011
- •1 Лабораторная работа №1. Байтовые и битовые команды. Логика
- •2 Лабораторная работа № 2.Маскирование. Суммирование массива
- •3 Лабораторная работа №3. Подпрограммы
- •4 Лабораторная работа №4. Умножение на дробное число
- •5 Лабораторная работа №5. Регулирование расхода газа
- •6. Лабораторная работа №6. Программирование клавиатуры
- •Фрагменты программы.
- •8 Лабораторная работа №8. Перевод чисел из 2-й в 2_10 систему.
- •9 Лабораторная работа №9. Таймер tmr1
- •10 Лабораторная работа №10. Прерывания
- •11 Лабораторная работа №11. Сложение двухбайтных чисел
- •Конец алгоритма
- •Конец алгоритма
- •Приложение а Регистр Status
- •Приложение б Описание инструкций мк pic
- •Приложение в Модуль таймера tmr1
- •Приложение г Карта памяти мк pic16877
- •Список литературы
- •0 50013, Алматы, Байтурсынова, 1
2 Лабораторная работа № 2.Маскирование. Суммирование массива
Цель работы: Обучение применения маскирования данных. Создание алгоритма суммирования массива.
При маскировании выполняется побитные логические операции исходного числа и маски с целью одновременного изменения нескольких разрядов исходного числа или проверки равенства чисел:
логическая операция ANDисходного числа и числа-маскиочищаетразряд числа в исходном числе, если в соответствующем разряде числа-маски записан 0, и не изменяет его, если в разряде маски записана единица;
логическая операция ORисходного числа и числа-маскиустанавливаетв разряд исходного числа 1, если в таком же разряде маски будет записана 1, и не изменяет его, если в этом разряде маски записан 0;
логическая операция «исключающее ИЛИ» (XOR)исходного числа и числа-маскиинвертируетсодержимое бита исходного числа, если в соответствующем разряде числа маски записана 1. Ине изменяетего, если в этом разряде маски записан 0. Часто применяется для определения равенства регистра какому-либо числу, записанному в маске.
Примеры: инвертирование, не изменяем, равенство.
Число 1001 1001 1001
Маска XOR 1111 XOR 0000 XOR 1001
Результат 0110 1001 0000
Примеры результатов маскирования приведены в таблице 2.1.
Т а б л и ц а 2.1 – Результаты маскирования
Объекты |
Операция | |||
OR (установка с 4 по 7 бит) |
AND (очистка с 0 по 3 бит) |
XOR (инверсия с 4 по 7 бит) |
XOR (проверка на равенство) | |
Число |
10101010 |
10101010 |
10101010 |
11011101 |
Маска |
11110000 |
11110000 |
11110000 |
11011101 |
Результат |
11111010 |
10100000 |
01011010 |
00000000 |
Циклические структуры организуются с помощью операторов условий совместно с оператором перехода. В предыдущих лабораторных работах мы применяли абсолютную адресацию, при этом адрес регистра записывается непосредственно в инструкцию. В этой лабораторной работе будем применять косвенную адресацию, при которой в инструкцию записывается указатель адреса, который может меняться в процессе выполнения программы.
Изучите способы организации программ с косвенной адресацией на примере приведенных ниже фрагментов. Регистр FSR,являющимся просто указателем, хранит адрес ячейки, к которой происходит обращение через имя формально существующего регистраINDF.
Задача.В массив записано потребление энергии за четыре месяца. Требуется определить суммарный расход энергии за указанный период и средний расход энергии в месяц.
Фрагменты программы. Применяемые символьные имена регистров показаны на рисунке 2.1. Стандартные операции настройки МК опущены.
Заполнение массива.
movlw D'2'
movwf SHAG
MOVLW D'11'
MOVWF EL_MAS_0
ADDWF SHAG, W; W= EL_MAS_0+SHAG
MOVWF EL_MAS_1
Аналогично заполняются остальные элементы массива.
CLRF SUM
CLRF IND_EL_MAS
MOVLWEL_MAS_0; считываем адрес регистра в аккумулятор.
MOVWF FSR; запись в регистр FSR адреса первого регистра.
NEXT_ELEM; метка для повторения цикла.
MOVF SUM, W; считываем значение регистра SUM в W.
ADDWF INDF, W; сложить W и текущий элемент массива.
MOVWF SUM; запоминаем новое значение SUM.
Подготовка к следующему циклу
INCF FSR, F; записываем в FSR адрес следующего регистра массива.
INCFIND_EL_MAS,F; фиксируем индекс этого регистра.
MOVLWD’4’; количество элементов в массиве.
XORWFIND_EL_MAS,W; маскированием проверяем: индекс равен 4.
BTFSS STATUS, Z; проверка –четыре элемента просуммировали (Z=1)?
GOTO NEXT_ELEM; только при Z=0, повторяем цикл.
; подготовка вычисления среднего значения.
MOVF SUM, W; если Z=1, копируем сумму в аккумуляторW.
MOVWF SREDNEE; копируем SUMв SREDNEE.
; нахождение среднего значения массива выполните самостоятельно.
END
Выполните самостоятельно деление на 4 с помощью сдвигов вправо командой RRF регистраSREDNEEдля определения среднего значения, см. таблицу 2.3. Не забывайте обнулять битCarryперед сдвигом.
Количество повторений в цикле определяется следующим образом, при каждом повторе цикла, увеличиваем индекс элемента в регистре и проверяем, маскированием равен ли он четырем. Поскольку регистр с индексом 4 будет лишним, выходим из цикла. Блок-схема программы приведена на рисунке 2.2. В ней предполагается, что в массив данные занесены.
Используя приведенный фрагмент, подготовьте программу по варианту из таблицы 2.4, выполняющую нахождение среднего указанных регистров. Результаты занесите в таблицу 2.3.
Т а б л и ц а 2.3– Сумма массива и среднее массива
Вариант |
Адрес регистра массива, указываемый в FSR |
Число в регистре массива |
Сумма в регистрах W или SREDNEE | ||
Регистр |
Форма h |
Форма D |
Форма В | ||
|
- |
- |
- |
00 |
00000000 |
11 |
1 |
24h |
D ‘11’ |
11 |
00001011 |
11 |
2 |
25h |
D ‘13’ |
24 |
00011000 |
11 |
3 |
26h |
D ‘15’ |
39 |
00100111 |
11 |
4 |
27h |
D ‘17’ |
56 |
00111000 |
Сдвигая регистр SREDNEE вправо, делим 56 на 2 |
28 |
00011100 | |||
Сдвигая регистр SREDNEE еще раз вправо, делим на 4. |
14 |
00001110 |
Т а б л и ц а 2.4 – Варианты заданий
Вариант |
Значение первого регистра |
Адреса регистров массива |
Вариант |
Значение первого регистра |
Адреса регистров массива |
1 |
D’21’ |
21h – 24h |
6 |
D’26’ |
26h – 29h |
2 |
D’22’ |
22h – 25h |
7 |
D’27’ |
27h – 30h |
3 |
D’23’ |
23h - 26h |
8 |
D’28’ |
28h – 31h |
4 |
D’24’ |
24h - 27h |
9 |
D’29’ |
29h – 32h |
5 |
D’25’ |
25h - 28h |
10 |
D’30’ |
30h – 33h |
П р и м е ч а н и е – Шаг заполнения массива примите равным двум. |
Создайте окно наблюдения для всех регистров в необходимом формате чисел и внесите в отчет по лабораторной работе. Для данной программы необходимые регистры показаны на рисунке 2.1. Чтобы быстро получить данные в окне наблюдения запустите составленную программу в автоматическом режиме. Иногда нужно дополнительно нажать F5 после выполнения программы. | |
Рисунок 2.1 – Окно наблюдения |
|
Контрольные вопросы
Какие биты Statusменяют свои значения при операциях вычислений?
Поясните команду условного перехода BTFSSSTATUS,Z.
Как можно определить равенство чисел?
Какие способы адресации вы знаете?
Как контролируется в цикле выход за пределы массива?
Назначение регистра FSR.
Назначение регистра INDF.
Как находится среднее четырех регистров?
Зачем очищается регистр SUMперед циклом сложения?
Какое участие принимает бит CрегистраStatus в операции сдвига?
Как очистить нечетные разряды числа?
Какой логической функцией устанавливают в разряды единицы?
Какой логической функцией определяют равенство чисел?
Зачем применяют логическую функцию Исключительно ИЛИ?
Как оставить информацию только в битах 0-3 заданного числа?
Приведите таблицы истинности для AND,OR,XOR.