Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
21.10.2004, 07:49
|
|
andrey tretyakov
Гость
|
Мк51: Торможу с делением двух чисел.
Помогите, пожалуйста.
Воощем попросили меня написать программу для МК51. Программировать я умею, но как то все больше на С++ (да, прикладник... ).
Но ничего, разобрался в его ассемблере, обсосал задачу.
Но встала единственная проблема:
После всех движений, в регистрах R0, R1 получается 16битное число, которое надо разделить на коэффициент 62. (Или 31). Делить 16 бит на степени 2ки я умею. Делить 8 бит на 8 бит - команда есть.
А как разделить 16 бит на 8 бит не являющейся степенью 2ки?
Подскажите, или в урл полезный ткните...
|
|
|
|
21.10.2004, 12:11
|
|
Супер-модератор
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,392
Сказал спасибо: 1,976
Сказали Спасибо 1,332 раз(а) в 580 сообщении(ях)
|
Re: Мк51: Торможу с делением двух чисел.
Сообщение от andrey tretyakov
|
Воощем попросили меня написать программу для МК51. Программировать я умею, но как то все больше на С++ (да, прикладник... ).
Но ничего, разобрался в его ассемблере, обсосал задачу.
Но встала единственная проблема:
После всех движений, в регистрах R0, R1 получается 16битное число, которое надо разделить на коэффициент 62. (Или 31). Делить 16 бит на степени 2ки я умею. Делить 8 бит на 8 бит - команда есть.
А как разделить 16 бит на 8 бит не являющейся степенью 2ки?
Подскажите, или в урл полезный ткните...
|
Вот нашел что-то в архивах:
Код:
|
;----------------------------------------------
; Деление 2-х байтного на 1 байтное без знака
; Исходное R6:R5, делитель R4, результат на
; месте исходного, остаток в аккумуляторе
;
; Портим:ACC,PSW,R4-R7 (R4 не меняется, R7=0)
; Время - 255 тактов макс
; Работать должна в 0 банке регистров!
; не проверяется деление на 0
;----------------------------------------------
;
; ЗЫ: интересно, а можно ли еще короче?
; наверное - предыдущий вариант был 260 тактов.
; (C)NML, 21-Sep-2000
;----------------------------------------------
DIV21B:
clr A ;
mov R7,#16 ;
clr C ;[7]
;
$L:
xch A,R5 ;
rlc A ;
xch A,R5 ;
xch A,R6 ;
rlc A ;
xch A,R6 ;
rlc A ;
cjne A,4,$+3 ; 4 = R4 банка 0
jc $W ;
subb A,R4 ;
$W:
cpl C ;
djnz R7,$L ;[15*16]
xch A,R5 ;
rlc A ;
xch A,R5 ;
xch A,R6 ;
rlc A ;
xch A,R6 ;
RET ;[8] Sum=[255] max ! с вызовом и возвратом
;---------------------------------------------- |
|
|
|
|
21.10.2004, 12:49
|
|
andrey tretyakov
Гость
|
Re: Мк51: Торможу с делением двух чисел.
Сообщение от nml
|
Вот нашел что-то в архивах:[code]
|
Спасибо большое!
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 04:43.
|
|