загрузка...
загрузка...
На головну

Загальна характеристика мікроконтролерів AVR, ПРОГРАМНА МОДЕЛЬ І СИСТЕМА КОМАНД

  1. DNS - система доменних імен
  2. FC - команда порівняння файлів
  3. I. Загальна характеристика СИСТЕМИ ПІДГОТОВКИ СПОРТСМЕНІВ У ЗИМОВОМУ універсальний БОЮ
  4. I. Загальна частина
  5. I.2.3) Система римського права.
  6. I.5.3) Складові частини Зводу Юстиніана (загальна характеристика).
  7. II. Початкове фундаментальне уявлення: діяльність - система

В даний час в серійному виробництві знаходяться два сімейства AVR - Tiny і Mega. Мікроконтролери сімейства Tiny мають невеликий обсяг пам'яті програм і вельми обмежену периферію. Вони випускаються в 8-вивідних корпусах і є найдешевшими. Найбільш розвинену периферію, найбільші обсяги пам'яті даних і програм мають мікроконтролери сімейства Mega.

AVR, мабуть, одне з найбільш цікавих напрямків, що розвиваються корпорацією Atmel. Вони являють собою потужний інструмент для створення сучасних високопродуктивних і економічних багатоцільових контролерів. На даний момент співвідношення «ціна - продуктивність -енергопотребленіе» для AVR є одним з кращих на світовому ринку 8-розрядних мікроконтролерів. Обсяги продажів AVR у світі подвоюються щорічно. У геометричній прогресії зростає кількість сторонніх фірм, що розробляють і випускають різноманітні програмні та апаратні засоби підтримки розробок для них. Можна вважати, що AVR стає ще одним індустріальним стандартом серед 8-розрядних мікроконтролерів загального призначення.

Сама ідея створення нового RISC-ядра народилася в 1994 році в Норвегії. У 1995 році два його винахідника Альф Боген (Alf-Egil Bogen) і Вегард Воллей (Vegard Wollen) запропонували корпорації Atmel випускати новий 8-розрядний RISC-мікроконтролер як стандартний виріб і забезпечити його Flash-пам'яттю програм на кристалі. Керівництво Atmel Corp. прийняло рішення інвестувати даний проект. У 1996 році був заснований дослідний центр в місті Тронхейм (Норвегія). Обидва винахідника стали директорами нового центру, а Мікроконтроллерні ядро ??було запатентовано і отримало назву AVR (Alf-Egil Bogen + Vegard Wollen + RISC). Перший дослідний кристал 90S1200 був випущений на стику 1996-1997 років, а з 3 кварталу 1997 року корпорація Atmel приступила до серійного виробництва нового сімейства мікроконтролерів і до їх рекламної та технічної підтримки.

AVR функціонують в широкому діапазоні живлячої напруги від 1,8 до 6,0 вольт. Енергоспоживання в активному режимі залежить від величини напруги живлення, від частоти, на якій працює AVR і від конкретного типу мікроконтролера. Докладні специфікації зазвичай наводяться в оригінальній технічної документації Atmel Corp. Температурні діапазони роботи мікроконтролерів AVR - комерційний (0С ... 70С) і індустріальний (-40С ... + 85С).

Всі мікроконтролери AVR мають Flash-пам'ять програм, яка може бути завантажена як за допомогою звичайного програматора, так і за допомогою SPI-інтерфейсу, в тому числі безпосередньо на цільової платі (рис. 1.1). Число циклів перезапису - не менш як 1000.

Всі AVR мають також блок енергонезалежної електрично стирається пам'яті даних EEPROM. Цей тип пам'яті, доступний програмі мікроконтролера безпосередньо в ході її виконання, зручний для зберігання проміжних даних, різних констант, таблиць перекодування, калібрувальних коефіцієнтів і т.п. EEPROM також може бути завантажена ззовні як через SPI-інтерфейс, так і за допомогою звичайного програматора. Число циклів перезапису - не менше 100000. Два програмованих біта секретності дозволяють захистити пам'ять програм і незалежну пам'ять даних EEPROM від несанкціонованого зчитування.

 Наступна характерна риса архітектури мікроконтролерів AVR - регістровий файл швидкого доступу (рис. 1.2). Кожен з 32-х регістрів загального призначення довжиною 1 байт безпосередньо пов'язаний з арифметико-логічним пристроєм (ALU) процесора. Іншими словами, в AVR існує 32 регістра-акумулятора (порівняйте, наприклад, з MCS-51). Ця обставина дозволяє в поєднанні з конвеєрної обробкою виконувати одну операцію в ALU за один машинний цикл. Так, два операнда витягуються з реєстрового файлу, виконується команда і результат записується назад в регістровий файл протягом тільки одного машинного циклу, причому цей цикл дорівнює періоду тактового генератора. Старші регістри об'єднані парами і утворюють три 16-розрядних регістра X, Y і Z, призначених для непрямої адресації осередків пам'яті (AVR без RAM мають тільки один 16-бітний регістр Z).

Внутрішній тактовий генератор AVR може запускатися від декількох джерел опорної частоти (зовнішній генератор, зовнішній кварцовий резонатор, внутрішня або зовнішня RC-ланцюжок). Оскільки AVR-мікроконтролери повністю статичні, мінімальна допустима частота нічим не обмежена (аж до покрокового режиму). Максимальна робоча частота визначається конкретним типом мікроконтролера. Верхні межі частотного діапазону гарантують стабільну роботу мікроконтролерів при роботі у всьому температурному діапазоні.

Програмна модель AVR-мікроконтролерів приведена на рис.1.3. Для зберігання оперативних даних програміст, крім реєстрового файлу, може використовувати внутрішню і зовнішню (якщо вони є) блоки RAM. Оскільки внутрішня і зовнішня RAM входять в єдиний адресний простір (разом з оперативними регістрами і регістрами вводу / виводу), то для доступу до осередків внутрішньої і зовнішньої пам'яті використовуються одні й ті ж команди. Внутрішня оперативна пам'ять RAM відсутня у кристалів сімейства Tiny, але є у всіх AVR сімейства Mega. Для деяких мікроконтролерів можлива організація підключення зовнішньої пам'яті даних об'ємом до 64 Кб.

Мал. 1.3 - Програмна модель AVR-мікроконтролерів

Регістровий файл, блок регістрів введення / виводу і пам'ять даних утворюють єдине адресне простір, що дає можливість при програмуванні звертатися до 32 оперативним регістрів і до регістрів введення / виводу як до осередків пам'яті, використовуючи команди доступу до RAM (в тому числі і з непрямою адресацією ). Молодші 32 адреси ($ 0 - $ 1F) відповідають оперативним регістрів. Наступні 64 адреси ($ 20 - $ 5F) зарезервовані для регістрів введення / виводу. Внутрішня RAM починається з адреси $ 60 (знак $ вказує на шестнадцатеричную систему числення).

Таким чином, регістри введення / виводу мають подвійну нумерацію. Якщо використовуються команди IN, OUT, SBI, CBI, SBIC, SBIS, то слід використовувати нумерацію регістрів введення / виводу, що починається з нуля (назвемо її основний). Якщо ж до регістрів введення / виводу доступ здійснюється як до осередків пам'яті, то необхідно використовувати нумерацію єдиного адресного простору оперативної пам'яті даних AVR. Очевидно, що адреса в єдиному адресному просторі пам'яті даних виходить шляхом додавання числа $ 20 до основного адресою регістра введення / виводу. Крім оперативної пам'яті програмно доступними ресурсами мікроконтролера є енергонезалежні, електрично програмовані FLASH і EEPROM блоки пам'яті, які мають окремі адресні простори.

Так як всі команди AVR є 16-раз-рядні слова, FLASH-пам'ять організована як послідовність 16-розрядних осередків і має ємність від 512 слів до 128K слів в залежності від типу кристала.

У FLASH-пам'ять, крім програми, можуть бути записані постійні дані, які не змінюються під час функціонування мікропроцесорної системи. Це різні константи, таблиці знакогенераторов, таблиці лінеаризації датчиків і т.п. Дані з FLASH пам'яті можуть бути програмним чином лічені в регістровий файл за допомогою команди LPM (див. Групу команд передачі даних).

EEPROM-блок електрично стирається пам'яті даних AVR призначений для зберігання енергонезалежних даних, які можуть змінюватися безпосередньо на об'єкті. Це калібрувальні коефіцієнти, різні уставки, конфігураційні параметри системи і т.п. EEPROM-пам'ять даних може бути програмним шляхом як прочитана, так і записана. Однак спеціальних команд звернення до EEPROM-пам'яті немає. Читання і запис осередків EEPROM виконуються через регістри введення / виводу EEAR (регістр адреси), EEDR (реєстр даних) і EECR (регістр управління).

Сторожовий (WATCHDOG) таймер призначений для захисту мікроконтролера від збоїв в процесі роботи. Він має свій власний RC-генератор, що працює на частоті 1 МГц. Ця частота є наближеною і залежить перш за все від величини напруги живлення мікроконтролера і від температури. WATCHDOG-таймер забезпечений своїм власним предделителя вхідний частоти з програмованим коефіцієнтом ділення, що дозволяє підлаштовувати часовий інтервал переповнення таймера і скидання мікроконтролера. WATCHDOG-таймер може бути відключений програмним чином під час роботи мікроконтролера як в активному режимі, так і в будь-якому з режимів зниженого енергоспоживання. В останньому випадку це призводить до значного зниження споживаного струму.

Мікроконтролери AVR мають у своєму складі від 1 до 4 таймерів / лічильників загального призначення з розрядністю 8 або 16 біт, які можуть працювати і як таймери від внутрішнього джерела опорної частоти, і як лічильники зовнішніх подій із зовнішнім тактуванням. Загальні риси всіх таймерів / лічильників наступні:

· Наявність програмованого предделителя вхідний частоти з різними градаціями ділення. Відмінною рисою є можливість роботи таймерів / лічильників на основний тактовою частотою мікроконтролера без попереднього її зниження, що істотно підвищує точність генерації тимчасових інтервалів системи;

· Незалежне функціонування від режиму роботи процесорного ядра мікроконтролера (тобто вони можуть бути як прочитані, так і завантажені новим значенням в будь-який час);

· Можливість роботи або від внутрішнього джерела опорної частоти, або як лічильник подій. Верхній частотний поріг визначено в цьому випадку як половина основний тактової частоти мікроконтролера. Вибір перепаду зовнішнього джерела (фронт або зріз) програмується користувачем;

· Наявність різних векторів переривань для декількох різних подій (переповнення, захоплення, порівняння).

Система реального часу (RTC) реалізована у всіх мікроконтролерах сімейства Mega. Таймер / лічильник RTC має свій власний переддільник, який може бути програмним способом підключений або до основного внутрішнього джерела тактової частоти мікроконтролера, або до додаткового асинхронного джерела опорної частоти (кварцовий резонатор або зовнішній синхросигнал). Для цієї мети зарезервовані два зовнішніх виведення мікроконтролера. Внутрішній осцилятор, навантажений на рахунковий вхід таймера / лічильника RTC, оптимізований для роботи з зовнішнім «годинниковим» кварцовим резонатором 32,768 кГц.

Порти введення / виводу AVR мають число незалежних ліній «Вхід / Вихід» від 3 до 53. Кожен розряд порту може бути запрограмований на введення або на висновок інформації. Потужні вихідні драйвери забезпечують струмовий навантажувальну здатність 20 мА на лінію порту (впадає струм) при максимальному значенні 40 мА, що дозволяє, наприклад, безпосередньо підключати до мікроконтролера світлодіоди і біполярні транзистори. Загальна струмовий навантаження на всі лінії одного порту не повинна перевищувати 80 мА (всі значення наведені для напруги живлення 5 В).

Аналоговий компаратор входить до складу більшості мікроконтролерів AVR. Типове напруга зсуву дорівнює 10 мВ, час затримки поширення становить 500 нс і залежить від напруги живлення мікроконтролера. Так, наприклад, при напрузі живлення 2,7 вольт воно дорівнює 750 нс. Аналоговий компаратор має свій власний вектор переривання в загальній системі переривань мікроконтролера. При цьому тип перепаду, що викликає запит на переривання при спрацьовуванні компаратора, може бути запрограмований користувачем як фронт, зріз або перемикання. Логічний вихід компаратора може бути програмним чином підключений до входу одного з 16-розрядних таймерів / лічильників, що працює в режимі захоплення. Це дає можливість вимірювати тривалість аналогових сигналів, а також максимально просто реалізовувати АЦП двотактного інтегрування.

Аналого-цифровий перетворювач (АЦП) побудований за класичною схемою послідовних наближень з пристроєм вибірки / зберігання (ПВЗ). Кожен з аналогових входів може бути з'єднаний з входом ПВЗ через аналоговий мультиплексор. Пристрій вибірки / зберігання має свій власний підсилювач, що гарантує, що вимірюваний аналоговий сигнал буде стабільним протягом всього часу перетворення. Розрядність АЦП становить 10 біт при нормованої похибки +/- 2 розряду. АЦП може працювати в двох режимах - одноразове перетворення по будь-якого обраного каналу і послідовний циклічний опитування всіх каналів. Час перетворення вибирається програмно за допомогою установки коефіцієнта ділення частоти спеціального предделителя, що входить до складу блоку АЦП. Важливою особливістю аналого-цифрового перетворювача є функція придушення шуму при перетворенні. Користувач має можливість, виконавши короткий ряд програмних операцій, запустити АЦП в той час, коли центральний процесор знаходиться в одному з режимів зниженого енергоспоживання. При цьому на точність перетворення не будуть зазнавати перешкод, що виникають при роботі процесорного ядра.

Виконувати арифметико-логічні операції та операції зсуву безпосередньо над вмістом осередків пам'яті не можна. Не можна також записати константу чи очистити вміст комірки пам'яті. Система команд AVR дозволяє лише виконувати операції обміну даними між осередками RAM і оперативними регістрами. Перевагою системи команд можна вважати різноманітні режими адресації осередків пам'яті. Крім прямої адресації (див. Групу команд передачі даних) є наступні режими: непряма, непряма з пост-инкрементом, непряма з предекрементом і непряма зі зміщенням.

Регістри введення / виводу розташовуються в так званому адресному просторі введення / виводу розміром 64 байт. Їх можна розділити на дві групи: службові регістри мікроконтролера та регістри, що відносяться до периферійних пристроїв (в тому числі порти введення / виводу). Вивчення даних регістрів зручно виконувати одночасно з вивченням конкретного периферійного вузла.

Серед регістрів введення / виводу є регістр, який використовується найбільш часто в процесі виконання програми. Це регістр статусу SREG. Він розташовується за адресою $ 3F і містить набір прапорів (табл. 1.1), що показують поточний стан мікроконтроллера. Більшість прапорів автоматично встановлюються відповідно до результату виконання команд. Всі розряди SREG доступні як для запису, так і для читання. Після скидання мікроконтролера регістр обнулений.

Всі регістри введення / виводу можуть зчитуватися і записуватися через оперативні регістри за допомогою команд IN, OUT (див. Групу команд передачі даних). Регістри введення / виводу, що мають адреси в діапазоні $ 00 - $ 1F, мають можливість побітової адресації. Безпосередня установка і скидання окремих розрядів цих регістрів виконується командами SBI і CBI (див. Групу команд роботи з бітами). Для ознак результату операції, які є бітами регістра введення / виводу SREG, є цілий набір команд установки і скидання. Команди умовних переходів в якості своїх операндів можуть мати як біти-ознаки результату операції, так і окремі розряди побитно адресованих регістрів введення / виводу.

Слід також мати на увазі, що у різних типів AVR одні й ті ж регістри введення / виводу можуть мати різні адреси. Для того, щоб забезпечити переносимість програмного забезпечення з одного типу кристала на інший, слід використовувати в програмі стандартні, прийняті в оригінальній фірмовій документації, символічні імена регістрів введення / виводу, а відповідність цих імен реальним адресами задавати, підключаючи на початку своєї програми (за допомогою директиви асемблера .INCLUDE) Файл визначення адрес регістрів введення / виводу. Файли визначення адрес регістрів введення / виводу мають розширення .inc. Вони вже створені розробниками фірми ATMEL і вільно поширюються разом з документацією на AVR-мікроконтролери. У цих файлах задається відповідність символічних імен основним адресами регістрів введення / виводу.

Таблиця 1.1 - Розряди регістра стану SREG

     
 розряд  Назва  опис
I  Загальний дозвіл переривань. Для дозволу переривань цей прапор повинен бути встановлений в 1. Прапор скидається апаратно після входу в підпрограму обслуговування переривань і відновлюється командою RETI для вирішення обробки наступних переривань
T  Зберігання копійованого біта. Заданий розряд будь-якого РОН може бути скопійований в цей розряд командою BST або встановлений відповідно до вмісту даного розряду командою BLD
H  Прапор потетрадного перенесення. Цей прапор встановлюється в 1, якщо стався перенесення з молодшої тетради байта (з 3-го розряду в 4-й) або позику зі старшої тетради при виконанні деяких арифметичних операцій
S  Прапор знака. Цей прапор дорівнює результату операції «виключає Або» між прапорами N і V. Він встановлюється в 1, якщо результат виконання арифметичної операції менше нуля
V  Прапор переповнення додаткового коду. Цей прапор встановлюється в 1 при переповненні розрядної сітки знакового результату
N  Прапор від'ємного значення. Цей прапор встановлюється в 1, якщо старший розряд результату операції (7 розряд) дорівнює 1
Z  Прапор нуля. Цей прапор встановлюється в 1 при нульовому результаті виконання операції
C  Прапор переносу. Цей прапор встановлюється в 1, якщо в результаті виконання операції стався вихід за межі байта

Молодші адреси пам'яті програм мають спеціальне призначення. Адреса $ 000 є адресою, з якого починає виконуватися програма після скидання процесора. Починаючи з наступного адреси осередки пам'яті програм утворюють область векторів переривання. У цій області для кожного можливого джерела переривання відведено свою адресу, за якою (в разі використання даного переривання) розміщують команду відносного переходу RJMP на підпрограму обробки переривання. Слід пам'ятати, що адреси векторів переривання одних і тих же апаратних вузлів для різних типів AVR можуть мати різне значення. Тому для забезпечення переносимості програмного забезпечення зручно, так само як і у випадку з регістрами вводу / виводу, використовувати символічні імена адрес векторів переривання, які визначені у відповідному inc-Файл.

В осередках оперативної пам'яті організовується системний стек, який використовується автоматично для зберігання адрес повернення при виконанні підпрограм, а також може використовуватися програмістом для тимчасового зберігання вмісту оперативних регістрів (команди PUSH і POP). Стек зростає від старших адрес до молодшим, тому, з огляду на, що початкове значення покажчика стека після скидання одно нулю, програміст AVR обов'язково повинен у инициализирующей частини програми подбати про встановлення покажчика стека, якщо він передбачає використовувати хоча б одну підпрограму. Мікроконтролери, що не мають RAM (сімейства Tiny), містять трирівневий апаратний стек.

Система команд AVR представлена ??в табл. 1.2.

Операнди можуть бути таких видів:

Rd: Результуючий (і вихідний) регістр в регістровому файлі;

Rr: Вихідний регістр в регістровому файлі;

b: Константа (3 біта), може бути константний вираз;

s: Константа (3 біта), може бути константний вираз;

P: Константа (5-6 біт), може бути константний вираз;

K6; Константа (6 біт), може бути константний вираз;

K8: Константа (8 біт), може бути константний вираз;

k: Константа (розмір залежить від інструкції), може бути константний вираз;

q: Константа (6 біт), може бути константний вираз;

Rdl: R24, R26, R28, R30. Для інструкцій ADIW і SBIW;

X, Y, Z: Регістри непрямої адресації (X = R27: R26, Y = R29: R28, Z = R31: R30).

Асемблер не розрізняє регістр символів.

Таблиця 1.2 - Інструкції процесорів AVR

Арифметичні і логічні команди

 
 мнемоніка  операнди  опис  операція  прапори  цикли
 ADD  Rd, Rr  Підсумовування без переносу  Rd = Rd + Rr  Z, C, N, V, H, S
 ADC  Rd, Rr  Підсумовування з перенесенням  Rd = Rd + Rr + C  Z, C, N, V, H, S
 SUB  Rd, Rr  Віднімання без переносу  Rd = Rd - Rr  Z, C, N, V, H, S
 SUBI  Rd, K8  віднімання константи  Rd = Rd - K8  Z, C, N, V, H, S
 SBC  Rd, Rr  Віднімання з переносом  Rd = Rd - Rr - C  Z, C, N, V, H, S
 SBCI  Rd, K8  Віднімання константи з перенесенням  Rd = Rd - K8 - C  Z, C, N, V, H, S
 AND  Rd, Rr  логічне І  Rd = Rd · Rr  Z, N, V, S
 ANDI  Rd, K8  Логічне І з константою  Rd = Rd · K8  Z, N, V, S
 OR  Rd, Rr  логічне АБО  Rd = Rd V Rr  Z, N, V, S
 ORI  Rd, K8  Логічне АБО з константою  Rd = Rd V K8  Z, N, V, S
 EOR  Rd, Rr  Логічне виключає АБО  Rd = Rd EOR Rr  Z, N, V, S
 COM  Rd  побітного Інверсія  Rd = $ FF - Rd  Z, C, N, V, S
 NEG  Rd  Зміна знака (Доп. Код)  Rd = $ 00 - Rd  Z, C, N, V, H, S
 SBR  Rd, K8  Встановити біт (біти) в регістрі  Rd = Rd V K8  Z, C, N, V, S
 CBR  Rd, K8  Скинути біт (біти) в регістрі  Rd = Rd · ($ FF - K8)  Z, C, N, V, S
 INC  Rd  Інкрементіровать значення регістра  Rd = Rd + 1  Z, N, V, S
 DEC  Rd  Декрементіровать значення регістра  Rd = Rd -1  Z, N, V, S
 TST  Rd  Перевірка на нуль або негативність  Rd = Rd · Rd  Z, C, N, V, S
 CLR  Rd  Очистити регістр  Rd = 0  Z, C, N, V, S
 SER  Rd  встановити регістр  Rd = $ FF  None
 ADIW  Rdl, K6  Скласти константу і слово  Rdh: Rdl = Rdh: Rdl + K6  Z, C, N, V, S
 Продовження табл. 1.2
 SBIW

 Rdl, K6  Відняти константу з слова  Rdh: Rdl = Rdh: Rdl - K 6  Z, C, N, V, S
 MUL  Rd, Rr  Множення чисел без знака  R1: R0 = Rd * Rr  Z, C
 MULS  Rd, Rr  Множення чисел зі знаком  R1: R0 = Rd * Rr  Z, C
 MULSU  Rd, Rr  Множення числа зі знаком з числом без знака  R1: R0 = Rd * Rr  Z, C
 FMUL  Rd, Rr  Множення дрібних чисел без знака  R1: R0 = (Rd * Rr) << 1  Z, C
 FMULS  Rd, Rr  Множення дрібних чисел зі знаком  R1: R0 = (Rd * Rr) << 1  Z, C
 FMULSU  Rd, Rr  Множення дрібного числа зі знаком з числом без знака  R1: R0 = (Rd * Rr) << 1  Z, C

команди розгалуження

 
 мнемоніка  операнди  опис  операція  прапори  цикли
 RJMP k  відносний перехід  PC = PC + k +1  None
 IJMP  немає  Непрямий перехід на (Z)  PC = Z  None
 EIJMP  немає  Розширений непрямий перехід на (Z)  STACK = PC + 1, PC (15: 0) = Z, PC (21:16) = EIND  None
 JMP k  перехід  PC = k  None
 RCALL k  Відносний виклик підпрограми  STACK = PC + 1, PC = PC + k + 1  None  3/4 *
 ICALL  немає  Непрямий виклик (Z)  STACK = PC + 1, PC = Z  None  3/4 *
 EICALL  немає  Розширений непрямий виклик (Z)  STACK = PC + 1, PC (15: 0) = Z, PC (21:16) = EIND  None  4 *
 CALL k  виклик підпрограми  STACK = PC + 2, PC = k  None  4/5 *
 RET  немає  Повернення з підпрограми  PC = STACK  None  4/5 *
 RETI  немає  Повернення з переривання  PC = STACK I  4/5 *
 Продовження табл. 1.2
 CPSE

 Rd, Rr  Порівняти, пропустити якщо рівні  if (Rd == Rr) PC = PC 2 or 3  None  1/2/3
 CP  Rd, Rr  Порівняти  Rd -Rr  Z, C, N, V, H, S
 CPC  Rd, Rr  Порівняти з перенесенням  Rd - Rr - C  Z, C, N, V, H, S
 CPI  Rd, K8  Порівняти з константою  Rd - K  Z, C, N, V, H, S
 SBRC  Rr, b  Пропустити якщо біт в регістрі очищений  if (Rr (b) == 0) PC = PC + 2 or 3  None  1/2/3
 SBRS  Rr, b  Пропустити якщо біт в регістрі встановлений  if (Rr (b) == 1) PC = PC + 2 or 3  None  1/2/3
 SBIC  P, b  Пропустити якщо біт в порту очищений  if (I / O (P, b) == 0) PC = PC + 2 or 3  None  1/2/3
 SBIS  P, b  Пропустити якщо біт в порту встановлений  if (I / O (P, b) == 1) PC = PC + 2 or 3  None  1/2/3
 BRBC  s, k  Перейти якщо прапор в SREG очищений  if (SREG (s) == 0) PC = PC + k + 1  None  1/2
 BRBS  s, k  Перейти якщо прапор в SREG встановлений  if (SREG (s) == 1) PC = PC + k + 1  None  1/2
 BREQ k  Перейти якщо одно  if (Z == 1) PC = PC + k + 1  None  1/2
 BRNE k  Перейти якщо не дорівнює  if (Z == 0) PC = PC + k + 1  None  1/2
 BRCS k  Перейти якщо перенесення встановлений  if (C == 1) PC = PC + k + 1  None  1/2
 BRCC k  Перейти якщо перенесення очищений  if (C == 0) PC = PC + k + 1  None  1/2
 BRSH k  Перейти якщо одно або більше  if (C == 0) PC = PC + k + 1  None  1/2
 BRLO k  Перейти якщо менше  if (C == 1) PC = PC + k + 1  None  1/2
 BRMI k  Перейти якщо мінус  if (N == 1) PC = PC + k + 1  None  1/2
 BRPL k  Перейти якщо плюс  if (N == 0) PC = PC + k + 1  None  1/2
 BRGE k  Перейти якщо більше або дорівнює (зі знаком)  if (S == 0) PC = PC + k + 1  None  1/2
 BRLT k  Перейти якщо менше (зі знаком)  if (S == 1) PC = PC + k + 1  None  1/2
 Продовження табл. 1.2
 BRHS

k  Перейти якщо прапор внутрішнього перенесення встановлений  if (H == 1) PC = PC + k + 1  None  1/2
 BRHC k  Перейти якщо прапор внутрішнього перенесення очищений  if (H == 0) PC = PC + k + 1  None  1/2
 BRTS k  Перейти якщо прапор T встановлено  if (T == 1) PC = PC + k + 1  None  1/2
 BRTC k  Перейти якщо прапор T очищений  if (T == 0) PC = PC + k + 1  None  1/2
 BRVS k  Перейти якщо прапор переповнення встановлений  if (V == 1) PC = PC + k + 1  None  1/2
 BRVC k  Перейти якщо прапор переповнення очищений  if (V == 0) PC = PC + k + 1  None  1/2
 BRIE k  Перейти якщо переривання дозволені  if (I == 1) PC = PC + k + 1  None  1/2
 BRID k  Перейти якщо переривання заборонені  if (I == 0) PC = PC + k + 1  None  1/2

 * Для операцій доступу до даних кількість циклів вказано за умови доступу до внутрішньої пам'яті даних, і не коректно при роботі із зовнішнім ОЗУ. Для інструкцій CALL, ICALL, EICALL, RCALL, RET і RETI необхідно додати три цикли плюс по два циклу для кожного очікування в контролерах з PC, меншим 16 біт (128KB пам'яті програм). Для пристроїв з пам'яттю програм понад 128KB додайте п'ять циклів плюс по три цикли на кожне очікування.

Команди передачі даних

 
 мнемоніка  операнди  опис  операція  прапори  цикли
 MOV  Rd, Rr  Скопіювати регістр  Rd = Rr  None
 MOVW  Rd, Rr  Скопіювати пару регістрів  Rd + 1: Rd = Rr + 1: Rr  None
 LDI  Rd, K8  Завантажити константу  Rd = K  None
 LDS  Rd, k  пряме завантаження  Rd = (k)  None  2 *
 LD  Rd, X  непряма завантаження  Rd = (X)  None  2 *
 LD  Rd, X +  Непряма завантаження з пост-инкрементом  Rd = (X), X = X + 1  None  2 *
 Продовження табл. 1.2
 LD

 Rd, -X  Непряма завантаження з пре-декрементом  X = X-1, Rd = (X)  None  2 *
 LD  Rd, Y  непряма завантаження  Rd = (Y)  None  2 *
 LD  Rd, Y +  Непряма завантаження з пост-инкрементом  Rd = (Y), Y = Y + 1  None  2 *
 LD  Rd, -Y  Непряма завантаження з пре-декрементом  Y = Y-1, Rd = (Y)  None  2 *
 LDD  Rd, Y + q  Непряма завантаження з заміщенням  Rd = (Y + q)  None  2 *
 LD  Rd, Z  непряма завантаження  Rd = (Z)  None  2 *
 LD  Rd, Z +  Непряма завантаження з пост-инкрементом  Rd = (Z), Z = Z + 1  None  2 *
 LD  Rd, -Z  Непряма завантаження з пре-декрементом  Z = Z-1, Rd = (Z)  None  2 *
 LDD  Rd, Z + q  Непряма завантаження з заміщенням  Rd = (Z + q)  None  2 *
 STS  k, Rr  пряме збереження  (K) = Rr  None  2 *
 ST  X, Rr  непряме збереження  (X) = Rr  None  2 *
 ST  X +, Rr  Непряме збереження з пост-инкрементом  (X) = Rr, X = X + 1  None  2 *
 ST  -X, Rr  Непряме збереження з пре-декрементом  X = X-1, (X) = Rr  None  2 *
 ST  Y, Rr  непряме збереження  (Y) = Rr  None  2 *
 ST  Y +, Rr  Непряме збереження з пост-инкрементом  (Y) = Rr, Y = Y + 1  None
 ST  -Y, Rr  Непряме збереження з пре-декрементом  Y = Y-1, (Y) = Rr  None
 ST  Y + q, Rr  Непряме збереження з заміщенням  (Y + q) = Rr  None
 ST  Z, Rr  непряме збереження  (Z) = Rr  None
 ST  Z +, Rr  Непряме збереження з пост-инкрементом  (Z) = Rr, Z = Z + 1  None
 ST  -Z, Rr  Непряме збереження з пре-декрементом  Z = Z-1, (Z) = Rr  None
 ST  Z + q, Rr  Непряме збереження з заміщенням  (Z + q) = Rr  None
 LPM  немає  Завантаження з програмної пам'яті  R0 = (Z)  None
 LPM  Rd, Z  Завантаження з програмної пам'яті  Rd = (Z)  None
 LPM  Rd, Z +  Завантаження з програмної пам'яті з пост-инкрементом  Rd = (Z), Z = Z + 1  None
 ELPM  немає  Розширена завантаження з програмної пам'яті  R0 = (RAMPZ: Z)  None
 ELPM  Rd, Z  Розширена завантаження з програмної пам'яті  Rd = (RAMPZ: Z)  None
 Продовження табл. 1.2
 ELPM

 Rd, Z +  Розширена завантаження з програмної пам'яті з пост-инкрементом  Rd = (RAMPZ: Z), Z = Z + 1  None
 SPM  немає  Збереження в програмній пам'яті  (Z) = R1: R0  None -
 ESPM  немає  Розширене збереження в програмній пам'яті  (RAMPZ: Z) = R1: R0  None -
 IN  Rd, P  читання порту  Rd = P  None
 OUT  P, Rr  Запис в порт  P = Rr  None
 PUSH  Rr  Занесення регістра в стек  STACK = Rr  None
 POP  Rd  Витяг регістра з стека  Rd = STACK  None

 * Для операцій доступу до даних кількість циклів вказано за умови доступу до внутрішньої пам'яті даних, і не коректно при роботі із зовнішнім ОЗУ. Для інструкцій LD, ST, LDD, STD, LDS, STS, PUSH і POP необхідно додати один цикл плюс по одному циклу для кожного очікування.

