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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Сообщение GP1 »

При каком значении ADCH:ADCL?
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
IfoR
Поставщик валерьянки для Кота
Сообщения: 2029
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Откуда: г. Тула
Контактная информация:

Сообщение IfoR »

GP1, при 0x0256. при 0x03FF также. При 0x0000 - 62 цикла. Если не считать RETI в конце, то 59\58 цикла.
Много?

_noise, 92.6 кб кода на C++. Это дебагер M68000. До сих пор не дописан. (Написан лишь дизассемблер, интерфейс, OpenGL экран)
По поводу моего стиля не волнуйся. Я по разному умею названия писать и в разных местах применяю разный стиль. :)
---
_noise,
Во первых: А код пишу не первый день (и не первую неделю, и не первый месяц, и не первый год) и мне уже как бы проще так писать.
"Автоматическая генерация" уже автоматом входит, т.к. это сокращение от нормальных переменных и сссс9898394 я врядли напишу ибо это не на что не похоже. Не сокращается тогда, когда она состоит из одного слова. Либо из коротких двух. Координата Y разделяющая поля на экране CPU и Memory -> YCM. Ну и в таком плане. :)
Во вторых: Уж поверь, через полгода я могу узнать что я делал в коде через минуту максимум. Единственное что приходит в голову - это переписать весь тот бред что я написал тогда с 0-ля.
В третих: Ты хочешь сказать, что сможешь написать этот проект ОДИН за короткое время не прерываясь через каждые 30 кб кода на полгода в отдых (от монотонности)? Ну что же, поздравляю. Я так не могу всё время посвещать только написанию кода одной программы.
В четвёртых: Ты сам спросил.
Последний раз редактировалось IfoR Сб янв 30, 2010 00:31:26, всего редактировалось 1 раз.
Изображение
/dev/urandom - гигабайты информации.

OS: openSUSE 13.2 (x86_64)
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Сообщение GP1 »

Много?

Смотря что ты пытаешься анализировать.

зы: АСМ немного другое чем Си
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
IfoR
Поставщик валерьянки для Кота
Сообщения: 2029
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Откуда: г. Тула
Контактная информация:

Сообщение IfoR »

Ну это хоть радует. Ладно, всем спасибо. :)
Изображение
/dev/urandom - гигабайты информации.

OS: openSUSE 13.2 (x86_64)
Аватара пользователя
MTF
Нашел транзистор. Понюхал.
Сообщения: 179
Зарегистрирован: Чт янв 07, 2010 11:25:12
Откуда: Москва

Сообщение MTF »

по поводу таймера!!!!
а что если я буду использую таймер ,без деления

например вот так:

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

T1_OVF:
;код который работает каждые 0,000064 с
   ***********
   ***********
   ***********
   inc  tmkey       ; счетчик от 0 до 256
   breq   tm_256  ; если  0 то значит  таймер отработал 255 раз , т.е  далее можно разместить код под срабатывание как с делением на 256 CK/256   
   rjmp   tm_exit
tm_256:     ;   
;код который работает каждые 0,016384 с
   ***********
   ***********
   ***********
tm_exit:   
reti



вопрос: так можно делать ????
если можно то что можно сделать что бы не использовать регистр для
tmkey , их и так мало ????
Последний раз редактировалось MTF Сб янв 30, 2010 02:52:13, всего редактировалось 1 раз.
SII
Вымогатель припоя
Сообщения: 635
Зарегистрирован: Пт янв 30, 2009 14:50:35
Откуда: Солнечногорск

Сообщение SII »

Так делать в принципе можно, однако без регистра не обойтись: АТмега не умеет обрабатывать данные прямо в памяти. Поэтому в реальности надо сохранить в стеке регистр, загрузить в него значение счётчика, увеличить, сохранить обратно, восстановить старое значение регистра... В общем, кода нужно в пять раз больше, чем у Вас :)

Кстати, 32 регистра -- это очень много ;)
Аватара пользователя
MTF
Нашел транзистор. Понюхал.
Сообщения: 179
Зарегистрирован: Чт янв 07, 2010 11:25:12
Откуда: Москва

Сообщение MTF »

_noise спасибо за понимание насчет регистров хоть их и 32 ,но всегда нехватает , просто раньше с переменными не имел особо дело, теперь понял ,что делать когда кончаются регистры !!!!

немного доработал ваш код вот что получилось !!!

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


tmkey:   .byte   1

T1_OVF:
;код который работает каждые 0,000064 с
   ***********
   ***********
   lds   tmp, tmkey
   inc   tmp
   sts   tmkey, tmp
   tst   tmp
   brne tm_exit   ;   если  0 то значит  таймер отработал 255 раз , т.е  далее можно разместить код под срабатывание как с делением на 256 CK/256   
;код который работает каждые 0,016384 с
   ***********
   ***********
   ***********
tm_exit:   
reti
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Сообщение GP1 »

