МК

Интегрированная среда разработки прикладного ПО MPLAB IDE (Лабораторная работа)

 

 

Цель работы: ознакомление с программными средствами написания и отладки программ для микроконтроллеров фирмы Microchip Technology Incorporated, изучение архитектуры и системы команд микроконтроллеров семейства PICMICRO на примере микроконтроллера среднего уровня PIC16F84, а также практическое освоение технологии разработки и отладки программ.

 

Теоретическая часть

1. Введение

 

MPLAB IDE - это Windows- ориентированная интегрированная среда, предназначенная для разработки программного обеспечения для микроконтроллеров фирмы Microchip Technology Incorporated (семейства PICMICRO). Данная среда называется интегрированной, потому, что содержит различные программы: редактор, транслятор с языка Ассемблер, симулятор. Среду можно найти на сайте:

 

2. Возможности МРLAB IDE

 

С помощью MPLAB можно выполнять следующие действия:

- создавать и редактировать исходный файл с программой на ассемблере с помощью встроенного редактора;

- выполнять компилирование исходной программы; компилятор  позволяет легко построить результирующую программу в машинных кодах, готовую к загрузке в память микроконтроллера;

- выполнять отладку программы с помощью встроенного в MPLAB симулятора в пошаговом или автоматическом режимах, с выводом значений различных регистров.

 

3. Порядок создания и отладки прикладной программы

в среде MPLAB IDE

 

Внимательно ознакомьтесь с закладками, которые можно использовать для настройки MPLAB. Встроенная справочная система позволяет детально познакомиться со всеми возможностями. Далее мы рассмотрим лишь минимум настроек, необходимый для создания и отладки простого проекта.

 

3.1. Запуск MPLAB IDE и  структура среды

 

Для запуска MPLAB IDE под операционной системой семейства Windows, необходимо выполнить следующие шаги:

Пуск ->Программы -> Microchip  -> MPLAB IDE . После запуска программы (файл MPLAB.EXE) Вы увидите рабочий стол среды, показанный на рис. 1.

 

Рис.1. Рабочий стол среды MPLAB IDE

 

На рис.1.1 приведены следующие обозначения:

1- Главное текстовое меню.

2- Графическое меню.

3- Рабочий стол, на котором размещаются окна с файлами, диалогами и другой информацией.

4- Рабочая среда (Workspace).

5- Линейка состояния, отражающая текущую настройку системы.

 

3.2. Создание нового проекта

 

Самый простой и удобный способ создания проекта - запустить менеджер проектов (закладка Project -> Project Wizard). Менеджер проектов собирает файлы проекта за четыре шага (с помощью четырёх диалоговых окон).

На первом шаге необходимо указать тип микроконтроллера, для которого вы создаете проект (PIC16F84).

На втором шаге необходимо указать тип языковых инструментов, которыми вы намерены пользоваться (Microchip MPASM Toolsuite).

На третьем шаге необходимо указать имя проекта (например – Маков) и имя директории, где будет храниться ваш проект (например, М:\ Маков).

На четвертом шаге необходимо с помощью кнопки "Add" присоединить ассемблерный файл к проекту.

В окне Project Wizard выводится итоговая информация.

Если информация верна, нажмите кнопку Готово для завершения работы Project Wizard.

Если вы хотите что-либо изменить, нажмите кнопку Назад.

 

3.3. Создание текста программы на языке ассемблера

 

Текст исходной программы  на языке ассемблера необходимо ввести с клавиатуры. Для этого надо открыть файл (FileNew). Появится окно Untitled Workspaсe.

