Микропроцессоры и микроконтроллеры

 
 
 
«PHP — это маленькое зло, созданное некомпетентными новичками, в то время как Perl — это большое и коварное зло, созданное умелыми, но извращёнными профессионалами.»
Jon Ribbens
Русский | Українська


Микропроцессоры и микроконтроллеры :: Принципи програмування MSC-51 :: Правила запису програм на мові Асемблер

Правила запису програм на мові Асемблер

Кожна команда представляє собою рядок такої конструкції:

rn

[Мітки:] мнемокод операції операндів (и) [; коментарі]

rn

[] - поле може бути відсутньою.

rn

Метка - символічне ім'я комірки пам'яті, починаючи з якої розміщується в пам'яті дана команда.

rn

В якості операндів можуть використовуватися числа (адреси та дані), зарезервованих і певні символічні імена.

rn

Для вказівки системи відліку, в якої задається число, використовують буквені індекси після самого числа: B - двійкова, Q - восьмерічная, D або нічого - десяткова, H - шістнадцятковому.

rn

КОМЕНТАРІ - будь-які символи.

rn

Поняття про Асемблері

rn

Асемблер - це програмний засіб, призначений для перетворення вихідного тексту програми, що містить мнемоніческіе імена команд та операндів, в послідовність двійкових кодів, які представляють собою виконуються команди для процесора.

rn

Таким чином, вхідна інформація для Асемблері представляється у вигляді текстового файлу, а вихідна інформація генерується у вигляді так званого файлу ОБ'ЄКТОВОГО кодів (об'єктного файлу). Крім цього, Асемблер виконує перевірку коректного написання команд. Іноді його називають компілятором (трансляторів) з мови Асемблер.

rn

В результаті роботи Асемблер є можливість крім об'єктного файлу отримати також файл Лістинг, який містить текстову інформацію про розміщення кодів команд і даних за конкретними адресами пам'яті мікроконтролера або мікропроцесорної системи.

rn

Програма на мові Асемблер складається з логічних сегментів - блоків з елементів одного типу (команди, дані). Для МК51 ці логічні сегменти безпосередньо відповідають фізичним областям пам'яті (РПП, ВПП, РПД, ВПД, бітів область).

rn

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

rn

Для сегментного побудови програми та визначення символічних імен адрес і значень даних використовують Директиви Асемблер. Директиви Асемблері НЕ є виконуючим командами, а являють собою інструкції для компілятора з розміщення команд і даних в пам'яті МК або МПС.

rn

СТРУКТУРА ПРОГРАМИ: програма на мові Асемблер містить такі блоки:

rn

- Декларативний частина - опис символічних імен даних і адрес, які використовують у програмі, а також директиви виділення пам'яті для змінних і зазначення значень констант (за допомогою директиви Асемблері);

rn

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

rn

- блок РЕАЛИЗАЦИИ алгоритмів і функцій управління (за допомогою команд).

rn

Директиви визначення символічних імен

rn

Директива EQU - будь-якого імені ставиться у відповідність операндів.

rn

Формат директиви: <ім'я> EQU <вираз>

rn

Наприклад: z1 equ 10

rn

z2 equ z1 + 4

rn

z3 equ z1 + z2 + 5

rn

Імена, визначені директивою EQU, можна використовувати як адресу коду, адреса даних (внутрішніх або зовнішніх) або значення даних. Наприклад:

rn

MOV A, # z1; Загрузка числа 10 в акумулятор

rn

MOV A, z1; Пересилання в акумулятор з комірки з адресою 0AH

rn

Оператори, допустимі для використання в виразах в директивах Асемблер, описані далі.

rn

Директива DATA - задає ім'я для адреси даних в РПД.

rn

Формат директиви: <ім'я> DATA <адресний вираз>

rn

Директива XDATA - задає ім'я для адреси зовнішніх даних (ВПД).

rn

Формат директиви: <ім'я> XDATA <адресний вираз>

rn

Директива BIT - задає ім'я для адреси біта з області внутрішнього ОЗП з бітової адресацією.

rn

Формат директиви: <ім'я> BIT <адреса біти>

rn

Наприклад: control DATA 2AH

rn

f1 bit control.3 Адреса у вигляді бітового селектору

rn

f2 bit f1 + 4; Адресні вираз

rn

f3 bit 60H; Абсолютний адреса

rn

Приклади зручного використання символічних імен:

rn

counter DATA 20H flag BIT P1.7

rn

. . . on BIT 30H

rn

MOV counter, 10. . .

rn

m1: <дії в циклі> SETB on

rn

. . . wait: JNB flag, wait

rn

DJNZ counter, m1 CLR on

rn

Лічильник адрес (не плутати з лічильником команд (PC))

rn

