Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Системы счислений. Карта памяти микроконтроллераСтр 1 из 7Следующая ⇒
Введение Современное состояние технологии в электротехнике требует от специалистов знания микроконтроллеров. В настоящее время в составе выпускаемых изделий многих фирм в дальнем и ближнем зарубежье содержатся микроконтроллеры, и область их применения постоянно увеличивается. Микроконтроллеры широкого назначения выпускаются многочисленными зарубежными фирмами: Motorola, NEC Corporation, Siemens, Microchip и другими. Применение методов и технических средств обработки информации цифровой вычислительной техникой в релейной защите и автоматике (РЗА) привело к созданию интегрированных комплексов, выполняющих все функции традиционных устройств РЗА и обладающих широкими информационными свойствами и сервисными возможностями, существенно повышающими надежность и эффективность функционирования технических средств автоматического управления электроэнергетическими установками [1]. Для обучения студентов цифровой технике и программированию микроконтроллеров на кафедре имеется учебный микропроцессорный комплект (УМК-7). Помимо обучения языку ассемблер на примере контроллера PIC16F877А, студенты знакомятся с внутренней и внешней структурой современных микроконтроллеров, применяемых в оборудовании. До дня проведения работы студенты должны к ней подготовиться: прочитать описание лабораторной работы и составить программы для своего варианта задания. Отчет о лабораторной работе должен содержать титульный лист, задание, текст программы заполненную таблицу результатов, рисунки с копиями экрана и ответы на контрольные вопросы. Лабораторная работа должна быть защищена студентом. Оборудование и программное обеспечение для проведения лабораторных работ: Windows 98 или выше, среда MPLAB, комплект УМК-7. Системы счислений. Карта памяти микроконтроллера
Цель работы: приобрести начальные знания в области применения микроконтроллеров и основ цифровой техники.
Задания Задание 1.Сложите числа в двоичной системе. Представьте слагаемые и результаты вычислений в шестнадцатеричной, десятичной и в двоично-десятичной системах счислений.
Т а б л и ц а 1.1 – Варианты к заданию 1
Задание 2. Определите имена регистров и банки по двоичному адресу. Т а б л и ц а 1.2 - Варианты к заданию 2
Задание 3. По имени регистра и банку определите его адрес. Т а б л и ц а 1.3 - Варианты к заданию 3
1.3 Контрольные вопросы 1. Сколько будет 5F+3? 2. Что такое основание системы счисления? 3. Какие цифры имеются в двоичной системе? 4. Какие цифры имеются в шестнадцатеричной системе? 5. Сколько будет 4F+1? 6. Расскажите о преимуществах микроконтроллеров. 7. Какие фирмы выпускают изделия с микроконтроллерами? 8. Какие функции выполняют микроконтроллеры? 9. Сколько банков в микроконтроллере PIC? 10. Как записываются адреса регистров? 11. Как можно обратиться в программе к регистру? 12. Что такое адрес регистра? 13. Какие адреса у регистров общего назначения? 14. В каких банках находятся регистры PORTC и TRISC? Исходные данные
Задача.Создать программу для ручного управления окрасочной камерой. При подаче питания 220 вольт включается сигнальная лампа на пульте оператора L2 о включении окрасочной камеры. Окрашиваемая деталь поступает в камеру по конвейеру, после чего включается звуковая предупреждающая сигнализация S1. Затем включается двигатель краскораспылителя D1, вентилятора D2, сигнал на пульт оператора о работе камеры L1. После окрашивания двигатель краскораспылителя D1 выключается, после проветривания выключается двигатель вентилятора D2 и лампочка L1. После поступления новой детали процесс окраски повторяется. Указанное оборудование подключается к битам PORTC (см. рисунок 2.1). На УМК-7 технологическое оборудование имитируется светодиодами.
Рисунок 2.1 – Схема подключения оборудования
Управление технологическим оборудованием выполняется программой 2.1. После точки с запятой в программе напечатаны комментарии, которые пропускаются компилятором. Программа 2.1: Include<p16F877.inc>; подключение библиотеки символьных имен РСН. org h’00’; следующая инструкция (NOP) будет записана по адресу h’00’. nop; инструкция, для работы отладчика будет записана по адресу h’00’. nop; инструкция будет записана по адресу h’01’ памяти МК. nop; инструкция будет записана по адресу h’02’ памяти МК. org h’05’; дальнейший код будет записан начиная с адреса h’05’. ; Инструкции для настройки МК CLRF STATUS; очищаем регистр Status и выбираем нулевой банк. BSF STATUS, 5; записав в 5-й разряд ‘1’, выбираем первый банк. CLRF TRISC; обнуляем TRISC и настраиваем PORTC на вывод. BCF STATUS, 5; возвращаемся в нулевой банк, в нем находятся нужные регистры. ; Рабочая часть программы MOVLW B'10000000'; пересылаем в регистр W число В’10000000’. MOVWF PORTC; включаем сигнализацию L2 на пульт оператора. Sled_det BSF PORTC, 0; включаем предупреждающую сигнализацию S1. MOVLW B'10001110'; пересылаем в регистр W число В’10001110’. MOVWF PORTC; включаем двигатели D1 и D2, сигнализацию L1. BCF PORTC, 2; выключаем двигатель D1 (D2, L1 и L2 работают). MOVLW B'10000000' MOVWF PORTC; выключаем вентилятор D2, сигнализацию L1. GOTO Sled_det; переход на метку Sled_det для повторения. END; конец программы. На основе образца подготовьте программу для своего варианта.
Т а б л и ц а 2.1 – Варианты заданий
Выполнение проекта на УМК-7 1. Запустите MPLAB. Если появится какой-либо открытый проект, закройте его командами Project – Close Project в основном меню MPLAB. Откройте новый лист в меню File\New, не создавая проекта, и напечатайте в окне редактора программу 2.1. При наборе текста программы применяйте регистр букв такой же, как в образце. С первой позиции печатаются метки и символьные имена регистров, с шестой позиции печатаются инструкции. Программа 2.1: Include<p16F877A.inc>; ORG h'00'; NOP; NOP; NOP; ORG h'05'; CLRF STATUS; BSF STATUS,5; CLRF TRISC; BCF STATUS,5; MOVLW B' 1000000 ';(число вводим согласно варианту) * MOVWF PORTC; Sled_det BSF PORTC, 0; (разряд согласно варианту) MOVLW B' 10001110 '; (число вводим согласно варианту) MOVWF PORTC; BCF PORTC, 2; (разряд согласно варианту) MOVLW B' 10000000 '; (число вводим согласно варианту)=* MOVWF PORTC; GOTO Sled_det; end
2. Сохраняем файл с помощью File\ Save as (тип файла –Assembly Source Files (*.asm)) в папке (по пути-Мой компьютер\System C:\Program Files\Microchip\Docs \ название группы лат.буквами.\номер подгруппы или название лат.буквами). 3. Создаем проект командой Project Wizzard
В появившемся диалоговом окне нажать кнопку «Далее». В следующем окне указать тип микроконтроллера PIC16F877A и нажать кнопку «Далее».
В следующем окне нажать кнопку «Далее», не изменяя НИКАКИХ параметров.
Заполните поле Project name(ввести имя проекта) и в поле Project Directory указать путь проекта(ранее созданная Вами папка по пути Мой компьютер\System C:\Program Files\Microchip\Docs \ название группы лат.буквами.\номер подгруппы или название лат.буквами).
Нажимаем кнопку «Далее». В следующем окне с помощью кнопки «Add», добавить с левого окна в правое: - файл P16F877A.INC Мой компьютер\System C:\Program Files\Microchip\Docs\Test_1\ P16F877A.INC; - файл с набранной Вами программой 2.1 по пути Мой компьютер\System C:\Program Files\Microchip\Docs \ название группы лат.буквами.\номер подгруппы или название лат.буквами\ student name. asm. Оба файла выделить значком «флажок».
Нажимаем кнопку «Далее» и в следующем окне кнопку «Готово».
Результат создания проекта выглядит таким образом:
4.Выполним соответствующие настройки для запуска Вашего проекта:
-Configurue->Select Device->PIC16F877A->OK, то есть удостоверяемся в правильности выбранного устройства(микроконтроллера).
-Configurue->Сonfiguration Bits. В диалоговом окне выставляем параметры согласно рисунку. После ввода всех параметров закрываем данное окно.
-Debugger->Select Tool->MPLAB ICD2
-Debugger->Settings-.Communication->COM1->OK
5. Создаем окно наблюдения командой View->Watch
С помощью кнопки «Add SFR» добавляем регистры и параметры, за которыми будем вести наблюдение при запуске программы (PORTC,WREG,STATUS,TRISC).
Запуск проекта
Project->Make
-Debugger->Program
-Debugger->Run (автоматический запуск проекта)или Step Into (далее нажимать F7-шаговое наблюдение за выполнением проекта). Запустите на выполнение программу в пошаговом режиме командами Debug – Run – Step или кнопкой F7. Следите за результатами выполнения инструкций по окну наблюдения. Если пошаговое выполнение программы застряло на какой - либо строке и не продолжается дальше, выполните команду Debug – Clear all points, чтобы убрать точки останова. Остановите выполнение программы командами Run - Reset. Команда Halt просто приостанавливает выполнение программы и после команд Debug – Run - Step выполнение программы продолжится с места останова. При необходимости исправьте программу. Внимание! При любом изменении текста программы необходимо сначала остановить программу командой Reset и повторить описанные выше действия по изменению проекта, начиная с команды Make Project. Включите в отчет по лабораторной работе программу, схему подключений и ответы на контрольные вопросы. Рекомендуется скопировать текст программы в Блокнот и разместить в папке Мои документы. Повторно запустите программу в автоматическом режиме кнопкой F9.
Вывод. Можно управлять технологическим оборудованием через регистр PORTC цифровым методом, включая и выключая разное оборудование подключенное к PORTC.
2.4 Контрольные вопросы
1. Нарисуйте схему подключения оборудования к PORTC. 2. Что выполняет инструкция CLRF STATUS? 3. Что выполняет инструкция MOVLW B’00001111’? 4. Что выполняет инструкция MOVWF PORTC? 5. С какой целью выполняется инструкция BSF STATUS, 5? 6. С какой целью выполняется инструкция BCF STATUS, 5? 7. Что выполняет инструкция GOTO METKA? 8. Какие внешние устройства расположены на панели стенда? 9. Почему при автоматическом выполнении рабочей программы в режиме RUN светятся все светодиоды одновременно? 10. Что такое адрес регистра и содержимое регистра. 11. Назначение символа «;» в тексте программы? 12. В каких банках находятся регистры PORTC и TRISC? 13. Назначение регистра TRISC. 14. На какие части делится программа? 15. Какое напряжение питания МК? 16. Какое напряжение в PORTC?
Сложение, вычитание. Логика Цель работы: изучение инструкций ADDWF, ANDWF, IORWF, XORWF, SUBWF. Выполнение сложения, вычитания, применение логических функций. Теоретические сведения
Операции сложения и вычитания применяются, например, для автоматизации учета количества автомашин на объекте, которые могут свободно въезжать и выезжать с территории через ворота. В таблице 3.1 представлены логические функции, их таблицы истинности, условные обозначения и интерпретация на электрической схеме. Все логические операции выполняются поразрядно.
Таблица 3.1 –Логические функции Y=f(X1,X2)
Логическая функция ‘ИЛИ’ (‘OR’) может применяться для включения оборудования любой из двух кнопок, расположенными в разных местах помещения. Логическая функция ‘И’ (‘AND’) может применяться в том случае, если оборудование должно включаться, при срабатывании (включении) обязательно двух контактов. Например, освещение в помещении автоматически включается при низкой освещенности и наличия в нем людей. Логическая функция ‘Исключающее ИЛИ’ (‘XOR’) может применяться, например, для управления освещением длинного тоннеля. В разных концах тоннеля устанавливаются переключатели Х1 и Х2, имеющие нормально открытый и нормально закрытый контакты. С любого конца тоннеля, изменив положение переключателя, можно включить освещение, если оно было выключено или выключить – если оно было включено.
Исходные данные и выполнение программы
Изучите формат инструкций ADDWF, SUBWF, ANDWF, IORWF, XORWF по приложению Д.
Изучите программу 3.1, которая выполняет различные действия с двумя константами и выводит результаты работы в регистр REZ. Программа легче читается, если в инструкциях вместо адреса регистра писать его символьное имя. В лабораторной работе №2 мы уже писали в инструкциях вместо адресов РСН их имена: Portc, Trisc, Status, W. Пользователь также может присваивать символьные имена РОН, например R1 EQU h’21’. Указатель EQU от equal (англ.) – одинаковый, равносильный. ORG h’хх’ – это указатель для ассемблера, что код следующий за этим выражением, будет записан начиная с адреса h’хх’ электрически программируемого постоянного запоминающего устройства (ЭППЗУ). Программа 3.1. Include <p16F877.inc>; в этом файле описаны символьные имена РСН. R1 EQU h'21'; R1 - символьное имя регистра по адресу h’21’. R2 EQU h'22'; R2 - символьное имя регистра по адресу h’22’. R3 EQU h'23'; R3 - имя регистра по адресу h’23’. REZ EQU h'24'; REZ - имя регистра для записи результатов. ; Инструкции для настройки МК ORG h'00'; следующая инструкция NOP будет записана по адресу h’00’. NOP; пишется для настройки отладчика. NOP NOP ORG h'05'; следующая инструкция CLRF запишется по адресу h’05’. CLRF STATUS; очищаем регистр от мусора, выбираем нулевой банк. BSF STATUS, 5; переходим в первый банк в нём регистр TRISC. CLRF TRISC; настраиваем все биты PORTC на вывод данных. BCF STATUS, 5; возвращаемся в нулевой банк. ; Рабочая часть программы. Ввод данных MOVLW D'240'; запись константы в аккумулятор W. MOVWF R1; запись содержимого W в регистр R1. MOVLW D'130'; запись константы в аккумулятор W. MOVWF R2; запись содержимого W в регистр R2. MOVLW D'5'; запись константы в W. MOVWF R3; запись содержимого W в регистр R3. ; Выполнение вычислений MOVF R1, W; запись константы из R1 в регистр W. SUBWF R2, W; вычитание W=R2-W=R2- R1. MOVWF REZ; переслать содержимое W в регистр REZ. MOVF R2, W; запись константы из R2 в регистр W. ADDWF R1, W; W=R2+W=R1+R2. MOVWF REZ MOVF R2, W; копируем содержимое R2 в W. SUBWF R1, W; вычитание W=R1-W=R1-R2. Результат оставляем в W. MOVWF REZ; переслать содержимое W в регистр REZ MOVF R2, W; запись константы в регистр W из R2. ADDWF R3, W; W=R3+W=R2+R3. MOVWF REZ MOVF R2, W; запись константы в регистр W из R2. SUBWF R2, W MOVWF REZ MOVF R2, W; запись константы в регистр W из R2. ANDWF R1, W; операция W=R1 AND W(R2), результат в W. MOVWF REZ END; конец программы. Самостоятельно продолжите программу командами для выполнения операций R2+R3, R1 OR R2, R1 XOR R2. Данные для варианта возьмите из таблицы 3.1.
Т а б л и ц а 3.1 – Варианты задания
Т а б л и ц а 3.2 - Пример записи результатов работы команд
Создайте окно наблюдения для всех применяемых в программе регистров в необходимом формате чисел. Результаты работы всех операций с числами запишите в таблицу 3.2.
3.4 Контрольные вопросы
1. Как определить с регистрами какого банка работает программа? 2. Что выполняет инструкция ADDWF R1, F? 3. Что выполнят инструкция SUBWF R2, F? 4. Что выполняет инструкция ANDWF R1, F? 5. Что выполняет инструкция IORWF R1, W? 6. Что выполняет инструкция XORWF R2, W? 7. Приведите инструкции установки и сброса бита. 8. Назначение директивы ORG h’05’. 9. Приведите таблицы истинности логических операций. 10. Преимущества МК по сравнению с релейной аппаратурой. 11. Назовите знакомые вам устройства, в которых применяются МК. 12. Нарисуйте локальную схему управления с МК. 13. На какие части делится программа? 14. В каком банке находятся регистры R1, R2 и REZ. 15. Какой результат мы увидим при сложении 230+60 в МК? 16. Какой результат мы увидим при вычитании 130-135 в МК?
4 Операции преобразования информации Цель работы: изучение операций преобразования информации с помощью инструкций COMF, SWAPF, RRF, RLF.
Теоретические сведения
Побитная операция инверсии COMF может применяться для одновременного изменения управляющих сигналов всего подключённого оборудования через определенные промежутки времени. Операция обмена полубайтами SWAP может применяться для изменения параметров пары однотипного оборудования по очереди. При сдвиге по инструкциям RRF и RLF во всех случаях бит, сдвигаемый из регистра, записывается в бит CARRY регистра STATUS, а бит, который был в CARRY, записывается в другой конец регистра. Инструкции сдвига (RRF, RLF) используются при выполнении операций умножения и целочисленного деления на два, при условии, что в бите Carry записан ноль. Они могут также применяться при управлении протяженным оборудованием. Например, при окрашивании, охлаждении или нагреве деталей во время их движения на конвейере [4].
4.2 Исходные данные и задание
Во фрагменте программы 4.1 показано применение операций инверсии, очистки бита, обмена полубайтами и сдвига вправо. Предполагается, что регистр PORTC настроен на вывод. Начало программы напишите самостоятельно по аналогии с программой 3.1. Фрагмент программы 4.1. NACH; метка повтора цикла программы. MOVLW B'11110011'; это число D’243’. MOVWF PORTC; записываем W в PORTC. COMF PORTC, F; инвертируем PORTC. MOVWF PORTC; восстанавливаем PORTC из W. BCF PORTC, 7; очищаем седьмой бит. MOVWF PORTC; восстанавливаем PORTC из W. SWAPF PORTC, F; обмен полубайтами регистра PORTC. MOVWF PORTC; восстанавливаем PORTC из W. BCF STATUS, 0; запись нуля в бит С регистра status. RRF PORTC, F; делим на 2. Результат записываем в PORTC. BCF STATUS, 0 RRF PORTC, F; делим на 2 содержимое PORTC. BCF STATUS, 0 RLF PORTC, F; умножаем на 2 содержимое PORTC. BCF STATUS, 0 RLF PORTC, F; умножаем на 2 содержимое PORTC. GOTO NACH END
Оформите фрагмент 4.1 как программу и введите программу в микроконтроллер. Сравните полученные результаты с данными в таблице 4.1. Создайте окно наблюдения для всех регистров программы в необходимом формате чисел.
Таблица 4.1- Результаты работы инструкций
Запустите подготовленную по заданию таблицы 4.2 программу. Результаты работы всех операций с числами запишите в таблицу 4.1.
Т а б л и ц а 4.2 – Варианты заданий
4.3 Контрольные вопросы
1. Расскажите, какую реальную задачу решает ваша программа. 2. Какие адреса используются для РОН? 3. Приведите инструкцию установки бита. Когда она применяется? 4. Приведите инструкцию сброса бита. Когда она применяется? 5. Как происходит сдвиг вправо (влево). 6. Как регистр Status участвует ввыполнении операций сдвига? 7. Расскажите о применении операции сдвига. 8. Расскажите об операции «инверсия» и ее применении. 9. Расскажите об операции «обмен полубайтами» и ее применении. 10. Что должно быть записано в бите Carry для правильного выполнения умножения или деления. 11. Как настроить PORTC на выход? 12. Как определить с каким банком работает программа? 13. Почему после деления 243 на 4 и умножения частного на 4 не было получено исходное число?
Теоретические сведения
Инструкции условных переходов BTFSC и BTFSS проверяют состояние заданного бита в любом регистре и в зависимости от результата, пропускают или не пропускают следующую инструкцию программы. Инструкция BTFSC пропускает следующую инструкцию, если заданный бит сброшен. Инструкция BTFSS пропускает следующую инструкцию, если заданный бит установлен. На основе этого создается передача управления в другое место программы и организация циклов, см. таблицу 5.1 [3,5].
Т а б л и ц а 5.1
В реальных программах вместо указанных инструкций пишутся инструкции, соответствующих разработанному алгоритму. В ассемблере отсутствуют инструкции сравнения чисел, поэтому, чтобы определить, какое из чисел больше (меньше), применяют такой алгоритм: а) Выполняют вычитание чисел. При этом в зависимости от результата, устанавливаются флаги C и Z регистра Status, см. таблицу 5.2. б) Далее применяют инструкции условных переходов. В таблице 5.2 показаны значения флагов регистра Status при вычитании по команде SUBWF UMENSH, W, т.е. W=UMENSH-W.
Т а б л и ц а 5.2 – Регистрация событий в регистре Status
Исходные данные
Технологический процесс должен выполняться при определенной требуемой температуре T_treb. Температура окружающей среды T_sredy измеряется аналоговым датчиком. Его показания поступают на АЦП микроконтроллера и преобразуются в двоичный код. Измеренная температура среды сравнивается с требуемой температурой, если она выше включают охлаждение, если ниже включают подогрев. Охлаждающая установка подключается к нулевому биту PORTC, нагревающая установка подключается к первому биту. Работа такой установки аналогична работе кондиционера «Зима-Лето». Программа 5.1- управление нагревом и охлаждением. Include<p16f877.inc> T_sredy EQU h'40'; регистр для записи температуры окружающей среды. T_treb EQU h'41'; регистр для записи требуемой температуры установки. UMENSH EQU h'43'; рабочий регистр для хранения данных. ; Инструкции настройки микроконтроллера напишите самостоятельно. MOVLW D'22' MOVWF T_treb; требуемая температура. MOVLW b'00011000'; первое значение T_sredy, данные после АЦП. M1 MOVWF T_sredy; температура по показаниям датчика. CLRF PORTC MOVF T_treb, W; UMENSH= T_treb. MOVWF UMENSH; чтобы не портить данные в регистре T_treb. MOVF T_sredy, W; температуру среды записываем в W. SUBWF UMENSH, F; UMENSH=T_Treb -T_Sredy. MOVLW b'00000010'; предполагаем, что надо включить подогрев. BTFSS STATUS, C; C = 1? Разность положительна? MOVLW b'00000001'; только при С=0 включаем охлаждение. MOVWF PORTC; пересылаем информацию на установку из W. MOVLW b'00010100'; второе значение T_sredy. GOTO M1 END Запомните, что команда MOVLW не влияет на регистр Status.
Порядок выполнения работы При написании программы используйте блок-схему на рисунке 5.3. Создайте окно наблюдения аналогичное рисункам 5.1 и 5.2. На рисунках 5.1 и 5.2 показаны окна наблюдения, из которых видно как переключается нагрев и охлаждение при изменении окружающей температуры.
Т а б л и ц а 5.3 - Варианты заданий
Рисунок 5.3 – Блок-схема
5.4 Контрольные вопросы
1. Что происходит с регистром Status при логических и математических операциях? 2. Расскажите, какую реальную задачу решает ваша программа. 3. Поясните инструкцию условного перехода BTFSC STATUS, Z. 4. Поясните инструкцию условного перехода BTFSS STATUS, Z. 5. Какой операцией можно определить равенство чисел? 6. В каких случаях флаг Z равен единице при вычитании? 7. В каких случаях флаг С равен единице при вычитании? 8. Когда флаги Z и С регистра Status одновременно равны нулю? 9. Как определить более мощную установку из двух потребителей? 10. Расскажите назначение АЦП. 11. Расскажите об аналоговых и цифровых сигналах. 12. На какие части делится программа? 13. В каких банках находятся, регистры применяемые в программе? 14. Как переключается нагрев и охлаждение установки. Маскирование
Цель работы: изучение способов маскирования и практическая форма их применения.
Теоретические сведения
Суммирование применяется для различных целей: подсчета количества поступивших изделий, определение средней температуры за расчетный период времени и других. Циклические структуры организуются с помощью операторов условий совместно с оператором перехода. В предыдущих лабораторных работах мы применяли абсолютную адресацию, при этом адрес регистра записывается непосредственно в инструкцию. Здесь будем применять косвенную адресацию при которой в инструкцию записывается указатель адреса, который может меняться в процессе выполнения программы. Изучите способы организации программ с косвенной адресацией на примере приведенных ниже фрагментов. Регистр 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.3 Выполнение задания
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2017-01-25; просмотров: 364; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.149.214.32 (0.35 с.) |