Первый проект на ассемблере AVR ATmega в AVR Studio

Так уж сложилось, что к большинству статей я прикладываю исходники в виде проекта, или схему или ещё чего... Долго думал, что же "приложить" к этой статье.. Ох уж этот асм..

Проект на языке ассемблера для AVR контроллеров создать не особо сложно (утверждение касается только этого - "пилотного" проекта). Буду предполагать, что читатель знаком с основами языка ассемблера, и различает команды от директив.

Идём в AVR Studio кликаем New -- Project -- ASM Project после чего выбираем контроллер и получаем пустой текстовый файл. Неподготовленный человек слегка "обалдевает" от отсутствия даже инклуда с настройками для данного контроллера.. Но не беда.

Инклудим его сами, ну и описываем сразуже 2 метки:

.include "128def.inc" ; инклудим файл с настройками
.def temp = r16 ; назначаем регистр для временных данных

RESET:
ldi temp, 0b11111111 ; 0xFF
out DDRB, temp ; вводим значение в DDRB
ldi temp, 0x01 ; загружаем 1 в temp

LOOP:
out PORTB, temp ; выводим значение в порт B - PORTB
rol temp ; сдвигаем влево значение в r16
rjmp LOOP ; продолжаем цикл

 

Cделав это мы просто включаем по очереди все пины порта B нашей mega128.

Как вы наверное знаете выполнения начинается с начала файла, так что при включении контроллера первым делом будут выполнены действия по метке RESET ибо она в самом верху нашей программы. В программе после этой метки мы просто указываем, что все выводы порта B - это выход, а не вход.

После чего начинается выполнение программы под меткой LOOP (что в переводе "цикл"). Внутри этого цикла мы просто выводим в порт B данные из 16 регистра (который мы обозвали temp) и сдвигаем значение в регистре, после чего происходит безусловный переход по метке LOOP т.е. в начало цикла.

Просмотров:   9900

Комментарии

Добавить комментарий

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.
CAPTCHA
Введи эти символы. Ато роботы одолели!