ATmega16 проблема с ASM

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Родился
Сообщения: 6
Зарегистрирован: Сб мар 28, 2009 23:34:52
Откуда: Москва

Сообщение Diaborn »

Здравствуйте! Появилась проблема - требуется перенести функцию с Атмеги на Пик. С пиком проблем нет, но я не могу понять, что делает ассемблерный код АТмеги )) Вот такая запись, даже с понятным комментарием)) но что он делает - непонятно абсолютно! (в компиляторе WinAVR хз какой версии, т.к. не я писал):

asm volatile (" .set R0,0 ; get register name" ) ;
asm volatile (" .set temp,16 ; get register name" ) ;
asm volatile (" .set mC1,17 ; get register name" ) ;


Сразу скажу - даташиты курил, гуглить гуглил, _http://asm-avr.narod.ru/ смотрел - ничего не нашел, что команда делает - присваивает значение переменной - понял, но у нее синтаксис не такой, и смущает комментарий - что "получение имени регистра". Но если так - то да, регистр R0 и temp есть, но регистра mC1 нету!! Что делает цифра после запятой, в десятичной системе, я так понимаю, т.к. AVR по умолчанию настроен вроде на десятичную систему?? Угробил целый день на выяснение этого дела. Помогите, может, кто знает или сам такой код писал?
Реклама
Родился
Сообщения: 6
Зарегистрирован: Сб мар 28, 2009 23:34:52
Откуда: Москва

Сообщение Diaborn »

P.S. про директивы asm и volatile я знаю... )
Реклама
Родился
Аватара пользователя
Сообщения: 7
Зарегистрирован: Вс янв 11, 2009 21:39:52

Сообщение rime2000 »

asm volatile (" .set R0,0 ; get register name" ) ; присваивает переменной r0 значение 0
asm volatile (" .set temp,16 ; get register name" ) ; присваивает переменной temp значение 16
asm volatile (" .set mC1,17 ; get register name" ) ;присваивает переменной mC1 значение 17


Директива SET присваивает имени некоторое значение.
ИзВИниТе зА НерОВНыЙ ПочЕРк
GP1
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград

Сообщение GP1 »

прежде чем давать советы неплохо бы самому разобраться в вопросе
тут речь идет о создании переменных и привязки их к конкретному регистру, а не присвоение значения.
Чем дальше, тем больше становлюсь занудой...
Изображение
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Родился
Сообщения: 6
Зарегистрирован: Сб мар 28, 2009 23:34:52
Откуда: Москва

Сообщение Diaborn »

GP1 писал(а):прежде чем давать советы неплохо бы самому разобраться в вопросе
тут речь идет о создании переменных и привязки их к конкретному регистру, а не присвоение значения.
Т.е. происходит так: инициализируется регистр R0 и в него заталкивается переменная 17, аналогично с temp, а mC1 просто создание переменной?
Реклама
GP1
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград

Сообщение GP1 »

нет, ни так.
создается указатель.
т.е. R0 будет указывать на яп с адресом 0, что в железе соответсвует регистру R0
temp будет указывать на яп с адресом 16
и т.д.
ни каких значений эта директива не присваивает.
если это облегчит понимание, то в "чистом" ASM AVR это будет выглядеть след. образом:

Код: Выделить всё

.def    R0=R0
.def    temp=R16
.def    mC1=R17
Чем дальше, тем больше становлюсь занудой...
Изображение
Контактная информация:
Реклама
Родился
Сообщения: 6
Зарегистрирован: Сб мар 28, 2009 23:34:52
Откуда: Москва

Сообщение Diaborn »

GP1, спасибо Вам огромное! В "чистом" асме и из объяснения все понятно :beer:
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»