
- •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 Завдання на самостійну роботу.
Лабораторна робота №4
ПОРТИ ВВЕДЕННЯ-ВИВЕДЕННЯ, ІНТЕРФЕЙС
STK500 ТА ЗАПИС ПРОГРАМИ ДО МК
Мета роботи: дослідження
ДОМАШНЄ ЗАВДАННЯ
! 1) Засвоїти теоретичні відомості щодо
2) Визначити
СТИСЛІ ТЕОРЕТИЧНІ ВІДОМОСТІ
РВВ і паралельні порти введення-виведення, команди з РВВ
Програмний стек
Стартовий набір (апаратний інтерфейс) STK 500
Програмний інтерфейс STK 500
Алгоритми реалізації ЦКП, макрофункції
Розділи програми
Команди програми
РВВ і паралельні порти введення-виведення, команди з РВВ
3.4 Звертання до регістрів вводу-виводу
Рис. 14. Порт вводу-виводу (а) та функції (б) і формат (в) його пристроїв в адресному просторі регістрів вводу-виводу
Рис. 15. Загальна схема звертання до регістрів вводу-виводу
Рис. 16. Пряма адресація до регістрів вводу-виводу
Вправи
; ===============ДИРЕКТИВИ
.nolist
.include "m8515def.inc" ; Файл включення
.list
;***** Регістрові змінні
.def tmp = r16 ; Тимчасові (temporal) дані
.def tmpa = r17 ; Тимчасові додаткові (additional) дані
; ***** Налаштування портів
1) PA[7..0] – входи, R1- вимкнено (ззовні приєднано R2):
; DDRA = 0b0000 0000, PORTA = 0b0000 0000,
; PINA[7..0] = 0b1111 1111 - кнопки SW[7..0] не натиснуто
2) PВ[7..0] – входи, R1- увімкнено (ззовні відсутні R2): DDRВ = 0b0000 0000
ser tmp ; Установлення регістра (Set Register) : tmp <= 0b1111 1111
out PORTB,tmp ; PORTB[7..0] <= 0b1111 1111
; (Out to I/O location - Виведення до РВВ)
3) PС[7..0] – виходи, на всіх виводах – лог. 1;
out DDRС,tmp ; DDRС[7..0] <= 0xFF
out PORTС,tmp ; PORTС[7..0] <= 0xFF
4) PD[7..4] – входи, R1- вимкнено; PD[3..0] – виходи, на виводі PD[0] – лог. 1
ldi tmpa,$0F ; tmpa <= 0b0000 1111
out DDRD,tmpа ; DDRD[7..0] <= 0b0000 1111
sbi PORTD,0 ; (PORTD = 0x00), PORTD[0] <= 1
5) PЕ[1..0] – входи, R1- вимкнено; PЕ[2] – вихід, на виводі PЕ[2] – лог. 1
; DDRЕ[2..0] = 0b000, PORTЕ[2..0] = 0b000
sbi DDRЕ,2 ; DDRЕ[2] <= 1
sbi PORTЕ,2 ; PORTЕ[2] <= 1
; ***** 6) Програма: кнопки – світлодіоди
PA[7..0] – входи, R1- вимкнено (ззовні приєднано R2) – див. (1);
PС[7..0] – виходи, на всіх виводах – лог. 1 – див. (3)
Початок тестування кнопок
Якщо PINA[0] = 0 - кнопку SW[0] натиснуто,
то PORTС[0] <= 0 – засвітити LED[0], інакше:
Якщо PINA[1] = 0 - кнопку SW[1] натиснуто,
то PORTС[1] <= 0 – засвітити LED[1], інакше:
…
Якщо PINA[7] = 0 - кнопку SW[7] натиснуто,
то PORTС[7] <= 0 – засвітити LED[7], інакше:
затримка для візуалізації стану СД
перейти на початок тестування кнопок.
; =============== ДИРЕКТИВИ
.def tmp = r16 ; Тимчасові дані
.def del = r1 ; Затримка
.def del2 = r2 ; Затримка 2
;=============== ІНІЦІАЛІЗАЦІЯ
ser tmp ; Установлення регістра (Set Register) : tmp <= 0b1111 1111
out DDRС,tmp ; DDRС[7..0] <= 0xFF - PС[7..0] – виходи
TEST: ;=========ТЕСТУВАННЯ
out PORTС,tmp ; PORTС[7..0] <= 0xFF – гасіння всіх СД
sbis PIND,0 ; Якщо PIND.0 = 1 – відтиснуто SW[0], то пропустити (Skip if Bit in ; I/O Register is Set - пропустити наступну команду, якщо біт РВВ установлено),
cbi PORTС,0 ; інакше (PIND.0 = 0 – натиснуто SW[0]) PORTС[0] <= 0 – ; засвітити LED[0] (Clear Bit in I/O Register – очистити біт у РВВ)
sbis PIND,1 ; Якщо PIND.1 = 1 – відтиснуто SW[1], то пропустити
cbi PORTС,1 ; інакше (натиснуто SW[1]) PORTС[1] <= 0 – засвітити LED[1]
…
sbis PIND,7 ; Якщо PIND.7 = 1 – відтиснуто SW[7], то пропустити
cbi PORTС,7 ; інакше (натиснуто SW[7]) PORTС[7] <= 0 – засвітити LED[7]
DLY: ; 2562 = 65 536, затримка біля 60 мс
; (вимкнено під час налагодження)
;dec del
;brne DLY
;dec del2
;brne DLY
rjmp TEST ; Повторення циклу