Відкриття асемблерних файлів 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Відкриття асемблерних файлів



 

Новий або існуючий асемблерний файл можна відкрити в WAVRASM. Для кожного нового файлу створюється нове вікно редагування.

Для створення нового асемблерного файлу потрібно нажати кнопку на панелі інструментів або нажати меню File >> New (ALT – F N). Для відкриття уже існуючого асемблерного файлу потрібно нажати кнопку на панелі інструментів або нажати меню File >> Open (ALT – F O). Для того, щоб обновити активне вікно текстового редактора потрібно нажати кнопку на панелі інструментів або нажати меню File >> Reload. Для запису файлу потрібно нажати кнопку на панелі інструментів або нажати меню File >> Save (ALT – F S).

 

Інтегрований редактор

 

В текстовому редакторі фрагменти тексту можна вирізати в буфер обміну, а потім з буферу вставляти в будь-яке місце програми. Для переміщення текстового фрагменту необхідно виконати наступні дії:

· Виділити фрагмент, який потрібно перемістити.

· Нажати на кнопку на панелі інструментів або ж нажати меню Edit>> Cut (Shift-Del). Фрагмент переміститься в буфер обміну.

· Поставити курсор в те місце програми, куди потрібно вставити даний текстовий фрагмент.

· Нажати на кнопку на панелі інструментів або ж нажати меню Edit>> Paste (Shift-Ins).

Якщо якийсь фрагмент буде повторюватись при подальшому написанні програми, його можна скопіювати в буфер обміну, а потім вставити в потрібне місце. Для копіювання текстового фрагменту необхідно:

· Виділити фрагмент, який необхідно скопіювати.

· Нажати на кнопку на панелі інструментів або ж нажати меню Edit>> Copy (Ctrl-Ins).

· Поставити курсор в те місце програми, куди потрібно вставити даний текстовий фрагмент.

· Нажати на кнопку на панелі інструментів або ж нажати меню Edit>> Paste (Shift-Ins).

Щоб повернути видалений текст, потрібно нажати кнопку на панелі інструментів або ж нажати меню Edit>> Undo (Alt-Backspace) зразу ж після видалення тексту.

 

Написання програми

 

Для прикладу розглянемо просту програму: в регістр R17 запишемо число 5, а в регістр R18 – число 7. Знайдемо суму і результат виведемо на порт D.

 

 

.device AT90S1200

.include “1200def.inc”

Ser R16

Out DDRD, R16

Ldi R17, 5

Ldi R18, 7

Add R17, R18

Out PortD, R17

 

Перша строчка програми – це об’явлення того пристрою (мікроконтролера), для якого буде написана програма. Device являється директивою асемблера. Всі директиви починаються з крапки. Слідуюча директива Include викликає бібліотеку 1200def.inc, в якій описана робота мікроконтролера AT90S1200, всі його порти і регістри.

Далі уже йде тіло програми.

Команда Ser установлює всі біти регістру R16 в одиниці.

Команда Out DDRD, R16 налагоджує порт D на вивід даних. Для цього в порту D існує регістр DDRD, який відповідає за запис-зчитування інформації. Якщо біти регістру DDRD встановленні в нуль, то на порт D можна записувати інформацію. Якщо ж біти регістру DDRD встановленні в одиницю, то з порту D зчитують інформацію.

Команди Ldi R17, 5 і Ldi R18, 7 записують в регістри R17 і R18 значення 5 і 7 відповідно. Дана команда працює тільки з регістрами R16 – R31.

Команда Add R17, R18 додає значення регістрів R17 і R18 і результат записує в регістр R17.

Out PortD, R18 виводить на порт D значення регістру R17.

 

Асемблування програми

 

Після написання програми її потрібно проасемблувати. Для цього в головному меню треба нажати команду Assemble. Але перед цим потрібно налаштувати опції асемблування. Меню налаштування асемблування Options показано на рис.2.1.

Рис.2.1

Для того, щоб записати проасембловану програму в контролер, нам потрібно, щоб вона мала шістнадцятирічний формат hex. Для цього у строку Output-file extension потрібно ввести hex.

Наступне меню Output file format пропонує вибрати формат вихідного файлу. Для Atmel-контролерів вибираємо останній стандарт Intel Intellec 8/MDS.

В самому низу є два меню, для вибору яких потрібно поставити галочку. Перше меню Wrap relative jumps означає, що в проасемблованій програмі буде виконуватись автоматичний перехід при відносному переході. Тобто при виконанні команди RJMP виконується автоматичний перехід на задану мітку. Якщо буде активне друге меню Save before assemble, то вихідний файл буде записаний після асемблування.

 

 

Вивчення пакету AVR Studio

 

