ЗНАЕТЕ ЛИ ВЫ?

Фрагмент 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.3 Выполнение задания

 

Используя приведенный фрагмент, подготовьте программу по варианту из таблицы 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в операции сдвига?





Последнее изменение этой страницы: 2017-01-25; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.238.190.82 (0.006 с.)