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

ЦП, ч.2. Лабораторні роботи і практикум

1 - "Основи прогамного пакету розробника AVR Studio"

1_1AVSas - Обробка даних мовою асемблера (функція y = Ax2 + Bx – C, обчислення в одній точці) (m8515)

1_2AVSas - Обробка даних мовою асемблера (функція y = Ax2 + Bx – C, побудова графіка по точках х = 0 ... 7) (m8515)

2 - "Основи прогамного пакету розробника CodeVisionAVR"

2_1CVAci - Обробка даних мовою Сі (функція y = Ax2 + Bx – C, обчислення в одній точці) (m8515)

2_2CVAci - Обробка даних мовою Сі (функція y = Ax2 + Bx – C, побудова графіка в точках х = 0 ... 7) (m8515)

3 - "Основи прогамного пакету розробника Atmel Studio"

3_1ATSas – Ініціалізація портів мовою асемблера на прикладі програмного усунення деренчання контактів (m16)

3_2ATSci – Ініціалізація портів мовами Сі, Сі++ на прикладі програмного усунення деренчання контактів (m16)

4 - "Основи програмного і апаратного інтерфейсу STK500"

4_1AVSas – Запис програми до МК мовою асемблера з використанням інтерфейсу AVR Studio на прикладі дослідження зсувів

4_2CVAci – Запис програми до МК мовою Сі з використанням інтерфейсів CodeVi-sionAVR і AVR Studio і на прикладі дослідження зсувів

4_3ATSas – Запис програми до МК мовою асемблера з використанням інтерфейсу Atmel Studio на прикладі дослідження зсувів

4_4ATSci – Запис програми до МК мовою Сі з використанням інтерфейсу Atmel Studio на прикладі дослідження зсувів

5 - "Система переривань МК"

5_1AVSas – Запровадження системи переривань мовою асемблера в AVR Studio на прикладі дослідження типових ЦКП

5_2CVAci – Запровадження системи переривань мовою Сі в CodeVi-sionAVR на прикладі дослідження типових ЦКП

6 - "Застосування таймерів-лічильників МК"

6_1AVSas – Застосування таймерів-лічильників мовою асемблера в AVR Studio на прикладі дослідження типових ЦПП

6_2CVAci – Застосування таймерів-лічильників мовою Сі в CodeVi-sionAVR на прикладі дослідження типових ЦПП

Лабораторна робота №1

"Основи програмного пакету розробника AVR Studio"

Мета роботи: дослідження

ДОМАШНЄ ЗАВДАННЯ

! 1) Засвоїти теоретичні відомості щодо

2) Визначити

СТИСЛІ ТЕОРЕТИЧНІ ВІДОМОСТІ

Вступ

Архітектура ядра МАК AVR

Адресний простір

Регістровий файл

Регістр стану. Команди з регістром стану

ОЗП

2. Програмне забезпечення

2.1. Мови програмування

Програма – це набір машинних кодів (комбінацій нулів і одиниць), запи­саних до ЗП програм (Flash-пам'яті) МК. Разом зі службовою інформацією, зок­рема, для перевірки на відсутність помилок та адрес вона міститься в основній частині hex-файлу, в якому коди подано в шістнадцятковій системі. Наприклад, два (з п'яти) рядків нашої програми (їх номери 0, 1 виділено грубим шри­фтом) у hex- файлі мають вигляд (ознакою hex-файлу є двокрапка на початку рядка):

:10000000E0E602E00EBF0FE50DBF24E037E046E773

:1000100057E075E06068559F029E002D539F000DCC

Комп’ютеру дуже просто розібратися, що за програма міститься в цій писанині, так само й мікроконтролеру, який буде виконувати цю програму, бо для них машинна мова є рідною. Для людини як перевірити подібні коди, так і написати в них програму набагато складніше (першим програмістам так і доводилось писати). Тому ми складаємо програму зрозумілішою мовою програмування, яку потім перекладає машинною мовою спеціальна програма, яка називається транслятор (асемблер, компілятор).

Мова програмування – це зрозуміла для людини мова, яка за певними правилами описує послідовність дій, що однозначно має виконати МК, і є посередником між комп’ютером і людиною. Мови програмування поділяють на два типи: мови низького рівня і високого рівня.

У МК застосовують мови низького рівня типу Асемблер, що є машиноорієнтованими, бо для кожного типу МК є своя мова Асемблер, яка залежить від системи команд даного МК (насправді такі мови в різних типів МК схожі). Ми користуватимемося мовою Atmel AVR Assembler, призначеною для МК AVR, яка в цілому є спільною для всіх типів таких МК, але відрізняється для окремих МК більш або менш повним набором команд. Характерною особливістю мови Асемблер є те, що в ній цифрові коди просто замінено словами, внаслідок чого транслятор для неї є найпростіший, а програма найкоротшою.