В открывшемся окне ввести текст программы. Разделить условно рабочее пространство по ширине на три поля: поле метки, поле команд и директив и поле комментария. Поле метки должно начинаться с первого знакоместа. Каждая метка должна размещаться с первого знакоместа (первого столбца). Метка должна начинаться с буквы и может содержать буквы, цифры, символы подчеркивания и вопросительного знака. Длина метки не должна превышать 32 символа. От следующих за ними команд метки отделяется двоеточием. Мнемокоды команд и директивы ассемблера размещаются в поле команд, которое начинается со второго знакоместа в строке. Операнды следуют после мнемокодов команд и отделяются одним или несколькими пробелами. В поле операнда указывается либо непосредственный операнд, либо адрес регистра в числовом или символьном виде. Комментарии могут начинаться с любой позиции строки или занимать целую строку. В начале комментария обязательно ставится точка с запятой, в конце строки никаких специальных символов не ставится.

В последней строке программы должна быть директива END.

Присвоить имя и сохранить текст исходной программы. В открывшемся окне ввести имя файла с расширением .asm.

Присоединить ассемблерный файл к проекту с помощью кнопки "Add".

 

3.4. Структура программы для PIC-контроллеров

 

В первой строке записывается директива TITLE, задающая название программы, например, TITLElab1”.

Во второй  строке записывается директива LIST, определяющая тип микроконтроллера (LIST p=16f84).

В третьей строке директивой INCLUDE <Р тип микроконтроллера. INC > в текст исходной программы вставляется описание регистров специальных функций выбранного микроконтроллера. Директива INCLUDE <p16F84.INC> определяет 15 регистров специальных функций выбранного микроконтроллера.

В четвертой строке вводится слово конфигурации с помощью директивы __CONFIG. Директиве предшествует два нижних подчеркивания без пробела между ними. Далее текстом определяется состояние отдельных разрядов регистра конфигурации.

В программу следует ввести следующее слово конфигурации:

__CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC

Оно указывает, что защиту памяти программ (СР) и сторожевой таймер (WDT) необходимо отключить, включить задержку на время установления тактового генератора (PWRTE) и использовать внешний высокочастотный резонатор (XT_OSC).

Далее с помощью директивы EQU определяются переменные и константы, использованные в тексте программы. Например:

POH1 EQU 0X10

POH2 EQU 0X11

POH3 EQU 0X12

С помощью директивы ORG <АДРЕС> устанавливается стартовый адрес программного кода. При отсутствии директивы ORG программный код размещается с нулевого адреса. Перед директивой ORG может быть установлена метка, на которую можно ссылаться в командах goto и call как на соответствующий адрес перехода.

 

3.5.  Пример программы

 

Задание

Дана передаточная функция апериодического звена 1-го порядка. Подготовить, отладить и  выполнить программу вычислений на симуляторе значения U вещественной частотной характеристики звена при заданных преподавателем значениях передаточного коэффициента k, постоянной времени Т и частоты ω. Расчетная формула имеет следующий вид:

 

 

Таблица. Текст программы

TITLE "<lab2>";

LIST P=16F84

INCLUDE <P16F84.INC>

__CONFIG  _CP_OFF&_XT_OSC&_PWRTE_ON&_WDT_OFF

 

;резервирование места для регистров

 

status equ 0x03  ;специальный регистр  status содержит  флаг Z, который

                           ;поднимается, если аккумулятор равен нулю. Этот факт

                           ;используется в подпрограмме деления

k equ 0x10

T equ 0x11

w1 equ 0x12       ;частота ω

o1 equ 0x13         ;инициализация операнда для подпрограмм умножения и деления

o2 equ 0x14         ;инициализация операнда для подпрограмм умножения

rez equ 0x15        ;результат выполнения подпрограмм умножения и деления

rez1 equ 0x16       ;

rez2 equ 0x17       ;

U equ 0x18

 

                    ;  очистка регистров

 

clrf o1

clrf o2

clrf rez

clrf rez2

clrf rez1

clrf status

clrf k

clrf T

clrf w1

clrf k

