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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
IM1
Грызет канифоль
Сообщения: 268
Зарегистрирован: Вт фев 16, 2010 12:10:38
Откуда: Воронеж, Россия

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

Сообщение IM1 »

vitalik_1984 писал(а):
GP1 писал(а):
vitalik_1984 писал(а):в даташите написано
Table 9-2. Interrupt 0 Sense Control
ISC01 ISC00 Description
0 0 The low level of INT0 generates an interrupt request.[/list]
0 1 Any logical change on INT0 generates an interrupt request.
1 0 The falling edge of INT0 generates an interrupt request.
1 1 The rising edge of INT0 generates an interrupt request.[/list]


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

         cbit MCUCR,(1<<PUD)|(1<<ISC01)|(1<<ISC00)   ;подтяжка портов включена



а теперь сравни :wink:

да это я уже в процессе запуска по разному пробовал.
работает только этот вариант, но он в мою конструкцию никак не подходит.

а в студии второй пункт вообще(0 1 Any logical change on INT0) подписан как Резерв! :shock: :kill:
кому верить?
я понимаю, что пожно по другому прерыванию активировать, но у него приоритет ниже чем у ИНТ0 и через ИНТ0 прерывание можно из сна пробуждать насколько я понял.
Ув. vitalik_1984, Вам GP1 уже предлагал сравнить даташит и Ваш код, должно быть примерно так:

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

outi    SPL, low(RAMEND)                   ;инициализация стека
   cbit    MCUCR, (1<<PUD)|(1<<ISC01)|(1<<ISC00)   ;подтяжка портов включена, здесь ИНТ0 по Низкому уровню, это можно было и не делать, т.к. по сбросу получается тоже самое
   sbit    MCUCR, (1<<SE) |(1<<ISC00)           ;Активация режима сна и включение ISC00, теперь ИНТ0 будет по Любому уровню, а режим сна Idle
   outi    GIMSK, 0x40

И где Вы увидели "а в студии второй пункт вообще(0 1 Any logical change on INT0) подписан как Резерв! :shock: :kill:"?
Из режима Idle можно выходить по любому внешнему и внутреннему прерыванию, а из режима Power Down только по низкому уровню, длительностью не менее времени пробуждения микроконтроллера, для ATINY13 это 6 тактов.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

IM1 писал(а):И где Вы увидели "а в студии второй пункт вообще(0 1 Any logical change on INT0) подписан как Резерв! :shock: :kill:"?
Из режима Idle можно выходить по любому внешнему и внутреннему прерыванию, а из режима Power Down только по низкому уровню, длительностью не менее времени пробуждения микроконтроллера, для ATINY13 это 6 тактов.

Ну при запуске симулятора там в регистре можно выбрать из списка режим прерываний.Строчка 01 -reserved Студия 5.
IM1 писал(а):Ув. vitalik_1984, Вам GP1 уже предлагал сравнить даташит и Ваш код, должно быть примерно так:

А я ответил на это в общем то и пробовал по разному в протеусе и симуляторе никаких эмоций.
может это потому что камень тини13А?

заметил тут что во вкладке регистра прерывания глюк- а в самом регистре МКУКР нормально показывает:)
Только все равно не работает.Может нужно в железа проверять?
Вложения
Прерывания.JPG
(68.87 КБ) 421 скачивание
В поисках истины человек развивается.
Аватара пользователя
IM1
Грызет канифоль
Сообщения: 268
Зарегистрирован: Вт фев 16, 2010 12:10:38
Откуда: Воронеж, Россия

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

Сообщение IM1 »

vitalik_1984 писал(а):Ну при запуске симулятора там в регистре можно выбрать из списка режим прерываний.Строчка 01 -reserved Студия 5.
Ну, а у меня 4-я, такого подробного разжевывания там нет. Посмотрел Вашу картинку, просто удивительно, очевидный глюк. Тини 13А, отличается чуток от 13-й, там 2 новых регистра появилось, но производитель утверждает, что функционально все чики-пуки.
vitalik_1984 писал(а):вопрос в том как организовать правильно прерывание ИНТ0 от любого изменения ноги инт0.
Я же написал Вам кусочек кода, правильней не бывает. И прям не работает? И прерывания не возникают? В студии включаете принудительно на вход ИНТ0 0 или 1 и никакой реакции? Не верю. Значит Вы что-то делаете не так.
П.С.
Через часок проверю в студии именно для 13А.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