Серед мов високого рівня, розроблених для комп’ютерів, для програму­вання МК найбільшого застосування здобули версії мови Сі, а Асемблер та си­стема команд для МК AVR і створювалися з урахуванням узгодження з цією мовою. Мови високого рівня більш орієнтовані на людину і, як правило, є ма­шинонезалежними, бо придатні для всіх типів МК. Під час написання програми використовуються зручніші для людини засоби і програмісту можна не турбу­ватися, в яких комірках і що зберігати, проте обсяг коду машинною мовою, що записується до Flash-пам'яті МК, збільшується до 30…40%, а програма-пере­кладач з такої мови в машинні коди (частіше називається компілятор) стає скла­днішою, бо сама розподіляє ресурси МК.

2. 2 Компоненти мови Асемблер

Програма мовою Асемблер, як і будь-якою іншою мовою, пишеться на основі жорстко заданих компонентів і правил, які ми розглядатимемо на прикладах реалізації конкретних задач. Відзначимо тут тільки, що, по-перше, ця мова дуже проста, по-друге, компоненти мови Асемблер використовуються також мовою високого рівня Сі, коли її власні засоби не придатні або гірші для здійснення певних функцій, та, по-третє, написання і налагодження такої програми дозволяє краще засвоїти архітектуру МК. Тут наведемо лише основні компоненти мови Асемблер, які доповнюватимемо в міру складання програм.

а) Коментарі – текст у програмі, призначений лише для пояснень, що ігнорується транслятором, тому не записується до пам'яті МК і, отже, ніяк не впливає на його роботу. Коментарем є все, що записано від точки з комою до кінця поточного рядка (транслятор підсвічує його зеленим кольором, він може бути розміщений у будь-якому місці рядка), але багаторядкові коментарі зручніше розміщувати між косою рискою с зірочкою (початок: /*) та зірочкою с косою рискою (кінець: */). Коментарі в програмі дуже важливі для розробника, бо по проходженні деякого часу швидко забувається сенс певних дій. Вони мають бути ясними, стислими і без потреби не містити прописних істин, таких, які є в нас, що з навчальною метою тлумачать стандартні операції. За допомогою коментарів обов’язково слід дати заголовок програми із зазначенням її змісту і потрібних параметрів. Прикладом є наша заготовка ("шапка") для оформлення протоколу лабораторної роботи (коментар між /* та */).

/********************************************************************

ВНТУ. Кафедра РТ. Цифрові пристрої, ч. 2. Лабораторна робота №1 (частина 1)

"Основи програмного пакету розробника AVR Studio"

Project: (зразок) D:\CPlabII\1_1AVSas\1_1AVSas.asm

(варіант 3) D:\CPlabII(3)\1_1AVSas3\1_1AVSas3.asm

…………………………………………….. ********************************************************************/ б) Директиви – вказівки транслятору (псевдокоманди), призначені для того, щоб задати деякі параметри, пов’язані з операторами програми. Самі директиви не відповідають ніяким кодам команд і не записуються до МК, але дозволяють транслятору скласти код програми, призначеної для запису до пам'яті МК, а програмісту – спростити написання програми. У тексті програми директива починається з крапки і підсвічується чорним кольором.

1) Включення до програмного файлу (з розширенням .asm) іншого файлу з розширенням .inc дає можливість використовувати заздалегідь заготовлені і відпрацьовані тексти готових програм, оформлені окремим файлом. Обов'язковим для програми є файл включення означень вибраного типу МК, який дозволяє застосовувати під час написання програми символічні імена компонентів МК та їх адрес, перевірити правильність команд програми відповідникам мікросхеми і її ресурсу, а також записати програму до МК:

.include "m8515def.inc" ; Файл включення (\AvrAssembler2\Appnotes\m8515def)

Примітка. У файлі включення вже визначено специфікацію мікросхеми за допомогою директиви .device ATmega8515 разом з її сигнатурами (кодами, потрібними для запису програми до МК), тому немає сенсу повторювати цю директиву в програмному файлі.

2) Керування файлом лістинга – відповідно не роздруковувати або роздруковувати в ньому все, що йде за директивами:

.nolist ; Не роздруковувати (все до директиви .lіst)

.list ; Все роздруковувати (до директиви .nolіst, якщо вона є далі)

3) Означення (оголошення) – надання регістрам МК і деяким даним символічних імен для зручності написання та розуміння програми:

.def tmp = r16 ; Регістр R16 - тимчасові (temporal) дані

4) Ідентифікатор цифрового значення константи – дає можливість швидко скоригувати програму без перегляду всього її тексту зміною величини константи лише в директиві (а також не писати кілька разів великі числа, якщо такі є):

.equ A0 = 4 ; Константа A0 = 4 (коефіцієнт A = A0)

.equ SREG = $3f ; Адреса регістра стану

.equ SRAM_START = 0x0060 ; Адреса початку ОЗП

в) Вирази використовуються лише для подання констант, вони ніяк не впливають на програму і призначені для зручності програміста, бо вираз обчислюється транслятором до двійкової константи, яка, власне, і записується до МК. Вирази складаються з операндів (operands), операторів (operators) та функцій (functions).

