Краткие теоретические сведения.
Маскирование – это специальный прием программирования в цифровой технике, который базируется на побитных логических операциях. Цель маскирования одновременно изменить или проверить несколько разрядов исходного числа по маске. Правила маскирования с помощью логических операций: - логическая операция AND исходного числа и числа-маски очищает разряд в исходном числе, если в соответствующем разряде числа-маски записан 0, и не изменяет его, если в разряде маски записана единица; - логическая операция OR исходного числа и числа-маски устанавливает в разряд исходного числа 1, если в таком же разряде маски записана 1, и не изменяет его, если в этом разряде маски записан 0; - логическая операция «Исключающее ИЛИ» (XOR) исходного числа и числа-маски инвертирует содержимое бита исходного числа, если в соответствующем разряде числа маски записана 1. И не изменяет его, если в этом разряде записан 0. Часто применяется для определения равенства регистра какому-либо числу записанному в маске.
Т а б л и ц а 6.1 – Результаты маскирования
Исходные данные и задание
Изучите приемы маскирования с помощью логических функций, показанные ниже. Фрагмент 6.1. Установка четырех бит с помощью функции OR. MOVLW B’10101010’; загрузить константу h’АА’ в регистр W. MOVWF PORTC; переслать константу в PORTC. MOVLW B’11110000’; установить маску. IORWF PORTC, F; подаем энергию в PORTC с 4 по 7 разряды. Фрагмент 6.2. Сброс четырех бит с помощью функции AND.
MOVLW B’10101010’; загрузить константу h’АА’ в регистр W. MOVWF PORTC; переслать константу в PORTC. MOVLW B’11110000’; установить маску в регистре W. ANDWF PORTC, F; выключаем энергию в PORTC с 0 по 3 разряды. Фрагмент 6.3. Процедура инвертирования бит. MOVLW b’10101010’; загрузить h’АА’ в регистр W. MOVWF R1; загрузить h’АА’ из W в R1. MOVLW b’11110000’; маска для инверсии с 4 по 7 бит. XORWF R1, W; применяем логическую функцию. MOVWF PORTC; проверяем светодиодами результат в порте С. Фрагмент 6.4. Определение равенства чисел и его применение. Пусть к битам регистра PORTD, настроенного на ввод информации в ЦПУ, подключены: конечный выключатель ограждения окрасочной камеры (бит 3), датчик наличия заготовок (бит 2), датчик наличия заданной температуры в камере (бит 0). В этом случае предварительная звуковая сигнализация S1, присоединенная к нулевому биту PORTC, должна включиться при значении «1» в этих битах информации, что определяется фрагментом программы описанным ниже. Clrf PORTC Movlw b’11011101’; информация пересланная в PORTD. Movwf R1; регистр хранящий информацию из PORTD. Movlw b’00001101’; жирным выделены интересующие нас биты 0, 2, 3. Movwf Maska; число для маски, примененной в операции XOR. Movlw b’00001101’; маска для операции AND. Andwf R1, W; все биты кроме 0, 2, 3 обнуляем. Xorwf Maska, w; проверяем записаны ли в этих битах единицы. Movlw b’10000001’; предполагаем что да, тогда надо включить сирену. Btfss STATUS, Z; равно ли преобразованное число из PORTD маске? Movlw b’10000000’; если Z=0 (число равно маске) не включать сирену. Movwf PORTC Подготовьте программу, выполняющую маскирование на основе приведенных фрагментов для варианта из таблицы 6.2. Запишите результаты в таблицу 6.1. Не забудьте создать окно наблюдения за значениями всех регистров.
Т а б л и ц а 6.2 – Варианты заданий
6.3 Контрольные вопросы
1. Расскажите, какую реальную задачу решает ваша программа. 2. Как очистить нечетные разряды числа? 3. Какой логической функцией устанавливают в разряды единицы? 4. Какой логической функцией определяют равенство чисел? 5. Как очистить с 0 по 3 разряды? 6. Как установить с 4 по 7 разряды? 7. Зачем применяют логическую функцию Исключающее ИЛИ? 8. Укажите значение бита Z регистра STATUS после логической операции AND, если маска равна 00h? 9. Как инвертировать все нечетные биты в числе? 10. Проверка равенства определенных бит числа заданному значению? 11. Как оставить информацию только в битах 0-3 заданного числа? 12. Таблицы истинности для AND, OR, XOR. 13. Какое оборудование подключено к проверяемым битам?
Суммирование массива информации
Цель работы: использование косвенной адресации при создании программы суммирования массива. Определение среднего значения массива.
Теоретические сведения
Суммирование применяется для различных целей: подсчета количества поступивших изделий, определение средней температуры за расчетный период времени и других. Циклические структуры организуются с помощью операторов условий совместно с оператором перехода. В предыдущих лабораторных работах мы применяли абсолютную адресацию, при этом адрес регистра записывается непосредственно в инструкцию. Здесь будем применять косвенную адресацию при которой в инструкцию записывается указатель адреса, который может меняться в процессе выполнения программы. Изучите способы организации программ с косвенной адресацией на примере приведенных ниже фрагментов. Регистр FSR, являющимся просто указателем, хранит адрес ячейки, к которой происходит обращение через имя формально существующего регистра INDF. Исходные данные Задача. В массив записано потребление энергии по месяцам. Требуется определить суммарный расход энергии за указанный период и средний расход энергии в месяц. Блок-схема алгоритма представлена на рисунке 7.1.
Рисунок 7.1 – Блок-схема
Фрагменты программы.
Include<p16f877.inc> EL_MAS_1 EQU h'41' EL_MAS_2 EQU h'42' EL_MAS_3 EQU h'43'; последний элемент массива. IND_EL_MAS EQU h'50'; индекс прибавляемого элемента массива. SHAG EQU h'22'; шаг изменения данных. KOL_EL EQU h'44'; регистр хранения количества элементов массива. SUM EQU h'51'; регистр хранения суммы. SREDNEE EQU h'52'; регистр для хранения среднего расхода энергии. ; Стандартные операции настройки МК опущены. ; Заполнение массива MOVLW D'2' MOVWF SHAG MOVLW D'11' MOVWF EL_MAS_0 ADDWF SHAG, W; W= EL_MAS_0+SHAG MOVWF EL_MAS_1 ADDWF SHAG, W; W= EL_MAS_1+SHAG MOVWF EL_MAS_2 ADDWF SHAG, W; W= EL_MAS_2+SHAG MOVWF EL_MAS_3 CLRF SUM CLRF IND_EL_MAS MOVLW D'4'; количество элементов массива. MOVWF KOL_EL MOVLW EL_MAS_0; запись в аккумулятор адреса регистра EL_MAS_0. MOVWF FSR; запись в регистр FSR адреса первого регистра массива. NEXT_ELEM MOVF SUM, W ADDWF INDF, W; сложить W и текущий элемент массива. MOVWF SUM; запоминаем полученную сумму. ; Подготовка к следующему циклу INCF FSR, F; переход к адресу следующего регистра массива. INCF IND_EL_MAS, F; фиксируем индекс следующего элемента. MOVF KOL_EL, W XORWF IND_EL_MAS, W; проверяем индекс элемента равен 4? BTFSS STATUS, Z; проверка – все элементы суммировали (Z=1)? GOTO NEXT_ELEM; только если Z =0, повторяем цикл. ; Подготовка вычисления среднего значения MOVF SUM, W; если Z=1, все элементы сложили, запоминаем сумму. MOVWF SREDNEE; копируем SUM в SREDNEE. END
Выполните самостоятельно деление на 4 регистра SREDNEE с помощью его сдвигов вправо для определения среднего значения. Количество повторений в цикле определяется следующим образом. Сначала записывается количество элементов в регистр Kol_El. Затем при каждом повторе цикла, увеличиваем индекс элемента в регистре и проверяем, получен ли ноль командой XORWF IND_EL_MAS, W, (здесь W= Kol_El). Поскольку регистр с индексом 4 будет лишним, выходим из цикла. Блок-схема программы приведена на рисунке 7.1. В ней предполагается, что в массив занесены данные.
Выполнение задания
Используя приведенный фрагмент, подготовьте программу по варианту из таблицы 7.2. Результаты занесите в таблицу 7.1.
Т а б л и ц а 7.1– Сумма массива и среднее массива
Т а б л и ц а 7.2 – Варианты заданий
7.4 Контрольные вопросы 1. БитыStatus меняющие свои значения при операциях вычислений? 2. Поясните команду условного перехода BTFSS STATUS, Z. 3. Поясните команду XORWF IND_EL_MAS, W. 4. Как можно определить равенство чисел? 5. Какие способы адресации вы знаете? 6. Как контролируется в цикле выход за пределы массива? 7. Назначение регистра FSR. 8. Назначение регистра INDF. 9. Как находится среднее четырех регистров? 10. Как выполняется деление на четыре? 11. Зачем очищается регистр IND_EL_MAS перед циклом сложения? 12. Какое участие принимает бит C регистра Statusв операции сдвига?
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|