Бегающие светодиоды — это круто. Но когда весь код превращается в нечитабельную простыню — нет. К тому же надо бы добавить хоть какую реакцию на внешние события. Хоть кнопку ту же пусть чует, благо это очень просто.
Потому надо каждый проект разбивать на функционально обособленные модули. И не важно будет, на чём оные модули будут написаны =)
Но пока нас интересуют только ассемблерные.
читать дальшеНапример, для данного проекта можно выделить 4 модуля:
main.s — весь алгоритм программы сидит здесь.
led.s — весь код работы со светодиодами (инициализация, поджиг, тушение).
button.s — код работы с кнопкой (инициализация, опрос).
system.s — всякая дребедень (SystemInit и delay).
В каждом модуле нужно выделить экспортируемые процедуры. Это делается ключевым словом EXPORT:
EXPORT LedInit
EXPORT LedOn
EXPORT LedOff
После этого данные символы появятся в глобальной области видимости и могут быть использованы в других модулях.
Подключается отдельный символ с помощью ключевого слова IMPORT:
IMPORT символ
Подключать в каждом файле эти функции тоже не круто. Надо бы их объявить в одном файле и подключать только его. Ну, как include в языке С.
Такой файл записывается таким образом (led.inc):
Подключается это дело тоже просто:
Собственно, по синтаксису всё.
Сам проект изменился следующим образом: светодиоды бегают по часовой стрелке. Если нажать кнопку, побегут против.
Номер зажигаемого светодиода хранится в регистре R5 главного цикла. Без кнопки регистр увеличивается с каждым оборотом на 1 (и проверяется, не убежал ли более 3х). Если кнопка нажата — регистр уменьшается на 1. Если число стало минусом, оно сбрасывается в 3.
Хотя гораздо проще и лаконичнее это было бы сделать такой конструкцией:
Попробуйте заменить =)
Файлы:
button.s
led.s
main.s
system.s
button.inc
led.inc
system.inc
Проект целиком.<< Предыдущее Следующее >>