Ассемблер (ASM) для AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Z_h_e »

Точно ж, если старший полубайт порта неизменен, то в старшем полубайте переменной надо держать не нули, а сразу старшие биты порта. Тогда вообще все одну команду превращается.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
ILYAUL
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ILYAUL »

Точно ж, если старший полубайт порта неизменен, то в старшем полубайте переменной надо держать не нули, а сразу старшие биты порта.
Вот если бы он назвал проц , то возможно весь код превратился в одну команду out port,переменная
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение СКАЗОЧНИК »

Привет всем. Снова я с глупым вопросом, но вроде простым. ))))

Есть у меня две переменные, в которых лежат десятки и единицы одного числа. Надо эти ДВЕ переменные свести к одной в упакованном ВСD формате.

Как это проще?

Понимаю, что надо ту, что с десятками перевернуть, а потом их вместе склеить. Вот это "склеить" не могу догнать. Вроде делал когда-то, но забыл. :facepalm: :oops:
Станислав
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение WiseLord »

Так вроде же обычное ИЛИ. Первую - развернуть (SWAP), домножить побитово на 0x0F (ANDI), вторую просто домножить, а потом OR над ними. Вроде как 4 операции получается.

P.S. Что-то не подумал, что если исходные числа гарантировано меньше 0x0F, то ANDI над ними и не нужно. Хватит SWAP и OR.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Jack_A »

Так еще зависит - как они исходно лежат - как бинарные или же символьные: напр., 35 - байт десятков 3 или '3' , единиц
5 или '5' . Так что andi Rx,0x0F по любому не помешает :)
СпойлерХорошо отвечать СКАЗОЧНИКу : вопросы обычно простые, а плюсами он щедро делится :)) :)
Последний раз редактировалось Jack_A Сб июн 18, 2016 10:04:11, всего редактировалось 1 раз.
Изображение
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение СКАЗОЧНИК »

Не, они у меня тупо бинарные. В одной десятки минут, в другой единицы минут.

Сделал, работает. Всем спасибо!

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

   mov MIN, DesMin
   swap MIN
   mov temp, EdMin
   or MIN, temp

      ldi ADDR, 0x01   ; Устанавлиаем минуты
      mov DATA, MIN
      rcall WRITE_IIC

   mov HUR, DesHr
   swap HUR
   mov temp, EdHr
   or HUR, temp

      ldi ADDR, 0x02   ; Устанавлиаем часы
      mov DATA, HUR
      rcall WRITE_IIC
Станислав
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Demiurg »

СКАЗОЧНИК писал(а):...

Если честно, я порой хренею от тупых вопросов. И не нужно тут обижаться, достаточно взять книжку по МК AVR и посмотреть систему команд. Так нет же, надо пойти на форум и напрячь людей, которые должны потратить свое время на разжевывание элементарщины.
Купите или скачайте книгу Вольфганг Трамперт "AVR-RISC микроконтроллеры фирмы ATMEL". В этой книге доступным языком и достаточно подробно расписано все, что нужно для самостоятельного освоения AVR. Плюс примеры программ. Преобразование чисел, работа с аппаратными таймерами, работа с ЖКИ и так далее.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение СКАЗОЧНИК »

Так, не нравится, не заходите в тему и не отвечайте.

А так ваш ответ похож лишь на офтоп не по теме. Как и мой в принципе.
Станислав
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Demiurg »

СКАЗОЧНИК писал(а):...

Не нужно вести себя как эгоист и единоличник. Думайте о том, что отвечая на вопросы любого участника, все отвечающие тратят свое ЛИЧНОЕ время, а этот ресурс невосполним.
Я не против потратить свое время, чтобы ответить на вопросы, ну так задавайте нормальные вопросы, на которые ИНТЕРЕСНО ответить.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение СКАЗОЧНИК »

Бывает голова перестает соображать на самом простом месте, хоть убей!
Сам написал все и так. И динамическую индикацию и кнопки и протокл обмена с RTC (IIC) полностью. Иногда сам не понимаю, почему так происходит. :) :)
Станислав
Аватара пользователя
Серый_
Опытный кот
Сообщения: 708
Зарегистрирован: Пт ноя 30, 2007 14:40:44

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Серый_ »

Ребят, при прошивке основной проги - обнуляется (FF-ится) EEPROM, возможно потому, что *.eep - сформирован отдельно от основной проги и впихан принудительно.
1) Как сделать так, чтобы он не обнулялся?
2) Или на крайняк, лился автоматом?
В прогу для этого привносится:
.eseg 00 01 00 03 04 05 06 07 00 09 0A 0B 0C 0D 0E 00 или...
.eseg .db 00 01 00 03 04 05 06 07 00 09 0A 0B 0C 0D 0E 00 или ещё как-то? :)
Последний раз редактировалось Серый_ Вс авг 07, 2016 18:58:35, всего редактировалось 1 раз.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Jack_A »

Сказал бы хоть, каким программатором заливаешь. Там должна быть галка - что-то вроде "Сохранять EEPROM" . И не тискать кнопку "Программировать все", а "Программировать флеш" . Не зная программатора и оболочки, точнее не скажешь.
Изображение
Аватара пользователя
dr.doc
Это не хвост, это антенна
Сообщения: 1368
Зарегистрирован: Вс мар 28, 2010 12:52:22
Откуда: Беларусь

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение dr.doc »

