Програмування пам'ятi мовою Асемблер мікроконтролера AVR

Аналіз роботи обчислювальних пристроїв, побудованих за RISC-архітектурою. Центральний процесор і внутрішня пам'ять мікроконтролерів AVR компанії Atmel. Принцип побудови AVR-контролера ATtiny2313: складові частини; програмування пам'ятi мовою Асемблер.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 27.07.2015
Размер файла 1,1 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Зміст

Вступ

1. Аналіз роботи обчислювальних пристроїв, побудованих за RISC архітектурою

2. Центральний процесор і внутрішня пам'ять мікроконтролерів AVR компанії Atmel

3. Принцип побудови AVR контролера ATtiny2313 та його складових частин

3.1 Таймери/лічильники мікроконтролера ATtiny2313 сімейства AVR

3.2 Асинхронна передача даних через приймач-передвач UART

3.3 Синхронна передача даних через послідовний інтерфейс (SPI)

3.4 Послідовна передача даних по шині I2C

3.5 Порти введення-виведення AVR мікроконтролера ATtiny2312

3.6 Система команд мікроконтролера типу AVR

4. Програмування пам'яті мовою Асемблер мікроконтролера AVR

4.1 Принципи програмування мiкроконтролерiв типу AVR

4.2 Призначення і можливості AVR-Studio

4.3 Розробка програми індикації на мові Асемблер

5. Використання мікроконтролера ATtiny2313

Висновок

Список літератури

Вступ

Електроніка -- галузь сучасної фізики та електротехніки. Вона займається вивченням і використанням явищ, приладів і систем, основою яких є проходження електричного струму у вакуумі, газі та твердому тілі, дослідження, розробка електронних засобів і систем та принципів їх використання. Обмін інформацією в електронних системах відбувається за допомогою сигналів, носіями яких можуть бути різні фізичні величини -- струми, напруги, магнітні стани, світлові хвилі. Розрізняють аналогові (безперервні) і дискретні сигнали. Є два типи дискретних сигналів перший отримано за рівнем або за часом дискретизації безперервних сигналів, другий -- у вигляді набору кодових комбінацій знаків.

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

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

Важливе місце у схемотехніці електронних систем посідають системи керування з мікропроцесорами і мікроконтролерами, які дають змогу реалізувати складні закони керування електронними пристроями. Знання схемотехніки аналогових і цифрових систем створює базу для вивчення систем керування.

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

1. Аналіз роботи обчислювальних пристроїв побудованих за RISC архітектурою

Розвиток архітектури ЕОМ, спрямоване на підвищення їхньої продуктивності, у багатьох випадках йде по шляху ускладнення процесорів шляхом розширення системи (набору) команд, введення складних команд, що виконують процедури, що наближаються до мов високого рівня, збільшення числа використовуваних способів адресації і т.д.

Однак розширення та ускладнення набору команд породжують і ряд небажаних побічних ефектів.

Розширення набору команд, збільшення числа способів адресації, введення складних команд супроводжуються збільшенням довжини коду команди, в першу чергу, коду операції, що може призводити до використання «розширюється коду операції», збільшення числа форматів команд. Це викликає ускладнення та уповільнення процесу дешифрування коду операції та інших процедур обробки команд. Зростаюча складність процедур обробки команд змушує вдаватися до керуючих пристроїв з системою пам'яттю замість більш швидкодіючих УУ з «жорсткою» логікою.

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

RISC (англ. Reduced Instruction Set Computing -- обчислення зі скороченим набором команд) -- архітектура процесорів зі скороченим набором команд. Також відома як «Load/Store архітектура», позаяк система команд такої архітектури не включає арифметико-логічних операцій з операндами у пам'яті. Для будь-якого оброблення даних їх спочатку слід завантажити (англ. Load) в регістр, виконати необхідні операції, а тоді зберегти (англ. Store) назад у пам'ять.

Метою створення RISC архітектури було:

1) зменшення набору команд для збільшення додаткової площі на кристалі, де можна розмістити кеш або регістри;

2) приведення всіх команд до однакового розміру та подібного формату;

3) в ідеалі, всі команди повинні були виконуватись за один такт.

Особливістю контролерів, виконаних за RISC архітектурою, є те, що всі команди виконуються за один-три такти, тоді як у CISC контролерах -- за один-три машинних цикли, кожний з яких складається з кількох тактів, наприклад для -- з 12 тактів. Тому RISC- контролери мають значно більшу швидкодію. Однак повніша система команд CISC контролерів у деяких випадках сприяє економії часу виконання певних фрагментів програми та економії пам'яті програм.

Найвідоміші представники: DEC Alpha, ARC, ARM, AVR, MIPS, PA-RISC, Power Architecture (включаючи PowerPC), SuperH, та SPARC.

Основними рисами RISC архітектури є:

1) мала кількість команд;

2) однакова довжина всіх команд;

3) мала кількість різних форматів команд;

4) відсутність команд, які працюють з операндами в пам'яті.

5) мала кількість апаратно підтримуваних типів даних;

6) велика кількість ідентичних регістрів загального призначення.

Поштовхом для розробки RISC архітектури стало те, що тогочасні (середина 1970-х) компілятори не використовували більшість команд із CISC набору та не могли скористатися перевагами багатьох типів складної адресації. Виконання складних CISC інструкцій вимагало багатьох процесорних тактів, а реалізація різних типів адресування та інструкцій, що реалізовують високорівневі операції, займала більшість площі процесорного кристалу та майже не використовувалась.

RISC-процесори швидші і економічніші, ніж CISC. У принципі, є можливість проектувати процесори на чистій RISC-архітектурі. Але відмовитися від архітектури x86 вже важко, оскільки під неї написано більшість поширених у світі програм, включаючи комп'ютерні ігри.

За рахунок аналізу роботи реальної, а не тестової системи виникає можливість оперативно зрозуміти причини зниження продуктивності програми, а сумарна продуктивність системи при точній настройці іноді зростає в 30 разів.

