Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЦП_ч.2_Лаб.W07.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
4.27 Mб
Скачать

1 Налаштування основних модулів мікроконтролера.

1 .1 Створити свій варіант проекту 2Ncрp (N – варіант) у пакеті AVR Studio 4 (див. Л. р. №1, п. 1) на основі програми мовою Асемблера, для чого до зразка проектного файлу D:\avr_tut\30cрp\ \30cрp.asm вставити фрагменти до­с­лідження різновидів ЦПП згідно зі своїм варіантом індивідуально-го завдання, зберегти зміни у своєму програмному файлі, виконати транслювання програми та виправити помилки синтаксису команд і застосування операндів (Л. р. №1, п. 2). Після за­пуску наладчика налаштувати вікна для налагодження проекту (Л. р. №2, п. 1.3). У вікні I/O View до області регістрів (б) перенести з області модулів МК (а) аналоговий компаратор (1), мікро­процесор (2), модуль зовнішніх пере­ривань (3), по­рти B і D (4, 5), таймер-лічильник 1 (6), вартовий таймер (7) та за­лишити у вікні лише область регіст­рів (б).

1.2 Налаштувати порти і стек (див. Л. р. №2, п. 1.4,а,б).

1.3 Налаштувати зовнішнє переривання INT0.

1.4 Налаштувати переривання типу OC1A – збіг за порівнянням у каналі А таймера-лічильника 1: 1) запис до регістра маски біта дозволу переривання за збігом у каналі А таймера-лічильника 1; 2) запис до двох регістрів TCCR1A, TCCR1В кода режиму скидання під час збігу WGM1[3..0] = 0b0100 (а) та одночасно до регістра TCCR1В кода коефіцієнта поділу Clk/1024 передподільника частоти CS1[2..0] = 0b101 (б); 3) завантаження до 16-розрядного регістра збігу ОCR1A розрахованого модулю лічби, щоб отримати потрібну затримку.

1.4 Налаштувати сплячий режим МК (а) та одночасно вид запиту зовнішнього переривання INT0 за негативним перепадом (б).

1.5 Вимкнути вартовий таймер у два заходи: дозволити зміни його режиму завантаженням двох бітів першою командою (а), відтак вимкнути його скиданням біта другою командою (б).

1.6 Вимкнути аналоговий компаратор.

2 Дослідження основних режимів функціонування мікроконтролера.

2.1 Підготувати віртуальний МК для дослідження, для чого вийти з ре­жиму налагодження, зменшити час затримки: модуль лічби таймера (а) та коефіці­єнт поділу частоти (б), відтак зберегти зміни у файлі, виконати транслювання та знов перейти в режим налагодження.

2 .2 Дослідити процес скидання МК, для чого натиснути піктограму Reset – лічильники команд (Program Counter) та циклів (Cycle Counter) обнуляються, РВВ переводяться до початкового стану, а жовтий покажчик команд вказуватиме на вектор скидання з найвищим пріоритетом (позиція 1). Відтак натиснути піктограму Step Into – до лічильника команд завантажується адреса позначки переходу і покажчик команд перестрибує з команди 0 на команду 5 (позиція 2), при цьому лічильник циклів вказує, що команда відносного переходу виконується за два цикли.

F Примітка. Команда відносного переходу RJMP у МК з пам'яттю програм, що не перевищує 4 Кслів (8 Кбайт) здатна звернутися до всього адресного простору цієї пам'яті, тому для таких МК команда абсолютного переходу JMP є неприступною.

2.3 Дослідити процес зовнішнього переривання, для чого після скидання МК (на ілюстрації нижче цей крок показано цифрою 1) ввести код відтиснутих кнопок PIND[7..0] = 0xFF (2), поставити курсор на команду після основних налаштувань (3) та виконати програму до курсора (4). Для введення сигналу запиту зовнішнього переривання за негативним перепадом натиснути кнопку цього переривання PIND[2] (5) і по виконанні одного кроку програми (6) спостерігати встановлення прапора зовнішнього переривання INTF0 у регістрі GIFR (7). З наступними кроками після виконання команди SEI (8) спостерігати встановлення прапора І (9) загального дозволу переривання в регістрі стану SREG. Тепер, за наявності загального дозволу переривання мікроконтролер з наступним кроком припиняє нормальне виконання команд програми по черзі. Для цього спочатку в стеці зберігається зміст лічильника команд, збільшений на одиницю (10), тобто адреса наступної команди (в нас NOP) у два заходи: спочатку молодший байт, відтак старший байт. При цьому зміст покажчика стеку (11) по завантаженні чергового байта декрементується, так що після збереження адреси він вказує на порожню комірку стеку (0x025D). Відтак до лічильника команд завантажується адреса вектора переривань (0х0001) і жовта стрілка покажчика команд переплигує до вектора зовнішнього переривання (12), прапор якого INTF0 у регістрі маски GIFR (13) скидається (щоб повторно не обробляти це переривання), і прапор загального дозволу переривання І в регістрі стану SREG (14) також скидається (щоб заборонити будь-які переривання допоки не буде виконано підпрограму обробки поточного переривання).