clrf U

 

                    ; запись в регистры их значений: k=10; w1=3; T=1

 

 movlw .10          ; в регистр-аккумулятор w записываем число 10

 movwf k            ; пересылаем содержимое w в регистр к

 movlw .3

 movwf w1

 movlw .1

 movwf T

 

      ; инициализация операндов для умножения w1*w1

 

 movfw w1           ;в регистр-аккумулятор w записываем содержимое регистра w1

 movwf o1           ;в регистр o1 записываем w1

 movwf o2           ;в регистр o2 записываем w1

 

 call proizv        ;вызов подпрограммы умножения

 

 movfw rez          ; запись результата  в регистр w

 movwf rez1         ;запись результата в регистр rez1

 

                    ; инициализация операндов для умножения

 

 movfw T

 movwf o1

 movwf o2

 

  call proizv       ;вызов подпрограммы умножения

 

 movfw rez;

 movwf rez2         ;запись результата в регистр rez2

 

 

 

                    ;инициализация операндов для умножения 

 

 movfw rez1

movwf o1

movfw rez2

movwf o2

 

call proizv         ;вызов подпрограммы умножения

 

incf rez            ;увеличение знаменателя на единицу

 

                    ;инициализация операндов для деления: o1=k

 

 movfw k

 movwf o1

 movfw rez

 movwf o2

 

 call delenie       ; вызов подпрограммы деления

 

 movf rez,w         ; запись результата деления в регистр w

 movwf U            ; запись результата в регистр U

 goto fin

 

  proizv; подпрограмма, осуществляющая умножение о1 на о2 (входные                           операнды о1 и о2, возвращает - rez)

clrw; очистка аккумулятора

movfw o1; o1 в w

clrf rez; очистка регистра rez

 

proizv:

nop; задержка

addwf rez,rez; сложение содержимых регистров w и rez  (результат сохраняется

в регистре регистре rez), rez= rez+о1

decfsz o2; уменьшение о2 на единицу. Если о2 равен нулю то пропуск

              следующей команды

goto proizv

return

 delenie ;подпрограмма, осуществляющая деление о2 на о1 (входные операнды о1 и о2, возвращает - rez)

movf o1,w; запись o1  в аккумулятор w

 clrf rez; очистка регистра результата

delenie: 

 nop; задержка

 subwf o2,w; w=о2-w

 incf rez

 btfss status,Z; если аккумулятор равен нулю, поднимается флаг Z  регистра

               status и пропускается следующая команда

 goto delenie; переход в начало цикла если аккумулятор не равен нулю

return

fin

end.

 

 

3.6. Компилирование

 

Когда текст программы набран, можно перейти к процедуре компилирования. Наиболее просто и удобно произвести компиляцию, используя правую пиктограмму на фрагменте панели инструментов, показанном на рисунке далее.

 

Рис. Пиктограммы компилирования

 

После завершения процесса компиляции вы увидите окно с перечнем предупреждений или ошибок. Если проект успешно построен, то вы увидите в конце окна сообщение "BUILD SUCCEEDED". Если этого не произошло, необходимо перейти к редактированию исходного текста программы и исправлению ошибок. Удобно кликнуть мышкой на сообщении об ошибке, и вы сразу перейдете в редакторе на ту строчку, к которой у компилятора есть претензии.

3.7. Отладка

 

После успешной компиляции начинается собственно основная работа над программой. Требуется убедиться, что программа работает правильно. Для этого нужно установить режим программной симуляции работы процессора (Закладка Debugger -> Select Tool à MPLAB SIM). При этом у вас на экране появятся новые кнопки, специально предназначенные для целей отладки программы.

 

Рис. Пиктограммы отладки

 

1. Run - переход в режим автоматического выполнения отлаживаемой программы. Программа будет выполняться до точки останова или до нажатия программистом кнопки Halt.

2. Step Into - пошаговая отладка. Выполнение одной очередной команды программы. Если это команда входа в подпрограмму, то отладчик перейдет на текст подпрограммы.

        Отладка обычно выполняется по шагам с одновременным контролем изменения регистров микроконтроллера. Содержимое всех регистров можно открыть через закладку View:

ViewàFile Registers;

ViewàSpecial Function  Registers;

ViewàWatch.

В окне наблюдения Watch можно собрать все наблюдаемые регистры.

