
- •2. Програмне забезпечення
- •2.1. Мови програмування
- •2. 2 Компоненти мови Асемблер
- •3. Створення програми мовою Асемблер
- •3.1. Постановка задачі
- •3.2. Директиви
- •3.4. Алгоритм
- •3.5. Програма обчислення в одній точці
- •3.6. Застосування зсувів і масок
- •3.7. Запис масиву даних до озп і організація циклу
- •3.8. Завантаження масиву даних з озп до рзп
- •3.9. Зупин програми
- •4. Команди нашої програми
- •1) Арифметичні і логічні команди
- •2) Команди переходів (branch instructions)
- •3) Команди передачі даних (data transfer instructions)
- •4) Команди з бітами (bit and bit-test instructions)
- •5) Команди керування мк (mcu control instructions)
- •Лабораторна робота №1 Основи програмного пакету розробника avr Studio
- •3 Підготовка до налагодження проекту.
- •5 Виправлення помилок алгоритму.
- •5 Оформити звіт.
- •6 Завдання на самостійну роботу.
- •Лабораторна робота №2
- •3 Компіляція проекту.
- •4 Налагодження проекту.
- •Лабораторна робота №3
- •Лабораторна робота №4
- •Лабораторна робота №4
- •1 Підготовка проекту в avr Studio 4 для запису програми до пам'яті мікроконтролера.
- •2 Підготовка апаратних засобів стартового набору stk500.
- •3 Підготовка програмного інтерфейсу stk500.
- •4 Програмування мк та дослідження спроектованого виробу на платі стартового набору stk500.
- •5 Завдання на самостійну роботу
- •1 Налаштування основних модулів мікроконтролера.
- •2 Дослідження основних режимів функціонування мікроконтролера.
- •3 Програмування мк та дослідження цпп на платі стартового набору stk500.
- •4 Завдання на самостійну роботу.
3.9. Зупин програми
З надходженням синхроімпульсів лічильник команд весь час змінює вихідний код для вибору із ЗП програм чергової команди, отже, програму зупинити в принципі неможливо, тому кожна програма має бути нескінченним циклом. Більшість технічних задач і є циклами (наприклад, мигтіння реклами), проте якщо немає потреби повторювати одні й ті ж самі дії (як у нашій "бухгалтерській" задачі), нескінченний цикл організують штучно (команда 2).
END: ;******** НЕСКІНЧЕННИЙ ЦИКЛ ПО ЗАКІНЧЕННІ ПРОГРАМИ
(1) nop ; No operation - Порожня команда (тут її вставлено лише для
; візуалізації циклу під час налагодження програми)
(2) rjmp END ; Relative jump - Відносний перехід (безумовний, до позначки)
4. Команди нашої програми
У додатках (табл. 1…4) наведено команди для МК ATmega8515 фірми Atmel [www.atmel.com/literature, doc2512_m8515.pdf], які виробник поділяє на п'ять груп. Докладнішу інформацію про формат команди, кількість циклів її виконання, припустимі операнди тощо та приклади найпростіше отримати в довідці пакету AVR Studio 4. Тут вивчатимемо лише команди, що застосовуються в нашій програмі.
1) Арифметичні і логічні команди
(ARITHMETIC AND LOGIC INSTRUCTIONS)
add tmp,r0 ; Add without carry - Додати без перенесення: tmp <= tmp + R0
sub tmp,C ; Subtract without carry - Відняти без перенесення: tmp <= tmp – С
mul xi,xi ; Multiply unsigned - Множення беззнакове: R1:R0 <= xі*xі
dec xi ; Decrement - Декрементувати: xі <= xі – 1
neg tmp ; Two's complement - Виконати операцію доповнення:
; tmp <= $00 – tmp
ori msk,$80 ; Logical OR with immediate - Логічне АБО безпосередньо
; з константою: msk <= msk # $80
or sgn,msk ; Logical OR - Логічне АБО: sign <= sign # msk
2) Команди переходів (branch instructions)
rjmp END ; Relative jump - Відносний перехід (безумовний, до позначки END)
brpl MEM ; Branch if plus - Перехід (умовний, до позначки МЕМ), якщо плюс
; (якщо прапор N=0)
brne LOOP ; Branch if Not Equal - Перехід, якщо не дорівнює (поки Z = 0)
brge MAIN ; Branch if greater or equal, signed - Перехід (умовний, до позначки
; MAIN), якщо більше або дорівнює, з урахуванням знаку
cpi YL,8 ; Compare Register with Immediate - Порівняння безпосереднє:
; YL – 8 (активні прапори Z, N, V, C, H)
3) Команди передачі даних (data transfer instructions)
mov tmp, r0 ; Copy register - Скопіювати регістр (move - пересунути з його
; збереженням у джерелі): tmp <= R0
ldi A,a0 ; Load immediate - Завантажити безпосередньо
; (константу): A <= a0, тобто R18 <= 4
ld tmp,Z+ ; Load indirect and postincrement - Завантажити з непрямою
; адресацією та з постінкрементом: tmp <= (Z), Z <= Z+1,
st -Z,tmp ; Store indirect and predecrement - Записати в пам'ять з непрямою
; адресацією та з переддекрементом: Z <= Z-1, (Z) <= tmp,
st Y+,tmp ; Store indirect and postincrement - Записати в пам'ять з непрямою
; адресацією та з постінкрементом: (Y) <= tmp, Y <= Y+1