- •Архітектура мікроконтролерів avr. Функціональне призначення їх складових блоків
- •3 Структура памяті даних в мк авр, програмні способи доступу до памяті різних видів
- •5. Методы адресации операндов в командах Ассемблера avr-контроллера
- •8. Опосередкована адресація даних з переддекрементом в мікроконтроллерах avr
- •9. Програмний доступ до пам’яті програм в мікроконтроллерх avr. Навести програмні приклади ефективної дії такого доступу до даних.
- •13. Косвенная адресация с постинкрементом
- •Косвенная адресация данных с постинкрементом
- •14. Регістри управління паралельними портами
8. Опосередкована адресація даних з переддекрементом в мікроконтроллерах avr
При цьому способі вміст індексних регістрів X, Y, Z спочатку зменшується на 1, а потім виконується звернення до пам’яті за отриманю адресою. Цей спосіб використовують команди LD і ST. Всього існує 6 таких команд, по дві команди для кожного регістра.
Приклад програми:
clr r27;
ldi r26, 062h; init X
LD r3, -X; r3-[0061]
9. Програмний доступ до пам’яті програм в мікроконтроллерх avr. Навести програмні приклади ефективної дії такого доступу до даних.
Непряма адресація констант програмної пам'яті
Адреса константи - байту міститься у вказівнику Z. Старші 15 бітів визначають адресу слова, а молодший біт – значення молодшого чи старшого байту константи пам'яті програм (0 - вибір молодшого байту, 1 - старшого байту), наприклад:
Двійковий код Мнемокод Коментар
1001 0101 1100 1000 LPM ; R0← M(X)
Непряма адресація пам'яті програм у командах ijmp та ісаll
В програмний лічильник завантажується команда, адреса якої міститься в регістрі вказівнику Z, наприклад:
Двійковий код Мнемокод Коментар
1001 0100 0000 1001 ijmp ;PC←M(Z)
1001 0101 0000 1001 icall ;стек←PC+1
;PC← M(Z); SP←SP-2
Приклад читання даних, розміщених у постійній пам’яті програм. Належність даних до пам’яті програм позначається директивою .cseg, знову організуємо буфер даних з назвою bufROM, який містить певне текстове повідомлення, а також таблицю функції sin x, яку назвемо sinTbl. Обмежимося десятьма точками функції, обчисленими в діапазоні першої чверті аргумента (0≤ x ≤ p/4). Діапазон зміни функції у відносних величинах 0≤sin x≤100. Вказані дані на мові Асемблер для МК AVR набуває наступного вигляду:
.cseg
.org 50 ;
bufROM: .db "abcd",0 ;
endbuf: .db 1
sinTbl:
.db 0, 7, 34, 50, 64, 77, 87, 94, 98, 100 ;
Start2:
ldi Cntr,10 ; ³
ldi r31, HIGH(2*sinTbl) ;
ldi r30, LOW(2*sinTbl) ;
ldi r29, HIGH(BufSRAM) ;
ldi r28, LOW(BufSRAM) ;
mov2: lpm Tmp, Z+ ;
st Y+, Tmp ;
dec Cntr ;
brne mov2 ;
wait: rjmp wait ; ;
10.
Методи адресації – це набір механізмів доступу до операндів. Деякі з них прості та
короткі і тому приводять до компактного формату команди і швидкого доступу до даних, але
вони забезпечують доступ лише до обмежених ресурсів. Інші методи адресації дозволяють
оперувати з усіма наявними в системі ресурсами, але команда виходить задовгою, на її
завантаження та виконання витрачається більше часу.
Бітова адресація даних в команді передбачає звертання лише до окремого вказано-
го в команді біта, наприклад:
11
Параллельные порты - это особые устройства ввода/вывода, позволяющие передавать во внешний мир или принимать одновременно восемь разрядов данных. Для обозначения портов используются латинские буквы А, В, С и т.д. Количество портов ввода/вывода варьируется в зависимости от модели микроконтроллера. В микроконтроллерах AVR каждому параллельному порту ввода/вывода поставлены в соответствие три регистра (букве х соответствует имя порта А, В и т.д.):- DDRx - регистр направления передачи данных - определяет, является тот или иной вывод порта входом или выходом; если некоторый разряд регистра DDRx содержит лог. 0, то соответствующий вывод порта сконфигурирован как вход, в противном случае - как выход; - PORTx - регистр порта - если вывод выполняет роль выхода, то в соответствующий разряд записывается значение, предназначенное для вывода; если вывод выполняет роль входа, то лог. 0 в некотором разряде регистра PORTx соответствует высокоомный вход, а лог. 1 - вход, нагруженный подтягивающим сопротивлением; - PINx - регистр выводов порта - в отличие от регистров DDRx и PORTx доступен только для чтения и позволяет считать входные данные порта на внутреннюю шину микроконтроллера. Выводы портов зачастую выполняют различные альтернативные функции при работе с внутренними и периферийными модулями микроконтроллеров AVR. Так, к примеру, в некоторых моделях в качестве внешних тактовых входов таймеров/счетчиков Т/С0 и Т/С1 используются разряды 0 и 1 порта В или 4 и 5 порта D. Точное назначение выводов портов следует сверять по спецификации микроконтроллера. В микроконтроллерах PIC каждому параллельному порту ввода/вывода поставлены в соответствие два регистра: - PORTx - регистр данных порта; - TRISx - регистр направления передачи данных через выводы порта (лог. 1 в некотором разряде этого регистра соответствует режим ввода, а лог. 0 - режим вывода). В микроконтроллерах PIC серии 18Сх порт D может работать в режиме управляемого параллельного порта PSP (Parallel Slave Port). Это означает, что он действует как регистр, который может быть подключен к шине другого микроконтроллера, обмениваясь с ним данными. В режиме PSP, как и в случае обмена данными с любым периферийным устройством, используются сигналы RD (чтение), WR (запись) и CS (выбор кристалла) - разряды 0-2 порта Е. Режим PSP активизируется путем установки в лог. 1 разряда PSPMODE. Прерывания разрешаются установкой в лог. 1 разряда PSPIE (разряд 7) регистра PIE1, а запросы формируются в разряде PSPIF (разряд 7) регистра PIR1. С помощью разрядов 0-2 регистра TRISE осуществляется выбор режима для соответствующих разрядов порта Е. Когда на линиях CS и RD (выводы RE2 и RE0) одновременно появляется низкий уровень сигнала, содержимое регистра OUTREG выводится через порт D. При записи в регистр OUTREG устанавливается в лог, 1 разряд OBF регистра TRISE - это означает, что выходной буфер заполнен данными. После передачи данных разряд OBF автоматически сбрасывается в лог. 0. Когда на линиях CS и WR (выводы RE2 и RE1) одновременно появляется низкий уровень сигнала, осуществляется прием данных через порт D. Принятая величина сохраняется в регистре INREG, при этом автоматически устанавливается в лог. 1 разряд IBF регистра TRISE. После программного считывания содержимого регистра INREG этот разряд автоматически сбрасывается в лог. 0. Если ранее принятый байт не считывается до поступления следующего байта в регистр INREG, устанавливается в лог. 1 разряд IBOV регистра TRISE, указывающий на переполнение входного буфера.