Ряд наукових досліджень середини 1970-х років довів, що тогочасні компілятори не використовували переваги складної адресації, а також те, що більшість процесорів мали надлишковий набір інструкцій. Також було доведено, що в багатьох випадках складні інструкції виконувались повільніше, ніж аналогічний по функціональності набір простіших інструкцій. Відомим прикладом цьому була інструкція INDEX комп'ютера VAX, яка виконувалась повільніше за її реалізацію на базі циклу (але при цьому вона займала менше місця у пам'яті, що було важливо в ті часи). Також, складні інструкції менше підлягали оптимізації під конкретну задачу (наприклад, заміна множення та ділення операціями зсуву).

Найуспішніші реалізації RISC архітектури: ARM, AppleiPod, Apple iPhone (Samsung ARM1176JZF), Palm, PocketPC та смартфони (Intel XScale, Samsung SC32442 -- ARM9), Nintendo Game Boy Advance (ARM7), Nintendo DS (ARM7).

2. Центральний процесор і внутрішня пам'ять мікроконтролерів AVR компанії Atmel

Atmel AVR є сімейством універсальних 8-розрядних мікроконтролерів на основі загального ядра з різними вбудованими периферійними пристроями. Можливості MK AVR дозволяють вирішити безліч типових завдань, що виникають перед розробниками радіоелектронної апаратури.

Особливості мікроконтролерів Atmel AVR

Продуктивність порядку 1 Mips/МГц. MIPS (Millions of Instructions Per Second, мільйон команд в секунду) -- одна з найстаріших і багато в чому формальна характеристика продуктивності процесорів, оскільки набори команд для різних процесорів розрізняються, і, відповідно, одне і те ж число інструкцій на різних системах дасть різну корисну роботу. Проте для простих 8-розрядних обчислювальних систем, що не містять команд, що оперують з великими числами, числами з плаваючою крапкою і масивами даних, це непоганий показник для порівняння їх продуктивності. Обчислювальне ядро AVR на ряду завдань по продуктивності перевершує 16-розрядний процесор 80286.

