Типичный вариант реализации микросхемы ППЗУ. Интегрированная среда MPLABIDE разработи программ для PIC-микроконтроллеров, страница 7

С помощью пункта меню View >Watch  создайте окно просмотра и занесите в него переменные  Count  и  Sum.

Выполните сброс микроконтроллера.

Сначала проверьте работу программы в режиме Step Into. Сделайте около 10 шагов с заходом в подпрограмму  delay. По изменению содержимого  регистра Count, убедитесь в правильности работы.

Затем сделайте шаг в режиме Step Out. Убедитесь, что произошел останов выполнения программы на команде goto again, а содержимое регистра-счетчика Count стало равным нулю, т.е. подпрограмма  delay  полностью выполнена. Дальнейшее продвижение по программе в режиме Step Out невозможно, так как он выполняется только внутри подпрограммы.

Продолжите проверку программы в режиме Step Over. До команды вызова подпрограммы  call  delay  он  выполняется аналогично режиму  Step Into. Однако после выполнения команды  call  delay  программа остановится на команде  goto again, а содержимое  регистра Count вновь станет равным нулю. Таким образом, произошло ускоренное выполнение подпрограммы задержки delay в течение одного шага. Продолжите проверку работы программы в режиме Step Over, сделав несколько шагов и наблюдая за изменением содержимого регистра-накопителя Sum.  

Теперь протестируйте программу в режиме Animate. По содержимому  регистров Sum и Count убедитесь в правильности ее работы.

И, наконец, выполните программу в автоматическом режиме  Run. Убедитесь, что в этом режиме содержимое окна  просмотра Watch   не обновляется. Остановите выполнение программы. Зеленая стрелка укажет на точку останова работы программы, в окно Watch обновится.

Сделайте выводы об удобстве режимов Step Out  и  Step Over при отладке подпрограмм. Представьте себе, что подпрограмма содержала бы несколько сотен циклов!

3.13. Моделирование сигналов на входах портов микроконтроллера

Симулятор MPLAB SIM  предоставляет возможность моделировать состояние портов ввода или записывать значения непосредственно в регистры. Это выполняется с помощью стимулов. Существует четыре вида стимулов:

•   асинхронный стимул– непосредственное управление состоянием портов ввода;

•   файл состояния порта ввода–  текстовый файл, описывающий состояние порта ввода;

•   файл стимула регистра– текстовый файл, содержащий 8-разрядное значение регистра;

•   стимул тактового сигнала–  регулярный, программируемый, периодический источник тактового сигнала.

Рассмотрим использование асинхронных стимулов на примере программы wait,  которая ожидает появления на 0-м выводе порта A, настроенного на ввод, определенных уровней сигналов.

С помощью пункта меню File > Newоткройте окно редактора и запишите текст программы.

;***************************************************************

; wait – программа ожидания определенных уровней сигналов на входе

; порта RA0

;***************************************************************

list p=16f84a

#include<p16f84a.inc>

__CONFIG _CP_OFF &  _WDT_OFF &  _WDTE_ON & _HS_OSC

org      0x000

begin     clrw                        ; очистить рабочий регистр W

wait1

btfsc    PORTA,0   ; проверить 0-й вывод порта А на нуль

goto     wait1          ; идти на метку  wait1, если RA0 ≠ 0

movlw  0xFF         ; записать код  FFh  в регистр W

wait2

btfss    POTRA,0   ; проверить 0-й вывод порта А на единицу

goto     wait2          ; идти на метку  wait2, если RA0 ≠ 1

goto     begin          ; идти на начало программы

end                          ; конец текста программы

С помощью пункта меню File > SaveAs... сохраните файл с именем wait.asm в вашей папке. Выполните компиляцию файла с помощью пункта меню Project > Quickbuildwait.asm и  убедитесь в ее правильности. С помощью пункта меню Debugger > SelectTool > MPLABSIM выберите симулятор для проверки работы программы.

Затем создайте окно для просмотра переменных и введите в него имя порта PORTA с отображением его содержимого в двоичном формате. Введите также имя рабочего регистра W, который в MPLAB IDE именуется как WREG.

Для моделирования входного сигнала будем использовать асинхронный стимул. При этом с помощью нажатия кнопки в диалоговом окне асинхронного стимула можно менять логические уровни (0 или 1) на выводах портов микроконтроллера. Состояния выводов можно менять посредством опций: