Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1вопрос.docx
Скачиваний:
11
Добавлен:
16.11.2018
Размер:
251.77 Кб
Скачать

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, указывающий на переполнение входного буфера.