Проблема с программой для mega128

Обсуждаем контроллеры компании Atmel.
Ответить
Родился
Сообщения: 7
Зарегистрирован: Пн июл 28, 2014 12:26:37

Сообщение Durumka »

Добрый день!
Задача-имея два аргумента X и Y 8-бит каждое (0-255), найти значение P- произвольная функция этих аргументов, тоже 8 бит (0-255)
Решение поставленной локальной задачи решил организовать на mega128, поскольку объем памяти программ 128 кБ позволяет впихнуть
в нее всю таблицу значений функции (256*256*256 =64кб)

Ниже привожу кусок программы, функция которой в том, чтобы, зная значения X и Y - записать результат P в регистр temp
Проблема в том, что этот кусок программы работает с одним огрехом-он правильно выдает значения из таблицы, НО - только до 251-й строки
Начиная с 252-й строки (значение Х) - выдает на гора какую-то ахинею
В чем проблема-понять не могу-толи симулятор глючит толи еще что-то
В прикрепленном файле кусок проги с таблицей
Буду рад совету
Да. еще:
В программе у меня temp=R17, temp1=R18, temp2=R19 использовал AvrStudio 4 ver. 4.19, симулятор - Simulator (не Simulator2)

ldi temp1, 0xFC;-значение X от 0 до 255 - номер строки таблицы значений
ldi temp2, 0xFD;-значение Y от 0 до 255 - номер строки таблицы значений
mov YL, temp1;
clr YH;-обнуляю на всякий случай
ldi ZL, low(general_table*2) ;
ldi ZH, high(general_table*2);-копирую адрес таблицы имен строк таблицы
;Далее складываю адрес таблицы имен и удвоенное значение Х
addw:
lsl YL;
rol YH;-умножаю на 2 значение регистра Y
add ZL, YL;
adc ZH, YH;-сложение регистровых пар с учетом переноса
; Теперь в Z находится адрес элемента таблицы general_table
lpm XL, Z+;
lpm XH, Z ;- извлекаю в X значение начала строки значений row_n
;
mov ZH, XH;
mov ZL, XL;
;---Теперь прибавляю к этому значению номер столбца - Y
mov YL, temp2;
clr YH ;
add ZL, YL ;
adc ZH, YH ;
;--Копирую значение в регистр temp
lpm temp, Z;



Не могу прикрепить файл - админ плз!
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

Сообщение Ser60 »

Инструкция типа "lpm temp, Z;" использует 16-биный поинтер Z, с помошью коротого можно адресовать лишь адресное пространство в 64К. А у Вас в памяти помимо таблицы ещё и программа хранится. Почитайте в ДШ про структуру FLASH памяти программ в чипах с более чем 64К флеша, а также про инструкцию ELPM.

Вообще, вместо того чтобы применять дорогой МК с большой памятью можно поставить внешнюю SPI память под таблицу. Обойдется дешевле, но за счет некоторого уменьшения скорости считывания.
Реклама
Ответить

Вернуться в «AVR»