- •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.5. Вікно 8-бітного таймера-лічильника
- •2.2.6. Регістри енергонезалежної пам’яті eeprom
- •2.2.7. Команди точок останова (Breakpoint commands)
- •2.2.8. Команди керування виконанням програми
- •2.2.4. Вікно порту
- •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)
- •Команда clz - Очистити прапорець нульового значення
- •Команда sei - Встановити прапорець глобального переривання
- •Операція
- •Команда sez - Встановити прапорець нульового значення
- •Операція
- •Команда 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.2.4. Вікно порту
Відкривається в меню View >> Peripheral >> Port >> Port A (Port B, Port C, Port D) і має вигляд як показано на рис.2.6.
Рис.2.6
Вікно порту має три різні регістри вводу-виводу (Port – регістр даних, Pin – ніжки порту, DDR – Data Direction Registers (регістри напрямку передачі даних)), які звичайно зв’язані з портом. Ніжки порту використовуються тільки для зчитування, в той час як регістр даних і регістри напрямку передачі даних – для зчитування/запису.
Pin не являється регістром, по цьому адресу здійснюється доступ до фізичних значень кожного із виводів порту. При зчитуванні з регістру даних Port, зчитуються дані з “регістру-защіпку”, при зчитуванні з Pin зчитуються логічні значення, які знаходяться на виводах порту.
Біти регістру DDR вибирають напрямок передачі даних. Якщо біт встановлений (1), вивід сконфігурований як вихід. Якщо біт скинутий (0) – вивід сконфігурований як вхід.
2.2.5. Вікно 8-бітного таймера-лічильника
Відображає всю необхідну інформацію про 8-бітний таймер-лічильник (8 Bit Timer/Counter0) (рис.2.7).
Рис.2.7
Поле таймера-лічильника (Timer/Counter field) відображає значення 8-бітного таймера-лічильника. Поле передустановки (Prescaler field) показує значення відповідної передустановки. Передустановка – це ділення тактової частоти СК. Існують такі режими передустановки (для контролерів AT90S1200): СК/8, СК/64, СК/256 і СК/1024. Якщо буде відмічено поле прапорця переповнення (Overflow Flag), то це значить, що прапорець переповнення встановлений (1). Якщо буде відмічено поле Overflow Interrupt Enable, то значить, що відбулося переривання.
2.2.6. Регістри енергонезалежної пам’яті eeprom
Вікно регістрів пам’яті EEPROM показано на рис.2.8.
Рис.2.8
AVR Studio відомо скільки EEPROM пам’яті доступно для мітки. Так коли необхідно, поле адреси (Address field) вміщує старший байт адресу разом з молодшим байтом. В поле даних (Data field) записуються дані, які мають адрес визначений в регістрі адресів. Регістр управління (Control) визначає чи записувати дані в EEPROM, чи зчитувати їх з EEPROM.
2.2.7. Команди точок останова (Breakpoint commands)
Приклад програми з використанням точок останова показано на рис.2.9.
Рис.2.9
Користувач може поставити скільки завгодно точок останова. Точка останова зберігається до тих пір, поки не буде згенеровано новий файл формату obj.
Д
ля
того, щоб встановити точку останова
потрібно зайти в меню Breakpoints
>> Toggle Breakpoint
(F9) або нажати на панелі інструментів
кнопку .
Щоб
стерти всі точки останова потрібно
зайти в меню Breakpoints >>
Clear All
Breakpoints або нажати на панелі
інструментів кнопку
.
Все це можна зробити визвавши меню Breakpoints >> Show list (Ctrl+B) (рис.2.10).
Рис.2.10
В полі Address записуємо адрес нової точки останова і нажимаємо Set (встановити). В нижньому полі вказуються всі точки останова. Їх можна вмикати (Enable), вимикати (Disable), знищити (Remove).
2.2.8. Команди керування виконанням програми
Ці команди використовуються для керування виконанням програми. Усі вони мають меню, так називаємі гарячі кнопки виклику і панель наладки (Debug toolbar).
К
оманда
Go (пуск) викликається
в меню Debug >> Go
(F5) або на панелі наладки натисканням
кнопки . Вона запускає виконання
програми. Виконується до тих пір, доки
не користувач не зупинить виконання
або доки не дійде до крапки переривання.
К
оманда
Break (зупинити)
викликається в меню Debug
>> Break (Ctrl+F5) або на панелі
наладки натисканням кнопки . Зупиняє
виконання програми. Після зупинки
програми вся інформація в усіх вікнах
відновлюється.
К
оманда
Trace info
(відслідкувати) викликається в меню
Debug >> Trace info
(F11) або на панелі наладки натисканням
кнопки . Ця команда виконує одну
команду програми. За допомогою неї можна
по командам перевірити роботу програми.
К
оманда
Step over
викликається в меню Debug >> Step
Over (F10) або на панелі наладки
натисканням кнопки . При виклиці цієї
команди програма буде виконуватись до
тих пір, доки не дійде до команди виклику
підпрограми чи функції (якщо така є),
також це стосується крапок переривання.
К
оманда
Step out
викликається на панелі наладки
натисканням кнопки . Якщо курсор
знаходиться в функції чи підпрограмі,
то при натисканні даної команди програма
буде виконуватись, доки не дійде до
команди виходу з функції чи підпрограми.
Це також стосується крапок переривання.
К
оманда
Goto cursor
викликається в меню Debug >> Run
to Cursor (F7)
або на панелі наладки натисканням кнопки
. Якщо в програмі в якомусь місці
поставити курсор і викликати цю команду,
то програма виконується доти, доки не
дійде до курсору. Команда припинить
виконуватись, коли також дійде до крапки
переривання.
К
оманда
Reset викликається
в меню Debug >> Reset (Shift-F5)
або на панелі наладки натисканням кнопки
. При виклиці цієї команди курсор
переходить на начало програми, значення
статус-регістру, портів, процесору,
таймера-лічильника обнуляються.
