Ассемблер (ASM) для AVR в вопросах и ответах
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
_noise, что у вас за проблема? что-то я никак не пойму...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
-
осторожно! леоныч!!!
- Сверлит текстолит когтями
- Сообщения: 1156
- Зарегистрирован: Вт дек 09, 2008 20:31:56
прошивка
я ваще ничего не пойму! но мне здесь добрые люди очень помогли с прошивкой!!!!ARV писал(а):_noise, что у вас за проблема? что-то я никак не пойму...
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
я вот и интересуюсь: что мешает так делать?_noise писал(а):Практически нужно так:
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
сложнсо казать, что у вас не так, только глядя на код, не изучая его в дебаггере... а изучать, как сами понимаете, желания острого нет. но сразу скажу, что мне очень, ну просто очень не по душе принятый вами подход в определении векторов прерываний! и надо же было кому-то научить вас и еще многих других рисовать в программе таблицу из rjmp/reti, якобы соответствующих таблице векторов! ну такую ересь написать (помнится, в какой-то книжке это было, ну и в обучалку переползло) - это просто надо быть диверсантом!
правильно описывать векторы прерываний надо с использованием директивы .org и соответствующей символьной константы из xxxx.inc файла. при этом векторы, которые не используются в программе, и описывать не надо!
просто предполагаю: у вас ошибочка в таблице векторов, в результате прерывание у вас возникает, но попадает не на тот rjmp/reti, что надо, и естественно, обработчик не вызывается.
кстати, разве вы в студии не пробуете в отладчике-симуляторе пройти вашу программу и поглядеть, что реально там у вас происходит и что нет?
правильно описывать векторы прерываний надо с использованием директивы .org и соответствующей символьной константы из xxxx.inc файла. при этом векторы, которые не используются в программе, и описывать не надо!
просто предполагаю: у вас ошибочка в таблице векторов, в результате прерывание у вас возникает, но попадает не на тот rjmp/reti, что надо, и естественно, обработчик не вызывается.
кстати, разве вы в студии не пробуете в отладчике-симуляторе пройти вашу программу и поглядеть, что реально там у вас происходит и что нет?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
гм... вот когда я чего-то не понимаю (работало и вдруг перестало) я пытаюсь разобраться, в чем дело... и в этом случае дебаггер - первый друг: он не ошибается! программа из трех команд может принести сюрприз, который не понять умом (в силу ограниченных способностей, например), но очень хорошо видно глазом в дебаггере - глазу моск не нужен, чтобы видеть. зато после этого и мозг наполняется новым знанием. а из цитат, что я надергал из вашего поста, складывается впечатление, что вам не охота учиться-самообразовываться, тяп-ляп-поехали... не поехали - спросим, почему, и потом поедем..._noise писал(а):Что дебагить?
ибо мне так удобно.
А обучалки всякоразные даже и ни разу не возникало желания употреблять как таковые.
(когда/если будет в таблице сто векторов - покажется неудобно - сделаю иначе)
тут поработало и перестало.
В отладчике не пробую.
(и вообще не пробую)
к сожалению, я уже вышел из того возраста, когда интересно копаться в чужих мигалках и находить конкретные ошибки... потому вам помочь вряд ли смогу... зато я мог бы вам дать системные рекомендации, как писать программы так, чтобы в них было меньше ошибок, а имеющиеся быстрее находились - но вам такое, как мне кажется, не нужно...
так что придется вам продолжать беседовать в этой теме, порой удивляясь и удивляя других сообщениями о том, что проблема в программе решилась путем установки какой-то опции в программаторе (!!!)... кстати, танцы с бубном могут помочь - якутсткие программисты только так и исправляют ошибки в программах
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
что вы, что вы! спрашивайте, не стесняйтесь, для чего же еще нужен форум?!_noise писал(а):полагаю невежливым спрашивать: читаете ли вы полностью текст вопросов, которые комментируете, насколько "в общих чертах" вам необходимо и достаточно понять его для написания комментария, имеете ли вы практический опыт работы именно в этой области (с такой микросхемой) в настоящий момент либо в недалёком прошлом. потому не спрашиваю.
отвечу на незаданный вопрос: я не читаю все подряд, это утомительно. более того: ранее предпринятые неоднократные усилия по прочтению всех животрепещущих тем убедили меня, что обычно в них ведется переливание из пустого в порожнее. поэтому я читаю 2-3 последних сообщения обычно. возможно, это неправильно, но ничего с собой поделать не могу.
что касается вопросов по существу (на счет практического опыта работы), то скажу так: увидев 1 вопробья можно сказать, что видел всех, т.к. они одинаковы. я работал (и продолжаю работать) минимум с десятком разных МК семейства AVR, в том числе много лет исключительно на ассемблере, и, как мне кажется, вполне могу утверждать, что знаю ассемблер AVR очень неплохо, выше среднего уровня - однозначно. что там у вас за МК конкретно - мне не интересно, т.к. ассемблер для всех одинаков, одинаковы и методы отладки и поиска ошибок. так что на этот счет не переживайте
P.S. а на счет темы про анекдоты - так тут почти любая тема, как анекдот!
да, вот еще, дописую: вы тут сказали, что я опять нафлудил... выходит, действительно так. хотя если б вы приняли к сведению предлагаемые мною поправки, а потом, наверняка, последовали бы и другие рекомендации - пользы было бы больше.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Я только начинаю изучать Ассемблер под AVR. Пытаюсь сделать то, что изображено на картинке ниже:
Смысл в том, чтобы при нажатии на кнопку светодиод менял свое состояние на противоположное. Разница между тем, чт опоказано на картинке выше и тем, что у меня лишь в том, что я подключаю и кнопку и светодиод к порту C, светодиод на PC0, а кнопка на PC1.
Вот код того, что я сделал:
Но беда в том, что не работает ни в реальности, ни в студии. Проверял несколько раз - ошибок не увидел.
Так же пробовал переключать светодиод проверяя на PINC, а PORTC, все равно ничего не получилось. В чем же может быть проблема?
Смысл в том, чтобы при нажатии на кнопку светодиод менял свое состояние на противоположное. Разница между тем, чт опоказано на картинке выше и тем, что у меня лишь в том, что я подключаю и кнопку и светодиод к порту C, светодиод на PC0, а кнопка на PC1.
Вот код того, что я сделал:
Код: Выделить всё
.include "m8def.inc"
.def temp=r16
ldi temp, low(RAMEND)
out SPL, temp
ldi temp, high(RAMEND)
out SPH, temp
ldi temp, 0b00000001
out DDRC, temp
ldi temp, 0b00000010
out PORTC, temp
//основной цикл
//проверка, нажата ли кнопка
begin:in temp, PINC
sbrc temp, 1//кнопка нажата?
rjmp begin//кнопка не нажата, переход в начало
//переключение светодиода
ldi temp, PINC
sbrc temp, 0//светодиод горит?
rjmp d_off//светодиод горит, выкл. светодиод
sbi PORTC, 0//светодиод не горит, вкл. светодиод
rjmp check_again//переход к проверке кнопки
d_off:cbi PORTC, 0//выкл. светодиод
//проверка, нажата ли кнопка
check_again: ldi temp, PINC
sbrc temp,1//кнопка нажата?
rjmp begin//кнопка не нажата, переход в начало
rjmp check_again//кнопка нажата, проверка еще раз
//******************************************************Но беда в том, что не работает ни в реальности, ни в студии. Проверял несколько раз - ошибок не увидел.
-
Avatar
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
согласен, если кнопка одна. а если кнопок несколько? в этом случае удобнее именно читать в промежуточный регистр сразу все кнопки.Meteor писал(а):To Savelek
Для контроля кнопок лучше применять команды sbic и sbis. Это даст Вам возможность не делать записи в промежуточный регистр.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
_noise писал(а):1. сразу: антидребезг... не нужен? или которое в конце таковым считается?
2. ldi temp, PINC - ... ээээ?
3. простыню без пробелов неудобно читать и самому автору тоже (?); write-only, быстрее переписать с нуля заново, чем гадать: есть в этом где-то опечатка или нет там где-нибудь опечатки. какая уж там анализация алгоритма...
_noise писал(а):1. сразу: антидребезг... не нужен? или которое в конце таковым считается?
2. ldi temp, PINC - ... ээээ?
3. простыню без пробелов неудобно читать и самому автору тоже (?); write-only, быстрее переписать с нуля заново, чем гадать: есть в этом где-то опечатка или нет там где-нибудь опечатки. какая уж там анализация алгоритма...
1.Нет, это не антидребезг. Это проверка, нажата ли все еще кнопка. Без последних строк положение светодиода будет меняться много раз, пока кнопка нажата, а с этой строкой программа ждет, пока кнопку опустят.
2.Точно! Вот где ошибка! Надо было in использовать! Сам бы я ее не нашел... спасибо!
3.Хорошо, теперь я буду оформлять код правильно. Как я понял, в первой колонке метки(или пустота), во второй команды, в третьей аргументы, а в четвертой комментарии?
добавлено:
ой... извините пожалуйста за два поста... вроде нажал "редактировать", изменил, кликнул "отправить", и добавилось новое сообщение.
добавлено: отредактировал, прошил, все работает! Правда, как оказалось, антидребезг необходим - программа реагирует на нажатие кнопки через раз.
-
SII
- Вымогатель припоя
- Сообщения: 635
- Зарегистрирован: Пт янв 30, 2009 14:50:35
- Откуда: Солнечногорск
Savelek писал(а):3.Хорошо, теперь я буду оформлять код правильно. Как я понял, в первой колонке метки(или пустота), во второй команды, в третьей аргументы, а в четвертой комментарии?
Угу. А ещё не лениться добавлять пустые строки для разделения логически разных частей программы, ну и всё такое. В общем, оформлять красиво, не лениться в комментариях описывать тонкие моменты и др.
-
Avatar
