Страница 31 из 400

Добавлено: Пт янв 29, 2010 23:52:44
GP1
При каком значении ADCH:ADCL?

Добавлено: Сб янв 30, 2010 00:04:21
IfoR
GP1, при 0x0256. при 0x03FF также. При 0x0000 - 62 цикла. Если не считать RETI в конце, то 59\58 цикла.
Много?

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

Добавлено: Сб янв 30, 2010 00:17:15
GP1
Много?
Смотря что ты пытаешься анализировать.

зы: АСМ немного другое чем Си

Добавлено: Сб янв 30, 2010 00:38:16
IfoR
Ну это хоть радует. Ладно, всем спасибо. :)

Добавлено: Сб янв 30, 2010 02:33:32
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 , их и так мало ????

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

Кстати, 32 регистра -- это очень много ;)

Добавлено: Сб янв 30, 2010 03:09:41
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

Добавлено: Сб янв 30, 2010 21:03:48
GP1
_noise писал(а): в частности, есть вероятность, что на момент срабатывания прерывания в регистре (временной переменной) tmp было что-то нужное...

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

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

T1_OVF: 
    push tmp ; сохранили в стек 
    in tmp,sreg
    push  tmp
    ... 
tm_exit: 
    pop tmp
    out sreg,tmp
    pop tmp ; загрузили из стека обратно 
reti

Добавлено: Сб янв 30, 2010 22:20:39
MTF
спасибо за помощь GP1 и _noise
все заработало ,особенно после

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

 push tmp ; сохранили в стек 
    in tmp,sreg 
    push  tmp

Добавлено: Вс янв 31, 2010 17:05:51
ibiza11
GP1 писал(а):ibiza11, ты не прав! :wink:
Можно пояснить в чем я не прав?

Добавлено: Вс янв 31, 2010 23:34:55
GP1
Просю пардону :)
это я глюканул, сейчас еще раз перечитал - мой косяк!

Добавлено: Пн фев 01, 2010 13:39:24
ibiza11
:) пардон принят :wink:

Добавлено: Вт фев 02, 2010 22:59:33
MTF
Уважаемые коты спецы по asm , возник вопрос , у меня обработчик кнопок в таймере T0 , есть длительное и короткое нажатие , чтобы отличать короткое от длинного , кнопки сидят на pd0 по pd3 , если кнопки не нажаты на входе будет лог 1 , придумал следующее ,

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

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

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

  mov key , tmp 
т.е 0x1111****

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

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

как сложить правильно еще не дошло ????

Добавлено: Вт фев 02, 2010 23:15:26
Pooher
как сложить правильно
А что сложить то? 7-й бит обнулить?

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

andi tmp, 0b01111111

Добавлено: Вт фев 02, 2010 23:21:47
MTF
Pooher сложить полученный код нажатой клавиши tmp + обнуление 7 бита , результат поместить в key!!!!

Добавлено: Вт фев 02, 2010 23:52:32
Pooher
сложить полученный код нажатой клавиши tmp
То ли я дурак, то ли поздно уже, но я не понимаю сути. Кого с кем надо сложить?

Добавлено: Ср фев 03, 2010 10:50:20
MTF
Pooher
То ли я дурак, то ли поздно уже, но я не понимаю сути. Кого с кем надо сложить?
это я дурак и походу переработал вчера ,поэтому нес всякий бред ,
хотел различать длинное нажатие от короткого путем прибавления 0 в 7 бит , прошу прошение что заморочил тебе голову ,ты был прав насчет andi :oops:

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

; короткое нажатие 
    mov    key ,tmp
    
; длинное нажатие 
    mov    key ,tmp
    andi   key , 0b01111111   ;

Добавлено: Ср фев 03, 2010 16:44:30
knop
Никто не подскажет что за функция в асемблере
"com <переменная>"
????

Добавлено: Ср фев 03, 2010 16:59:58
Pooher
Это команда вычисления обратного кода.

Добавлено: Ср фев 03, 2010 18:47:00
SII
com -- это инверсия (1 заменяется на 0 и наоборот)