реклама на сайте
подробности

 
 
> Помогите придумать алгоритм деления!, 1/n
marcinio
сообщение Dec 15 2007, 21:50
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 42
Регистрация: 3-07-07
Пользователь №: 28 861



Задание примерно такое:
1<n<10000, 1<x<10000, n,x - целое число
надо узнать значения 1/n и x/n, n будет инкрементироваться каждую 0,001с, х выщитает программа
Как мне етого добиться с Atmega8535? 05.gif

Сообщение отредактировал marcinio - Dec 15 2007, 21:58
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Gogan
сообщение Dec 16 2007, 19:56
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 83
Регистрация: 25-10-07
Из: Киев
Пользователь №: 31 728



Цитата(marcinio @ Dec 15 2007, 23:50) *
Задание примерно такое:
1<n<10000, 1<x<10000, n,x - целое число
надо узнать значения 1/n и x/n, n будет инкрементироваться каждую 0,001с, х выщитает программа
Как мне етого добиться с Atmega8535? 05.gif

Для начала нужно решить, сколько знаков после запятой хочется получить. Например 4, тогда делить нужно 10000/n, результат будет от 1 до 10000, думаю дальше понятно что с ним делать.
Используем двубайтное число (unsigned int).
А готовый асемблеровский код можно легко получить если посмотреть откопиленный код с помощью CodeVison. Вот что у меня получилось
(код на C:
unsigned int a,b;
...
a=432;
b=10000/a; )
Код
main:

;......

; a=432 (a хранится в регистрах R4,R5)
    LDI  R30,LOW(432)
    LDI  R31,HIGH(432)
    MOVW R4,R30

;b=10000/a (b хранится в регистрах R6,R7)
    MOVW R30,R4
    LDI  R26,LOW(10000)
    LDI  R27,HIGH(10000)
    RCALL __DIVW21U
    MOVW R6,R30

; ......

rjmp main


__DIVW21U:
    CLR  R0
    CLR  R1
    LDI  R25,16
__DIVW21U1:
    LSL  R26
    ROL  R27
    ROL  R0
    ROL  R1
    SUB  R0,R30
    SBC  R1,R31
    BRCC __DIVW21U2
    ADD  R0,R30
    ADC  R1,R31
    RJMP __DIVW21U3
__DIVW21U2:
    SBR  R26,1
__DIVW21U3:
    DEC  R25
    BRNE __DIVW21U1
    MOVW R30,R26
    MOVW R26,R0
    RET
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 01:26
Рейтинг@Mail.ru


Страница сгенерированна за 0.01379 секунд с 7
ELECTRONIX ©2004-2016