цієї мови безпосередньо залежить від системи команд конкретного мікроконтролера. Тому, якщо два мікроконтролера мають різну систему команд, то і мова Асемблер для кожного такого мікроконтролера буде свій. У даній книзі ми будемо вивчати одну конкретну версію мови Асемблер. А саме Асемблер для мікроконтролерів AVR. p align="justify"> У недавньому минулому мову Асемблер була єдиною мовою програмування для мікроконтролерів. Тільки він дозволяв ефективно використовувати мізерні ресурси найперших мікросхем. Проте в даний час, коли можливості сучасних мікроконтролерів значно зросли, для складання програм все частіше використовуються мови високого рівня, такі як Бейсік, СІ і т. п.
Ці мови у свій час були розроблені для великих справжніх комп'ютерів. Але зараз широко використовуються також і для мікроконтролерів. Мови високого рівня відрізняються тим, що вони набагато більше орієнтовані на людину. Більшість команд мов високого рівня не пов'язані з конкретними командами мікроконтролера. p align="justify"> Такі мови оперують вже не з байтами, а з звичними нам десятковими числами, а також зі змінними, константами та іншими елементами, знайомими нам з математики. Константи і змінні можуть приймати звичні для нас значення. p align="justify"> Наприклад, позитивні, негативні значення, речові значення (десяткові дроби) і т. п. З усіма змінними і константами можна виконувати знайомі нам арифметичні операції і навіть алгебраїчні функції.
Транслятор з мови високого рівня виробляє більш складні перетворення, ніж транслятор з Асемблера. Але в результаті теж виходить програма в машинних кодах. При цьому транслятор використовує всі ресурси мікроконтролера на свій розсуд. У яких саме регістрах або комірках пам'яті вона буде зберігати значення описаних вами змінних, за якими алгоритмами вона буде обчислювати математичні функції, програміст зазвичай не замислюється. p align="justify"> Програма-транслятор вибирає все це сама. Тому завдання ефективності алгоритму отриманої в результаті трансляції програми цілком лягає на програму-транслятор. В цілому, програми, написані на мовах високого рівня, займають в пам'яті мікроконтролера обсяг на 30-40% більший, ніж аналогічні програми, написані на мові Асемблер. p align="justify"> Однак якщо мікроконтролер має достатньо пам'яті і запас по швидкодії, то це збільшення програми - не проблема. Перевагою ж мов високого рівня є істотне прискорення процесу розробки програми. З усіх мов високого рівня найефективнішим, мабуть, є мова СІ. Тому для ілюстрації мов високого рівня ми виберемо саме його. p align="justify"> Вивчення прийомів програмування ми будемо здійснювати на ряді конкретних прикладів:
В· кожен приклад буде починатися з постановки завдання;
В· потім ми навчимося вибирати схемне рішення;
В· лише після цього будуть представлені приклади програм.
Для кожного завдання в книзі наводяться два варіанти програми. Одна мовою Асемблер, друга на мові СІ. У результаті ви зможете не тільки навчитися азам програмування на двох мовах, але і зрозуміти всі переваги і недоліки кожного з мов програмування. br/>
2.2 Найпростіша програма
Постановка завдання
Найпростіша задача, яку можна придумати для мікроконтролера, може звучати так:
В«Розробити пристрій управління одним світлодіодним індикатором за допомогою однієї кнопки. При натисканні кнопки світлодіод повинен запалитися, при відпуску - згаснути В». p align="justify"> З практичної точки зору це абсолютно безглузде завдання, так як для її вирішення простіше обійтися без мікропроцесора. Але як приклад для навчання підійде чудово. br/>
2.3 Принципова електрична схема
Спробуємо розробити принципову електричну схему, здатну виконувати описану вище задачу. Отже, до мікроконтролера нам потрібно підключити світлодіод і кнопку управління. Як ми вже говорили, для підключення до мікроконтролеру AVR будь-яких зовнішніх пристроїв використовуються порти введення-виведення. Причому кожен такий порт здатний працювати або на введення, або і на висновок. p align="justify"> Найзручніше світлодіод підключити до одного з портів, а кнопку - до іншого. У цьому випадку керуюча програма повинна буде налаштувати порт, до якого підключений світлодіод, на висновок, а порт, до якого підключена кнопка, на введення. Інших спеціальних вимог до мікроконтролера немає. Тому виберемо мікроконтролер. p align="justify"> Очевидно, що нам потрібен мікроконтролер, який має не менше двох портів. Даним умовам задовольняють багато мікроконтролери AVR. Я пропоную зупинити свій вибір на досить цікавою мікросхемі ATtiny2313. Ця мікросхема, хоча ...