четверг, 12 сентября 2024 г.

AVR ASM RAM

 У микроконтроллера ATtiny2313 есть 3 типа памяти (если не считать память регистров общего назначения и специализированную вроде регистров данных и т.д.). Это постоянная или flash память, она самая большая и в ней обычно храниться код программы. Оперативная (ОЗУ, RAM), информация с которой удаляется после выключения или перезагрузки, обычно содержит данные с которыми требуются частые манипуляции. Также есть EEPROM для длительного хранения данных при выключенном питании. В ассемблерных программах ранее рассмотренных в данном блоге обычно применялись регистры общего назначения для хранения данных с которыми требуются частые манипуляции. Однако регистров общего назначения не так много как ячеек оперативной памяти, поэтому не всегда можно обойтись одними только регистрами. Чтобы научиться использовать оперативную память, записывать и читать из неё данные. Можно в качестве тренировки сделать например "бегущий светодиод" схема которого приведена на рисунке:

Рисунок 1 - Схема "бегущего светодиода"

Светодиоды соединены с пинами порта D в который будут поочередно записываться состояния при которых горит один из светодиодов по порядку на линии. Код получился не сложный, давйте его рассмотрим:

Многое из данного кода знакомо по предыдущим статьям об ассемблере в данном блоге. Но есть некоторые новые команды.

Директива .DSEG указывает на начало сегмента данных. В данном сегменте резервируюется память под переменные. Переменной можно дать произвольное название и выделить для неё произвольное количество байт. В данном случае, каждой переменной выделено по 1 байт. Для записи, в переменную, используется команда STS. Запись в переменную осуществляется из регистра общего назначения (в данном случае R16) а в регистр общего назначения, значение записывается командой LDI. Чтение из переменной происходит только в регистр общего назначения, командой LDS. 

Посмотреть работу "бегущего светодиода" можно на видео




Адрес биткоин кошелька для поддержки канала - bc1qlhrmmkh77x2lzhqe4lt9qwkglswj64tsqt2l5g