Страница 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, ты не прав!

Можно пояснить в чем я не прав?
Добавлено: Вс янв 31, 2010 23:34:55
GP1
Просю пардону
это я глюканул, сейчас еще раз перечитал - мой косяк!
Добавлено: Пн фев 01, 2010 13:39:24
ibiza11

пардон принят

Добавлено: Вт фев 02, 2010 22:59:33
MTF
Уважаемые коты спецы по asm , возник вопрос , у меня обработчик кнопок в таймере T0 , есть длительное и короткое нажатие , чтобы отличать короткое от длинного , кнопки сидят на pd0 по pd3 , если кнопки не нажаты на входе будет лог 1 , придумал следующее ,
Код: Выделить всё
in tmp, pind ;читаем порт D
ori tmp, 0b11110000 ;уст в 1 лишних pd
короткое понятно как можно отследить
т.е 0x1111****
длинное, надо чтобы к коду нажатой кнопки прибавлялся 7 бит равный 0 , т.е 0x0111****
****код кнопки
как сложить правильно еще не дошло ????
Добавлено: Вт фев 02, 2010 23:15:26
Pooher
как сложить правильно
А что сложить то? 7-й бит обнулить?
Добавлено: Вт фев 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
Код: Выделить всё
; короткое нажатие
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 и наоборот)