Команди роботи з бітами

 
 мнемоніка  операнди  опис  операція  прапори  цикли
 LSL  Rd  Логічний зсув вліво  Rd (n + 1) = Rd (n), Rd (0) = 0, C = Rd (7)  Z, C, N, V, H, S
 LSR  Rd  Логічний зсув вправо  Rd (n) = Rd (n + 1), Rd (7) = 0, C = Rd (0)  Z, C, N, V, S
 ROL  Rd  Циклічний зсув вліво через C  Rd (0) = C, Rd (n + 1) = Rd (n), C = Rd (7)  Z, C, N, V, H, S
 ROR  Rd  Циклічний зсув вправо через C  Rd (7) = C, Rd (n) = Rd (n + 1), C = Rd (0)  Z, C, N, V, S
 ASR  Rd  Арифметичний зрушення вправо  Rd (n) = Rd (n + 1), n ??= 0, ..., 6  Z, C, N, V, S
 SWAP  Rd  перестановка зошити  Rd (3..0) = Rd (7..4), Rd (7..4) = Rd (3..0)  None
 BSET s  установка прапора  SREG (s) = 1  SREG (s)
 BCLR s  очищення прапора  SREG (s) = 0  SREG (s)
 SBI  P, b  Встановити біт в порту  I / O (P, b) = 1  None
 Продовження табл. 1.2
 CBI

 P, b  Очистити біт в порту  I / O (P, b) = 0  None
 BST  Rr, b  Зберегти біт з регістра в T  T = Rr (b) T
 BLD  Rd, b  Завантажити біт з T в регістр  Rd (b) = T  None
 SEC  немає  Встановити прапор переносу  C = 1 C
 CLC  немає  Очистити прапор переносу  C = 0 C
 SEN  немає  Встановити прапор негативного числа  N = 1 N
 CLN  немає  Очистити прапор негативного числа  N = 0 N
 SEZ  немає  Встановити прапор нуля  Z = 1 Z
 CLZ  немає  Очистити прапор нуля  Z = 0 Z
 SEI  немає  Встановити прапор переривань  I = 1 I
 CLI  немає  Очистити прапор переривань  I = 0 I
 SES  немає  Встановити прапор числа зі знаком  S = 1 S
 CLS  немає  Очистити прапор числа зі знаком  S = 0 S
 SEV  немає  Встановити прапор переповнення  V = 1 V
 CLV  немає  Очистити прапор переповнення  V = 0 V
 SET  немає  Встановити прапор T  T = 1 T
 CLT  немає  Очистити прапор T  T = 0 T
 SEH  немає  Встановити прапор внутрішнього перенесення  H = 1 H
 CLH  немає  Очистити прапор внутрішнього перенесення  H = 0 H
 NOP  немає  ні операції  немає  None
 SLEEP  немає  Спати (зменшити енергоспоживання)  Дивіться опис інструкції  None
 WDR  немає  Скидання сторожового таймера  Дивіться опис інструкції  None

 




Організація ліній портів МК51. Підключення зовнішніх пристроїв | Напрямки розвитку 8-розрядних МК | Модульний принцип побудови | Резидентна пам'ять МК | Таймери і процесори подій | Мінімізація споживання енергії в системах з МК | Мікроконтролери сімейства АТ89 фірми Atmel | мікроконтролер AT89C4051 | мікроконтролер AT89S51 | Приклади ПИТАНЬ КОМП'ЮТЕРНОЇ |

загрузка...
© um.co.ua - учбові матеріали та реферати