Наиболее удобным и понятным способом помещения регистра в Watch является «Drag and Drop», т.е. просто выделяем регистр и перетаскиваем его в окно Watch.

Для изменения системы представления данных в столбце Value окна Watch необходимо выполнить следующие действия. Левой кнопкой мышки выделить интересующий Вас регистр. Выпадет меню. В выпавшем меню с помощью правой кнопкой мыши  выбрать «Properties».

 

 

Рис. 1.4. Окно наблюдения с контекстным меню

 

В появившемся окне выбрать закладку Watch Properties.

Рис. Окно представления данных

 

Установить желаемую систему счисления. По умолчанию содержимое всех регистров представляется в 16-ричной (hex) системе.

Требуемое значение тактовой частоты вводится в процессе отладки (закладка Debugger -> Settings ->Clock). В данной работе рекомендуется выбрать тактовую частоту равной 4 МГц.

Рис. Окно установки тактовой частоты

 

Закончив подготовительные работы, можно приступить непосредственно к отладке. Для этого необходимо нажать на пиктограмму панели инструментов, соответствующую пошаговому режиму. Стрелка, указывающая на очередную команду в тексте отлаживаемой программы, переместится и будет показывать на следующую команду, подлежащую исполнению. Просмотрим содержимое регистров микроконтроллера   в окне наблюдения Watch. Сравним полученные значения с ожидаемыми. Таким образом, анализируя содержимое регистров после выполнения  каждой команды, можно проконтролировать логику выполнения программы.

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

 

4. Краткие сведения о микроконтроллере

4.1. Основные технические показатели

 

PIC16F84 - 8-разрядный микроконтроллер, выпускаемый фирмой Microchip Technology. Предназначен в основном для программного управления автоматизированными системами, автомобильными и электрическими двигателями, устройствами передачи информации и измерительными приборами.

PIC16F84 представляет собой микросхему с 18 выводами, из которых 13 предназначены для передачи информации от  внешнего устройства либо к внешнему устройству. Выполняемая программа хранится в перепрограммируемом постоянном запоминающем устройстве (ППЗУ), куда она заносится с помощью - программатора. Константы, переменные, результаты расчетов и счетчики циклов хранятся в оперативном запоминающем устройстве (ОЗУ) и теряются при выключении питания. Чтобы избежать потери данных при выключении питания, можно использовать 64 ячейки энергонезависимой памяти данных.

Основные характеристики PIC16F84:

1)      объем ПЗУ - 1024 слова (команды) по 14 бит;

2)      объем ОЗУ - 80 байт;

3)      количество  регистров общего назначения - 68;

4)      количество регистров специальных функций – 15;

5)      объем энергонезависимой памяти данных - 64 байта;

6)      рабочая частота - до 20 МГц;

7)      минимальное время выполнения одной команды - 200 нс;

8)      система команд содержит 35 простых команд (RISC-архитектура).

 

4.2. Архитектура

 

В PIC16F84 программа и данные хранятся в разных областях памяти и имеют раздельные шины адреса для доступа к ним (гарвардская архитектура). Концепция разделения адресного пространства программ и данных обеспечивает высокую скорость работы микроконтроллера за счет одновременной выборки и исполнения команд. Все команды выполняются за один машинный цикл за исключением команд переходов, выполняющееся за 2 цикла. Машинный цикл состоит из четырех машинных тактов -временных интервалов, равных такту микроконтроллера.

Выполнение программы при подаче питания на микроконтроллер начинается с нулевого адреса ПЗУ. Команды располагаются в ПЗУ и выполняются последовательно. Адрес следующей выполняемой команды хранится в специальном регистре (программном счетчике, PC- program counter). Значение счетчика команд можно изменить командой безусловного перехода: GOTO  <адрес>. Эта команда заносит в PC адрес, указанный в поле операнда. Выполнение программы продолжается с этого адреса. Для вызова подпрограмм используется команда CALL<адрес>, которая отличается от GOTO тем, что сохраняет в аппаратном стеке адрес следующей за ней команды (т.е. содержимое PC). Этот адрес используется командой RETURN для возврата из подпрограммы. Поскольку стек имеет ограниченную вместимость (8 адресов), то количество вложенных вызовов подпрограмм не должно превышать восьми.

