Atmega16 Деление 64 бит на 32 бит
- Сообщения: 9
- Зарегистрирован: Пт май 14, 2010 12:09:21
есть мега16 з частотой 16мгц, я измеряю частоту поданую на int0 не больше 2.5 кгц. щитая импульсы которые выдайот таймер Т1 за время прохождения импульса. мне нужно поделить 16000000 на 8000 . 8000 тактов =2 кгц. 16000000/8000= 2000 кгц . но я незнаю как мне програмно зделать деление таких больших чиселю. может есть примери я розберусь. смогу но пока не могу . я умею делить програмно 8 битные. может кто то скинет мне пример на ассемблере
- Реклама
- Сообщения: 79
- Зарегистрирован: Сб май 08, 2010 09:33:42
Быстродействие критично? вариант в лоб - считать импульсы по входу за одну секунду.
Я занимался асмом пока на ARM не пошел. Писать деление 64 на 32 - это очень не просто.
Откопал у себя файл флоатинг-поинт операций, может ее использовать. Дело было давно, писал файл не я, так что работоспособность не гарантирую
Я занимался асмом пока на ARM не пошел. Писать деление 64 на 32 - это очень не просто.
Откопал у себя файл флоатинг-поинт операций, может ее использовать. Дело было давно, писал файл не я, так что работоспособность не гарантирую
- Вложения
-
- math_float.asm
- (14.65 КБ) 497 скачиваний
- Сообщения: 9
- Зарегистрирован: Пт май 14, 2010 12:09:21
- Сообщения: 79
- Зарегистрирован: Сб май 08, 2010 09:33:42
- Реклама
- Сообщения: 9
- Зарегистрирован: Пт май 14, 2010 12:09:21
Супер большая благодарность. ща розберусь и вбой. гристь препятствия.
- Сообщения: 9
- Зарегистрирован: Пт май 14, 2010 12:09:21
а чуть подробней можна разжевать:akl писал(а):Попробуйте сходить сюда
куда старший а куда младший? R0 - старший. R9- младий
и результат откуда брать из R20 R29 ИЛИ R0-R9
мне нужно только 3 регистра делимое и 3 регистра делитель 3
А как с знаком после коми 0.хх толька сотие нужни. откуда результат брать
- Сообщения: 79
- Зарегистрирован: Сб май 08, 2010 09:33:42
умножение длинных чисел, что парой постов выше - это цельночисленная матиматика. То есть точек там нет. Соответственно придется придумать такие множители, чтобы результат получился в сотых долях (1 означает одну сотую и так далее). А точку просто на индикаторе поставить 
R0 - старший. R9- младий
да, а также R10-старший...R19-младший
результат откуда брать из R20 R29 ИЛИ R0-R9
Как Вам удобнее. И там и там - результат.
Для получения результата с сотыми долями попробуйте загрузить 16'000'000*100
да, а также R10-старший...R19-младший
результат откуда брать из R20 R29 ИЛИ R0-R9
Как Вам удобнее. И там и там - результат.
Для получения результата с сотыми долями попробуйте загрузить 16'000'000*100
- Сообщения: 9
- Зарегистрирован: Пт май 14, 2010 12:09:21
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 итд
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 итд
- Сообщения: 9
- Зарегистрирован: Пт май 14, 2010 12:09:21
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 циклов за герц
mov R8,timeout ;0x24
clr r9 ;0x00
mov R17,T1 ;0
mov R18,monades ;1f
mov R19,dekades ;40 8000 циклов за герц
Вот результаты работы студии
16'000'000/8'000=2'000(07 D0)
и
16000000*100/8001=199975(03 0D 27)
16'000'000/8'000=2'000(07 D0)
и
16000000*100/8001=199975(03 0D 27)
- Сообщения: 9
- Зарегистрирован: Пт май 14, 2010 12:09:21
Простите но какой вы используете отладчик. Я просто не использую никакой потому и попробую и научусь. Дайте сылку или скиньте на мейл jeck-wolf@mail.ru
- Сообщения: 9
- Зарегистрирован: Пт май 14, 2010 12:09:21
И прошу извените, я просто зделал маленькою ошыбку в коде программы потому и нето но завтра приеду на роботу и исправлю.
Здравствуйте. Я пользуюсь старенькой AVR STUDIO 3.21. К сожалению ATMEL давно уже убрал ее со своего сайта, но от этого она не стала хуже. Работает очень быстро и, за все время ее использования, не обнаружил в ней глюков. Видимо, в те времена подход к созданию отладчиков был основательным. Правда, она не поддерживает современные девайсы, но AVR-классик накрывает полностью. Посмотрите почту.
а еще есть книжка Ю.Ревич "Практическое программирование микроконтроллеров ATMEL AVR на языке ассемблера",
там все подробно расписано, по-крайней мере мне очень помогло.
там все подробно расписано, по-крайней мере мне очень помогло.
- Сообщения: 9
- Зарегистрирован: Пт май 14, 2010 12:09:21
Получилось! Вот и ладненько. Но..., измерением одного периода точности до сотых не получить. Сходите на эту веточку,где показывается как можно измерить точно и быстро низкую частоту (если убрать из выражения множитель 60*k).jeck писал(а):точность должна быть до сотих. 0.00 гц
http://radiokot.ru/forum/viewtopic.php?f=20&t=24703
- Сообщения: 79
- Зарегистрирован: Сб май 08, 2010 09:33:42
Почему же?измерением одного периода точности до сотых не получить



