Страница 107 из 400
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт ноя 08, 2011 11:51:53
IM1
vitalik_1984 писал(а):GP1 писал(а):
а теперь сравни

да это я уже в процессе запуска по разному пробовал.
работает только этот вариант, но он в мою конструкцию никак не подходит.
а в студии второй пункт вообще(0 1 Any logical change on INT0) подписан как Резерв!

кому верить?
я понимаю, что пожно по другому прерыванию активировать, но у него приоритет ниже чем у ИНТ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) подписан как Резерв!

"?
Из режима Idle можно выходить по любому внешнему и внутреннему прерыванию, а из режима Power Down только по низкому уровню, длительностью не менее времени пробуждения микроконтроллера, для ATINY13 это 6 тактов.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт ноя 10, 2011 16:45:13
vitalik_1984
IM1 писал(а):
И где Вы увидели "а в студии второй пункт вообще(0 1 Any logical change on INT0) подписан как Резерв!

"?
Из режима Idle можно выходить по любому внешнему и внутреннему прерыванию, а из режима Power Down только по низкому уровню, длительностью не менее времени пробуждения микроконтроллера, для ATINY13 это 6 тактов.
Ну при запуске симулятора там в регистре можно выбрать из списка режим прерываний.Строчка 01 -reserved Студия 5.
IM1 писал(а):Ув. vitalik_1984, Вам GP1 уже предлагал сравнить даташит и Ваш код, должно быть примерно так:
А я ответил на это в общем то и пробовал по разному в протеусе и симуляторе никаких эмоций.
может это потому что камень тини13А?
заметил тут что во вкладке регистра прерывания глюк- а в самом регистре МКУКР нормально показывает:)
Только все равно не работает.Может нужно в железа проверять?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт ноя 10, 2011 18:34:40
IM1
vitalik_1984 писал(а):Ну при запуске симулятора там в регистре можно выбрать из списка режим прерываний.Строчка 01 -reserved Студия 5.
Ну, а у меня 4-я, такого подробного разжевывания там нет. Посмотрел Вашу картинку, просто удивительно, очевидный глюк. Тини 13А, отличается чуток от 13-й, там 2 новых регистра появилось, но производитель утверждает, что функционально все чики-пуки.
vitalik_1984 писал(а):
вопрос в том как организовать правильно прерывание ИНТ0 от любого изменения ноги инт0.
Я же написал Вам кусочек кода, правильней не бывает. И прям не работает? И прерывания не возникают? В студии включаете принудительно на вход ИНТ0 0 или 1 и никакой реакции? Не верю. Значит Вы что-то делаете не так.
П.С.
Через часок проверю в студии именно для 13А.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт ноя 10, 2011 18:41:25
vitalik_1984
IM1 писал(а):vitalik_1984 писал(а):Ну при запуске симулятора там в регистре можно выбрать из списка режим прерываний.Строчка 01 -reserved Студия 5.
Ну, а у меня 4-я, такого подробного разжевывания там нет. Посмотрел Вашу картинку, просто удивительно, очевидный глюк. Тини 13А, отличается чуток от 13-й, там 2 новых регистра появилось, но производитель утверждает, что функционально все чики-пуки.
vitalik_1984 писал(а):
вопрос в том как организовать правильно прерывание ИНТ0 от любого изменения ноги инт0.
Я же написал Вам кусочек кода, правильней не бывает. И прям не работает? И прерывания не возникают? В студии включаете принудительно на вход ИНТ0 0 или 1 и никакой реакции? Не верю. Значит Вы что-то делаете не так.
П.С.
Через часок проверю в студии именно для 13А.
на вход пин0 меняю - никакой и в проте тоже никак не реагирует.
прот вообще неадекватно работает.
работает только когда принудительно флаг инт0 выставляю.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт ноя 10, 2011 20:37:39
IM1
vitalik_1984 писал(а):на вход пин0 меняю - никакой и в проте тоже никак не реагирует.
прот вообще неадекватно работает.
работает только когда принудительно флаг инт0 выставляю.
Проверил, правда не работает. По смешной причине, - элементарной невнимательности, бывает, глаз "замыливается":
вход ИНТ0 есть ПИН1, а Вы его сделали выходом. Выход я перенес на ПИН2 и все ОК. Работает как и положено по любому изменению уровня. Вот кусочек исправленный:
Код: Выделить всё
outi DDRB, 0b00000100 ;Пин 2 выход остальные вход
outi PORTB, 3 ;Подтяжка ПИН 1, 0
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт ноя 10, 2011 22:25:19
vitalik_1984
IM1 писал(а):vitalik_1984 писал(а):на вход пин0 меняю - никакой и в проте тоже никак не реагирует.
прот вообще неадекватно работает.
работает только когда принудительно флаг инт0 выставляю.
Проверил, правда не работает. По смешной причине, - элементарной невнимательности, бывает, глаз "замыливается":
вход ИНТ0 есть ПИН1, а Вы его сделали выходом. Выход я перенес на ПИН2 и все ОК. Работает как и положено по любому изменению уровня. Вот кусочек исправленный:
Код: Выделить всё
outi DDRB, 0b00000100 ;Пин 2 выход остальные вход
outi PORTB, 3 ;Подтяжка ПИН 1, 0
Спс тото я думаю почему на пин1 срабатывает:) Спасибо большое
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт ноя 11, 2011 19:38:50
vitalik_1984
Заметил одну штуку при срабатывании преривания нужно насильно сбросить флаг прерывания иначе оно иногда повторно срабатывает.
в даташите написано нужно для сброса записать лог 1.
я прописал
Код: Выделить всё
outi GIFR,0x60;тут сбрасываются оба флага все равно только один пользую
и все нормально перестало два раза повторяться:)
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт ноя 11, 2011 20:17:17
IM1
Интересно, у Вас это в железе происходит или на симуляторе? Если в железе, то можно списать на дребезг кнопки, а в симуляторе то откуда?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт ноя 11, 2011 22:18:24
vitalik_1984
IM1 писал(а):Интересно, у Вас это в железе происходит или на симуляторе? Если в железе, то можно списать на дребезг кнопки, а в симуляторе то откуда?
В симуляторе
пока насильно не сбрасываю флаг,не знаю почему.причем на си тоже.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт ноя 11, 2011 22:43:52
IM1
vitalik_1984 писал(а):
В симуляторе
пока насильно не сбрасываю флаг,не знаю почему.причем на си тоже.
Да уж, чудны дела. Погонял Вашу программу, слава Богу не удалил ее пока. Студия, правда, 4. Все норм, флага вообще не вижу, исчезает подлец сразу же в момент вызова, это если по входу менять уровень. А если принудительно устанавливаю флаг, то конечно стоит до первого шага, а потом исчезает навеки. Похоже у Вас Студия 5-я чудит.
Ну, что сказать, сбрасывайте флаг вручную в прерывании, это не повредит. Обычно я так и делаю, если прерывание длинное, т.к. не известно каких "чертей" наловит в реальном устройстве.
П.С.
На форуме есть большая ветка о 5-й студии, поинтересуйтесь там.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб ноя 12, 2011 19:43:53
vitalik_1984
IM1 писал(а):vitalik_1984 писал(а):
В симуляторе
пока насильно не сбрасываю флаг,не знаю почему.причем на си тоже.
Да уж, чудны дела. Погонял Вашу программу, слава Богу не удалил ее пока. Студия, правда, 4. Все норм, флага вообще не вижу, исчезает подлец сразу же в момент вызова, это если по входу менять уровень. А если принудительно устанавливаю флаг, то конечно стоит до первого шага, а потом исчезает навеки. Похоже у Вас Студия 5-я чудит.
Ну, что сказать, сбрасывайте флаг вручную в прерывании, это не повредит. Обычно я так и делаю, если прерывание длинное, т.к. не известно каких "чертей" наловит в реальном устройстве.
П.С.
На форуме есть большая ветка о 5-й студии, поинтересуйтесь там.
Да ладно пофиг я посмотрел в четвертой при первом переходе сбрасывается флаг, а в пятой при втором отсюда и глюк.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт ноя 15, 2011 20:42:59
phanis
Здравствуйте уважаемые Коты!
Подскажите пожалуйста, как код из ассемблера преобразуется в машинный код(в частности для AVR 8 ) .
Пример
asm LDI R16,0x0E -> hex E00E
asm LDI R16,0x11 -> hex E101
asm OUT 0x20,R16 -> hex BD00
Может программы есть для быстрого перевода одиночных asm команд в 16-чное представление.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт ноя 15, 2011 21:11:55
ploop
Подскажите пожалуйста, как код из ассемблера преобразуется в машинный код
Тупо подстановкой. Каждая команда имеет свой код, и всё.
Может программы есть для быстрого перевода одиночных asm команд в 16-чное представление.
Есть конечно. И называются они одним словом: "ассемблер"
А hex (имеется ввиду формат файла Intel Hex) - всего лишь удобный текстовый формат хранения бинарных данных.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт ноя 15, 2011 21:12:54
pyzhman
А компилятор есть для перевода.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт ноя 15, 2011 22:05:10
phanis
ploop писал(а):
Тупо подстановкой. Каждая команда имеет свой код, и всё.
А где взять этот свой код команды в 16-тиричном представлении. Мне был интересен сам процесс получения из асм команды 16-ричного значения, в авр выглядит как слово. если выполняется за 1 такт. Должен же быть какой то алгоритм.
pyzh_man писал(а):А компилятор есть для перевода.
Да что то вроде этого , только к примеру как калькулятор Windows переводит hex в dec и т.д. Для одной команды.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт ноя 15, 2011 22:30:22
ploop
А где взять этот свой код команды в 16-тиричном представлении.
1. Записать их все в столбик и откомпилить.
2. Найти документ на сайте атмела.
3. Посмотреть исходники опенсорсного ассемблера (например avra или gavrasm)
Должен же быть какой то алгоритм.
Команда это тупо число. Следом за ней может быть константа (например адрес перехода или просто значение) - тоже обыкновенное число. Ассемблер просто вычисляет адреса меток, подставляет вместо них числа (адреса), а команды (правильно называются мнемоники) просто заменяет числами.
Например есть запись RJMP МЕТКА. Сначала слово МЕТКА заменяется на число, получаем (например) RJMP 0x10. Потом RJMP заменяется своим кодом, пусть будет 0x56. В итоге имеем 0x56 0x10. Вот и весь секрет.
Теперь мой вопрос:
а зачем это надо?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср ноя 16, 2011 10:51:04
phanis
Спасибо за ответ.
А нужно было для изменения пошивок.
Например есть прошивка, нет исходника. Нужно поменять константы или операции.
Открываю PONY_prog- ом прошивку *.hex выбираю проц например М16 сохраняю ее в *.bin (Flash)
IDA pro открываю готовый *.bin выбираю проц AVR m16 , программа выводит asm код .
Нахожу место где нужно подправить (адрес)
Открываю *.bin хекс редактором меняю значения (адрес известен) сохраняю . Прошивка готова.
В принципе таким методом три прошивки изменил..
Самое не удобное было получить
Например есть запись RJMP МЕТКА. Сначала слово МЕТКА заменяется на число, получаем (например) RJMP 0x10. Потом RJMP заменяется своим кодом, пусть будет 0x56. В итоге имеем 0x56 0x10. Вот и весь секрет.
Может и другие варианты есть. я про них не знаю.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср ноя 16, 2011 11:32:48
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
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср ноя 16, 2011 21:00:26
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
во второй тратится совсем немного времени и полный код у вас в руках, правда имена меток сами будете придумывать:)
Ссылочка на сайт Атмел(команды)
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср ноя 16, 2011 21:46:24
phanis
IDA или ReAVR оба есть.
Насчет опкодов да так и делал только на другом компиляторе.
В IDA код читабельнее есть возможность просмотра структуры программы.
Посмотрел исходник компилятора AVRA, мало что понял.Ну да и ладно. Буду по старинке через компилятор.
Спасибо всем ответившим.