В ОЗУ часть адресного пространства используется для обращения к регистрам специального назначения (РСН). Они предназначены для организации косвенной адресации (INCF, FSR), работы с портами ввода-вывода (PORTA, PORTB, TRISA, TRISB), с энергонезависимой памятью данных (EEDATA, EEADR, EECON1, EECON2), организации прерываний (INTCON) и так далее. Остальная часть закреплена за ячейками памяти (регистрами общего назначения - РОН).

 

 4.3. Система команд

 

Система команд PIC микроконтроллеров среднего уровня состоит из 35 команд. Каждая команда PIC микроконтроллеров среднего уровня  занимает 14 бит, у PIC микроконтроллеров нижнего и верхнего уровней 12 и 16 битов соответственно. Поэтому PIC микроконтроллеры разных уровней несовместимы по машинным кодам.

Рассмотрим систему команд микроконтроллеров среднего уровня.

Система команд включает в себя  команды передачи управления (см. табл. 1.1), бит-ориентированные (см. табл. 1.2), арифметические (см. табл. 1.3),  логические (см. табл. 1.4),  и специальные команды (см. табл. 1.5).

Ниже приведем пояснения, которые позволят понять особенности системы команд.

Для команд передачи управления и операций с константами, "k" обозначает константу.

Для бит-ориентированных команд "b" обозначает номер бита, участвующего в команде, a "f" -это регистр, в котором этот бит расположен. Для установки и сброса отдельных разрядов (битов) в РIС-контроллерах используются две команды - BSF и BCF. Они имеют формат:

BSF  f, b    (установка бита в 1); BCF  f,b    (сброс бита в 0),

где f - имя регистра (адрес в ОЗУ); b - номер бита, нулевой номер соответствует самому младшему разряду байта.

 

Таблица. Команды передачи управления

Мнемокод

Название

CALL  k

Вызов подпрограммы

CLRWDT

Сброс watchdog таймера

GOTO  k

Переход по адресу

RETLW  k

Возврат из подпрограммы с загрузкой константы в W

RETFIE

Возврат из прерывания

RETURN

Возврат из подпрограммы

SLEEP

Переход в режим Sleep

 

Таблица. Бит-ориентированные команды

Мнемокод

Название

BCF f,b

Сброс бита в регистре f

BSF f,b

Установка бита в регистре f

BTFSC f,b

Пропустить команду, если бит равен 0

BTFSS f,b

Пропустить команду, если бит равен 1

 

Многие операции, связанные с занесением констант в память, пересылкой данных из одной ячейки в другую или выполнением арифметических действий, используют специальный регистр - аккумулятор (W). В названиях команд используются символьные обозначения используемых операндов: L - константа, W - аккумулятор, F - ячейка памяти. Например, команда MOVLW заносит константу в аккумулятор; MOVLW <конст>, где <конст> - значение константы. Для обмена данными между ОЗУ и аккумулятором используются команды: MOVWF f (запись значения аккумулятора в ячейку памяти f),

MOVF f,d (запись значения ячейки памяти f в аккумулятор).

Поскольку в микроконтроллерах используется относительно небольшой набор команд, для придания большей гибкости в некоторых командах есть возможность сохранять результат в памяти либо в аккумуляторе. Такие команды в своей обобщенной записи имеют специальный дополнительный элемент d , который при написании программы должен быть заменен на одну из двух букв (или цифр): W (или 0), если результат необходимо сохранить в аккумуляторе, и F (или 1), если в памяти.

Примером такой команды может служить команда декремента DECF f, d. Она уменьшает на единицу содержимое ячейки памяти f и сохраняет результат в регистре F (если записано DECF f, F) или в аккумуляторе (если записано DECF f, W) в зависимости от конкретного значения d. Увеличение на единицу содержимого ячейки памяти выполняется командой INCF f, d.

 

