- •2. Основи програмування і налагодження контролерів avr
- •2.1. Програми avr Assembler V.1.0
- •2.1.1. Відкриття асемблерних файлів
- •2.1.2. Інтегрований редактор
- •2.1.3. Написання програми
- •2.1.4. Асемблування програми
- •2.2. Вивчення пакету avr Studio
- •2.2.2. Вікно процесора
- •2.2.4. Вікно порту
- •2.2.5. Вікно 8-бітного таймера-лічильника
- •2.2.6. Регістри енергонезалежної пам’яті eeprom
- •2.2.7. Команди точок останова (Breakpoint commands)
- •2.2.8. Команди керування виконанням програми
- •2.2.10. Вибір контролера
- •2.2. Система команд та їх характеристика
- •2.2.1. Арифметичні і логічні команди
- •Команда add - Скласти без переносу
- •Команда adc - Скласти з переносом
- •Команда sub - відняти без переносу
- •Команда subi - Відняти константу
- •Команда sbc - Відняти з переносом
- •Команда sbci – Відняти константу з переносом
- •Команда and - Виконати логічне “і”
- •Команда andi - Виконати логічне “і” з константою
- •Команда or - Виконати логічне “або”
- •Команда ori - виконати логічне “або” з константою
- •Команда eor - Виконати виключаюче “або”
- •Команда com - Виконати доповнення до одиниці
- •Команда neg - Виконати доповнення до двох
- •Команда sbr - Встановити біти в регістрі
- •Команда cbr - Очистити біти в регістрі
- •Команда inc - Інкрементувати
- •Команда dec - декрементувати
- •Команда tst - Перевірити на нуль або мінус
- •Команда clr - очистити регістр
- •Команда ser - Встановити всі біти регістра
- •Операція
- •2.2.2. Команди розгалуження Команда rjmp – Відносний перехід
- •Операція:
- •Команда rcall – Відносний виклик підпрограми
- •Операція
- •Команда ret - Повернення із підпрограми
- •Операція
- •Команда reti – Повернення із переривання
- •Операція
- •Команда cpse - Порівняти і пропустити, якщо рівні
- •Команда cp - Порівняти
- •Команда cpc – Порівняти з урахуванням переносу
- •Команда cpi – Порівняти з константою
- •Команда sbrc – Пропустити, якщо біт в регістрі очищений
- •Команда sbrs – Пропустити, якщо біт в регістрі встановлений
- •Команда sbic – Пропустити, якщо біт в регістрі вводу-виводу очищений
- •Команда sbis – Пропустити, якщо біт в регістрі вводу-виводу встановлений
- •Команда brbs – Перейти, якщо біт в регістрі статусу встановлений
- •Команда brbc – Перейти, якщо біт в регістрі статусу очищений
- •Команда breq – Перейти, якщо рівно
- •Команда brne – Перейти, якщо не рівно
- •Команда brcs – Перейти, якщо прапорець переносу встановлений
- •Команда brcc – Перейти, якщо прапорець переносу очищений
- •Команда brsh – Перейти, якщо рівно або більше (без знаку)
- •Команда brlo – Перейти, якщо менше (без знаку)
- •Команда brmi – Перейти, якщо мінус
- •Команда brpl – Перейти, якщо плюс
- •Команда brge – Перейти, якщо більше або дорівнює (з урахуванням знаку)
- •Команда brlt – Перейти, якщо менше чим (зі знаком)
- •Команда brhs – Перейти, якщо прапорець половинного переносу встановлений
- •Команда brhc – Перейти, якщо прапорець половинного переносу очищений
- •Команда brts – Перейти, якщо прапорець t встановлений
- •Команда brtc – Перейти, якщо прапорець t очищений
- •Команда brvs – Перейти, якщо переповнення встановлено
- •Команда brvc – Перейти, якщо переповнення очищене
- •Команда brie – Перейти, якщо глобальне переривання дозволене
- •Команда brid – Перейти, якщо глобальне переривання заборонено
- •2.2.3. Команди пересилки Команда ld - Загрузити непрямо з созп в регістр з використанням індексу z
- •Команда st - записати непрямо з регістру в созп з використанням індексу z
- •Команда mov - копіювати регістр
- •Команда ldi - загрузити константу
- •Команда in - Загрузити дані з порту вводу-виводу в регістр
- •Команда out - Записати дані з регістра в порт вводу-виводу
- •Операція:
- •2.2.4. Команди роботи з бітами Команда sbi - Встановити біт в регістр вводу-виводу
- •Команда cbi - Очистити біт в регістрі вводу-виводу
- •Команда lsl - Логічний зсув вліво
- •Команда lsr - Логічний зсув вправо
- •Команда rol - Зсунути вліво через перенос
- •Команда ror - Зсунути вправо через перенос
- •Команда asr - Арифметичний зсув вправо
- •Команда swap - Обмін нібблів місцями
- •Команда bset - Встановити біт в регістрі статусу (sreg)
- •Команда bclr - Очистити біт в регістрі статусу (sreg)
- •Команда bst - Переписати біт із регістра в прапорець t регістра статусу
- •Команда bld - Загрузити вміст t прапорця регістра статусу (sreg) в біт регістра
- •Команда sec - Встановити прапорець переносу
- •Операція
- •Команда clc - Очистити прапорець переносу в регістрі статусу (sreg)
- •Команда sen - Встановити прапорець від’ємного значення
- •Команда cln - Очистити прапорець від’ємного значення в регістрі статусу (sreg)
- •Команда sez - Встановити прапорець нульового значення
- •Операція
- •Команда clz - Очистити прапорець нульового значення
- •Команда sei - Встановити прапорець глобального переривання
- •Операція
- •Команда cli - Очистити прапорець глобального переривання в регістрі статусу (sreg)
- •Команда ses - Встановити прапорець знаку
- •Команда cls - Очистити прапорець знаку
- •Команда sev - Встановити прапорець переповнення
- •Команда clv - Очистити прапорець переповнення
- •Команда set - Встановити прапорець t
- •Команда clt - Очистити t прапорець
- •Команда seh - Встановити прапорець половинного переносу
- •Операція
- •Команда clh - Очистити прапорець половинного переносу в регістрі статусу (sreg)
- •Команда nop - Виконати холосту команду
- •Команда sleep - Встановити режим sleep
- •Команда wdr - Збросити сторожовий таймер
- •2.2.5. Приклади написання програм
- •2.3. Програмні і апартні засоби підтримки розробок для мікроконтролерів avr
- •2.3.1. Стартові набори розроблювача
- •2.3.2. Стартовий набір stk500
- •2.3.3. Плата розширення stk501
- •2.3.4. Плата розширення stk502
- •2.3.5. Плата розширення stk503
- •2.3.6. Плата розширення stk504
- •2.3.7. Внутрісхемний програматор atavrisp
- •2.3.8. Внутрісхемні емуляторы
- •2.3.9. Внутрісхемний емулятор atjtagice mkIi (atjtagice2)
2.1.2. Інтегрований редактор
В текстовому редакторі фрагменти тексту можна вирізати в буфер обміну, а потім з буферу вставляти в будь-яке місце програми. Для переміщення текстового фрагменту необхідно виконати наступні дії:
Виділити фрагмент, який потрібно перемістити.
Н ажати на кнопку на панелі інструментів або ж нажати меню Edit>> Cut (Shift-Del). Фрагмент переміститься в буфер обміну.
Поставити курсор в те місце програми, куди потрібно вставити даний текстовий фрагмент.
Нажати на кнопку на панелі інструментів або ж нажати меню Edit>> Paste (Shift-Ins).
Якщо якийсь фрагмент буде повторюватись при подальшому написанні програми, його можна скопіювати в буфер обміну, а потім вставити в потрібне місце. Для копіювання текстового фрагменту необхідно:
Виділити фрагмент, який необхідно скопіювати.
Н ажати на кнопку на панелі інструментів або ж нажати меню Edit>> Copy (Ctrl-Ins).
Поставити курсор в те місце програми, куди потрібно вставити даний текстовий фрагмент.
Н ажати на кнопку на панелі інструментів або ж нажати меню Edit>> Paste (Shift-Ins).
Щоб повернути видалений текст, потрібно нажати кнопку на панелі інструментів або ж нажати меню Edit>> Undo (Alt-Backspace) зразу ж після видалення тексту.
2.1.3. Написання програми
Для прикладу розглянемо просту програму: в регістр R17 запишемо число 5, а в регістр R18 – число 7. Знайдемо суму і результат виведемо на порт D.
.device AT90S1200
.include “1200def.inc”
Ser R16
Out DDRD, R16
Ldi R17, 5
Ldi R18, 7
Add R17, R18
Out PortD, R18
Перша строчка програми – це об’явлення того пристрою (мікроконтролера), для якого буде написана програма. Device являється директивою асемблера. Всі директиви починаються з крапки. Слідуюча директива Include викликає бібліотеку 1200def.inc, в якій описана робота мікроконтролера AT90S1200, всі його порти і регістри.
Далі уже йде тіло програми.
Команда Ser установлює всі біти регістру R16 в одиниці.
Команда Out DDRD, R16 налагоджує порт D на вивід даних. Для цього в порту D існує регістр DDRD, який відповідає за запис-зчитування інформації. Якщо біти регістру DDRD встановленні в нуль, то на порт D можна записувати інформацію. Якщо ж біти регістру DDRD встановленні в одиницю, то з порту D зчитують інформацію.
Команди Ldi R17, 5 і Ldi R18, 7 записують в регістри R17 і R18 значення 5 і 7 відповідно. Дана команда працює тільки з регістрами R16 – R31.
Команда Add R17, R18 додає значення регістрів R17 і R18 і результат записує в регістр R17.
Out PortD, R18 виводить на порт D значення регістру R17.
2.1.4. Асемблування програми
Після написання програми її потрібно проасемблувати. Для цього в головному меню треба нажати команду Assemble. Але перед цим потрібно налаштувати опції асемблування. Меню налаштування асемблування Options показано на рис.2.1.
Рис.2.1
Для того, щоб записати проасембловану програму в контролер, нам потрібно, щоб вона мала шістнадцятирічний формат hex. Для цього у строку Output-file extension потрібно ввести hex.
Наступне меню Output file format пропонує вибрати формат вихідного файлу. Для Atmel-контролерів вибираємо останній стандарт Intel Intellec 8/MDS.
В самому низу є два меню, для вибору яких потрібно поставити галочку. Перше меню Wrap relative jumps означає, що в проасемблованій програмі буде виконуватись автоматичний перехід при відносному переході. Тобто при виконанні команди RJMP виконується автоматичний перехід на задану мітку. Якщо буде активне друге меню Save before assemble, то вихідний файл буде записаний після асемблування.