Операнди – цілі числа (в AVRASM2 застосовуються також числа з плаваючою комою), для зображення яких використовуються формати: десятковий: 9; 255 (за умовчанням без позначення, але не може починатися з нуля); шістнадцятковий: 0xFA; 0хfa; $FA (на початку один з двох знаків: 0х або $); двійковий: 0b00001111 (на початку знак 0b); вісімковий: 04; 077 (починається з нуля, формат вживається рідко). При цьому знак системи числення і перша цифра числа мають подаватися без прогалини. Константи можуть подаватися також іменами за допомогою директиви EQU (у поточному файлі або файлі включення), а також можуть зображатися зі знаком, наприклад, за відсутністю операції додавання константи, що подається безпосередньо в команді (безпосередня адресація), можна скористатися аналогічною командою віднімання, зобразивши безпосередній операнд числом зі знаком мінус:

subi ZL,-$61 ; Виконати додавання безпосереднє: ZL <= ZL - (-$61) = ZL + $61

Асемблер підтримує низку операторів (див. гіперпосилання або довідку …\AVR Tools\Help\AVRASM), що можуть застосовуватися для подання операндів, серед яких є: + (плюс), - (мінус), * (множення), / (ділення), = (дорівнює), != (не дорівнює), ! (НЕ), & (І), | (АБО), ^ (Виключне АБО) тощо. Наприклад, щоб не розбиратися з номерами комірок ОЗП, програміст може скористатися символічним іменем SRAM_START адреси її початкової комірки, а якщо для запису масиву даних потрібно зсунути адресу на вісім комірок, він може застосувати для цієї константи вираз SRAM_START + 8. При цьому транслятор знайде з файлу включення величину SRAM_START = $0060 і підрахує нову адресу: SRAM_START + 8 = $0060 + $0008 = $0068.

Крім того, операнди можуть визначатися функціями над виразами (expression), серед яких зручними є: HIGH(expression) - , LOW(expression) - , EXP2(expression) - , LOG2(expression) - .

г) Позначки призначено для зручності переходів у програмі – якщо в потрібному місці її тексту поставити позначку, тоді в команді замість адреси переходу достатньо вказати ім'я позначки, а транслятор сам обчислює адресу, що особливо зручно під час здійснення відносних переходів та виправлення програми. Позначки мають закінчуватися двокрапкою (для наочності ми писатимемо їх великими літерами, хоч транслятор не розрізнює регістр):

MAIN: ;******** ОСНОВНА (MAIN) ПРОГРАМА****************

д) Команди (інструкції) є достатньо прості операції (приступні для даного МК), на які розбивається програма, а задача власне і реалізується шляхом послідовного в часі виконання команд мікроконтролером за заданим алгоритмом. За цим алгоритмом програміст послідовно одна за одною записує команди, а транслятор автоматично сам розміщує їх за певними адресами до комірок ЗП програм.

Формально під час написання програми програміст використовує три види запису команд: (1) clc; (2) neg Rd; (3) add Rd, Rr. При цьому у кожній команді обов'язково міститься інформація про дію, яку слід виконати, тобто код операції. Цифрові коди операцій у мові Асемблер замінено мнемокодами – символами у вигляді літер з англомовних назв операцій, які в програмному файлі створеного проекту транслятор підсвічує синім кольором. У формах (2, 3) міститься також інформація про операнди (дані, над якими виконується дія), що записуються після мнемокоду через пробіл, а якщо є два операнди, вони записуються через кому (пробіл між ними не має значення), причому операнди підсвічуються чорним кольором.

Слід звернути увагу, що в команді з двома операндами завжди на першому місці розташовується приймач інформації, а на другому її джерело. У двомісних операціях обробки даних приймач одночасно виконує функцію акумулятора: у ньому перебуває одне з двох джерел, а по виконанні команди – її результат, причому кожний з 32-х РЗП може виконувати функцію акумулятора. У МК AVR будь-які операції з даними здійснюються тільки через РЗП, тобто хоча б один з операндів міститься в РЗП (приймач Rd та/або джерело Rr). Отже, наприклад, щоб вивести дані з ОЗП до порту, спочатку їх потрібно завантажити з ОЗП до РЗП, а відтак вивести з РЗП до порту.

Формат рядка програми під час її написання жорстко вимагає тільки щоб кожна команда або директива займала один рядок, проте рекомендовано писати програму стовпцями (в дужках показано необов'язкові елементи):

(; Коментарі)

(Позначка:) КОП (операнди) (; Коментарі)

За відсутності необов'язкових елементів стовпці залишаються порожніми, тому така форма запису є зручною для читання. Проте під час опрацювання програми в головному вікні AVR Studio крім вікна програмного файлу мовою Асемблер (з розширенням .asm) одночасно потрібно відкривати низку допоміжних вікон, які затуляють текст програми. Через це в наших навчальних програмах значно зручніше позначки (з коментарями) виносити окремим рядком:

(Позначка:) (; Коментарі)

КОП (операнди) (; Коментарі)