У микроконтроллера ATtiny2313 есть 3 типа памяти (если не считать память регистров общего назначения и специализированную вроде регистров данных и т.д.). Это постоянная или flash память, она самая большая и в ней обычно храниться код программы. Оперативная (ОЗУ, RAM), информация с которой удаляется после выключения или перезагрузки, обычно содержит данные с которыми требуются частые манипуляции. Также есть EEPROM для длительного хранения данных при выключенном питании. В ассемблерных программах ранее рассмотренных в данном блоге обычно применялись регистры общего назначения для хранения данных с которыми требуются частые манипуляции. Однако регистров общего назначения не так много как ячеек оперативной памяти, поэтому не всегда можно обойтись одними только регистрами. Чтобы научиться использовать оперативную память, записывать и читать из неё данные. Можно в качестве тренировки сделать например "бегущий светодиод" схема которого приведена на рисунке:
Светодиоды соединены с пинами порта D в который будут поочередно записываться состояния при которых горит один из светодиодов по порядку на линии. Код получился не сложный, давйте его рассмотрим:
Многое из данного кода знакомо по предыдущим статьям об ассемблере в данном блоге. Но есть некоторые новые команды.
Директива .DSEG указывает на начало сегмента данных. В данном сегменте резервируюется память под переменные. Переменной можно дать произвольное название и выделить для неё произвольное количество байт. В данном случае, каждой переменной выделено по 1 байт. Для записи, в переменную, используется команда STS. Запись в переменную осуществляется из регистра общего назначения (в данном случае R16) а в регистр общего назначения, значение записывается командой LDI. Чтение из переменной происходит только в регистр общего назначения, командой LDS.
Посмотреть работу "бегущего светодиода" можно на видео
Адрес биткоин кошелька для поддержки канала - bc1qlhrmmkh77x2lzhqe4lt9qwkglswj64tsqt2l5g