При непрямій адресації (рис. 3) використовується перемикач непрямої адресації (регістр f0 у пам'яті даних, що фізично не існує) і покажчик Pointer (регістр f4 - FSR). Існують деякі відмінності при здійсненні непрямої адресації для різних типів МК. Так для PIC16C54/C55/C56: біти 0-4 регістра (f4) вибирають один з 32 регістрів у режимі непрямої адресації, тобто коли в команді є звертання до регістра непрямої адресації (f0). Біти 5-7 не використовуються і завжди читаються як одиниці. Якщо непряма адресація не використовується, регістр f4 може бути використаний як 5-ти бітовий регістр загального призначення. Для PIC16C57 перші 16 байт кожного банку являють собою фізично ті самі регістри. Тільки тоді, коли біт 4 (f4) встановлений в одиницю (указує на наступні 16 байт), біти 5 і 6 вибирають один з чотирьох банків по 16 регістрів кожний. Біт 7 регістра (f4) не використовується і завжди читається як одиниця.
Пряма адресація Непряма адресація
з коду команди
RP1 RP0 4 0 6 FSR 0
Вибір банку Вибір регістра Вибір банку Вибір регістра
00 01 10 11
00
Пам'ять 0F
даних 10
Банк 0 Банк 1 Банк 2 Банк 3
Рис. 4 Пряма і непряма адресація
Стек і повернення з підпрограм.
У мікроконтролерах PIC16C5X використовується дворівневий апаратний стек. Це означає, що він може зберігати одночасно не більш двох адрес повернення.
Команда CALL інкрементує поточне значення програмного лічильника і записує його в стек на рівень 1. При записі на рівень 1 стека його попереднє значення автоматично записується на рівень 2. Якщо викликається більш двох вкладених підпрограм, то тільки дві останніх адреси повернення будуть збережені.
При виконанні команди RETLW у програмний лічильник вивантажується вміст стека першого рівня. Одночасний уміст стека другого рівня копіюється в стек першого рівня. Якщо виповнюються більш двох команд RETLW друг за другом, у стеці обох рівнів буде записане значення другого рівня.
Відладка програми виконувалась за допомогою MPLAB Simulator Stimulus, де можна задавати послідовніст вхвдного байту. Для цоьго необхідно створити файл з розширенням .sti та підключити його перед виконанням програми (меню Debug/Simulator Stimulus/Pin Simulus/Enable). Тобто був створений файл lab3.sti.
Для перевірки працездатності програми, її необхідно відлагодити шляхом послідовного натискання клавіши F8 та дивлячись на стан усіх використаних регістрів, який можна побачити за допомогою вікна watch (меню Window/Load Watch Window Lab_3.wat – файл,який можна створити за допомогою Window/New Watch Window та підключити необхідні регістри).
Також необхідно перевірити зміни значення вхідного байту, яке задано у файлі lab3.sti, чи відповідають зміни значення вхідного байту заданому такту. Це можна зробити за допомогою просмотру кількості тактів роботи програми у вікні Stop Watch (меню Window)
Результат роботи програми:
Виконуємо компіляцію програми та покрокове її виконання. Слідкуємо за станом регістрів мікро контролера на кожному кроці виконання програми. Бачимо, що спочатку виконується формування негативного імпульсу із потрібною затримкою без використання таймера, а потім виконується подібна дія із допомогою таймера (виклик підпрограми організації затримки зроблено неявно).
ВИСНОВКИ:Під час виконання лабораторної роботи, вивчено способи формування часових інтервалів різної тривалості, організацію сторінкової пам'яті програм і даних.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.