Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ ЦТ и МК для стенда 2013.doc
Скачиваний:
20
Добавлен:
01.05.2015
Размер:
3.21 Mб
Скачать

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. Какое оборудование подключено к проверяемым битам?

7 Суммирование массива информации

Цель работы: использование косвенной адресации при создании программы суммирования массива. Определение среднего значения массива.

7.1 Теоретические сведения

Суммирование применяется для различных целей: подсчета количества поступивших изделий, определение средней температуры за расчетный период времени и других.

Циклические структуры организуются с помощью операторов условий совместно с оператором перехода. В предыдущих лабораторных работах мы применяли абсолютную адресацию, при этом адрес регистра записывается непосредственно в инструкцию. Здесь будем применять косвенную адресацию при которой в инструкцию записывается указатель адреса, который может меняться в процессе выполнения программы.

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

7.2 Исходные данные

Задача.В массив записано потребление энергии по месяцам. Требуется определить суммарный расход энергии за указанный период и средний расход энергии в месяц. Блок-схема алгоритма представлена на рисунке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. Затем при каждом повторе цикла, увеличиваем индекс элемента в регистре и проверяем, получен ли ноль командойXORWFIND_EL_MAS,W, (здесьW=Kol_El). Поскольку регистр с индексом 4 будет лишним, выходим из цикла. Блок-схема программы приведена на рисунке 7.1. В ней предполагается, что в массив занесены данные.