_noise писал(а):в частности, есть вероятность, что на момент срабатывания прерывания в регистре (временной переменной) tmp было что-то нужное...

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

добавлю:
в момент вызова обработчика прерывания в SREG тоже кое-какие флаги имеются, поэтому чтобы потом не ломать мозги "почему так получается" сразу дописать 4 строчки в обработчик

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

T1_OVF: 
    push tmp ; сохранили в стек
    in tmp,sreg
    push  tmp
    ...
tm_exit:
    pop tmp
    out sreg,tmp
    pop tmp ; загрузили из стека обратно
reti
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
MTF
Нашел транзистор. Понюхал.
Сообщения: 179
Зарегистрирован: Чт янв 07, 2010 11:25:12
Откуда: Москва

Сообщение MTF »

спасибо за помощь GP1 и _noise
все заработало ,особенно после

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

 push tmp ; сохранили в стек 
    in tmp,sreg
    push  tmp
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Сообщение ibiza11 »

GP1 писал(а):ibiza11, ты не прав! :wink:
Можно пояснить в чем я не прав?
Ставим плюсы: )
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Сообщение GP1 »

Просю пардону :)
это я глюканул, сейчас еще раз перечитал - мой косяк!
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Сообщение ibiza11 »

:) пардон принят :wink:
Ставим плюсы: )
Аватара пользователя
MTF
Нашел транзистор. Понюхал.
Сообщения: 179
Зарегистрирован: Чт янв 07, 2010 11:25:12
Откуда: Москва

Сообщение MTF »

Уважаемые коты спецы по asm , возник вопрос , у меня обработчик кнопок в таймере T0 , есть длительное и короткое нажатие , чтобы отличать короткое от длинного , кнопки сидят на pd0 по pd3 , если кнопки не нажаты на входе будет лог 1 , придумал следующее ,

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

    in    tmp, pind                 ;читаем  порт  D 
    ori   tmp, 0b11110000     ;уст в 1 лишних pd 


короткое понятно как можно отследить

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

  mov key , tmp 

т.е 0x1111****

длинное, надо чтобы к коду нажатой кнопки прибавлялся 7 бит равный 0 , т.е 0x0111****

****код кнопки

как сложить правильно еще не дошло ????
Аватара пользователя
Pooher
Мучитель микросхем
Сообщения: 491
Зарегистрирован: Вс янв 07, 2007 01:45:48
Откуда: Российская Федерация, будь она неладна...

Сообщение Pooher »

как сложить правильно

А что сложить то? 7-й бит обнулить?

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

andi tmp, 0b01111111
Научить нельзя, можно научиться. Пифагор.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
Аватара пользователя
MTF
Нашел транзистор. Понюхал.
Сообщения: 179
Зарегистрирован: Чт янв 07, 2010 11:25:12
Откуда: Москва

Сообщение MTF »

Pooher сложить полученный код нажатой клавиши tmp + обнуление 7 бита , результат поместить в key!!!!
Аватара пользователя
Pooher
Мучитель микросхем
Сообщения: 491
Зарегистрирован: Вс янв 07, 2007 01:45:48
Откуда: Российская Федерация, будь она неладна...

Сообщение Pooher »

сложить полученный код нажатой клавиши tmp

То ли я дурак, то ли поздно уже, но я не понимаю сути. Кого с кем надо сложить?
Научить нельзя, можно научиться. Пифагор.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
Аватара пользователя
MTF
Нашел транзистор. Понюхал.
Сообщения: 179
Зарегистрирован: Чт янв 07, 2010 11:25:12
Откуда: Москва

Сообщение MTF »

Pooher
То ли я дурак, то ли поздно уже, но я не понимаю сути. Кого с кем надо сложить?

это я дурак и походу переработал вчера ,поэтому нес всякий бред ,
хотел различать длинное нажатие от короткого путем прибавления 0 в 7 бит , прошу прошение что заморочил тебе голову ,ты был прав насчет andi :oops:

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

; короткое нажатие 
    mov    key ,tmp
   
; длинное нажатие
    mov    key ,tmp
    andi   key , 0b01111111   ;
knop
Родился
Сообщения: 3
Зарегистрирован: Ср июл 29, 2009 23:17:38

Сообщение knop »

Никто не подскажет что за функция в асемблере
"com <переменная>"
????
Аватара пользователя
Pooher
Мучитель микросхем
Сообщения: 491
Зарегистрирован: Вс янв 07, 2007 01:45:48
Откуда: Российская Федерация, будь она неладна...

Сообщение Pooher »

Это команда вычисления обратного кода.
Научить нельзя, можно научиться. Пифагор.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
SII
Вымогатель припоя
Сообщения: 635
Зарегистрирован: Пт янв 30, 2009 14:50:35
Откуда: Солнечногорск

Сообщение SII »

com -- это инверсия (1 заменяется на 0 и наоборот)
Ответить

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