Після того, як була проасемблована програма, її можна перевірити в AVR Studio. Цей пакет є симулятором будь-якого мікроконтролеру фірми Atmel серії AT90S*.

Для відкриття програми заходимо в меню File >> Open (Ctrl-O) і відкриваємо програму з форматом obj. Цей формат з’являється автоматично при асемблуванні програми. Після відкриття файлу відкривається так називаєме вихідне вікно, яке показано на рис.2.2.

Рис.2.2

 

В даному вікні зображується код програми, який можна продивитися в дисасемблованому варіанті за допомогою перемикача {mov}. Кожна команда, яка буде виконуватись, відмічена маркером.

Далі можна відкрити вікно регістрів (меню View >> Registers), вікно процесора (View >> Processor), вікно пам’яті (View >> New memory view), а також периферійні пристрої (View >> Peripheral). До периферійних пристроїв відносяться 8-бітний таймер – лічильник, порти (Port A, Port B, Port C, Port D), регістри енергонезалежної пам’яті EEPROM.

 

 

2.2.1.Вікно регістрів

Складається з 32-х регістрів і має вигляд, як показано на рис.2.3.

Рис.2.3

 

Величини регістрів можуть змінюватись після виконання команди. Значення регістрів можна змінювати самостійно. Для цього потрібно поставити курсор на значення регістру і нажати двічі ліву кнопку миші з невеликою паузою між натисканням кнопки. Після цього вписати нове значення регістру у шістнадцятирічному коді.

 

Вікно процесора

 

Вказує всю необхідну інформацію про команду, яка виконується в даний момент (рис.2.4).

Рис.2.4

 

Програмний лічильник (Program Counter) вказує адресу команди, яка буде виконуватись. Він вказує адрес в 16-річному коді і цей код може бути змінений після зупинки команди. Коли значення програмного лічильника змінюється, поточна команда відкидається. Після зміни значення програмного лічильника програма переходить на наступну адресу.

Стековий вказівник (Stack Pointer) зберігає поточне значення стекового вказівника, які розташовані в області вводу-виводу. Якщо мітка має апаратний стек замість базового стеку SRAM, вона вказується в полі стекового вказівника. Значення стекового вказівника може бути змінено після того, як зупинено виконання команди.

Лічильник циклів (Cycle Counter) дає інформацію про кількість циклів тактового генератора, які пройшли після останнього скидання. Значення лічильника циклів записується в десятковому коді і може бути змінений після зупинки команди.

Прапорці (Flags) показують поточне значення бітів статус регістру (Status register). Коли виконання команди зупинено, ці біти можуть бути змінені натисканням кнопки миші на визначений біт. Відмічений прапорець означає, що відповідний біт статус регістру має значення 1.

 

2.2.3. Вікно пам’яті

 

Використовується користувачем для огляду і модифікації змісту змінних пам’яті, які використовуються у виконуємих мітках (рис.2.5). Одне й теж вікно використовується для огляду різних типів пам’яті: пам’яті даних, програмної пам’яті, пам’яті вводу-виводу і енергонезалежної пам’яті EEPROM.

Рис.2.5

 

Тип пам’яті, який потрібно продивитись, може бути змінений в меню вибору пам’яті, яке знаходиться в верхньому лівому куті вікна пам’яті. Коли створюється нове вікно пам’яті, пам’ять даних (Data memory) створює стандартний тип пам’яті.

Адресація і зміст пам’яті завжди відображаються в 16-річному коді. Користувач може увімкнути огляд змісту пам’яті в символах ASCII, а також продивитись зміст пам’яті в 8-річному коді. Користувач може змінити зміст пам’яті подвійним натисканням кнопки миші (double click).

 

2.2.4. Вікно порту

 

Відкривається в меню View >> Peripheral >> Port >> Port A (Port B, Port C, Port D) і має вигляд як показано на рис.2.6.

Рис.2.6

 

Вікно порту має три різні регістри вводу-виводу (Port – регістр даних, Pin – ніжки порту, DDR – Data Direction Registers (регістри напрямку передачі даних)), які звичайно зв’язані з портом. Ніжки порту використовуються тільки для зчитування, в той час як регістр даних і регістри напрямку передачі даних – для зчитування/запису.

Pin не являється регістром, по цьому адресу здійснюється доступ до фізичних значень кожного із виводів порту. При зчитуванні з регістру даних Port, зчитуються дані з “регістру-защіпку”, при зчитуванні з Pin зчитуються логічні значення, які знаходяться на виводах порту.

Біти регістру DDR вибирають напрямок передачі даних. Якщо біт встановлений (1), вивід сконфігурований як вихід. Якщо біт скинутий (0) – вивід сконфігурований як вхід.

 



Поделиться:


Последнее изменение этой страницы: 2016-08-26; просмотров: 202; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.144.248.24 (0.016 с.)