Таблица. Арифметические команды

Мнемокод

Действие

ADDWF f,d

Сложение W с f

DECF f,d

Декремент регистра f

DECFSZ f,d

Декремент f, пропустить команду, если 0

INCF f,d

Инкремент регистра f

INCFSZ f,d

Инкремент f, пропустить команду, если 0

RLF f,d

Сдвиг f влево через перенос

RRF f,d

Сдвиг f вправо через перенос

SUBWF f,d

Вычитание W из f

ADDLW k

Сложение константы с W

SUBLW k

Вычитание W из константы

 

Таблица. Логические команды

Мнемокод

Действие

ANDWF f,d

Логическое И W и f

COMF f,d

Инверсия регистра f

IORWF f,d

Логическое ИЛИ W и f

XORWF f,d

Исключающее ИЛИ W и f

ANDLW k

Логическое И константы и W

IORLW k

Логическое ИЛИ константы и W

XORLW k

Исключающее ИЛИ константы и W

 

Таблица. Специальные команды

Мнемокод

Действие

CLRF f

Сброс регистра f

CLRW

Сброс регистра W

MOVF f,d

Пересылка регистра f

MOVWF f

Пересылка W в f

NOP

Холостая команда

SWAPF f,d

Обмен местами тетрад в f

MOVLW k

Пересылка константы в W

 

Есть варианты этих команд INCFSZ и DECFSZ. Кроме описанных действий, они имеют еще одну особенность, которую можно использовать для организации циклов: если в результате инкрементирования (декрементирования) получено нулевое значение, то следующая за INCFSZ или DECFSZ команда не выполняется (пропускается). Вместо нее исполняется команда, следующая за пропущенной.

 

5. Задание

 

Запустить программу MPLAB IDE.

Открыть  проект.

Подключить к проекту  программу, написанную в соответствии с вариантом задания; откомпилировать её.

Перейти в режим отладки.

Вызвать на экран  отображение регистров.

Выполнить программу в пошаговом режиме.

По указанию преподавателя  внести изменения в исходную программу и продемонстрировать  владение отладочной средой.

 

Варианты задания

 

1. Создать задержку в 600 мкс методом циклов. Длительность задержки определяется следующим образом. При тактовой частоте 4 МГц длительность машинного цикла равна 1 мкс. Команды GOTO C1 и DECFSZ P1,F образуют повторяющуюся часть программы равную трем машинным циклам (3 мкс). Следовательно число циклов должно равняться 200.

2. Найти:

а) минимальный;

б) максимальный элемент массива. Считать элементы массива однобайтными числами.

3. Организовать временную задержку на заданный временной интервал методом вложенных циклов.

4. Произвести сортировку элементов массива:

      а) по возрастанию;

      б) по убыванию.

5. Определить адрес:

      а) наибольшего;

      б) наименьшего числа в массиве.

6. Подсчитать в массиве количество чисел:

      а) больших;

      б) меньших, чем 3FH, а также их сумму.

7. Суммировать элементы массива до появления:

      а) переполнения;

      б) превышения числа 200;

      в) единицы в пятом разряде суммы;

      г) обнуления.

8. Подсчитать количество нулевых элементов массива.

Примечание. Численные данные необходимые для выполнения п.п.2-8 предоставляются преподавателем перед началом лабораторной работы.

 

6. Содержание отчета

 

Название и цель работы, задание, распределение переменных в памяти контроллера, программа с комментариями,  результаты пошаговой отладки программы с указанием изменений в регистрах и ячейках памяти после выполнения каждой команды, результаты работы программы (в соответствии с вариантом задания численные значения  минимального и  максимального элементов массива; результаты сортировки массива; адреса наибольшего и наименьшего элементов в массиве; количество чисел больших или меньших заданного и их сумма; количество нулевых элементов массива; количество элементов массива, сумма которых приводит к переполнению, обнулению и к появлению «1» в 5-м разряде, а также меньше заданного числа).