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

Обсуждаем контроллеры компании Atmel.
Челюскин
Прорезались зубы
Сообщения: 209
Зарегистрирован: Ср ноя 03, 2010 14:46:17

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

Сообщение Челюскин »

Скажите, что означает символ ~ ?
Например выражение: ldi r16, ~Space; Автор комментирует это как загрузка символа пустого места( там вывод на семисегментник у него)
Лень - двигатель прогресса!
Реклама
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

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

Сообщение a_skr »

Битовое НЕ (инверсия) - меняет каждый бит константы на противоположный.

PS. удобно в знакогенераторе светящиеся сегменты цифры/символа записать единицами. А, в зависимости от схемы подключения индикатора (ОА или ОК), в порт может выводиться или прямое или инверсное значение.
Реклама
Челюскин
Прорезались зубы
Сообщения: 209
Зарегистрирован: Ср ноя 03, 2010 14:46:17

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

Сообщение Челюскин »

Спасибо, понял) а в нете нету что-то... или не там искал.
Лень - двигатель прогресса!
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

Как это нету? Ищи файл Asm_AVR_rus.pdf там все прекрасно расписано! да, гугл первым результатом выдает.
Реклама
Эиком - электронные компоненты и радиодетали
artmel
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вс май 30, 2010 12:58:17

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

Сообщение artmel »

запостил не туда, извиняюсь
Реклама
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

FreshMan писал(а):
команды типа out portb,r... не могут использовать r0-r15, поэтому temp=r16

почему ?
Цитируемое утверждение неверно. Вот как ATMEL на него отвечает в этом документе
Изображение
Посмотрел DS на ATtiny2313, ATmega8 и, к своему удивлению, не обнаружил текста, который был в DS на AT90S2313, AT8515
СпойлерAll the register operating instructions in the instruction set have direct and single-cycle
access to all registers. 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. These instructions apply to the second half
of the registers in the Register File (R16..R31). The general SBC, SUB, CP, AND, OR,
and all other operations between two registers or on a single register apply to the entire
Register File.
Реклама
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

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

Сообщение COKPOWEHEU »

Неправда, нормально оно работает. А не используют их потому что ldi не работает с r0-r15. Ну может еще какие-то команды. Их мало но они часто используются.
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

вот шаблон проги

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

.include "tn2313def.inc"
.list
.def     temp=r16
         .cseg              ;Выбор сегмента программного кода
         .org    0          ;Установка текущего адреса на ноль
;---------- векторов прерывания 19шт.----------
start:   rjmp    init       ;Переход на начало программы.Прерывание по сбросу
         reti               ;Внешнее прерывание 0
         reti               ;Внешнее прерывание 1
         reti               ;Таймер/счётчик 1,захват
         reti               ;Таймер/счётчик 1,совпадение,канал А
         reti               ;Таймер/счётчик 1,прерывание по переполнению
         reti               ;Таймер/счётчик 0,прерывание по переполнению
         reti               ;Переполнение UART пирём завершён
         reti               ;Переполнение UART регистр данных пуст
         reti               ;Переполнение UART передача завершена
         reti               ;Прерывание по изменению на любом контакте
         reti               ;Переполнение по компаратору
         reti               ;Таймер/счётчик 1,совпадение,канал В
         reti               ;Таймер/счётчик 0,совпадение,канал В
         reti               ;Таймер/счётчик 0,совпадение,канал А
         reti               ;USI готовность к старту
         reti               ;USI Переполнение
         reti               ;EEPROM Готовность
         reti               ;Переполнение охранного таймера
;---------- регистров общего назначения--------------------
init:    ldi     temp,RAMEND;Выбор адреса вершины стека
         out     SPL,temp   ;Запись его в регистр стека
         ldi     temp,0x80  ;Загружаем в R16 число 1000 0000 или 128
         out     acsr,temp  ;Отключаем компаратор
;---------- будет работать основная программа----------------------
main:   
         rjmp    main

если я не собираюсь использовать прерывания то прогу можна упростить до такого вида ?

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

.include "tn2313def.inc"
.list
.def     temp=r16
         .cseg              ;Выбор сегмента программного кода
         .org    0          ;Установка текущего адреса на ноль

;---------- регистров общего назначения--------------------
init:    ldi     temp,RAMEND;Выбор адреса вершины стека
         out     SPL,temp   ;Запись его в регистр стека
         ldi     temp,0x80  ;Загружаем в R16 число 1000 0000 или 128
         out     acsr,temp  ;Отключаем компаратор
;---------- будет работать основная программа----------------------
main:   
         rjmp    main
Tell Me The Truth
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

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

Сообщение pyzhman »

Да. И основная программа будет работать здесь. :))
Docendo discimus
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

а сами вектора прерываний жостко привязаны к своим адресам ?
изменить я ничего не могу ?
Tell Me The Truth
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

Жёстко. Но если у МК есть бутлоадер, то можно разместить его вначале флэша, а вектор прерываний перемещается в середину (задаётся соотв. фьюзом).
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

а каким образом была сделана эта привязка ?
Tell Me The Truth
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3870
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

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

Сообщение Engineer_Keen »

Аппаратно, каждое прерывание, если оно разрешено, загружает в командный счетчик свой адрес. В случае с бутлоадером адреса изменяются (возможно фьюзы меняют отдельные биты адреса).
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

Видимо, с бутлоадером тут особо никто не заморачивался :)))
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3870
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

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

Сообщение Engineer_Keen »

Честно, ни разу не было надобности в нем, хотя попробовать интересно :dont_know:
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

каким образом вектор прерываний привязали к адресу во флеше ?
Tell Me The Truth
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

Взяли и засунули его в начало. Или что-то друго интересует?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

тоесть, припустим, в диапвзоне адресов 0x00-0xА0 находятся вектора прерываний
значит в эти адреса, при всем моем желании, я никогда ничего не смогу записать и моя прога будет писаться с адреса 0хВ0 ?
Tell Me The Truth
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

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

Сообщение ploop »

Почему? Глянь на свой код: самый первый адрес содержит прыжок куда-то дальше. Ничто не мешает начать писать программу прямо с нуля. И она будет работать.
НО: в случае возникновения любого прерывания счётчик команд перебросит тебя на соответствующую строку, где будет твой код, т.е. неизвестно что. Вот что там будет - то и продолжит работать.

Так что в этом случае нельзя использовать прерывания, и всё.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

ploop писал(а):Так что в этом случае нельзя использовать прерывания, и всё.

Ну не надо так категорично :)

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

.OGR $000
proga
proga
proga
rjmp PC+2
rjmp preryvanie
proga
proga
...
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Ответить

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