Страница 1 из 2
Atmega16 Деление 64 бит на 32 бит
Добавлено: Пт май 14, 2010 12:41:20
jeck
есть мега16 з частотой 16мгц, я измеряю частоту поданую на int0 не больше 2.5 кгц. щитая импульсы которые выдайот таймер Т1 за время прохождения импульса. мне нужно поделить 16000000 на 8000 . 8000 тактов =2 кгц. 16000000/8000= 2000 кгц . но я незнаю как мне програмно зделать деление таких больших чиселю. может есть примери я розберусь. смогу но пока не могу . я умею делить програмно 8 битные. может кто то скинет мне пример на ассемблере
Re: Atmega16 Деление 64 бит на 32 бит
Добавлено: Пт май 14, 2010 12:50:49
of_silence
Быстродействие критично? вариант в лоб - считать импульсы по входу за одну секунду.
Я занимался асмом пока на ARM не пошел. Писать деление 64 на 32 - это очень не просто.
Откопал у себя файл флоатинг-поинт операций, может ее использовать. Дело было давно, писал файл не я, так что работоспособность не гарантирую

Re: Atmega16 Деление 64 бит на 32 бит
Добавлено: Пт май 14, 2010 12:58:25
jeck
точность должна быть до сотих. 0.00 гц
Re: Atmega16 Деление 64 бит на 32 бит
Добавлено: Пт май 14, 2010 13:08:16
of_silence
Тогда пробуй флоатинг поинт, другого выхода я не вижу.
Re: Atmega16 Деление 64 бит на 32 бит
Добавлено: Пт май 14, 2010 13:12:10
akl
Re: Atmega16 Деление 64 бит на 32 бит
Добавлено: Пт май 14, 2010 13:21:41
jeck
Супер большая благодарность. ща розберусь и вбой. гристь препятствия.
Re: Atmega16 Деление 64 бит на 32 бит
Добавлено: Пт май 14, 2010 14:25:59
jeck
akl писал(а):Попробуйте сходить
сюда
а чуть подробней можна разжевать:
куда старший а куда младший? R0 - старший. R9- младий
и результат откуда брать из R20 R29 ИЛИ R0-R9
мне нужно только 3 регистра делимое и 3 регистра делитель 3
А как с знаком после коми 0.хх толька сотие нужни. откуда результат брать
Re: Atmega16 Деление 64 бит на 32 бит
Добавлено: Пт май 14, 2010 14:45:41
of_silence
умножение длинных чисел, что парой постов выше - это цельночисленная матиматика. То есть точек там нет. Соответственно придется придумать такие множители, чтобы результат получился в сотых долях (1 означает одну сотую и так далее). А точку просто на индикаторе поставить

Re: Atmega16 Деление 64 бит на 32 бит
Добавлено: Пт май 14, 2010 15:04:59
akl
R0 - старший. R9- младий
да, а также R10-старший...R19-младший
результат откуда брать из R20 R29 ИЛИ R0-R9
Как Вам удобнее. И там и там - результат.
Для получения результата с сотыми долями попробуйте загрузить 16'000'000*100
Re: Atmega16 Деление 64 бит на 32 бит
Добавлено: Пт май 14, 2010 15:37:01
jeck
dilnuk:
ldi wreg,0xf4 ;starwui ;16000000
ldi timeout,0x24 ;menwui ;Hz
ldi lcdstat,00 ;molodwui ;
clr R0
clr R1
clr R2
clr R3
clr R4
clr R5
clr R6
mov R7,wreg
mov R8,timeout
clr r9 ; Занесение делимого или множимого (опция)
clr R10
clr R11
clr R12
clr R13
clr R14
clr R15
clr R16
mov R17,T1 ; XL
mov R18,monades ; YH
mov R19,dekades ;YL ; Занесение делителя или множителя (опция)
rcall DIV
mov dekades,r29
mov monades,r28
mov t1,r27
ret
и результат не тот может ненада било очищать остальние регистри а оставить $60 $61 итд
Re: Atmega16 Деление 64 бит на 32 бит
Добавлено: Пт май 14, 2010 15:51:53
akl
Чему равны wreg и timeout, чтобы результат был не тот?
Re: Atmega16 Деление 64 бит на 32 бит
Добавлено: Пт май 14, 2010 16:02:29
jeck
mov R7,wreg ;0xf4` 16000000 mhz
mov R8,timeout ;0x24
clr r9 ;0x00
mov R17,T1 ;0
mov R18,monades ;1f
mov R19,dekades ;40 8000 циклов за герц
Re: Atmega16 Деление 64 бит на 32 бит
Добавлено: Пт май 14, 2010 16:21:20
akl
Вот результаты работы студии
16'000'000/8'000=2'000(07 D0)
и
16000000*100/8001=199975(03 0D 27)
Re: Atmega16 Деление 64 бит на 32 бит
Добавлено: Вс май 16, 2010 17:42:20
jeck
Простите но какой вы используете отладчик. Я просто не использую никакой потому и попробую и научусь. Дайте сылку или скиньте на мейл
jeck-wolf@mail.ru
Re: Atmega16 Деление 64 бит на 32 бит
Добавлено: Вс май 16, 2010 17:45:19
jeck
И прошу извените, я просто зделал маленькою ошыбку в коде программы потому и нето но завтра приеду на роботу и исправлю.
Re: Atmega16 Деление 64 бит на 32 бит
Добавлено: Вс май 16, 2010 18:45:12
akl
Здравствуйте. Я пользуюсь старенькой AVR STUDIO 3.21. К сожалению ATMEL давно уже убрал ее со своего сайта, но от этого она не стала хуже. Работает очень быстро и, за все время ее использования, не обнаружил в ней глюков. Видимо, в те времена подход к созданию отладчиков был основательным. Правда, она не поддерживает современные девайсы, но AVR-классик накрывает полностью. Посмотрите почту.
Re: Atmega16 Деление 64 бит на 32 бит
Добавлено: Вс май 16, 2010 18:45:45
GP1
а еще есть книжка Ю.Ревич "Практическое программирование микроконтроллеров ATMEL AVR на языке ассемблера",
там все подробно расписано, по-крайней мере мне очень помогло.

Re: Atmega16 Деление 64 бит на 32 бит
Добавлено: Вт май 18, 2010 13:17:30
jeck
супер! работает.
Всем большое спасибо !!!
Re: Atmega16 Деление 64 бит на 32 бит
Добавлено: Ср май 19, 2010 12:34:20
akl
jeck писал(а):точность должна быть до сотих. 0.00 гц
Получилось! Вот и ладненько. Но..., измерением одного периода точности до сотых не получить. Сходите на эту веточку,где показывается как можно измерить точно и быстро низкую частоту (если убрать из выражения множитель 60*k).
http://radiokot.ru/forum/viewtopic.php?f=20&t=24703
Re: Atmega16 Деление 64 бит на 32 бит
Добавлено: Ср май 19, 2010 17:13:16
of_silence
измерением одного периода точности до сотых не получить
Почему же?