Команда також має два параметри:
В· перший параметр - ім'я РВВ, що є приймачем інформації;
В· другий параметр - ім'я РОН, що є джерелом.
У рядку 7 програми вміст регістра temp виводиться в РВВ з ім'ям SPL.
In - Введення інформації з регістра введення-виведення. Має два параметри. Параметри ті ж, що і в попередньому випадку, але джерело і приймач міняються місцями. У рядку 19 програми вміст регістра PORTD міститься в регістр temp. p align="justify"> rjmp - Команда безумовного переходу. Команда має всього один параметр - адреса та переходу. У рядку 21 програми оператор безумовного переходу передає тиск на рядок, позначену міткою main. To є на рядок 19. Дана рядок демонструє використання мітки. p align="justify"> Насправді як параметр оператора rjmp повинен виступати так званий відносний адреса переходу. Тобто число байт, на яке потрібно зміститися вгору або вниз від поточного адреси. Напрямок зміщення (вгору або вниз) - це знак числа. Він визначається старшим бітом. Мова Асемблера позбавляє програміста від необхідності підрахунку величини зсуву. Досить у потрібному рядку програми поставити мітку, а в якості адреси переходу вказати її ім'я, і ​​транслятор сам обчислить значення цього параметра. p align="justify"> При використанні команди rjmp існує одне обмеження. Відповідна команда мікроконтролера кодується за допомогою зсуву вона використовує всього дванадцять розрядів. Тому така команда може викликати перехід в межах В± 2 Кбайт. Якщо ви розташуєте мітку занадто далеко від оператора rjmp, то при трансляції програми це викличе повідомлення про помилку. p align="justify"> 2.8 Опис програми
Текст програми починається шапкою з назвою програми. Шапка являє собою кілька рядків коментарів. Шапка на початку програми допомагає відрізняти програми один від одного. Крім назви програми, в шапку можна помістити її версію, а також дату написання. p align="justify"> Найперша команда програми - це псевдокоманда include, яка приєднує до основного тексту програми файл описів (див. лістинг 4.1 рядок 1). У стандартному пакеті AVR-Studio є цілий набір подібних файлів описів. Для кожного мікроконтролера серії AVR - свій окремий файл. Всі стандартні файли описів знаходяться в директорії "C: Program FilesVAtmel AVR Tools AvrAssembler Appnotes В». Програмісту потрібно лише вибрати потрібний файл і включити подібну рядок в свою програму. Врахуйте, що без приєднання файлу описів подальша програма працювати не буде. br/>
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
; # Програма 1 #
; # Програма управлінням світлодіодом #
; # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
В
Для мікроконтролера ATtiny2313 файл описів має назву tn2313def. inc. Якщо файл описів знаходиться у зазначеній вище директорії, то в команді include достатньо лише вказати його повне ім'я (з розширенням). Вказувати повний шлях необов'язково. p align="justify"> Призначення команди.list (рядок 2), сподіваюся, у вас вже не викликає питань. Зупинимося на команді макроозначення (рядок 3). Ця команда, як уже говорилося, присвоює регістру r16 ім'я temp. Далі в програмі регістр temp використовується для тимчасового зберігання проміжних величин. Доречно задатися питанням: чому обрано саме r16, а, наприклад, не г0? Це стає зрозуміло, якщо згадати, що регістри, починаючи з r0 і закінчуючи r15, мають менше можливостей. Наприклад, у рядку 14 програми регістр temp використовується в команді ldi. Однак команда ldi не працює з регістрами r0-r15. Саме з цієї причини ми і вибрали r16. p align="justify"> Наступні дві команди (рядки 4, 5) докладно описані на початку цього розділу. Вони служать для вибору програмного сегмента пам'яті і установки початкового значення покажчика. p align="justify"> У рядках 6 і 7 виробляється ініціалізація стека. У регістр стека SPL записується адресу його вершини. В якості адреси обраний самий верхній адреса ОЗУ. Для позначення цієї адреси в даній версії Асемблера існує спеціальна константа з ім'ям RAMEND. Значення цієї константи визначається у файлі описів (у нашому випадку у файлі tn2313def. Inc). Для кроконтроллера ATtiny2313 константа RAMEND дорівнює OxDF. p align="justify"> Одним рядком записати константу в регістр стека неможливо, оскільки в системі команд мікроконтролерів AVR відсутня подібна команда. Відсутню команду ми замінюємо двома іншими. І тут нам стане в нагоді регістр temp. Він послужить в даному випадку передавальною ланкою. Спочатку константа RAMEND міститься в регістр temp (рядок 6), а потім вже вміст temp міститься в регістр SPL (рядок 7). p align="justify"> У рядках 8-12 проводиться на...