Методическое пособие 491
.pdfПрограммный симулятор MPLAB-SIM позволяет продемонстрировать работу программы микроконтроллера PIC 16/17
на уровне команд. При выполнении любой команды пользователь может проверить или изменить данные, а также подать внешний сигнал на любой вывод. Используемое основание системы счисления может быть установлено пользователем. MPLAB-SIM поддерживает символьную отладку кодов, полученную с помощью программ-
трансляторов MPLAB-C или MPASM.
Проект можно откомпилировать непосредственно в среде
MPLAB. Для этого служит команда меню Project ► Make (клавиша
<F10>). Окно состояния компилятора откроется на период компиля-
ции, а затем исчезнет. В результате компиляции в той же папке, что и исходный файл, будет создано несколько файлов. Один из них - с
расширением.cod - необходим для эмуляции и отладки в среде
MPLAB. Теперь по завершению компиляции эмулятор MPLAB будет автоматически загружать файл . cod, созданный компилятором.
3.1.3.1. Настройка режима отладки/эмуляции
Микроконтроллер для программной эмуляции выбирается на этапе создания проекта MPLAB, но этот выбор можно изменить позже, выполнив команду меню Configure ► Select Device и указав требуемое значение в поле Device диалогового окна Select Device (рис. 6).
Для перевода MPLAB в режим программной эмуляции, необхо-
димо выполнить команду меню Debugger ► Select Tool ► MPLAB SIM. В результате отобразится панель инструментов Debug с кнопка-
ми, используемыми для отладки.
Для настройки параметров эмуляции следует выполнить коман-
ду меню Debugger ► Settings. В открывшемся диалоговом окне Simu-
9
lator Settings особый интерес представляют вкладки Osc/Trace и Animation/Realtime Updates (рис. 7).
Рис. 6. Выбор микроконтроллера для программной эмуляции
Рис. 7. Параметры эмуляции
Нa вкладке Osc/Trace можно выбрать частоту тактового осцил-
лятора на вкладке Animation/Realtime Updates задать период анима-
ционного прохода (выполнение программы с обновлением окон от-
ладчика через строго определенные промежутки времени) и период обновления окон при выполнении в реальном режиме времени. Если
10
требуется, чтобы обновления окон отладчика происходили таким об-
разом, чтобы отражать информацию реалистично, значения этих пе-
риодов не следует выбирать большими.
Если не установить флажок Enable Realtime watch updates, то при запуске программы в режиме реального времени окна отладчика вообще не будут обновляться. Кроме того, при эмуляции программ в среде MPLAB следует учитывать, что задержки при работе с реаль-
ным микроконтроллером намного меньше.
С помощью параметров, расположенных в диалоговом окне
Simulator Settings на вкладке Break Options, можно управлять мо-
ментами останова эмуляции, включая останов по сигналу от стороже-
вого таймера (WDT) и останов по переполнению стека.
3.1.3.2. Работа в режиме отладки/эмуляции
Команды, используемые в режиме отладки, находятся в меню
Debugger. В MPLAB используются точки прерывания, обозначаемые красным кружком с символом "В" слева от строки исходного кода, в
которых они установлены. Для установки/удаления точки прерыва-
ния следует дважды щелкнуть мышью на сером поле слева от сроки или выполнить команду контекстного меню Set Breakpoint.
Для отключения/активизации и удаления точек прерывания ис-
пользуется диалоговое окно Breakpoints, которое открывается по ко-
манде меню Debugger ► Breakpoints (клавиша <F2>), а также ко-
манды Disable Breakpoint (отключение), Enable Breakpoint (активи-
зация) и Remove Breakpoint (удаление) контекстного меню. Для от-
ключения, активизации или удаления всех расставленных точек пре-
рывания можно воспользоваться тем же диалоговым окном Breakpoints или командами подменю Breakpoints контекстного меню.
Для перехода в режим отладки используются команды меню
11
Debugger:
Run (клавиша <F9>) — выполнение программы в ре-
жиме реального времени; переход в режим отладки происходит,
если встречается точка прерывания.
Animate — выполнение программы с периодическим обновлением окон отладчика.
Step Into (клавиша <F7>) — выполняет текущую ко-
манду с заходом в подпрограммы (все окна обновляются). При каждом шаге программы (нажатие клавиши <F7>) значение реги-
стров в окне будет обновляться. Изменение значения регистра отоб-
ражается в окне памяти данных, выделяя его другим цветом. Однако в сложных программах одновременно могут изменять несколько ре-
гистров, что усложняет контроль хода выполнения программы. Про-
блема может быть решена использованием окон с переменными.
Step Over (клавиша <F8>) — выполняет текущую команду без захода в подпрограммы (все окна обновляются).
Step Out — запускает программу и выполняет ее до тех пор, пока не встретится окончание текущей подпрограммы;
если ход выполнения находится в области основной программы, то программа будет выполняться до тех пор, пока не будет остановлена пользователем командой Halt или не встретит точку прерывания;
Halt (клавиша <F5>) — принудительный останов ра-
боты программы.
Для сброса в исходное состояние используются команды подменю Debugger ► Reset, а также кнопка Reset панели ин-
струментов Н Debug (клавиша <F6>).
Еще одна возможность — выполнение программы до строки, в
которой в данный момент установлен курсор. Для этого используется команда контекстного меню Run to Cursor.
12
3.1.3.3. Окна отладчика
Вызов окон отладчика реализован с помощью команд меню
View. Прежде всего, интерес представляют окна Watch, File Registers
и Special Function Registers. Типичное для отладчиков окно Watch
(рис. 8) позволяет просматривать значения переменных и содержимое регистров управления во время выполнения программы.
Рис. 8. Окно Watch
С помощью кнопки Add SFR и расположенного справа от нее раскрывающегося списка можно создать элемент для просмотра со-
держимого какого-либо регистра управления (в примере на рис. 7 -
регистра данных порта А). Аналогичное назначение, но для перемен-
ных, имеет кнопка Add Symbol и расположенное справа поле. Для того чтобы изменить формат отображенной значения некоторого элемента просмотра, на нем следует щелкнуть правой кнопкой мыши,
выбрать в контекстном меню команду Properties и задать требуемый формат на вкладке Watch Properties.
Для удаления текущего элемента просмотра достаточно нажать клавишу <Delete> или же воспользоваться командой Delete кон-
текстного ценю.
13
Следующее окно отладчика - File Registers, отображающее со-
держимое памяти данных. Содержимое памяти можно просмотреть в виде шестнадцатеричного дампа (вкладка Hex) или же последова-
тельного списка ячеек с отображением их содержимого в различных форматах (вкладка Symbolic) (рис. 9). Значения, смененные в процес-
се выполнения программы, выделяются в окне File Registers красным цветом.
Рис. 9. Вкладки Hex и Symbolic окна File Registers
Окно File Registers позволяет редактировать расположенные в памяти переменные непосредственно или с помощью специального окна, которое открывается по команде контекстного меню Fill Registers (рис. 10). В окне Fill Registers можно указать начальный и ко-
нечный адрес области памяти, занимаемой переменной, в поле Data
вести требуемые данные в шестнадцатеричной или десятичной форме
(это определяется с помощью переключателей Data Radix) и нажать кнопку Write. Для выхода без выполнения записи используется кнопка Close.
14
Еще одно окно отладчика - это Special Function Registers
(рис. 11), оно используется для просмотра и модификации содержи-
мого регистров управления различных устройств микроконтроллера.
Значения, измененные в процессе выполнения программы, выделя-
ются в окне Special Function Registers красным цветом.
Рис. 10. Диалоговое окно Fill Registers
Рис. 11. Окно Special Function Registers
Так же как и в окне File Registers, в этом окне можно изменять содержимое регистров прямо в процессе выполнения программы (в
режиме отладки).
15
3.2.Микроконтроллер PIC
3.2.1.Структура микроконтроллера
Подавляющее число микроконтроллеров, имеет традиционную
(Фон-неймановскую или Принстонскую) архитектуру, в которой команды и данные передаются по одной шине. Архитектура микроконтроллера PIC16С84 основана на концепции раздельных шин и областей памяти для данных и команд (Гарвардская архитектура) (рис. 12). Шина данных связывает между собой все основные функциональные блоки микроконтроллера: память данных (ОЗУ);
арифметико-логическое устройство (АЛУ); порты ввода/вывода
(PORT A, B); регистры слова состояния (STATUS), косвенной адресации (FSR), таймера-счетчика (RTCC/TMRO), программного счетчика (PCL).
Рис. 12. Сравнение гарвардской и традиционной архитектуры
Все программные объекты, с которыми может работать PIC,
представляют собой физические регистры. Чтобы понять, как работает PIC, нужно разобраться с тем, какие регистры у него существуют и каким образом с каждым из них работать. Все регистры PIC можно разделить на две функциональные группы:
специальные регистры и регистры общего назначения.
16
3.2.2.Регистры PIC
3.2.2.1.Специальные регистры PIC
Специальные регистры используются для управления функциями микроконтроллера и могут быть разделены на два набора:
регистры базовых функций и регистры периферийных устройств.
Регистры базовых функций включают в себя регистр-переключатель косвенной адресации (INDF), программный счетчик (РС), регистр слова состояния (STATUS), регистр-указатель косвенной адресации
(FSR), рабочий регистр (WREG), регистр прерываний (INTCON), а
также регистр режимов работы или конфигурации предварительного делителя и таймера (OPTION). Регистры периферийных устройств включают в себя регистры ввода/вывода (PORTA-порт А и PORTB-
порт В), регистры данных (EEDATA) и адреса (EEADR) памяти данных-констант, регистр таймера-счетчика (TMRO) и регистры управления конфигурацией портов ввода/вывода (TRISA и TRISB).
Описание специальных регистров приведено в табл. 1.
специальные регистры также отображаются на память данных.
В командах, имеющих два операнда, одним из операндов является рабочий регистр WREG. Второй операнд может быть константой или содержимым любого регистра ОЗУ. В командах с одним операндом, операнд может быть содержимым рабочего регистра или любого другого регистра. Для выполнения всех операций АЛУ используется рабочий регистр WREG, который не может быть прямо адресован. В зависимости от результата выполнения операции, могут измениться значения битов переноса С,
десятичного переноса DC и нуля Z в регистре состояния STATUS.
При вычитании биты С и DC работают как биты заема и десятичного заема, соответственно.
17
|
|
|
|
|
|
|
|
Таблица 1 |
|||
|
|
Описание специальных регистров Р1С16С84 |
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
Адрес |
Имя |
Бит 7 |
Бит 6 |
Бит 5 |
Бит 4 |
Бит 3 |
Бит 2 |
Бит 1 |
Бит 0 |
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Банк 0 |
|
|
|
|
|
|
|
|
|
|
|||||||||
00h |
INDF |
Используется значение FSR для доступа к памяти данных (не |
|||||||||
|
|
|
|
|
физический регистр) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
01h |
TMRO |
|
|
8-разрядный таймер/счетчик |
|
|
|
|
|||
|
|
|
|
|
|
||||||
02h |
PCL |
|
Младшие 8 разрядов счетчика команд РС |
|
|
||||||
03h |
STATUS |
IRP |
RP1 |
RP0 |
TO |
PD |
Z |
DC |
|
C |
|
04h |
FSR |
|
Регистр косвенной адресации (Указатель адреса) |
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
05h |
PORTA |
_ |
_ |
_ |
RA4/TOCKI |
RA3 |
RA2 |
RA1 |
|
RA0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
06h |
PORTB |
RB7 |
RB6 |
RB5 |
RB4 |
RB3 |
RB2 |
RB1 |
|
RB0/ |
|
|
|
|
|
|
|
|
|
|
|
INT |
|
|
|
|
|
|
|
|
|
|
|
|
|
07h |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
08h |
EEDATA |
|
Регистр данных ППЗУ данных-констант |
|
|
||||||
09h |
EEADR |
|
Регистр адреса ППЗУ данных-констант |
|
|
||||||
0Ah |
PCLATH |
– |
– |
– |
Старшие разряды счетчика РС |
|
|
||||
|
|
|
|
|
|
|
|
|
|
||
0Bh |
INTCON |
GIE |
EEIE |
TOIE |
INTE |
RBIE |
TOIF |
INTF |
RBIF |
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Банк 1 |
|
|
|
|
|
|
|
80h |
INDF |
Используется значение FSR для доступа к памяти данных |
|
||||||||
|
|
|
|
(не физический регистр) |
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|||
81h |
OPTION |
RBPU |
INTEG |
TOCS |
TOSE |
PSA |
PS2 |
PS1 |
|
PS0 |
|
82h |
PCL |
|
Младшие 8 разрядов счетчика команд РС |
|
|
||||||
83h |
STATUS |
IRP |
RP1 |
RP0 |
TO |
PD |
Z |
DC |
|
C |
|
|
|
|
|
|
|
|
|
|
|
|
|
84h |
FSR |
|
Регистр косвенной адресации (указатель адреса) |
|
|
||||||
|
|
|
|
|
|
|
|
||||
85h |
TRISA |
– |
– |
– |
Биты управления портом А |
|
|
||||
86h |
TRISB |
|
|
Биты управления портом В |
|
|
|
|
|||
87h |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
88h |
EECON1 |
– |
– |
– |
EEIF |
WRERR |
WREN |
WR |
|
RD |
|
|
|
|
|
|
|
|
|
|
|
|
|
89h |
EECON2 |
|
Регистр управления 2 ППЗУ данных-констант |
|
|
||||||
|
|
|
|
(не физический регистр) |
|
|
|
|
|||
|
|
|
|
|
|
|
|
||||
0Ah |
PCLATH |
– |
– |
– |
Старшие разряды счетчика РС |
|
|
||||
0Bh |
INTCON |
GIE |
EEIE |
TOIE |
INTE |
RBIE |
TOIF |
INTF |
RBIF |
|
Регистр переключатель косвенной адресации INDF физически
18