впровадження програмного забезпечення для Відділу в ЦГЗ

K

kirgizz

Guest
Привіт,

хтось може дати мені відповідь, або парою наближення формули для здійснення відділом в програмне забезпечення?(-> За допомогою асемблера)

Про застосування:
Мені потрібно купувати частоти вхідного TTL-сигналів.Я використовую таймер і вимірювати період вхідного сигналу.Потім виміряне значення ділиться на задане значення (DSP годин).У моєму проекті використовується 32-розрядний фіксованій точці даних.Зміряне значення і є знаком дільник цілих чисел.
Я думаю, мої ЦГЗ ROM основі таблиці взаємної цінності, але вона недостатньо точна.Думаю, воно може бути реалізовано шляхом перекладу, додавання та множення.
Чи не так??

Спасибо заранее

 
Привіт!

Є багато алгоритмів програмного забезпечення Відділу по Інтернету.
Для прикладу спробуйте наступні посилання:
http://www.bearcave.com/software/divide.htm
http://www.sccs.swarthmore.edu/users/03/jcorder/CS23/lab3/extensions.html

Приклади наведені в С, але вони дозволять вам зрозуміти, як здійснювати її в Асамблеї, тому що алгоритми дуже легко.

З повагою!

 
Спасибо Akorostel,

вона була корисна.Я знаю, що зараз правильний напрямок.

 
Дивіться з цим кодом.

Word32 L_div_s (Word32 var1, Word32 var2)
(
Word32 var_out = 0;
Word32 ітерації;
Word32 l_num;
Word32 L_denom;

If ((var1> var2) | | (var1 <0) | | (var2 <0))
(
Е ( "відділ помилка var1 =% D var2 =% D \ N", var1, var2);
Exit (0);
)

якщо (var2 == 0)
(
Е ( "Поділ на 0, фатальна помилка \ п");
Exit (0);
)

якщо (var1 == 0)
(
var_out = 0;
)
ще
(
якщо (var1 == var2)
(
var_out = MAX_32;
)
ще
(
L_num = var1;
L_denom = var2;

для (ітерацій = 0; ітерації <31; ітерації )
(
var_out <<= 1;
L_num <<= 1;

якщо (l_num> = L_denom)
(
L_num = L_sub (l_num, L_denom);
var_out = L_add (var_out, 1);
)
)
)
)

повернення (var_out);
)

Word32 L_sub (Word32 L_var1, Word32 L_var2)
(
Word32 L_var_out;

L_var_out = L_var1 - L_var2;

якщо (((L_var1 ^ L_var2) & MIN_32)! = 0)
(
If ((L_var_out ^ L_var1) & MIN_32)
(
L_var_out = (L_var1 <0L)?MIN_32: MAX_32;
Переповнення = 1;
)
)
повернення (L_var_out);
)

Word32 L_add (Word32 L_var1, Word32 L_var2)
(
Word32 L_var_out;

L_var_out = L_var1 L_var2;

якщо (((L_var1 ^ L_var2) & MIN_32) == 0)
(
If ((L_var_out ^ L_var1) & MIN_32)
(
L_var_out = (L_var1 <0)?MIN_32: MAX_32;
Переповнення = 1;
)
)
повернення (L_var_out);
)

 

Welcome to EDABoard.com

Sponsor

Back
Top