Вдосконалена risc-архітектура. Концепція RISC (Reduced Instruction Set Computing, обчислення із скороченим набором команд) передбачає наявність набору команд, що складається з мінімуму компактних і таких, що швидко виконуються інструкцій; при цьому такі громіздкі операції, як обчислення з плаваючою крапкою або арифметичні дії з багаторозрядними числами передбачається реалізувати на рівні підпрограм. Концепція RISC спрощує пристрій ядра (у типовому ядрі AVR міститься лише 32 тис. транзисторів, на відміну від десятків мільйонів в процесорах для ПК) і прискорює його роботу: типова інструкція виконується за один такт (окрім команд галуження програми, звернення до пам'яті і деяких інших, що оперують з даними великої довжини). У AVR є простий двоступінчатий конвеєр, коли команда виконується в одному такті з вибіркою наступної.

На відміну від Intel-архітектур, в «класичному» AVR немає апаратного множення/ділення, але в сімействі Mega присутні операції множення.

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

32 регістри загального призначення (РОН). Atmel була першою компанією, що далеко відійшла від класичної моделі обчислювального ядра, в якій виконання команд передбачає обмін даними між АЛУ і вічками, що запам'ятовують, в загальній пам'яті. Введення РОН в такій кількості (нагадаємо, що в архітектурі X86 всього чотири таких регістра, а в x51 поняття РОН, як таке, відсутній) у ряді випадків дозволяє взагалі відмовитися від розташування глобальних і локальних змінних в ОЗУ і від використання стека, операції з яким ускладнюють і захаращують програму. В результаті структура асемблерної програми наближається до програм на мовах високого рівня. Правда, це привело до деякого ускладнення системи команд, номенклатура яких для AVR більша, ніж в інших risc-сімействах (хоча значна частина інструкцій -- псевдоніми).

Flash-пам'ять програм (10 ТОВ циклів стирання/запис) з можливістю внутрісистемного перепрограмування і завантаження через послідовний канал прямо в готовій схемі. Про переваги такого підходу, що нині став загальноприйнятим, детально розказано у введенні.

Окрема область незалежної пам'яті (EEPROM, 100 000 циклів стирання/запис) для зберігання даних, з можливістю запису програмним дорогою, або зовнішнього завантаження через spi-інтерфейс.

Вбудовані пристрої для обробки аналогових сигналів: аналоговий компаратор і багатоканальний 10-розрядний АЦП.

Сторожовий таймер, що дозволяє здійснювати автоматичне перезавантаження контролера через певні проміжки часу (наприклад, для виходу з «сплячого» режиму).

Послідовні інтерфейси SPI, TWI (I2С) і UART (USART), що дозволяють здійснювати обмін даними з більшістю стандартних датчиків і інших зовнішніх пристроїв (у тому числі таких, як персональні комп'ютери) апаратними засобами.

Таймери-лічильники з передустановкою і можливістю вибору джерела рахункових імпульсів: як правило, один-два 8-розрядних і як мінімум один 16-розрядний, у тому числі що можуть працювати в режимі багатоканальної 8-, 9-, 10-, 16-бітовій широко-імпульсній модуляції (PWM).

Можливість роботи при тактовій частоті від 0 Гц до 16-20 Мгц.

Діапазон напруги живлення від 2,7 до 5,5 В (в деяких випадках від 1,8 або до 6,0 В).

Багаточисленні режими енергозбереження, що відрізняються числом вузлів, що залишаються підключеними. Вихід з «сплячих» режимів по сторожовому таймеру або по зовнішніх перериваннях.

Вбудований монітор живлення -- детектор падіння напруги (Brownout Detection).

Оперативна пам'ять мікроконтролерів AVR реалізована у вигляді статичної пам'яті RAM (SRAM). Статичною вона називається тому, що регенерація тих, що знаходяться в пам'яті даних не відбувається. Дані, що знаходяться в SRAM не зберігаються після відключення напруги живлення мікроконтролера, саме тому вона і називається оперативною пам'яттю. Об'єм ОЗУ мікроконтролерів AVR складає від 128 байт (у моделях сімейства tiny) до 4-8 кбайт в пізніх представниках сімейства mega. Вічка ОЗУ адресуються побайтно, отже, для адресації, наприклад 8 кбайт пам'яті, вистачає 2-байтного адреси.

ОЗП мікроконтролерів AVR складається з набору 8-розрядних регістрів, пронумерованих по порядку, і ділиться умовно на декілька областей. Порядковий номер регістра в області SRAM є не що інше, як його адреса. Організація оперативної пам'яті представлена на малюнку 1.

Рисунок 1 -- Організація оперативної пам'яті мікроконтролерів AVR. Регістри загального призначення

Перші 32 адреси SRAM займають регістри загального призначення, ті самі, що входять до складу CPU і безпосередньо пов'язані з АЛУ. Дані регістри є робочою областю. Спочатку сюди заносяться різні дані (це можуть бути дані з якого-небудь периферійного пристрою або якась константа). Потім за допомогою АЛУ виконуються необхідні операції.

Результат операції може бути відправлений з регістра загального призначення в периферійний пристрій.

Тут також можуть бути виділені регістри під проміжні значення і буферні регістри. Шість останніх регістрів загального призначення утворюють три регістрові пари -- 16-розрядні регістри X, Y і Z. Структура цих регістрів представлена на наступному малюнку.

Рисунок 2 -- Структура регістрових пар X, Y, Z

Як видно з малюнка, 16-розрядний регістр Х утворений парою регістрів загального призначення R26-r27, причому його молодшим байтом XL (від low) є регістр R26, ну а старшим XH -- регістр R27. Аналогічні висновки справедливі і для регістрів Y і Z. При використанні спеціальних команд дані регістри можна використовувати як покажчики адрес, наприклад, при зверненні до вічок пам'яті SRAM. За допомогою регістра Z зручно витягувати різні константи, що зберігаються в пам'яті програм.

Регістри введення/виводу

Безпосередньо за регістрами загального призначення розташовується область 64 регістрів введення/виводу. У даної області пам'яті розташовуються регістри, за допомогою яких забезпечується доступ до всіх периферійних пристроїв. За допомогою цих регістрів здійснюється управління, налаштування і запуск необхідних модулів, а також здобуття інформації про їх стан. Таблиця регістрів введення/виводу може бути отримана з технічної документації на конкретний мікроконтроллер. Для старших моделей Mega із складною структурою (наприклад, Atmega128) 64-х регістрів введення/виводу може виявитися недостатньо, тому для цих цілей виділяється ще 160 додаткових регістрів (у адресному просторі від $0060 до $00FF).

Внутрішнє ОЗП

Відразу за областю регістрів введення/виводу розташовується безпосередньо внутрішнє ОЗП даних мікроконтролера. Ця область пам'яті використовується для тимчасового зберігання деяких змінних і констант, що використовуються під час роботи. Слід уточнити, що регістри введення/виводу не віднімають адресний простір в області внутрішнього ОЗП.

Адреси внутрішньої оперативної пам'яті розташовуються відразу поле адрес регістрів введення/виводу. А ось об'єм зовнішнього ОЗУ, що підключається, завжди обмежений адресою $FFFF, і якщо в конкретній моделі використовується велике число регістрів введення/виводу, то об'єм можливої зовнішньої пам'яті, що підключається, зменшується. Кінцева адреса області внутрішнього ОЗП залежить від конкретної моделі мікроконтролера і зазвичай позначається константою RAMEND для зручності при програмуванні. В кінці оперативної пам'яті зазвичай розташовують програмний стек, за відсутності апаратного.

Зовнішнє ОЗП

Можливість підключення зовнішньої оперативної пам'яті є лише в деяких моделей (Atmega8515, Atmega162, Atmega128, Atmega2560 і ін.). Зовнішня пам'ять, що підключається, може бути будь-яким статичним різновидом (FLASH, RAM, EEPROM) з паралельним інтерфейсом. При підключенні зовнішнього ОЗП необхідно враховувати, що максимальна адреса вічка ОЗП, яку може використовувати мікроконтролер, складає $FFFF. Таким чином, ОЗП мікроконтролерів AVR умовно ділиться на декілька областей:

- регістри загального призначення;

- регістри введення/виводу,

- внутрішнє ОЗП і зовнішнє ОЗП.

3. Принцип побудови AVR контролера ATtiny2313 та його складових частин

3.1 Таймери/лічильники мікроконтролера ATtiny2313 сімейства AVR

У мікроконтролерах AVR може бути до 4х таймерів/лічильників (ТС). Розрядність цих таймерів 8 або 16 біт (тобто вони можуть вважати до 28 = 256 або до 216 = 65536). Зазвичай їх використовують для точного формування тимчасових інтервалів, підрахунку імпульсів на виводах мікроконтролера, формування послідовності імпульсів. Таймери здатні виробляти запити на переривання, при цьому звільняючи процесор від необхідності опиту стану таймерів.

У даній статті ми розберемо роботу таймерів і переривань, які вони можуть виробляти, на прикладі 16-ти бітового таймера/лічильника 1 (TС1) мікроконтролера Atmega8. Всього в цього МК три таймери - два 8мі бітових (TС0, TС2) і один 16 бітовий (TС1). Поглянемо на таблицю векторів переривань МК mega8-7 переривань пов'язано з таймерами мікроконтролера, з них 4 пов'язані з таймером/лічильником1 (TС1). Давайте розберемося, що ж може цей таймер, які регістри їм управляють і що в них потрібно записати, щоб настроїти таймер як нам потрібно. Спершу розглянемо всі регістри ТС1 і за що який біт відповідає, а потім розглянемо які-небудь прості приклади по налаштуванню таймера. Почнемо з регістрів управління таймером.

Мікроконтролер ATtiny 2313 має наступні вузли:

1) 2 Кбайт системної програмованої флеш-пам'яті програм;

2) 128 байт EEPROM;

3) 128 байт SRAM (ОЗУ);

4) 18 ліній вводу-виводу (І/О);

5) 32 робочих регістра;

6) однопровідний інтерфейс для внутрішньої відладки;

7) два багатофункціональних таймера/лічильника з функцією збігу;

8) послідовний програмований UART-порт;

9) підтримка зовнішніх і внутрішніх переривань;

10) універсальний послідовний порт з детектором початку передачі;

11) програмований охоронний таймер з внутрішнім генератором;

12) три програмно змінюваних режиму енергозбереження.

Рисунок 3 - Розташування виводів мікроконтролера ATtiny2313.

