Чтобы симулировать схему, поместите указатель мышки на кнопку Play панели анимации в левом нижнем углу экрана и нажмите её. Панель состояния покажет время активности анимации. Вы должны также отметить, что один из светофоров зелёный, тогда как другой красный, и логическое состояние выводов должно быть видно на схеме. Вместе с тем, вы заметили, что состояние светофоров не меняется.
Это произошло из-за преднамеренной ошибки, которую мы сделали в коде. На этом этапе самое время отладить программу, чтобы избавиться от проблемы.
Чтобы убедиться, что мы находимся в режиме отладки схемы, мы остановим текущую симуляцию. Сделав это (кнопка Stop на панели анимации) вы можете начать отладку, нажав клавиши CTRL+F12. Появятся два всплывающих окна — одно показывает текущие значения регистров, а другое исходный код программы. Если нет, их можно активировать из меню Debug, как и остальные информационные окна.
![]() |
Arduino в Proteus БЕЗ Написания Кода! Visual Designer For Arduino AVR Часть 1
Нам также хотелось бы активировать Watch Window, в котором можно увидеть изменение в состоянии переменных. Полное описание этих возможностей вы найдёте в разделе, озаглавленном «Watch Window — окно наблюдения». Сконцентрируемся сейчас на окне Source, обратив внимание на красную стрелку слева. Это, вместе с подсвеченной строкой, показывает текущую позицию счётчика программы.
Чтобы задать здесь точку останова (breakpoint), нажмите правую клавишу мышки (точка останова всегда устанавливается на подсвеченной строке) и из выпадающего меню выберите Toggle (Claear/Set) Breackpoint. Если вы хотите очистить точку останова, вы можете сделать это повторив операцию, но мы пока её оставим.
Задание точек останова
Взглянув на программу, можно заметить, что цикл возвращается к себе. Неплохо бы было установить точку останова в начале цикла, до того как мы стартуем. Вы можете сделать это подсветив линию (по адресу 000E) мышкой и затем нажав F9. Затем нажмите F12, чтобы запустить программу.
Вы должны увидеть сообщение на панели состояния (Status Bar), показывающее, что цифровая точка останова достигнута и адрес программного счётчика ( Program Counter, PC). Это относится к адресу первой точки останова, которую мы задали. Список ключей отладки есть в разделе Debug основного меню, но для большей части работы мы используем клавишу F11 для пошагового прохождения программы.
Нажмите клавишу F11 и заметьте, что красная стрелка слева перемещается к следующей инструкции. Все, что мы реально сделали — это выполнили команду «clrw», а затем остановились. Вы можете проверить это, взглянув на регистр W в окне регистров (PIC CPU Registers) и увидев, что регистр обнулился.
Все, что нам сейчас нужно сделать, это определить, что мы предполагаем должно произойти при выполнении следующей инструкции, а затем проверить, так ли это? Например, следующая инструкция должна переместить содержимое регистра «W» в PORTA. То есть, порт А должен очиститься. Выполним эту инструкцию и проверим окно регистров, убедимся, что это так.
Продолжение знакомства с Proteus и написание первого кода. Урок 2.
Продолжая выполнение, пока не будет достигнута второй точки останова, можно отметить, что оба порта были очищены и готовы для вывода (как это диктуется регистром TRISB), и что переменная state корректно установлена в 0. Поскольку далее следует функция вызова (call), мы должны выбрать шаг через функцию (Stepping Over, нажатием клавиши F10), но для полноты мы пройдём через все инструкции. Нажатие клавиши F11 в этом месте заставляет «нас» перепрыгнуть на первую выполняемую строку функции getmask.
Передвигаясь вперёд, мы увидим, что операция move успешна, и что мы «приземлились» в нужном месте для добавления маски в нашу таблицу обозрения. Когда мы вернёмся в основную программу, мы получим маску, которую и предполагали. Шагая дальше и записывая маску в порт, мы увидим правильный результат на схеме. Следующий шаг увеличит на единицу state, это тоже успешно, о чем свидетельствует окно наблюдения, где значение регистра «W» увеличивается на 1. Следующий шаг приводит нас к инструкции, выполняющей возврат state в ноль, когда она увеличивается больше 3. Это, как можно видеть в окне наблюдения, не выполняется, хотя должно бы. Переменная state остаётся со значением 1 для маски, которая должна быть правильно установлена при следующем выполнении цикла.
![]() |
Завершение расследования показывает, что проблема обнаруживается при операции AND с 4 вместо 3. Мы хотели бы, чтобы состояния были 0, 1, 2, 3 и любое из них, когда AND 4, даёт ноль. Вот почему при запуске симуляции состояние светофоров не меняется.
Решение простое — заменить проблемную инструкцию AND со state с 4 на 3. Это будет означать, что когда state будет увеличиваться до 3, и когда регистр «W» увеличится до 4, переменная state будет обнуляться. Альтернативное решение — просто проверить в этом случае регистр «W», и когда он станет равен 4, обнулить его. Этот короткий пример отладки в Proteus VSM иллюстрирует, в основном, что есть множество дополнительных функций. Очень рекомендуем, чтобы вы заглянули в раздел «Отладка на уровне исходного кода» позже в этом документе, чтобы ознакомиться со все этим детальнее.
Источник: mculab.ru
Как посмотреть код программы в протеусе
Доброго всем времени суток.
Ситуация следующая, сравнительно недавно начал моделировать работу микроконтроллеров AVR (мк) в Proteus’e и столкнулся с одной проблемой:
загружаю в мк COF-фаил (для пошаговой отладке по Си-коду) нажимаю кнопку Пауза, вылетает окно AVR Source Code, там в списке выбираю исходный фаил на Си и начинаю пошаговую отладку, где нужно ставлю точки остановки программы и т.д., и всё вроде бы замечательно НО! Ближе к концу текста программы, где почему-то отсутствуют номера строк (текст в левом столбце, голубого цвета) я уже не могу идти по строкам программы, т.е. пошагово просматривать работу мк и программа пролетает до самого конца кода, хотя я по прежнему нажимаю переход по строкам (кнопка F11). Причём на этом участке невозможно поставить точки остановки!! Хотя пару дней назад все строки с исходником были пронумерованы и отладка работала полноценно и на УРА.
Версии программ Proteus 7.4 SP3 и CodeVisionAVR 2.03.5
Вообще то и всё. Если кто сталкивался с такой проблемой подскажите пожалуйста, очень нужна ваша помощь.
— Прилагается рисунок: —
Источник: kazus.ru
Фрикер Клуб
Подключение к проекту хекса и кофа-это понятно-разобрался-ибо симуляция без этого не возможна мк.Мне бы про режим пошаговой отладки -а то толком инфы не нарыл в гугле.
Re: Отладка кода в Proteus для AVR
Сообщение russo_turisto » 01 авг 2012, 08:08
Выложите проэкт, настроим для удобной отладки
Re: Отладка кода в Proteus для AVR
Сообщение DIVER_SANT » 01 авг 2012, 18:00
russo_turisto Благодарю-изучаю. Появяться вопросы-сюда отпишу
Добавлено через 1 минуту
russo_turisto писал(а): Зеленый ведь
Ну зеленый это не факт-что я спец во всех вопросах-просто внес определенный вклад в форум..
Re: Отладка кода в Proteus для AVR
Сообщение Gura » 05 авг 2012, 16:21
DIVER_SANT;16072 писал(а):
Ну зеленый это не факт-что я спец во всех вопросах-просто внес определенный вклад в форум..
Куда и сколько нести?
Re: Отладка кода в Proteus для AVR
Сообщение AVRall » 05 авг 2012, 16:39
DIVER_SANT писал(а): Подключение к проекту хекса и кофа-это понятно-разобрался-ибо симуляция без этого не возможна мк.Мне бы про режим пошаговой отладки -а то толком инфы не нарыл в гугле.
Вместо hex загружай coff. Запускай проект кнопкой STEP а не PLAY (для того чтобы видеть весь процесс с самого начала), появится 2 окна «AVR Source Code» в котором ты будешь видеть какая команда выполняется в данный момент, сможешь пошагово выполнять остальные комманды, ну дальше думаю разберёшся, и второе окно «AVR Variables» в котором ты увидишь переменные которые инициализированы в твоей программе, и все действия которые с ними происходят, всё представленно очень наглядно.
Источник: phreakerclub.com