Первый проект на ассемблере 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 т.е. в начало цикла.

 

Похожий код:

Фото аватара
Алексей Петров

Программист, разработчик с 5 летним опытом работы. Учусь на разработчика игр на Unity и разработчика VR&AR реальности (виртуальной реальности). Основные языки программирования: C#, C++.

Оцените автора
Бла, бла код
Добавить комментарий