Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МЕТОДИЧНІ ВКАЗІВКИ ДО ВИКОНАННЯ ПРАКТИЧНИХ РОБІ...doc
Скачиваний:
5
Добавлен:
01.05.2025
Размер:
4.39 Mб
Скачать

Моделювання схеми

Щоб змоделювати роботу схем, клікніть лівою кнопкою миші по кнопці Play на анімаційній моделі в правому нижньому кутку екрана. Рядок стану покаже час, протягом якого запущена анімація. Зверніть увагу на те, що один з світлофорів зелений в той час як інший червоний, на схемі також можна побачити логічні рівні на висновках. Однак зауважте, що світлофори не змінюють стану. Це через те, що в код внесена навмисному помилка. На даному етапі це підходить для того, щоб налагодити нашу програму і знайти проблему.

Режим налагодження

Щоб засвідчити, що ми ретельні в налагодженні, ми зупинимо поточне моделювання. Покінчивши з цим, ви можете почати налагодження натисканням CTRL + F12. З'являться два вікна - перша зберігає поточні значення регістрів, друге показує вихідний код програми. Будь-яке з них може бути активована з меню »Налагодження» (Debug) разом з сукупністю інших інформаційних вікон. Ми також хочемо активувати оглядове вікно (Watch Window), в якому ми можемо спостерігати внесені зміни в параметри стану. Повне роз'яснення цього елемента доступно в розділі, названому «Оглядове вікно», в документації.

Установка точки зупину

Погляньте на програму, можна помітити, що вона замкнута в повторюваному циклі. Тому буде гарною ідеєю перед тим, як почати, встановити точку зупину на початку цього циклу. Ви можете зробити це виділенням мишею рядка (за адресою 0005 і 000E), а потім натисненням F9. Потім натисніть F12, щоб запустити прогін програми. Тепер ви побачите повідомлення в рядку стану, що показує, що досягнута цифрова точка зупинки, а також адресу лічильника команд. Він відповідає адресою першої точки, яку ми встановили.

Список клавіш налагодження можна знайти в меню Debug, але ми, здебільшого, будемо використовувати F11, щоб покроково налагоджувати програму. Тепер натисніть F11 і зауважте, що червона стрілка зліва перемістилася вниз до наступної інструкції. Ми фактично виконали інструкцію 'clrw', а потім зупинилися. Ви можете перевірити це, глянувши на регістр W у вікні регістрів і звернувши увагу, що він обнулений.

Тепер потрібно визначити, що повинне відбутися при виконанні наступної інструкції, а потім перевірити, чи дійсно це сталося. Для прикладу, така інструкція переміщує вміст регістра «W» в PORT A, тобто PORT A буде очищений. Виконання цієї інструкції та перевірка вікна регістрів підтверджують, що це насправді так. Продовжуйте в тому ж дусі поки не досягнете нашої другої точки зупину, зверніть увагу, що обидва порти налаштовані на вихід (як наказано регістром TRISB) і встановлені в нулі.

І так, ми зупинилися на виклику функції, у нас є опція перешагування через функції (Stepping Over) (натисканням клавіші F10), але для повноти ми прокрокував через кожну інструкцію. Натискання тут F11 переносить до першої виконуваної рядку функції getmask. Ступивши вперед, ми бачимо, що операція переміщення була успішна, і що ми потрапляємо в правильному місці для додавання нульового зсуву в нашій таблиці відповідності. Отже, коли ми повертаємося в основну програму, ми маємо «маску», яку й очікували. Роблячи наступний крок і записуючи маску в порт, ми можемо бачити правильний результат на схемі. Ще один крок для інкріментірованія режиму також успішний, що підтверджується вікном регістрів, де значення в регістрі W збільшилося на 1.

Наступний крок містить інструкцію, призначену для охоплення режиму нулями, коли він зросте вище 3. Це, як можна побачити з оглядового вікна, не виконується. Очевидно, що режим збільшився тут до 1, що відповідає масці і вірно для наступного виконання циклу.

Пошук помилки

Прихований аналіз показує, що причина проблеми в побітові І з четвіркою замість трійки. Режими, які ми хочемо 0, 1, 2, 3 при побітову І їх з 4 дають 0. Ось чому, коли запущено моделювання, режим світлофорів не змінюється. Рішення в простій заміні проблемної інструкції на І з 3 замість 4. Це означає, що режим збільшується до 3, і коли регістр W збільшиться до 4, режим буде обнулено. Альтернативне рішення у перевірці, коли 'W' зросте до 4, і скиданні його в нуль.