Біти 3:2 - Foc1a, Foc1b: служать для примусової зміни стану виходів Oc1a і Oc1b. Біти 1:0 - Wgm11, Wgm10: служать для налаштування ТС1 для праці широко-імпульсним модулятором (ШИМ). У режимі ШИМ стан виходів Oc1a і Oc1b відрізнятиметься. У цій статті не буду нічого писати про режим ШИМ, а то буде купа інформації, яку важко переварити. Що таке ШИМ опишу абияк іншим разом

Біти 3:2 - Foc1a, Foc1b: служать для примусової зміни стану виходів Oc1a і Oc1b. Біти 1:0 - Wgm11, Wgm10: служать для налаштування ТС1 для праці широко-імпульсним модулятором (ШИМ).

У режимі ШИМ стан виходів Oc1a і Oc1b відрізнятиметься. У цій статті не буду нічого писати про режим ШИМ, а то буде купа інформації, яку важко переварити. Що таке ШИМ опишу абияк іншим разом.

А далі з частотою, яку ми вибрали в регістрі Tccr1b лічильник таймера починає вважати і записувати значення лічильника в регістри Tcnt1h і Tcnt1l - старший і молодший байт рахункового регістра. Досягши Tcnt1 значення 216 лічильник переповнюється і скидається, і починає рахунок заново. У цей регістр ми також можемо записати яке-небудь значення, з якого ми хочемо, щоб наш лічильник стартував. Для 16-бітової операції запису, менший байт має бути прочитаним першим, а вміст старшого байта прочитується другим.

Якщо ми набудували зміну стану входу Oc1a або Oc1b, тоді значення рахункового регістра порівнюється кожного разу із значенням регістрів Ocr1a і Ocr1b - регістри порівняння. Кожен з цих регістрів складається з двох байт (наприклад, Ocr1ah і Ocr1al).

Ми можемо записати в ці регістри потрібне нам значення і по збігу значення регістра лічильника з регістром порівняння відбуватиметься потрібна нам зміна на виходах Oc1a і Oc1b.

Також є регістр захвату входу - Icr1 (Icr1h і Icr1l). Значення Tcnt1 в цей регістр записується при настанні події на вході Icp1. Рахунок і зміна стану ніжок МК це вже добре, але також цей таймер може при певних подіях генерувати переривання. Як ми вже бачили з таблиці векторів переривань в ТС1 є 4 вектори переривання - переривання по захвату, переривання по збігу А, переривання по збігу В, переривання по переповнюванню (вказані в порядку зменшення пріоритету). Розглянемо регістри, набудувавши які можна управляти перериваннями ТС1.

Біт 7 - Ocie2: переривання по збігу ТС2 Біт 6 - Toie2: переривання по переповнюванню ТС2 Біт 5-Ticie1: переривання по захвату ТС1 Біт 4-Ocie1a: переривання - переривання по переповнюванню ТС1 Біт 1 - не використовується Біт 0-Toie0: переривання по переповнюванню ТС0 Якщо відповідний біт встановлений в "1" і біті I (7-й біт) регістра станів SREG встановлений в "1", тоді відповідне переривання спрацьовуватиме. TIFR - регістр прапорів переривань таймерів/лічильників

Прапори відповідають перериванням в регістрі TIMSK. Встановлюються в "1" при виконанні умов відповідного переривання. Ось і вся теорія пов'язана з ТС1. Останні таймери набудовуються аналогічним чином.

Тепер ми можемо узагальнити і записати якими можливостями володіє цей таймер: Лічильник 16-ти бітовий (16 бітовий ШИМ) Два незалежні виходи, що спрацьовують по збігу Один вхід по захвату події (зростаючий або падаючий фронт) і придушення брязкоту на цьому вході

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

На рисунку відзначив виводи пов'язані з таймерами/лічильниками МК.

Тепер давайте придумаємо собі які-небудь умови роботи Tc1 і набудуємо його відповідним чином, записавши потрібні значення в регістри таймера. Отже, наш МК тактується від зовнішнього кварцу з частотою 2.048МГц, ми хочемо, щоб на виході Oc1a був прямокутний сигнал з періодом 1сек. Як ми далі думаємо? Нам потрібно щоб на виході Oc1a досягши якогось значення в лічильнику мінявся рівень на протилежний кожні 0.5сек. Щоб рівень мінявся на протилежний в регістр Tccr1a потрібно записати 0x40 (див. таблицю 1).

Тепер порахуємо до якого значення повинен рахувати лічильник. Оскільки час 1сек досить велика те виберемо дільник тактової частоти 1024, і запишемо відповідно в регістр Tccr1b значення 0x05 (див. таблицю 2). Тепер наш таймер вважає з частотою 2048000/1024=2000Гц, тобто за 1 сек ТС1 долічить до 2000, а нам потрібне значення до якого він долічить за 0.5 сек. Це значення дорівнює 2000/2=1000 (0x03E8). Саме це значення запишемо в регістр Ocr1a.Теперь ТС1 долічить до 1000, його значення збіжиться з Ocr1a і він змінить стан виходу Oc1a на протилежне і піде вважати далі, що нам зовсім не потрібне. Щоб цього не сталося запустимо переривання по збігу А (Timsk=0x10) і в обробнику скидатимемо регістр Tcnt1. Ось власне і всі налаштування. Ця програма в WINAVR виглядатиме ось так:

#include <iom8.h>

#include <avr/io.h>

#include <avr/interrupt.h>

#define F_CPU 2048000

ISR(TIMER1_COMPA_vect)//обробник переривання по збігу А

{

TCNT1H=0;//обнуляємо регістр TCNT1

TCNT1L=0;

}

int main()

{

DDRB=0x02;//настроюємо OC1A як вихід

PORTB=0x00;

TCCR1A=0x40;//при збігу рівень OC1A змінюється на протилежний

TCCR1B=0x05;//CLK/1024

OCR1AH=0x03;//записуємо в регістр OCR1A 1000

OCR1AL=0xE8;

TIMSK = 0x10;//дозволяємо переривання по збігу

sei();//дозволяємо переривання глобально

while(1);

}

3.2 Асинхронна передача даних через приймач - передавач UART

Послідовні передача та прийом

Біти даних передаються з одного місця в інше через дроти або інші носії. Якщо мова йде про великі відстані, вартість дротів стає великою. Щоб зменшити вартість довгих комунікацій, що переносять кілька біт паралельно, біти даних передають послідовно один за одним, і використовують UART для перетворення паралельної форми на послідовну на кожному кінці лінії зв'язку. Кожен UART має зсувний регістр, який є фундаментальним методом для перетворення між паралельними та послідовними формами.

