Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств

Шаг 5. Переходим непосредственно к разработке устройств и программ 257 имя регистра-источника. Команда копирует содержимое одного регистра в другой. lpm _________________________________________________________ Чтение байта данных из программной памяти. Микроконтроллеры AVR имеют отдельную память данных и отдельную память программ. Однако некоторые виды данных удобно хранить в памяти программ. К таким дан ­ ным относятся наборы различных констант. В нашем случае в памяти про ­ грамм удобно хранить набор коэффициентов деления для всех наших нот. Для извлечения данных из памяти программ используется команда lpm. Хранение данных в программной памяти имеет свои особенности. Дело в том, что память программ состоит из набора шестнадцатиразрядных ячеек. Коды команд также имеют шестнадцать разрядов. Данные же нужно хранить в виде отдельных байтов. То есть в виде восьмиразрядных двоичных чисел. Для того, чтобы эффективнее использовать программную память, она организована таким образом, что в каждой шестнадцатиразрядной ячейке программной памяти можно хранить два разных байта данных. Команда lpm может читать каждый такой байт по отдельности. Для этого используется альтернативная адресация. Благодаря альтернативной адре ­ сации, программная память в режиме чтении данных имеет в два раза больше ячеек, чем при чтении кодов команд. Это нужно учитывать при использовании команды lpm. Если вы зна ­ ете адрес размещения данных согласно основного способа адресации, прежде, чем использовать его в команде lpm, ее значение необходимо умножить на два, чтобы получить адрес того же байта в альтернативной адресации. В команде lpm нет операнда, определяющего адрес ячейки, содержимое которой требуется прочитать. Этот адрес предварительно должен быть записан в регистровую пару Z. Команда lpm имеет три модификации. Ниже приведен формат всех трех модификаций этой команды: lpm lpm Rd , Z lpm Rd, Z+ Первая версия команды не имеет никаких операндов. Выполняя эту команду, микроконтроллер читает содержимое ячейки программной памяти, адрес которой записан в регистровой паре Z, и помещает прочи ­ танную информацию в регистр R0. Напоминаю, что в Z нужно помещать адрес ячейки в альтернативной адресации. Вторая версия команды имеет два операнда: ♦ первый операнд — это имя регистра, куда будет помещен считан ­ ный байт; ♦ второй операнд всегда равен Z.

RkJQdWJsaXNoZXIy MTExODQxMg==