МIНIСТЕРСТВО ОСВIТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Звіт
про виконання лабораторної роботи № 1
«ЗАСАДИ ПРОГРАМУВАННЯ МІКРОПРОЦЕСОРІВ. ОЗНАЙОМЛЕННЯ 3 ЛАБОРАТОРНИМ СТЕНДОМ EV8031/AVR»
з курсу “Мікропроцесорні пристрої”
Львів — 2012
Мета роботи: Вивчення основних понять, методів програмування мікропроцесорів, ознайомлення з структурою лабораторного стенда AV8031/AVR, схемою під’єднання його до системного блока комп’ютера та порядком роботи, навчитися створювати і виконувати найпростіші програми.
ТЕОРЕТИЧНІ ВІДОМОСТІ
Класифікація мікропроцесорів за призначенням
Мікропроцесор (МП) — це пристрій, призначений для оброблення цифрової інформації та керування процесом цього оброблення, виконаний у вигляді однієї або кількох мікросхем.
За призначенням сучасні МП можна поділити на три групи:
мікропроцесори універсальні;
сигнальні мікропроцесори;
мікроконтролери.
Універсальні мікропроцесори (УМ) - це МП, що застосовуються у обчислювальних системах (ОС): персональних комп'ютерах, потужних серверах, робочих станціях та інших ОС. Переважно вони призначені для проведення науково-технічних розрахунків з використанням операцій з плаваючою комою над 64-розрядними та більшої довжини операндами.
Сигнальні мікропроцесори (СМП)(англ. DSP-digital signal processor) розраховані на оброблення в реальному часі цифрових потоків, утворених шляхом оцифровування відліків аналогових сигналів. Це обумовлює їх порівняно невелику розрядність (16-24 біти) і переважно цілочислове оброблення. Але сучасні СМП здатні також обчислювати у форматі з плаваючою комою над 32-40-розрядними операндами. Серед них з’явився окремий клас так званих медійних мікропроцесорів (ММП), що являють собою закінчені системи для оброблення аудіо- та відеосигналів. A недавно з’явився ще один різновид СМП - це сигнальні мікроконтролери (CMK) (англ. DSC-digital signal controler).
Мікроконтролери, призначені для широкого застосування у вбудованих системах керування, наприклад, від сучасної побутової техніки (холодильники, пральні машини, кухонні комбайни тощо) до найскладніших систем керування технологічними процесами, робототехнічними комплексами, зброєю, зокрема ракетами. Про важливість цього класу мікропроцесорів свідчить, наприклад, те, що світовий випуск MK приблизно на порядок перевищує випуск всіх інших видів МП.
Рівні програмування мікропроцесорів
Залежно від того, чим приходиться оперувати під час складання програм для мікропроцесорів, їх програмування, грубо кажучи, можна поділити на три рівні:
асемблювання:
компіляція;
спеціальне програмування аплікаційне.
1. Під час асемблювання виробник разом з МП постачає програму асемблер і сподівається, що: 1) споживач вивчить структуру мікропроцесора; 2) вивчить систему команд (набір команд; 3) складатиме програми мовою асемблер. Програміст оперує програмно-доступними електронними вузлами МП, тобто такими його складовими: реєстри загального призначення, акумулятори, арифметико-логічні пристрої, реєстри зсуву тощо.
Під час компіляції виробник постачає компілятор мови C (C++, C#), який дає змогу складати програми для МП цими мовами без необхідності вникати у спосіб його роботи. У такому разі програміст оперує абстрактними змінними і покладається на вміння програміста, шо написав компілятор. Бо писав він його з метою найкращого використання електронних засобів MП
Спеціальні аплікаційні програми — це бібліотека пакетів прикладних програм. Вони складаються з програм, що найчастіше використовуються на практиці. Ці пакети постачає виробник разом з технічними засобами. Використовуючи їх, покладаємося на знання програміста, який розробив ці пакети з мстою використання MП найкраще.
Програмування мовою C
Мова C (та її модифікації C++,C#) є мовою програмування високого рівня і сьогодні вважається однією з найпопулярніших мов програмування. Розробив її у 1972 p. Dennis Ritchie. У світі комп’ютерів існують внутрішні мови, тобто мови, звані мовами низького рівня, які є зрозумілими для них. Мови ж високого рівня більше подібні до мови людини.
Мови високого рівня мають такі цінні ознаки: 1) сприйнятливість - програмний код є зручним для зрозуміння; 2) зручність в обслуговуванні - програми зручні під час обслуговування; 3) переносність - програми можна переносити на комп’ютери різних типів.
Сприйнятливість програм мовою C зумовлена тим, що вона є близькою до мови людини, зокрема, до англійської мови. Кожна мова високого рівня вимагає компілятора або інтерпретатора, тобто програм, що перетворюють команди мови високого рівня у машинні коди, які зрозумілі комп'ютеру і змушують його виконувати певні дії. Комп’ютери різних типів вимагають різних компіляторів або різних інтерпретаторів для тієї ж мови програмування.
Переносність програм тут реалізується повторною компіляцією тієї самої програми мовою C різними компіляторами для різних компютерів.
Мова C додатково має й інші ціні можливості. Програми, написані мовою C, можна вживати багатократно (re-usable programs), їх можна зберігати у файлах бібліотек (library files) і використовувати з бібліотеки для своїх наступних проектів.
Багато програм для виконання типових практичних завдань входять до складу бібліотек, які постачає виробник мікропроцесорів разом з компіляторами.
Мова C дозволяє у зручний спосіб контролювати всі програмно-доступні
внутрішні елементи мікропроцесора та периферійні пристрої. Тому її часто називають мовою найнижчого рівня серед мов високого рівня. Зручний доступ до технічних засобів був визначальним у використанні мови C в багатьох практичних застосуваннях, зокрема. там де МП стикаються з засобами програмованої логіки, зовнішніми вимірювальними пристроями, системами збирання даних, в системах, що працюють в режимі реального часу тощо.
Є два види мов програмування високого рівня. Мови компіляційні та інтерпретаційні.
Компілятор необхідний для перекладу програми, написаної мовою високого рівня, у машинний код, тобто двійковий код перш ніж програма буде запущена на виконання. У результаті цього утворюється так званий виконувальний файл (EXEcutable code), який можна зберігати в пам’яті. Такий файл можна виконувати багато разів за відсутності компілятора. Якщо ж вихідний код мовою високого рівня змінити, тоді його необхідно буде знову компілювати.
Програму ж, написану інтерпретаційною мовою, можна виконати відразу, як тільки закінчиться її написання. Але такій програмі завжди необхідна присутність інтерпретатора, бо переклад команди з мови високого рівня в машинний код відбувається завжди під час виконання програми (runtime). Якщо нема відповідного інтерпретатора, то виконати таку програму не вдасться.
Мова C вважається мовою компіляційною, оскільки більшість виробників МП постачають компілятори мови C, хоча нема жодних підстав, які б унеможливлювали написання інтерпретатора (runtime interpreter) мови C.
Створення виконувальних файлів Тепер розглянемо, як програма написана мовою C компілюється та як твориться виконувальний файл у двійковому коді. Для цього необхідні щонайменше три етапи (рис. 1).
/
Рис. 1. Cтворення виконувального файла компілятором та консолідатором
Ha першому етапі пишуть програму мовою C, яка називається вихідним кодом (source code). Це робиться у будь-якому текстовому редакторі.
Перша директива програми #include (так звана директива препроцесора preprocessor directive)) долучає до програми заголовні файли, такі як, наприклад stdio.h (standard input-output header file-заголовний файл стандартного вводу-виводу) та інші, а також здійснюються інші підготовчі дії.
Компілятор C компілює програму, створюючи новий файл у двійковому коді. Цей двійковий файл називається двійковим скомпільованим файлом (object file) з розширенням .OBJ. Запустити такий файл на виконання ще не вдається, оскільки йому не вистачає деяких функцій і деяких фрагментів коду. Тепер необхідно здійснити консолідацію (linking-долучення). Виконує цю роботу спеціальна програма консолідатор, його ще називають компонувальником (Linker), який є у складі програмного пакета компілятора (типова назва таких програм LINK.EXE. NLINK.EXE).
Консолідатор долучає до скомпільованого коду програми *.OBJ стандартні бібліотеки функцій, спеціальні власні бібліотеки споживача та додає з бібліотек двійковий код готових функцій, створюючи виконувальний файл з розширенням *.EXE (або *.COM). A в деяких випадках консолідатор об’єднує багато скомпільованих файлів .OBJ в одну виконувальну програму. Треба мати на увазі, обидва типи файлів *.OBJ та *EXE залежать від типу комп’ютера і операційної системи (machine dependent). Виконувальний файл не можна переносити поміж комп’ютерами різних типів і з різними операційними системами, навіть, якщо вихідний код є переносним.
1.3.2. Діагностика програми
Після написання програми мовою C за спроби її компіляції можна одержати повідомлення про помилки (error message). Тобто компілятор може викрити та злокалізувати багато помилок і допомогти їх виправити. Треба пам’ятати, що компілятор може виявити синтаксичні помилки, а логічних помилок він виявити не в стані. Також деякі помилки може виявити і консолідатор (Linker).
Ha комп’ютерному жаргоні помилки в програмах називають bugs (блощиці). Часто стаєгься так, що ні компілятор, ні консолідатор не виявляють формальних помилок, але програма працює неправильно. Щоб виявити такі скриті помилки використовують налагоджувач (debugger) (дослівно “від- блощищовач”).
Зазвичай виробники компіляторів долучають до цих пакетів також і налагоджувачі. Вони дозволяють виконувати програми кроками (рядок за рядком), а програміст може прослідкувати за тим, що робиться в програмі та може затримати програму у будь-який момент. Застосування наладника - це важлива і необхідна стадія у розробленні програм.
Деякі компілятори обладнані спеціальним середовищем для роботи програміста, тобто власним редактором, консолідатором, наладником (debugger), та іншими інструментами для програмування.
1.4. Програмування мовою асемблер та діагностика програм
Системи розроблення з великим об’ємом пам’яті
Найчастіше мову асемблер використовують для написання невеликих програм. Програма пишеться в програмному редакторі. Спочатку командам програми адреси не надаються. На цьому етапі адреси переходів присвоюються за допомогою міток (англ. label). Коментарі долучаються до програми.
Підготована так програма називається вихідною програмою (source listing). Потім за допомогою програми, яку називають асемблером, вихідна програма переводиться в машинний код. Більші програми ділять па частини (модулі) і переводять їх в машинний код окремо. Тоді зручніше шукати помилки. Кожна частина програми (модуль) розпочинається з адреси 0000. Потім встановлюється які модулі і в якій черговості мають об’єднуватися в програму. I відповідно до цього модулі консолідуються (linking), тобто автоматично копіюються та долучаються до програми. Це завдання виконує програма, що зветься консолідатором (linker). Одержують результуючу програму, команди якої розпочинаються з адреси 0000. Наприкінці програмі надається така стартова адреса, яку вона матиме у проектованому мікропроцесорному пристрої. 3 цієї адреси розпочинається завантаження машинного коду програми в пам’ять за допомогою програми завантажувача floader), яка одночасно з цим нумерує всі кроки програми. Тепер готову програму можна запустити на виконання для перевірки та записати в постійну пам’ять (ROM).
Описаний тут алгоритм творення програм подано на рис. 2 у вигляді блок-схеми. Пристрій, який здійснює реалізацію поданого алгоритму, називається системою виконання.
Блок-схему такої системи подано на рис. 3. Враховуючи те, що процес переводу програми є суто формальною справою, що стосується оброблення тексту, то CPU системи виконання не мусить бути ідентичним з мікропроцесором, для якого розробляється програма.
Тому під час розроблення програми можна використати будь- який персональний комп’ютер. Для цього потрібен буде пакет програм, що складається з асемблера, кон- солідатора та завантажувача.
Такий пакет програм разом необхідними технічними засобами звичайно пропонують практично всі виробники мікропроцесорів.
Під час переводу програми асемблер виявляє синтаксичні помилки, однак виявити помилки логічні він не в стані. Для цього треба перевірити програму під час її виконання. При цьому використовують два програмні засоби: 1) симулятор та 2) емулятор.
Рис. 3. Структурна схема технічних засобів виконання програми
/
Симулятор - це програма, що симулює CPU системи, яка проектується, нa комп’ютері системи виконання (наприклад, на персональному комп’ютері). Тут при виконанні програми можна переглядати вміст реєстрів, стеку та інших областей пам’яті. У кращих симуляторах існує навіть можливість враховувати пристрої вводу-виводу та досліджувати реакцію системи на зовнішні сигнали. Так можна усувати в програмі більшість логічних помилок. Тут не враховуються технічні засоби проектованої системи. Тому проектувати технічні засоби та програмні можна паралельно.
Недоліком симуляторів є те, що працюють вони на кілька порядків повільніше ніж система, що проектується. Це не дозволяє дослідити поведінку системи в режимі реального часу.
Тому для проведення завершального тестування системи необхідний емулятор. Емулятор має інтерфейс для під’єднання проектованої системи та програми, що дають змогу об’єднати систему виконання з проектованою системою. Емулятор має мікропроцесор і пам’ять проектованої системи, які за допомогою кабеля з’єднуються з мікропроцесором системи виконання. Це дозволяє тестувати програму в реальному часі з врахуванням пристроїв введення-виведення проектованої системи, задавати адреси зупинки програми (breakpoints), по досягненні яких висвічується вміст реєстрів та областей пам’яті, які цікавлять проектанта.
Емулятори створюються під конкретний тип мікропроцесора. Тому, якщо хочемо створити програму для іншого мікропроцесора, мусимо змінити технічні засоби та програмні засоби емулятора на нові, тобто такі, що відповідають іншому мікропроцесору. Емулятори мікроконтролерів часто містять програматор пам’яті EPROM цього мікроконтролера.
Пpocтi системи розроблення з невеликою пам’яттю
B описаних вище системах виконання найбільша трудність полягає в тому, що розроблювані програми мусять бути написані та виконуватися у символьному вигляді (наприклад, в мнемокоді). Це зумовлює використання великих об’ємів пам’яті разом з відповідною операційною системою.
Великий об’єм пам’яті не потрібний, якщо використовується асемблер, який відразу після введення програми переводить кожну введену команду і записує її і машинному коді. До того ж втрачається можливість запам’ятовування коментарів. Під час подальшого коригування програми використовується програма, що переводить шіснадцятковий код на мову символів. Така програма зветься дезасемблер. Цей метод також дозволяє використовувати мітки. 3 цією метою асемблер, що переводить програму лінія за лінією (line- by-line assembler) повинен тільки закласти таблицю міток, яка зберігається в пам’яті разом з програмою, і забезпечити доступ до неї дезасемблерові під час оберненого переводу у символічний код.
Такий асемблер/дезасемблер разом з програмою монітор займає тільки близько 8 Кбайт пам’яті, і тому можна їх розмістити безпосередньо в проектованому мікропроцесорі. Завдяки цьому написану програму можна протестувати безпосередньо після введення без потреби використання емулятора.
Такого роду нескладні системи придатні винятково для виконання коротких програм до 10 Кбайт.
ОПИС ЛАБОРАТОРНОГО СТЕНДА EV8031/AVR (V3/2) TA РОБОТА 3 НИМ
Лабораторний стенд та схема під’єднання Лабораторний стенд являє собою мікропроцесорний контролер, що містить також пам’ять програм, пам’ять даних та деякі периферійні пристрої, про які йтиметься нижче. Він дозволяє налагоджувати програми, написані мовами C та Асемблер. Програма набирається в текстовому редакторі на персональному комп’ютері (ПК), компілюється в 16-й код, який завантажується в мікроконтролер через USB-порт. Живлення на стенд (+5B) подається з ПК через СОМ-порт USB. Схема під’єднання стенда до ПК подана на рис.4.
/
Рис. 4. Схема під 'єднання стенда до ПК
Структурна схема стенда подана на рис. 5. A на рис. 6. показано розташування елементів на платі стенда.
/
Рис. 5. Спрощена структура лабораторного стенда
/
Pис. 6. Розташування елементів на платі стенда
Робота зі стендом:
Розглянемо порядок завантаження програми в стенд. Послідовність кроків:
1. Ha персональному комп’ютері, під’єднаному до стенда, завантажити текстовой редактор (наприклад, зайти в програму FAR i, натиснувши клавіші CTRL F4, зайти в редактор).
У текстовому редакторі набрати текст розробленої програми в мнемокодах мови Асемблер (в інструкціях мови C) для мікроконтролера 8051 (наприклад MK типу AT89S52, що використаний в лабораторному макеті).
Зберегти набрану програму в файлі в робочому каталозі, наприклад, на диску C:\WORK\Lbrobl.asm (*.C).
де *-означає назву, яку присвоєно файлу.
Перевести набраний файл програми за допомогою програми Асемблер в машинний код (відкомпілювати набрану програму компілятором).
Після цього можливі синтаксичні помилки в програмі можна подивитися в однойменному файлі програми з розширенням *.LST.
6. Усунувши всі синтаксичні помилки, файл програми з розширенням *.HEX програмою завантажувачем EVAL32.EXE необхідно перенести в стенд. Вивід на екран підказок про параметри програми EVAL32.EXE здійснюється запуском EVAL32.EXE без параметрів.
Під час передавання даних з персонального комп'ютера в стенд на екрані монітора комп’ютера відображаються дані, що передаються. Ці ж дані відображаються на індикаторі стенда. При цьому горить світлодіод HL9.
Зупинити завантаження програми та перейти в режим очікування даних від персонального комп’ютера можна, натиснувши кнопку SW2. При цьому гасне світлодіод HL9.
Записувати нову програму можна в будь-який момент роботи вже завантаженої програми.
Приклад завантаження програми в стенд
Ha персональному комп’ютері завантажити текстовий редактор та переписати вміст CD на диск C, якщо він попередньо не був завантажений.
У текстовому редакторі набрати текст програми в мнемокодах мови Асемблер для мікроконтролера 8051:
ORGO
Start:
mov DPTR, # 0A000h ;занести в реєстр DPTR адресу індикації
mov А, # 28h ;занести в реєстр A дані для відображення
movx @DPTR, A ;винести на індикацію число 28, адреса
якого є вмістом реєстра DPTR
jmp Start ;перехід на початок
END
Зберегти набраний файл програми у на диску C:\ з розширенням *.asm. (Наприклад, IND.asm).
Перекласти файл програми за допомогою програми Асемблер в машинний код (C:\AVR\ASM51\ASM51.EXE lND.asm).
Проглянути файл програми IND.lst чи нема помилок. За наявності виправити їх. Потім дані файла IND.hex перенести в стенд (C:\AVR\EVAL\EVAL32.exe -hs -com 2 9600 IND.hex). Якщо не той com порт, то змінити номер порту з 2 на 1 і т.д.
Довідку про параметри програми завантаження даних у стенд можна подивитися, запустивши програму EVAL32.exe , без параметрів.
Тексти програм
ORGO
Start:
mov DPTR, # 0A000h
mov А, # 28h
add А, # 03Eh
movx @DPTR, A
jmp Start
END
Результати роботи програми:
Результатом виконання програми є висвітлювання на індикаторі HG1 числа 66.
Висновок:
На даній лабораторні роботі я вивчив основні поняття, методи програмування мікропроцесорів, ознайомився з структурою лабораторного стенда AV8031/AVR, схемою під’єднання його до системного блока комп’ютера та порядком роботи, створив та запустив найпростіші програми, які успішно виконались.