Или при работе в Atmel Studio ставить fuse bit eesave в единичку...
«Еще я хотел бы, чтобы наши ученые изобрели какой-то новый источник энергии, чтобы мы на коленях не ползали даже перед нашими братьями, умоляя их и выпрашивая тонну нефти или кубометр газа», — рассказал белорусский президент.
Аватара пользователя
Серый_
Опытный кот
Сообщения: 708
Зарегистрирован: Пт ноя 30, 2007 14:40:44

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Серый_ »

Ок, спс. Вроде не трётся. (Юзаю AVR Studio & мыльничку ISP mk2).
Аватара пользователя
Серый_
Опытный кот
Сообщения: 708
Зарегистрирован: Пт ноя 30, 2007 14:40:44

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Серый_ »

Ещё вопрос: существует ли список команд с которыми не работают регистры R0...R15?
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Jack_A »

http://www.atmel.com/images/Atmel-0856- ... Manual.pdf
тут про каждую команду прописано, с какими регистрами она может работать, с какими - нет. А составить для себя суммарную табличку по этому документу можно минуты за 3.
Изображение
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение akl »

Серый_ В DS на старые AT90Sxxxx, ATmega103 было написано
The only exception is the five constant arithmetic and logic instructions SBCI, SUBI, CPI, ANDI, ORI between a constant and a register and the LDI instruction for load immediate constant data.
ПТУ-шник
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Чт янв 01, 2015 16:34:55

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ПТУ-шник »

Как записать в SRAM (ОЗУ) что нибудь? В частности нужен массив.
Хочу выводить цифры на семисигментный индиктор черз каждые 4-5 секунд. Написал код, но не работает. Просто SRAM полностью пусто, хотя я туда данные как массив вбивал. Почему их там нет?

Спойлер

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

;МК attiny2313. 
.equ Numb0 = 0b00111111 // Запоминаем цифры
.equ Numb1 = 0b00000110
.equ Numb2 = 0b01011011
.equ Numb3 = 0b01001111
.equ Numb4 = 0b01100110
.equ Numb5 = 0b01101101
.equ Numb6 = 0b01111101
.equ Numb7 = 0b00000111
.equ Numb8 = 0b01111111
.equ Numb9 = 0b01101111

.include  "C:\Program Files (x86)\Atmel\AVR Tools\AvrAssembler2\Appnotes\tn2313def.inc"
; ***************** Константы/переменные ***********
.def temp = R16
// ОЗУ ===================
.dseg
.org 0x60
ArrayNumb: // Массив в ОЗУ
.db Numb0,Numb1,Numb2,Numb3,Numb4,Numb5,Numb6,Numb7,Numb8,Numb9
//Начало =================
.cseg
.org 0
;****************** Таблицы векторов *******************
rjmp RESET ; Reset Handler
reti ;INT0 ; External Interrupt0 Handler
reti ;INT1 ; External Interrupt1 Handler
reti ;TIM1_CAPT ; Timer1 Capture Handler
reti ;TIM1_COMPA ; Timer1 CompareA Handler
rjmp  TIM1_OVF ; Timer1 Overflow Handler
reti ;TIM0_OVF ; Timer0 Overflow Handler
reti ;USART0_RXC ; USART0 RX Complete Handler
reti ;USART0_DRE ; USART0,UDR Empty Handler
reti ;USART0_TXC ; USART0 TX Complete Handler
reti ;ANA_COMP ; Analog Comparator Handler
reti ;PCINT ; Pin Change Interrupt
reti ;TIMER1_COMPB ; Timer1 Compare B Handler
reti ;TIMER0_COMPA ; Timer0 Compare A Handler
reti ;TIMER0_COMPB ; Timer0 Compare B Handler
reti ;USI_START ; USI Start Handler
reti ;USI_OVERFLOW ; USI Overflow Handler
reti ;EE_READY ; EEPROM Ready Handler
reti ;WDT_OVERFLOW ; Watchdog Overflow Handle
;************ Предварительная настройка**********
Reset:
;************ Инициализация стека **********
ldi r16, low(RAMEND)
out  SPL,r16
;************ Настройка I/O и переферии**********
ldi temp, 0b11111111
out DDRB, temp
ldi temp, 0b00111100
out DDRD, temp
ldi temp, (1<<CS11) | (1<<CS10); Делитель на 64
out TCCR1B, temp
ldi temp, (1<<TOIE1)
out TIMSK, temp
sbi PORTD,2 // УСТАНОВИМ 2
ldi ZL, LOW(ArrayNumb) // считаем адресс
ldi ZH, HIGH(ArrayNumb) // в озу
sei
   rjmp Main
;************ Главная программа *************
   Main:
rjmp MAIN
;************ Прерывание таймер *************   
   TIM1_OVF:
ld temp, Z+ //Считываем что находится по адресу ригстровой пары Z и потом прибавляем +1
out PORTB, temp
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15549
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение BOB51 »

В ОЗУ данные заносит только программа при ее исполнении (в отличии от ПЗУ и/или EEPROM где массивы записывает компилятор с последующим размещением данных в файлах прошивки).
Для ОЗУ можно лишь зарезервировать количество ячеек для заданного имени:
.dseg
.org SRAM_START
Numb: .byte 10 ; резервируем 10 ячеек для массива Numb
затем при начале работы программа должна проинициализировать (провести предварительную запись)
указанные ячейки значениями Numb0-Numb9 и лишь затем использовать массив Numb как источник
данных.
8)
ПТУ-шник
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Чт янв 01, 2015 16:34:55

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ПТУ-шник »

Мда. Это ж замучится можно ручками это всё инициализировать. А как сделать цикл я не знаю пока. Проще тогда эти константы в FLASH сделать и всё.
Ответить

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