2.4 Дослідити обробку підпрограми зовнішнього переривання у покро-ковому режимі, для чого натиснути піктограму Step Into – до лічильника ко-манд завантажується адреса позначки переходу (ЕІ0) і покажчик команд пере-стрибує на першу команду підпрограми обробки зовнішнього переривання (1). Відтак залишити нульовий код кнопок (ненатиснуті чотири ліві контакти виводів PIND[7..4]) і натиснути кнопку PIND[0] (2) – введення (при цьому кнопку запиту зщвнішнього переривання PIND[2] можна відтиснути, бо на запит переривання впливає лише негативний перепад на цьому виводі). Простежити, як виконується мета цієї підпрограми – до індексного регістра Z із Flash-пам’яті завантажується адреса позначки переходу L0 з номером, що відповідає нульовому коду кнопок (3). По команді повернення з підпрограми обробки переривання (4) спочатку зі стеку до лічильника команд завантажу-ється адреса (5) точки виходу з основної програми (в нас адреса команди NOP) у два заходи: спочатку старший байт, відтак молодший байт. При цьому зміст покажчика стеку (6) перед завантаженням чергового байта інкрементується, так що після повернення адреси він вказує на вершину стеку (0x025F). Цією ж командою повернення з підпрограми встановлюється прапор І загального дозволу переривання в регістрі стану SREG (7) і покажчик команд повертається до основної програми (8).

2.5 Дослідити процес внутрішнього переривання, викликаного подією збігу в каналі А таймера-лічильника 1. У покроковому режимі прогону програ-ми спостерігати зміст регістра порівняння OCR1A (1) і таймера-лічильника 1 TCNT1 (2), який з кожним тактом інкрементується. Коли код TCNT1 досягає змісту регістра, лічильник скидається і в наступному такті (2) у регістрі прапорів TIFR встановлюється прапор OCF1A (3), внаслідок чого генерується переривання (якщо прапор І встановлено). Далі процес переривання відбуваєть-ся аналогічно розглянутому в п. 2.3. У стеці зберігається адреса точки виходу з основної програми (4), коли зміст покажчика стеку двічі декрементується (5), а до лічильника команд завантажується адреса вектора переривань (0х0004) і жовта стрілка покажчика команд переплигує до вектора внутрішнього переривання (6), прапор якого OCF1A у регістрі маски ТIFR (7) скидається, і прапор загального дозволу переривання І в регістрі стану SREG (8) також скидається.

F Примітка. На початку для дослідження процесу внутрішнього переривання прапор OCF1A у регістрі маски ТIFR (3) можна скинути примусово (натиснути цей біт) і спостерігати виконання основної програми (у нас команди nop) допоки цей прапор не буде встановлено апаратно. У реальному робочому режимі до регістра порівняння OCR1A (1) записано велике число (Mct = 800) і коефіцієнт поділу встановлено Clk/1024, тому на весь час затримки (біля 820 000 тактів) до настання події переривання МК звільнений і може виконувати основну програму.

2.6 Дослідити обробку підпрограми внутрішнього переривання у покро-ковому режимі, для чого натиснути піктограму Step Into – до лічильника ко-манд завантажується адреса позначки переходу (Т1А) і покажчик команд пере-стрибує на першу команду підпрограми обробки внутрішнього переривання (1). Під час виконання наступної команди непрямого переходу IJMP з індексного регістра Z до лічильника команд завантажується адреса позначки переходу L0 з номером, що відповідає нульовому коду кнопок і МК переходить до виконання команд з цією позначкою (2). Простежити алгоритм реалізації даного виду ЦПП, в кінці якого по команді відносного переходу (3) здійснюється вихід з підпрограми аналогічно розглянутому в п. 2.4. По команді повернення з підпрограми обробки переривання (4) спочатку зі стеку до лічильника команд завантажується адреса (5) точки виходу з основної програми у два заходи, коли двічі інкрементується зміст покажчика стеку (6). Цією ж командою встановлю-ється прапор І загального дозволу переривання в регістрі стану SREG (7) і п окажчик команд повертається до основної програми (8).

2.6 Дослідити алгоритми реалізації ЦПП згідно з індивідуальним завданням аналогічно п. 2.4. Простежити роботу пристроїв, для чого спочатку відтиснути, кнопку запиту зовнішнього переривання PIND[2] (1), запустити автоматичне виконання програми (2), відтак зупинити програму (3), натиснути потрібний двійковий код номера позначки ЦПП чотирма лівими кнопками PIND[7..4] (цей код є інверсний: натиснута кнопка відповідає лог. 1), кнопку запиту зовнішнього переривання PIND[2], а також кнопку введення PIND[0] (4) та знов запустити автоматичне виконання програми (5). За рухом кодів у розрядах регістра PORTB[7..0] і на виводах PINВ[7..0] простежити роботу пристроїв у динаміці.