IM1 писал(а):
vitalik_1984 писал(а):Ну при запуске симулятора там в регистре можно выбрать из списка режим прерываний.Строчка 01 -reserved Студия 5.
Ну, а у меня 4-я, такого подробного разжевывания там нет. Посмотрел Вашу картинку, просто удивительно, очевидный глюк. Тини 13А, отличается чуток от 13-й, там 2 новых регистра появилось, но производитель утверждает, что функционально все чики-пуки.
vitalik_1984 писал(а):вопрос в том как организовать правильно прерывание ИНТ0 от любого изменения ноги инт0.
Я же написал Вам кусочек кода, правильней не бывает. И прям не работает? И прерывания не возникают? В студии включаете принудительно на вход ИНТ0 0 или 1 и никакой реакции? Не верю. Значит Вы что-то делаете не так.
П.С.
Через часок проверю в студии именно для 13А.

на вход пин0 меняю - никакой и в проте тоже никак не реагирует.
прот вообще неадекватно работает.
работает только когда принудительно флаг инт0 выставляю.
В поисках истины человек развивается.
Аватара пользователя
IM1
Грызет канифоль
Сообщения: 268
Зарегистрирован: Вт фев 16, 2010 12:10:38
Откуда: Воронеж, Россия

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

Сообщение IM1 »

vitalik_1984 писал(а):на вход пин0 меняю - никакой и в проте тоже никак не реагирует.
прот вообще неадекватно работает.
работает только когда принудительно флаг инт0 выставляю.
Проверил, правда не работает. По смешной причине, - элементарной невнимательности, бывает, глаз "замыливается":
вход ИНТ0 есть ПИН1, а Вы его сделали выходом. Выход я перенес на ПИН2 и все ОК. Работает как и положено по любому изменению уровня. Вот кусочек исправленный:

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

   outi   DDRB, 0b00000100                  ;Пин 2 выход остальные вход
   outi    PORTB, 3                        ;Подтяжка ПИН 1, 0
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

IM1 писал(а):
vitalik_1984 писал(а):на вход пин0 меняю - никакой и в проте тоже никак не реагирует.
прот вообще неадекватно работает.
работает только когда принудительно флаг инт0 выставляю.
Проверил, правда не работает. По смешной причине, - элементарной невнимательности, бывает, глаз "замыливается":
вход ИНТ0 есть ПИН1, а Вы его сделали выходом. Выход я перенес на ПИН2 и все ОК. Работает как и положено по любому изменению уровня. Вот кусочек исправленный:

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

   outi   DDRB, 0b00000100                  ;Пин 2 выход остальные вход
   outi    PORTB, 3                        ;Подтяжка ПИН 1, 0

Спс тото я думаю почему на пин1 срабатывает:) Спасибо большое
В поисках истины человек развивается.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

Заметил одну штуку при срабатывании преривания нужно насильно сбросить флаг прерывания иначе оно иногда повторно срабатывает.
в даташите написано нужно для сброса записать лог 1.
я прописал

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

outi GIFR,0x60;тут сбрасываются оба флага все равно только один пользую

и все нормально перестало два раза повторяться:)
В поисках истины человек развивается.
Аватара пользователя
IM1
Грызет канифоль
Сообщения: 268
Зарегистрирован: Вт фев 16, 2010 12:10:38
Откуда: Воронеж, Россия

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

Сообщение IM1 »

Интересно, у Вас это в железе происходит или на симуляторе? Если в железе, то можно списать на дребезг кнопки, а в симуляторе то откуда?
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

IM1 писал(а):Интересно, у Вас это в железе происходит или на симуляторе? Если в железе, то можно списать на дребезг кнопки, а в симуляторе то откуда?

В симуляторе
пока насильно не сбрасываю флаг,не знаю почему.причем на си тоже.
В поисках истины человек развивается.
Аватара пользователя
IM1
Грызет канифоль
Сообщения: 268
Зарегистрирован: Вт фев 16, 2010 12:10:38
Откуда: Воронеж, Россия

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

