2tych
да, всё ясно. там все числа приводятся к одной разрядности(как я не догадался?), а потом уже выполняются операции.
пример signed r16 to signed r17-r16:
Код:
ldi r17,$00 sbrc r16,7 ;если старший бит = 1 (отрицательное число) ldi r17,$FF ;тогда в старшем байте еденицы, иначе - нули
Зарегистрирован: Вт май 27, 2008 21:15:01 Сообщений: 96 Откуда: Украина
Рейтинг сообщения:0
Доброго времени суток!
Начинающий в atmel'ах.
Превые шаги делал по обучалке, всё получаетсо.
Но ассемблер не создает обьектный код, который требует avr-studio.
Но судя по файлу рядом с exe , он может это делать. Что надо дописать в батник, чтобы он создавал этот код?
Доброго времени суток! Начинающий в atmel'ах. Превые шаги делал по обучалке, всё получаетсо. Но ассемблер не создает обьектный код, который требует avr-studio. Но судя по файлу рядом с exe , он может это делать. Что надо дописать в батник, чтобы он создавал этот код?
извините за нескромный вопрос - а какой-такой ассемблер вы используете для avr-studio?! и второй вопрос - зачем объектник в студию совать?!
имхо - в студии отличный встроенный ассемблер, который создает все, что нужно...
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Зарегистрирован: Вт май 27, 2008 21:15:01 Сообщений: 96 Откуда: Украина
Рейтинг сообщения:0
ARV писал(а):
Gray64 писал(а):
Доброго времени суток! Начинающий в atmel'ах. Превые шаги делал по обучалке, всё получаетсо. Но ассемблер не создает обьектный код, который требует avr-studio. Но судя по файлу рядом с exe , он может это делать. Что надо дописать в батник, чтобы он создавал этот код?
извините за нескромный вопрос - а какой-такой ассемблер вы используете для avr-studio?! и второй вопрос - зачем объектник в студию совать?!
имхо - в студии отличный встроенный ассемблер, который создает все, что нужно...
Оперативно. Спасибо, что откликнулись. Я же писал, что я начинающий. В руках у меня книга Вольфганга Трамперта AVR-RISC микроконтроллеры. Так вот, на странице 298 написано: "Наиболее важное окно - это окно с иходным кодом программы, которое открывается автоматически при открытии объектного файла. (Обьектный файл - один из выходный файлов avr - ассемблера)".
Это дословно. Для новичка о том, что в Studio есть свой ассемблен нету и полуслова. Вот так и учись...
Это конечно не обучалка, но не могли б вы мне пошагово обяснить, как в этот ассемблер в студии влезть. (с английским ну очень туго). А то я свои программы по 200 раз перепрошиваю для выявления ошибок. Или, если можно, пошлите тудЫ, где это "по нашёму" описано.
.... но не могли б вы мне пошагово обяснить, как в этот ассемблер в студии влезть. (с английским ну очень туго). А то я свои программы по 200 раз перепрошиваю для выявления ошибок. Или, если можно, пошлите тудЫ, где это "по нашёму" описано.
Все просто:
1. Запускаешь студию
2. если запустился мастер проектов (если в настройках студии ничего особо не менял, то должен запуститься), то: а) нажимаешь кнопку "нью прожект"; б) выбираешь в появившемся окошке "АВР ассемблер", называешь проект, отмечаешь/не отмечаешь создавать ли папку; в) нажимаешь "некст"; г) выбираешь отладчик и кристалл; д) нажимаешь "финиш"
3. Если не запустился мастер, тогда в меню "проект (project)" выбираешь "создать новый проект", далее согласно п.2.
имхо - в студии отличный встроенный ассемблер, который создает все, что нужно...
Может быть он(их там два кстати) и вправду отличный, и создает всё что нужно и поддерживает условия в макросах и условное ассемблирование и а-ля сишные директивы :). Правда вот беда, не поддерживает локальных меток. И не смотря на то, что "студийный" асм позволяет вышеперечисленное, я всё равно выбираю tavrasm в пользу локальных меток, которые избавляют от кучи гемора с выдумыванием уникальных имен в подпрограммах. И это тоже имхо :)
А OBJ tavrasm умеет генерить, -j ключик. Он вобщем то сразу выводит список опций с кратким описанием при запуске с пустой командной строкой.
Зарегистрирован: Пн сен 08, 2008 13:33:44 Сообщений: 3
Рейтинг сообщения:0
mega128. столкнулся с такой проблемой, в АВРстудио при копиляции на команду
OUT DDRG,R16
пишет error: Operand 1 out of range: 0x64
как тогда выводить на этот порт?
потом решил проверить, поморгать светодиодом на порт Д.
Цитата:
include "m128def.INC" begin: ldi r16,low(RAMEND) out spl,r16 ldi r16,high(RAMEND) out sph,r16 ldi r16,(1<<6) | (1<<7) out DDRD,r16 loop: ldi r16,(1<<6) out PORTD,r16 rcall delay ldi r16,(1<<7) out PORTD,r16 rcall delay rjmp loop delay: ldi r16,30 delay1: ldi r17,200 delay2: ldi r18,200 delay3: dec r18 brne delay3 dec r17 brne delay2 dec r16 brne delay1 ret
он прост горит и никак не хочет моргать.
в итоге когда в понипроге проверил установку фьюзов, они считались все установленные и после этого мега вооще перестала шится/читаться. может понипрог глюканул, есть возможность сделать чип ресет на 128?
обращение к порту возможно 2-я способами - через команду OUT/IN либо через команду записи-чтения ОЗУ LDx/STx - при этом первый способ позволяет работоать только с портами, адрес которых не более 0х3F, а второй способ - с любыми портами. используйте второй способ.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
ST DDRG,R16 // пишем в порт LD R16,DDRG // читаем из порта
так?
Нет, не так.
Правильно так:
sts DDRG, r16
lds r16, DDRG
LD и ST это команды косвенной адресации через регистровые пары X, Y, Z
Только внимание, с регистрами, адреса которых не старше чем 0x3F лучше всегда пользовать IN/OUT, иначе если использовать STS/LDS с младшими регистрами, то нужно еще 0x20 прибавлять к адресу регистра.
Чтоб прояснилась ситуация, лучше глянуть в раздел "Register Summary" в даташите. Там можно заметить что в таблице у младших регистров двойные адреса, например для mega128 регистр PORTE записан как $03 ($23). Т.е. если мы пользуемся командами IN/OUT, то используется адрес $03, которому кстати и присвоено символьное имя PORTE в файле m128def.inc
Вот строка из inc файла:
.equ PORTE = $03
А если же захочется использовать с регистром PORTE команды STS/LDS, то придется написать так:
sts PORTE+0x20, r16
что разумеется выглядит кривовато и дает лишний шанс ошибиться.
Так что везде пользуем команды IN/OUT, ну а где ассемблер ругнулся там STS/LDS, тогда точно не ошибешься. А потом, когда привыкнешь к конкретному кристаллу, то уже сам будешь помнить какие регистры находятся в расширенном адресном пространстве, том которое старше 0x3F и на которое IN/OUT не действует.
Да, всё это выглядит кривовато и странно, я и сам по началу парился и не въезжал. Но потом когда привыкнешь и поймешь, то уже не страшно :)
Зарегистрирован: Пн сен 08, 2008 13:33:44 Сообщений: 3
Рейтинг сообщения:0
спасибо за разъяснение. я дествительно, видел адреса xx(xx+20) регистров но зачем в скобках было +0х20 не понимал, теперь все стало на свои места.
теперь снова вопросик, по перываниям, как проще сделать, чтоб вызывать прерывание 60 раз в сек без внешнего генератора, каждый раз перезаводить таймер? И возможно ли на авр такое чтоб по ходу выполнения основной программы, по приходу прерывания, после обработки программы по вектору, вернуться в основную на место?
И возможно ли на авр такое чтоб по ходу выполнения основной программы, по приходу прерывания, после обработки программы по вектору, вернуться в основную на место?
это не только возможно - это основа основ, именно так прерывания и обрабатываются!!!
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Зарегистрирован: Вт сен 09, 2008 17:35:48 Сообщений: 239 Откуда: Уфа
Рейтинг сообщения:0
я все понял.
оказывается объявленный массив всего лишь содержит два байта конечного адреса массива. получается что он записывается с конца по данному алгоритму.
Код:
MOVW R26,R4 ;load c1 value in R26 and R27 SUBI R26,LOW(-_adcin) ;subtract R26 from adcin (LOW BYTE) SBCI R27,HIGH(-_adcin) ;subtract R27 from adcin (HIGH BYTE). Now X contains current acdin adress. IN R30,0xF ;load SPDR val. (0xF) in R30 ST X,R30 ;write R30 val. in care of X
учим английский .
_________________ спасибо вам за ваше терпение и ваши подробные ответы !
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения