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