ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
21 ноября
137911 Топик полностью
MBedder, терминатор (08.11.2008 03:51, просмотров: 277) ответил mavpsk на А потому что не умею. Я только учусь... команду lpm впервые вижу :), но описание в instruction set summary уже посмотрел... Пошел читать даташит в эту сторону. Спасибо за комментарий.
EEPROM даже по чтению доступен только через достаточно сложный блок управления с собственным таймингом, регистрами и т.д. Чтение байта из EEPROM требует целой подпрограммы, занимающей минимум 10 тактов (см. ДШ), а чтение байта из Code Memory - всего одной команды lpm, выполняемой за 3 такта и не требующей никаких проверок, стробов и т.д. Команда lpm удобная - можно, например, использовать автоинкрементную адресацию (lpm r7,z+) для считывания блока констант: .equ numbytes = 48 ; Длина копируемого блока констант, байт .dseg rambuf: .byte numbytes .cseg table2ram: ldi zl,low(2*table) ; Z = указатель на источник констант в Code Memory ldi zh,high(2*table) ; (2*table - т.к. адреса в cseg считаются в словах, а не в байтах) ldi xl,low(rambuf) ; X = указатель на приемник данных в RAM ldi xh,high(rambuf) ldi r18,numbytes ; Счетчик байт блока t2rloop: lpm r16,z+ ; Прочитать константу из Code Memory в r16 и увеличить указатель Z st x+,r16 ; Записать r16 в RAM и увеличить указатель X dec r18 ; Повторять до конца блока brne t2rloop ret table: .db "This is an example bla bla bla"