Сообщение IM1 »

vitalik_1984 писал(а):В симуляторе
пока насильно не сбрасываю флаг,не знаю почему.причем на си тоже.
Да уж, чудны дела. Погонял Вашу программу, слава Богу не удалил ее пока. Студия, правда, 4. Все норм, флага вообще не вижу, исчезает подлец сразу же в момент вызова, это если по входу менять уровень. А если принудительно устанавливаю флаг, то конечно стоит до первого шага, а потом исчезает навеки. Похоже у Вас Студия 5-я чудит.
Ну, что сказать, сбрасывайте флаг вручную в прерывании, это не повредит. Обычно я так и делаю, если прерывание длинное, т.к. не известно каких "чертей" наловит в реальном устройстве.
П.С.
На форуме есть большая ветка о 5-й студии, поинтересуйтесь там.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

IM1 писал(а):
vitalik_1984 писал(а):В симуляторе
пока насильно не сбрасываю флаг,не знаю почему.причем на си тоже.
Да уж, чудны дела. Погонял Вашу программу, слава Богу не удалил ее пока. Студия, правда, 4. Все норм, флага вообще не вижу, исчезает подлец сразу же в момент вызова, это если по входу менять уровень. А если принудительно устанавливаю флаг, то конечно стоит до первого шага, а потом исчезает навеки. Похоже у Вас Студия 5-я чудит.
Ну, что сказать, сбрасывайте флаг вручную в прерывании, это не повредит. Обычно я так и делаю, если прерывание длинное, т.к. не известно каких "чертей" наловит в реальном устройстве.
П.С.
На форуме есть большая ветка о 5-й студии, поинтересуйтесь там.

Да ладно пофиг я посмотрел в четвертой при первом переходе сбрасывается флаг, а в пятой при втором отсюда и глюк.
В поисках истины человек развивается.
phanis
Вымогатель припоя
Сообщения: 513
Зарегистрирован: Сб фев 19, 2011 18:04:08
Откуда: Татарстан, пос. Актюбинский
Контактная информация:

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

Сообщение phanis »

Здравствуйте уважаемые Коты!
Подскажите пожалуйста, как код из ассемблера преобразуется в машинный код(в частности для AVR 8 ) .
Пример
asm LDI R16,0x0E -> hex E00E
asm LDI R16,0x11 -> hex E101
asm OUT 0x20,R16 -> hex BD00

Может программы есть для быстрого перевода одиночных asm команд в 16-чное представление.
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

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

Сообщение ploop »

Подскажите пожалуйста, как код из ассемблера преобразуется в машинный код

Тупо подстановкой. Каждая команда имеет свой код, и всё.

Может программы есть для быстрого перевода одиночных asm команд в 16-чное представление.

Есть конечно. И называются они одним словом: "ассемблер"
А hex (имеется ввиду формат файла Intel Hex) - всего лишь удобный текстовый формат хранения бинарных данных.
Последний раз редактировалось ploop Вт ноя 15, 2011 21:13:10, всего редактировалось 1 раз.
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

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

Сообщение pyzhman »

А компилятор есть для перевода.
Docendo discimus
phanis
Вымогатель припоя
Сообщения: 513
Зарегистрирован: Сб фев 19, 2011 18:04:08
Откуда: Татарстан, пос. Актюбинский
Контактная информация:

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

Сообщение phanis »

ploop писал(а):Тупо подстановкой. Каждая команда имеет свой код, и всё.

А где взять этот свой код команды в 16-тиричном представлении. Мне был интересен сам процесс получения из асм команды 16-ричного значения, в авр выглядит как слово. если выполняется за 1 такт. Должен же быть какой то алгоритм.

pyzh_man писал(а):А компилятор есть для перевода.


Да что то вроде этого , только к примеру как калькулятор Windows переводит hex в dec и т.д. Для одной команды.
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

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

Сообщение ploop »

А где взять этот свой код команды в 16-тиричном представлении.

1. Записать их все в столбик и откомпилить.
2. Найти документ на сайте атмела.
3. Посмотреть исходники опенсорсного ассемблера (например avra или gavrasm)

Должен же быть какой то алгоритм.