Зазвичай UART не отримує і не генерує зовнішні сигнали, які подорожують між різними частинами обладнання. Як правило, для перетворення логічного рівня UART в та з зовнішнього рівня сигналів використовується окремий інтерфейсний блок.

Зовнішній сигнал може мати багато різних форм. Прикладами стандартизованих напруг сигналу можуть служити RS-232, RS-422 чи RS-485 від EIA. Історично присутність або відсутність струму (в електричному колі) використовувалася в телеграфних схемах. Деякі ж сигнальні схеми не використовують електричних дротів. Як приклад можна навести оптоволокно, інфрачервоний зв'язок чи Bluetooth в своєму Serial Port Profile (SPP). Прикладами модуляції є аудіо сигнал телефонних модемів, РЧ модуляція даних, або DC-LIN для комунікацій по силових дротах.

Зв'язок може бути «дуплексним» (можливість одночасного прийому та передачі) або «напівдуплексним» (пристрої переключаються між режимами прийому та передачі).

UART широко використовується в інтерфейсі RS-232 для вбудованих систем комунікацій. Він використовується для зв'язку між мікроконтролерами і комп'ютером. Багато чіпів забезпечують функціональність UART, та існують дешеві мікросхеми для конвертації логічного рівня сигналу (типу TTL) в сигнал рівня RS-232.

Асинхронні передача та прийом

Під час асинхронної передачі UART телетайпного типу посилає стартовий біт, потім від п'яти до восьми бітів даних, перший -- найменш значимий, потім опціональний біт парності, і потім один, півтора чи два стопових біти.

Стартовий біт надсилається в зворотній полярності до звичайного незайнятого стану ліній зв'язку. Стоповий біт відповідає незайнятому стану лінії і забезпечує паузу перед наступною порцією даних. Це зветься асинхронною старт-стоповою передачею. В механічних телетайпах стоповий біт часто був розтягнутим вдвічі, щоб дати можливість механізму надрукувати символ. Розтягнутий стоповий біт також допомагав при ресинхронізації. Біт парності перевіряє кількість одиниць між стартовим і стоповим бітами або парним та непарним, або ж цей біт може бути відсутнім. Непарна перевірка надійніша, бо вона може засвідчити, що принаймні одна одиниця передалася, а це дозволяє багатьом UART пересинхронізуватися. В синхронній передачі частота тактового генератора відновлюється окремо з потоку даних і старт-стопові біти не використовуються. Це покращує ефективність каналу зв'язку для надійних ліній, також надсилається більше корисних даних. Асинхронна передача не посилає нічого, коли нема що передавати. Натомість синхронний інтерфейс має завжди посилати якісь дані, щоб підтримувати синхронізацію між передавачем і приймачем. В якості заповнювача порожнечі часто використовується ASCII-символ «SYN», це робиться автоматично передавачем.

USART чіпи мають синхронний та асинхронний режими.

Структура:

UART звичайно складається з наступних компонентів:

тактовий генератор, частота якого як правило кратна бітрейту, щоб дозволити дискретизацію на середину циклу передачі біта.

зсувні регістри вводу та виводу

схему контролю передачі/прийому

логіка контролю читання/запису

буфери передачі/прийому (опціонально)

буфер паралельної шини даних (опціонально)

пам'ять буфера стека FIFO (опціонально)

3.3 Синхронна передача даних через послідовний інтерфейс (SPI)

Послідовний інтерфейс SPI-інтерфейс для високошвидкісної синхронної передачі даних з використанням трьох або чотирьох виводів ІС. З його допомогою можна організувати високошвидкісне з'єднання між МК XMEGA і зовнішніми ІС, а також між декількома мікроконтроллерами AVR. Інтерфейс SPI підтримує повнодуплексну передачу даних.

Пристрій, підключений до шини, повинен діяти як провідний пристрій або як підпорядковане. Провідний пристрій ініціює транзакції передачі даних і повністю ними управляє. Взаємодія між ведучим і підлеглим ЦПУ через інтерфейс SPI показана на малюнку 20.1. Система складається з двох здвигових регістрів, а також генератора синхронізації на стороні провідного пристрою.

Ведучий SPI ініціює цикл зв'язку установкою низького рівня на виведенні вибору підлеглого пристрою (SS) тій ІС, з якою необхідно встановити з'єднання. Дані провідний і підлеглий пристрої, що підлягають передачі, поміщають в здвигові регістри. Після цього, що веде пристрій починає генерувати імпульси синхронізації на лінії SCK, що приводить до взаємного обміну даними. Передача даних зрушенням в напрямі від провідного пристрою до підлеглого завжди виконується на лінії MOSI, а передача у зворотному напрямі - на лінії MISO. Після передачі кожного пакету даних, що веде пристрій, в цілях синхронізації підлеглого пристрою, може перевести лінію SS у високий стан.

процесор мікроконтролер програмування асемблер

Рисунок 4 - Механізм взаємодії ведучого і підлеглого модулів SPI

Модуль SPI мікроконтроллерів XMEGA оснащений однорівневою буферизацією в каналі передачі і дворівневою буферизацією в каналі прийому. Це означає, що підлягають передачі байти даних, не можна помістити в регістр даних модуля SPI доки повністю не завершиться цикл зрушень. Під час прийому даних, прийняту посилку необхідно встигнути вважати перш, ніж завершиться прийом чергової посилки. Інакше, перший байт даних буде втрачений.

У підлеглому режимі SPI, логіка управління виконує вибірку що поступає на вхід SCK сигналу. Щоб гарантувати коректність вибірок сигналу синхронізації, необхідно дотримувати вимоги до тривалості низького і високого рівнів імпульсів синхронізації: тривалість і низького і високого рівнів має бути не менше 2 циклів синхронізації ЦПУ.

Після дозволу роботи модуля SPI, набирають чинності альтернативні налаштування напряму на виводах MOSI, MISO, SCK і SS відповідно до таблиці 20.1. Виводи, які відмічені як "задається користувачем", мають бути налагоджені програмно.

Таблиця 1

Перекриття модулем SPI налаштувань порту введення-виводу

