Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Краткие теоретические сведения.




 

Маскирование – это специальный прием программирования в цифровой технике, который базируется на побитных логических операциях. Цель маскирования одновременно изменить или проверить несколько разрядов исходного числа по маске.

Правила маскирования с помощью логических операций:

- логическая операция AND исходного числа и числа-маски очищает разряд в исходном числе, если в соответствующем разряде числа-маски записан 0, и не изменяет его, если в разряде маски записана единица;

- логическая операция OR исходного числа и числа-маски устанавливает в разряд исходного числа 1, если в таком же разряде маски записана 1, и не изменяет его, если в этом разряде маски записан 0;

- логическая операция «Исключающее ИЛИ» (XOR) исходного числа и числа-маски инвертирует содержимое бита исходного числа, если в соответствующем разряде числа маски записана 1. И не изменяет его, если в этом разряде записан 0. Часто применяется для определения равенства регистра какому-либо числу записанному в маске.

 

Т а б л и ц а 6.1 – Результаты маскирования

    Объекты Операция
OR (установка с 4 по 7 бит) AND (очистка с 0 по 3 бит) XOR (инверсия с 4 по 7 бит) XOR (проверка чисел на равенство)
Число       00001101
Маска       00001101
Результат        

 

 

Исходные данные и задание

 

Изучите приемы маскирования с помощью логических функций, показанные ниже.

Фрагмент 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 – Варианты заданий

Вариант Маска для AND и OR Число из PORTD Биты проверяемые на наличие 1 Вариант Число из PORTD Число из PORTD Биты проверяемые на наличие 1
      1, 2, 3       6, 7, 0
      2, 3, 4       7, 0, 1
      3, 4, 5       0, 2, 3
      4, 5, 6       1, 3, 4
      5, 6, 7       2, 5, 6

 

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_0 EQU h'40'; нулевой элемент массива.

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– Сумма массива и среднее массива

Вариант Индекс регистра Адрес регистра массива, указываемый в FSR Число в регистре массива Сумма в регистре W
Форма h Форма D Форма В
  - - -    
    40h D ‘11’    
    41h D ‘13’    
    42h D ‘15’    
    43h D ‘17’    
    56 делим на 2    
    28 делим на 2 получаем среднее    

Т а б л и ц а 7.2 – Варианты заданий

Вариант Значение первого регистра Адреса регистров массива Вариант Значение первого регистра Адреса регистров массива
  D’21’ 21h – 24h   D’26’ 26h – 29h
  D’22’ 22h – 25h   D’27’ 27h – 30h
  D’23’ 23h -26h   D’28’ 28h – 31h
  D’24’ 24h -27h   D’29’ 29h – 32h
  D’25’ 25h -28h   D’30’ 30h – 33h
Примечание. Шаг заполнения массива примите равным двум.

 

Создайте окно наблюдения для всех регистров в необходимом формате чисел и внесите в отчет по лабораторной работе. Для данной программы необходимые регистры показаны на рисунке 7.2. Чтобы быстро получить данные в окне наблюдения запустите составленную программу в автоматическом режиме и затем нажмите кнопку F5.
Рисунок 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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...