У процесі компіляції Асемблер з кожним сегментом пов'язує свою внутрішню змінну, яка називається лічильником адрес. У цієї змінної підраховується, скільки байтів відведено в пам'яті під кожну команду або число і, відповідно, за якою адресою буде розміщена наступна команда або число. Таким чином, лічильник адрес «стежить» за розміщенням в пам'яті кодів команд і даних.

rn

Метка команди - це, по суті, символічне ім'я адреси комірки пам'яті, починаючи з якою дана команда розміщена в пам'яті.

rn

Мітки команд зв'язуються з адресами автоматично в процесі компіляції, і спеціальних директив для цього не існує.

rn

Директиви управління сегментами програми

rn

Поява в тексті програми цих директив означає, що розміщені далі команди або дані відносяться до сегменту (типу) пам'яті, вказаною директивою:

rn

CSEG - початок сегменту кодів (пам'ять програм);

rn

DSEG - початок сегменту даних в ОЗП РПД;

rn

XSEG - початок сегменту зовнішніх даних (ВПД).

rn

Управління значенням лічильника адрес

rn

При першій появі в тексті програми будь-який з директив управління сегментами Асемблер створює новий лічильник адрес для цього сегменту і встановлює його в нуль. При повторному відкритті сегмента триває рахунок від попереднього значення.

rn

Існує директива ORG, яка дозволяє програмісту встановлювати потрібні значення лічильника адреси для поточного активного сегменту і таким чином розміщувати коди в пам'яті за потрібне адресами.

rn

Формат директиви: ORG <адресний вираз>

rn

Директиви ініціалізації пам'яті DB, DW заповнюють байт або слово (2 байти) вказаним значенням. Використовують для розміщення значень констант в сегменті кодів (тобто в пам'яті програм):

rn

[ім'я:] DB <значення> [ім'я:] DW <значення>

rn

Директива резервування (виділення) пам'яті DS для змінної в сегменті зовнішніх або внутрішніх даних (ВПД або ОЗУ РПД): < /p> rn

[ім'я:] DS <кількість байтів>

rn

END - директива визначення кінця програмного модуля.

rn

Оператори періоду трансляції

rn

Для зручності запису команд і директив в мові Асемблер допускається задавати числові значення та адреси пам'яті у вигляді виразів, які обчислюються. Значення такого виразу буде визначено компілятором ще під час трансляції, а в код команди буде підставлятися тільки результат цих дій. Допустимими операціями є: +, -, *, /, (), AND, OR, XOR, NOT, LOW - виділення молодшого байта, HIGH - виділення старшого байтів з двухбайтового вирази.

rn

Наприклад:

rn

1) X equ 10; число X = 10

rn

Y equ X + 2; число Y = 12

rn

Z equ (X + Y) * 4; число Z = 88

rn

2) DSEG

rn

org 70H

rn

V1: ds 4; Виділення пам'яті для четирехбайтовой змінної

rn

. . .

rn

MOV A, V1 +1; Читання в ACC іншого байтів змінної V1

rn

3) X equ 3704; Оголошення двухбайтового числа

rn

. . .

rn

MOV R0, # LOW (X); Запис молодшого байта X в регістр R0

rn

MOV R1, # HIGH (X); Запис старшого байтів X в регістр R1

rn

У даних матеріалах представлені тільки ті директиви Асемблер, які будуть використовуватися в програмах для лабораторних робіт.

rn

Повний перелік команд МК51 з необхідними коментарями та зазначенням особливостей використання представлений в посібнику в посібнику, а також у спеціальному буклеті, що надається студентам на лабораторних роботах.

rn

В даний час значний сегмент ринку Однокристальний мікроконтролерів займає продукція фірми Atmel. Характерна особливість фірми - широке використання високоякісної Flash - технології, яка в останнє десятиріччя витісняє традиційні EPROM.

rn

Основні характеристики новітніх мікроконтролерів сімейства 8051 фірми Atmel:

rn

Основні характеристики новітніх мікроконтролерів сімейства 8051 фірми Atmel:

rn

- використання базового ядра 80С51;

rn

- гранично низькі ціни на мікроконтролери (одиниці доларів);

rn

- мікроконтролери з каналом SPI (serial programming interface), що забезпечують можливість внутрісхемного програмування Flash-пам'яті; ця функція дуже зручна у виробництві, особливо дрібносерійним, коли фізична програмування контролерів виконується після їх монтажу;

rn

- внутрішня пам'ять даних на базі EEPROM (т.зв. Flash-пам'ять даних), що забезпечує зберігання оперативних даних при відключенні живлення мікросхем контролерів; запис в таке енергонезалежній ОЗУ відбувається дещо довше, ніж у звичайні комірки внутрікрістального ОЗУ;

rn

- можливість роботи на низьких тактова частота (аж до 0 Гц!), що буває важливо в системах реального часу.

rn