Команда это тупо число. Следом за ней может быть константа (например адрес перехода или просто значение) - тоже обыкновенное число. Ассемблер просто вычисляет адреса меток, подставляет вместо них числа (адреса), а команды (правильно называются мнемоники) просто заменяет числами.

Например есть запись RJMP МЕТКА. Сначала слово МЕТКА заменяется на число, получаем (например) RJMP 0x10. Потом RJMP заменяется своим кодом, пусть будет 0x56. В итоге имеем 0x56 0x10. Вот и весь секрет.

Теперь мой вопрос: а зачем это надо?
phanis
Вымогатель припоя
Сообщения: 513
Зарегистрирован: Сб фев 19, 2011 18:04:08
Откуда: Татарстан, пос. Актюбинский
Контактная информация:

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

Сообщение phanis »

Спасибо за ответ.
А нужно было для изменения пошивок.
Например есть прошивка, нет исходника. Нужно поменять константы или операции.
Открываю PONY_prog- ом прошивку *.hex выбираю проц например М16 сохраняю ее в *.bin (Flash)
IDA pro открываю готовый *.bin выбираю проц AVR m16 , программа выводит asm код .
Нахожу место где нужно подправить (адрес)
Открываю *.bin хекс редактором меняю значения (адрес известен) сохраняю . Прошивка готова.
В принципе таким методом три прошивки изменил..
Самое не удобное было получить
Например есть запись RJMP МЕТКА. Сначала слово МЕТКА заменяется на число, получаем (например) RJMP 0x10. Потом RJMP заменяется своим кодом, пусть будет 0x56. В итоге имеем 0x56 0x10. Вот и весь секрет.

Может и другие варианты есть. я про них не знаю.
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

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

Сообщение ploop »

Нет других вариантов. Метки вычисляются просто по положению в тексте.

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

адрес команда
001   nop
002   nop
003   label1: nop
004   nop
005   nop
006   jmp label1

Компилятор (ассемблер), просто встретив метку label1 в тексте заменит её на число 003, и во всех следующих совпадениях тоже.

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

адрес команда
001   nop
002   nop
003   nop <<<
004   nop
005   nop
006   jmp 003
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

phanis писал(а):Спасибо за ответ.
А нужно было для изменения прошивок.

опкоды можно легко узнать написав команды в столбик,выставить в студии галочки в свойствах проекта возле"создавать файл" .lss.
а после этого скомпилировать.открываем его в дереве проекта
и вуаля
000022 9518 reti
;*******************Прерывание INT_0********************************************
000023 e600
000024 bf0a INT_0: outi GIFR,0x60
000025 9553 inc VAR
000026 9518 reti

000027 c00b OUT_IMP: rjmp PUSH_2
000028 b318 in temp1,PORTB
000029 e021 ldi temp2,0x01
00002a 2712 eor temp1,temp2
00002b bb18 out PORTB,temp1
00002c c00a rjmp POP_2
00002d 9508 ret

00002e e010 Delay: ldi Temp1,0 ;начало подпрограммы

00002f 951a Loop: dec Temp1
000030 f7f1 brne Loop
000031 9508 ret

000032 933f PUSH_3: push temp3
000033 932f PUSH_2: push temp2
000034 931f PUSH_1: push temp1
000035 9508 ret

000036 913f POP_3: pop temp3
000037 912f POP_2: pop temp2
000038 911f POP_1: pop temp1
000039 9508 ret
Опкоды красным выделил:)

А еще для облегчения вашей задачи есть IDA или ReAVR
во второй тратится совсем немного времени и полный код у вас в руках, правда имена меток сами будете придумывать:)

Ссылочка на сайт Атмел(команды)
В поисках истины человек развивается.
phanis
Вымогатель припоя
Сообщения: 513
Зарегистрирован: Сб фев 19, 2011 18:04:08
Откуда: Татарстан, пос. Актюбинский
Контактная информация:

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

Сообщение phanis »

IDA или ReAVR оба есть.
Насчет опкодов да так и делал только на другом компиляторе.
В IDA код читабельнее есть возможность просмотра структуры программы.
Посмотрел исходник компилятора AVRA, мало что понял.Ну да и ладно. Буду по старинке через компилятор.
Спасибо всем ответившим.
Ответить

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