Вивід

Напрям для ведучого SPI

Напрям для підлеглого SPI

MOSI

Задається користувачем

Вхід

MISO

Вхід

Задається користувачем

SCK

Задається користувачем

Вхід

/SS

Задається користувачем

Вхід

Вивід Напрям для ведучого SPI Напрям для підлеглого SPI

MOSI Задається користувачем Вхід

MISO Вхід Задається користувачем

SCK Задається користувачем Вхід

/SS Задається користувачем Вхід

3.4 Послідовна передача даних по шині I2C

I2C -- послідовна шина даних для зв'язку інтегральних схем, що використовує дві двонаправлені лінії зв'язку (SDA і SCL). Використовується для з'єднання низькошвидкісних периферійних компонентів. Назва є абревіатурою слів Inter-Integrated Circuit. TWI (Two Wire Interface) або TWSI (Two Wire Serial Interface) по суті та ж сама шина I2C, але використовує іншу назву з ліцензійних причин. I2C використовує дві двонаправлені лінії, підтягнуті до напруги живлення і керовані через відкритий колектор або відкритий стік -- послідовна лінія даних (SDA, англ. Serial DAta) і послідовна лінія тактування (SCL, англ. Serial CLock). Стандартні напруги живлення +5 В або +3,3 В.

Класична адресація включає 7-бітовий адресний простір з 16 зарезервованими адресами. Тобто 112 вільних адрес для підключення периферії на одну шину. Основний режим роботи -- 100 Кбіт/с; 10 Кбіт/с в режимі роботи із зниженою швидкістю. Стандарт допускає призупинення тактування при роботі з повільними пристроями.

Після перегляду стандарту в 1992 році стало можливим підключення ще більшої кількості пристроїв на одну шину (за рахунок 10-бітної адресації), а також збільшилась швидкість до 400 Кбіт/с в швидкісному режимі. Відповідно, доступна кількість вільних вузлів зросла до 1008. Максимальна допустима кількість мікросхем, приєднаних до однієї шині, обмежується максимальною ємністю шини в 400 пФ.

Версія стандарту 2.0 1998 року представила високошвидкісний режим роботи зі швидкістю до 3,4 Мбіт/с зі зниженим енергоспоживанням. Версія 2.1 2001 року внесла лише незначні доопрацювання.

Стан СТАРТ і СТОП

Процедура обміну починається з того, що Master формує стан СТАРТ: генерує перехід сигналу лінії SDA з ВИСОКОГО стану в НИЗЬКИЙ при ВИСОКОМУ рівні на лінії SCL. Цей перехід сприймається усіма пристроями, підключеними до шини, як ознака початку процедури обміну. Генерація синхросигналу -- це завжди обов'язок Master-а; кожен Master генерує свій власний сигнал синхронізації при пересиланні даних по шині. Процедура обміну завершується тим, що Master формує стан СТОП -- перехід стану лінії SDA з НИЗЬКОГО стану в ВИСОКЕ при ВИСОКОМУ стані лінії SCL. Стан СТАРТ і СТОП завжди генеруються Master-ом. Вважається, що шина зайнята після фіксації стану СТАРТ. Шина вважається звільненою через деякий час після фіксації стану СТОП.

При передачі даних по шині I2C кожен Master генерує свій синхросигнал на лінії SCL. Після формування стану СТАРТ, Master опускає стан лінії SCL в низький стан і виставляє на лінію SDA старший біт першого байта повідомлення. Кількість байт в повідомленні не обмежена. Специфікація шини I2C дозволяє зміни на лінії SDA тільки при низькому рівні сигналу на лінії SCL. Дані дійсні і повинні залишатися стабільними тільки під час ВИСОКОГО стану синхроімпульсу. Для підтвердження прийому байта від Master-передавача приймачем в специфікації протоколу обміну по шині I2C вводиться спеціальний біт підтвердження, який виставляється на шину SDA після прийому 8 біта даних.

Адресація в шині I2C

Кожен пристрій, підключений до шини, може бути програмно адресовано за унікальною адресою. Для вибору приймача повідомлення Master-а використовує унікальну адресну компоненту в форматі посилки. При використанні однотипних пристроїв, інтегральні схеми часто мають додатковий селектор адреси, який може бути реалізований як у вигляді додаткових цифрових входів селектора адреси, так і у вигляді аналогового входу. При цьому адреси таких однотипних пристроїв виявляються рознесеними в адресному просторі пристроїв, підключених до шини. У звичайному режимі використовується 7-бітна адресація. Процедура адресації на шині I2C полягає в тому, що перший байт після сигналу СТАРТ визначає, який Slave адресується Master-ом для проведення циклу обміну. Виняток становить адреса «Спільного виклику», яка адресує всі пристрої на шині. Коли використовується ця адреса, всі пристрої в теорії повинні послати сигнал підтвердження. Однак, пристрої, які можуть обробляти «загальний виклик», на практиці зустрічаються рідко.

Перші сім бітів першого байта утворюють адресу Slave-а. Восьмий, молодший біт, визначає напрямок пересилки даних. «Нуль» означає, що Master буде записувати інформацію в обраного Slave-а. «Одиниця» означає, що Master буде зчитувати інформацію зі Slave.

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

I2C, мають набір фіксованих адрес, перелік яких зазначений виробником в описах контролерів. Комбінація біт 11110ХХ адреси зарезервована для 10-бітної адресації. Як випливає з специфікації шини, допускаються як прості формати обміну, так і комбіновані, коли в проміжку від стану СТАРТ до стану СТОП Master і Slave можуть виступати і як приймач, і як передавач даних. Комбіновані формати можуть бути використані, наприклад, для управління послідовної пам'яттю. Під час першого байта даних можна передавати адресу в пам'яті, який записується у внутрішній регістр-засувку. Після повторення сигналу старту і адреси Slave видаються дані з пам'яті. Всі рішення про авто-інкремент або декремент адреси, до якої стався попередній доступ, приймаються конструктором конкретного пристрою. Тому, в будь-якому випадку кращий спосіб уникнути неконтрольованої ситуації на шині перед використанням нової (або що раніше не використовуваної) ІМС слід ретельно вивчити її опис (datasheet або reference manual), отримавши його з сайту виробника.

Можливі проблеми

На сьогоднішній момент найбільш популярна швидкість використання I2C-100 Кбіт/с та 400 Кбіт/с. Однак, треба розуміти, що використання на одній шині декількох пристроїв, які мають різні реалізації протоколу, та працюють на різних швидкостях може привести до непередбачених проблем.

Найчастіше для забезпечення стабільної роботи доводиться обмежувати швидкість шини до швидкості самого повільного пристрою. Деякі пристрої, що працюють в режимі MASTER не підтримують призупинення тактування для повільних пристроїв (clock stretching).

В результаті чого виникають помилки при роботі. В цьому випадку доводиться значно зменшувати швидкість шини або, якщо є така можливість, розносити швидкі і повільні пристрої по різним шинам.

3.5 Порти введення-виведення AVR мікроконтролера ATtiny2312

Найпростішим пристроєм аналогового введення в МК є вбудований компаратор напруги. Компаратор порівнює вхідну аналогову напругу з опорним потенціалом VREF і встановлює на виході логічну «1», якщо вхідна напруга більше опорної. Їх зручніше за усе використовувати для контролю визначеного значення вхідної напруги, наприклад, у термостатах. Компаратор дозволяє реалізувати на МК інтегруючий АЦП.

Однак більш широкі можливості для роботи з аналоговими сигналами дає АЦП, вбудований у МК. Найчастіше він реалізується у виді модуля багатоканального АЦП, призначеного для введення в МК аналогових сигналів з датчиків фізичних величин і перетворення цих сигналів у двійковий-код. Власне АЦП виконаний по методу послідовного наближення. Практично у всіх моделях 8-розр. МК розрядність АЦП також складає 8 розрядів. Відповідно, формат представлення результатів виміру АЦП -- однобайтовий. Тривалість такту перетворення задає генератор синхронізації: один цикл дорівнює двом періодам частоти генератора tADC. Час перетворення для типових модулів АЦП МК складає від-одиниць-до-десятків-мікросекунд. Момент завершення кожного циклу перетворення відзначається установкою тригера готовності даних. Якщо переривання від модуля АЦП дозволені, то генерується запит на переривання. Як правило, читання регістра результату скидає тригер готовності. Більшість модулів АЦП мають тільки режим програмного запуску: установка одного з бітів регістра режиму запускає черговий вимір. Найбільш універсальні модулі АЦП мають також режим автоматичного запуску, при якому після завершення одного циклу перетворення негайно починається наступний. Однак дані виміри кожного циклу повинні бути лічені програмним-способом. Цифро-аналогові перетворювачі в складі МК є великою рідкістю. Функція ЦАП реалізується засобами модуля програмованого таймера в режимі ШІМ. На одному з виводів МК формується високочастотна імпульсна послідовність з регульованою тривалістю імпульсу. Отриманий сигнал згладжується фільтром нижніх частот на операційному підсилювачі.

3.6 Система команд мікроконтролера типу AVR

У RISC-архітектурах у порівняні з традиційними CISC-архітектурами, використовуються скорочені набори команд, що приводять до зменшення об'єму програмного коду і більш швидкому вирішенню задач. По цій причині, коли важлива швидкість, часто обирають саме модулі мікроконтролерів з RISC-архітектурою.

Система команд сімейства Classic складає понад 118 команд, в той час коли інші RISC-мікроконтролери такого ж рівня представляють в середньому лише 50-60 машинних команд. Завдяки короткому часу виконання команд із свого розширеного набору, мікроконтролери AVR вирішують задачі в 4-16 раз швидше інших своїх конкурентів. Завдяки цьому в більшості мікроконтролерах AVR реалізовані 32 робочих регістра, кожний із яких з'єднаний напряму з АЛП, більшість операцій виконуються за один період такту системної синхронізації.

У RISC мікроконтролерах, по відношенню до традиційних CISC-контролерах, вирішуються задачі у за допомогою лише одного накопичуючого суматора.

Мікроконтролери AVR мають дуже широкий набір команд. Це дозволяє більш легко провести розробку компіляторів, що також означає, що AVR може бути легко запрограмований з використанням різних команд, що значно спрощують вирішення задачі. Взагалі система команд поділяється на п'ять груп:

1) команди пересилання;

2) арифметичні команди;

3) логічні команди;

4) команди передавання керування;

5) команди операцій з бітами.

Більшість команд (94) мають формат 1-2 байта і виконуються за один-два цикли (за тактової частоти 12 МГц і тривалість циклу дорівнює 1 мкс).

4. Програмування пам'яті мовою Асемблер мікроконтролера AVR

4.1 Принципи програмування мiкроконтролерiв типу AVR

AVR-Асемблер від компанії Atmel транслює вихідний код програми в об'єктний і виконуючий код. Останній код можна протестувати в оболонці AVR-Studio і після цього завантажити у Flash-пам'ять або в пам'ять EEPROM мікроконтролера AVR.

Мікроконтролер AVR, як і інші мікроконтролери використовують у роботі, головним чином, власну машинну мову. Оскільки це послідовність нулів і одиничок складні для сприймання, існує мова Асемблера, яка, завдяки своїй мнемонічної форми, значно простіша у використанні. При цьому кожній інструкції асемблера відповідає окрема машинна команда.

Програма користувача (вихідний файл) складається із командних рядків максимальною довжиною 120 символів, а також із наступних елементів:

1) мітка - символічна адреса команди, складається із алфавітно-цифрових знаків, повинні починатися з букви і закінчуватися двокрапкою. Мітками позначаються не всі команди, а лише ті, до яких треба виконати перехід за допомогою команд переходів або викликів підпрограм. Усі мітки у програмі мають бути унікальними, тобто не може бути кількох команд з однаковими мітками.

2) мнемокод - ідентифікує команду асемблера. Для мнемо кодів використовують скорочені або повні англійські слова, які передають значення основної функції команди: ADD - додати, SUB (SUBtract) - відняти, XCHG (eXCHanGc) - поміняти.

3) операнди - відокремлюється комами. Якщо задано два операнди, то перші із них завжди є приймачем, а інший - джерелом інформації. Команда може містити різну кількість операндів різного типу.

4) коментарі - ігнорується у процесі трансляції і використовуються для документування та кращого розуміння змісту програми. Коментарі завжди починаються із символу «;» і може містити будь-які символи. Коментарі не транслюються на машинні коди, то їхня кількість не впливає на ефективність виконання програми.

5) директиви - призначені для керування процесом асемблювання і формування лістингу програми. Вони діють лише у процесі асемблювання програми і не переводяться на машинні коди.

Мова Асемблер містить такі основні директиви:

1) початок і кінець сегмента SEGMENT та ENDS;

2) початок і кінець процедури PROC та ENDS;

3) призначення сегментів ASSUME;

4) початок ORG;

5) розділ на ініціювання пам'яті DB, DW, DD;

6) завершення програми END;

7) відзначення LABEL;

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

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

У завантажувальному файлі із розширенням *.hex містяться машинні команди для запису у пам'ять програм у вигляді ASCII-коду у форматі Generic для Atmel.

На рисунку 5 вікно програми AVR - асемблера для Windows

Рисунок 5 - Вікна програми AVR Асемблера

Асемблер з інтегрованим редактором орієнтований на звичайне середовище, і тому ми стисло розглянемо тільки деякі особливості призначеного для користувача інтерфейсу:

1) перша кнопка на панелі інструментів відповідає за створення нового початкового файлу, якщо початковий файл повинен оброблятися в інтегрованому редакторі, то його розмір не повинен перевищувати 28 Кбайт;

2) друга кнопка відкриває вже існуючий початковий файл, для кожного відкритого початкового файлу створює нове вікно редактора;

3) третя обновляє вже відкритий файл;

4) виділений текст вирізається і розміщується в буфері обміну;

5) виділений текст копіюється в буфер обміну;

6) текст, з буфера обміну, вставляється в текучу позицію курсору;

7) відміняє останні виконувані дії;

8) функція пошуку деякого фрагменту тексту;

9) продовження пошуку раніше визначеного фрагмента тексту;

10) друк вмісту активного в даний момент вікна.

Меню File та Edit за своїм пизначенням аналогічні меню у будь-якому Windjws-додатку. Меню Seareh (пошук) містить команди пошуку довільних рядків тексту у файлі. Команда Fssemblic (Асемблювати) запускає асемблювання вихідного файлу, відображеного у активному в даний момент вікні. У вікні можна створити лістинг із розширенням завантажувального файлу *.lst або *.hex. формат файлу *.hex вибирається за допомогою перемикачів із списку Output file format (формат завантажувального файлу).

4.2 Призначення і можливості AVR-Studio

Пакет AVR-Studio пройшов довгий шлях розвитку, тому він має велику кількість існуючих версій. В кінці 2003 року була випущена версія 4.08, яка мала ряд доповнених корисних властивостей, а на початку 2004 року вийшов ще покращений, оновлений (Service Pack 1), що виконаний по будові схожій на AVR-контролери третього покоління сімейства Atmega48. Виробництво мікросхем цього сімейства відбулося в другій половині 2004 року.

Програмне середовище AVR-Studio від компанії Atmel - це дуже корисний інструмент для введення в експлуатацію власноруч написаних програм для МК сімейства AVR. Користувач на власний розсуд вводить програму у дію або ж тестує її та виправляє можливі помилки. Для цього він може цілеспрямовано керувати ходом виконання програми та призупиняти її у будь-яких місцях з метою контролю.

AVR-Studio працює як програмна оболонка для внутрішньо системних емуляторів Atmel ICEPRO або ICE200 реалізованих компанією Atmel для сімейства AVR, або як стимулятор систем команду у якому поведінка може імітувати роботу любого мікроконтролера за допомогою програмного забезпечення. Якщо під час відкриття проекту виявиться внутрішньо системний емулятор підключений до послідовного порту комп'ютера, то він буде автоматично вибраний як цільова система. В іншому випадку хід виконання програми моделюються тільки програмно.

AVR-Studio має наступні вікна:

1) Registers - відображає вміст 32 робочих регістра R1…R31;

2) Processor - крім інших даних - показує вміст лічильника команд, показника стеку і прапорців;

3) Memory - відображає вміст пам'яті в областях вводу/виводу, Flesh, EEPROM і SRAM;

4) IO - містить інформацію про регістри таймера, портів вводу/виводу, UART, сторожового таймера та EEPROM;

5) Watch - містить значення і адресу визначених ідентифікаторів;

6) Trace - відображає останні 32К Ч 96 біт виконані програми;

7) Message - видає користувачеві повідомлення від Studio.

При першому завантажені нової програми у Studio автоматично відкривається тільки вікна вихідного коду. Набір інших вікон користувач повинен визначити і розташувати на екрані за своїм бажанням. Середовище Studio запам'ятовує вибране розташування вікон і автоматично відновлює його при всіх наступних тестах даної програми.

Користувач може користуватися довідковою системою за допомогою якої можна отримати рекомендації при виявлені помилок. Викликається за допомогою меню Help, розташованого у правому краю рядка меню Studio.

Якщо затримати курсор миші над однією із кнопок панелі інструментів, то з'явиться коротке описання цієї кнопки.

При програмуванні в середовищі AVR-Studio потрібно виконати такі дії:

1) створення проекту;

2) завантаження файлу;

3) компіляція;

4) симуляція;

5) завантаження hex-коду в мікроконтролер.

Засоби пакету AVR-Studio дозволяють підключати допоміжні програми - plugins. Перший plugins для AVR-Studio - це програма графічного редактора

А також існує можливість налаштовувати програми написані на мовах високого рівня.

Для того, щоб записати в МК завантажувач, слід підключити один з програматорів ( AVRISP - STK500 або AVRHVPP - STK500 ) до комп'ютера, запустити програму "AVR Studio" і вибрати команду "Tools -> Program AVR->Connect"

4.3 Розробка програми індикації на мові Асемблер

Нашим проектом буде лічильник, який підраховує кількість натискувань на кнопку від 0 до 9. Після 10 натискувань лічильник повинен обнулитися. Виходи під'єднані до РB0-7, а кнопка до РD0.

Лістінг програми:

.device ATtiny2313

.nolist

.include "C:\Program Files (x86)\Atmel\AVR

Tools\AvrAssembler2\Appnotes\tn2313def.inc"

.list

; Об'явлення:

.def temp =r16

.def Counter =r17

; Початок програми


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.