КРАМ писал(а):Что значит определить?
Вам тоже надо как процессору объяснять))
yor писал(а):Не подскажете идею, как определить старший единичный бит в байте? btfss-ами долго и муторно получается.
Определить позицию старшего единичного бита в байте, для вычисления его веса (^2), 128 64 ... 2 1, 16f648.
[uquote="BOB51",url="/forum/viewtopic.php?p=4596763#p4596763"]Почему долго? Одного btfss (или btfsc -зависит от логики задачи) вполне достаточно.[/uquote] Начинаем со старшего, и в худшем случае пока до младшего дойдёшь, 8 циклов. Наоборот смысла нет. Да ещё и восемь раз повторять эти btfss с изменяющимся номером бита. В смысле, в цикл затруднительно засунуть, в связи со сложностью динамической смены номера бита, команд получится много.
[uquote="BOB51",url="/forum/viewtopic.php?p=4596763#p4596763"]Альтернатива - сдвиг RLF Rx,w с последующей проверкой флага C регистра status.[/uquote]Спасибо, я до этого тоже уже додумался, но те же 8 циклов
А больше, похоже, никак, в один присест не получится. Хотя, если учесть последующие действия, может чего и придумается. Это для того, чтобы из
Код: Выделить всё
001xxxxx -> позиция №5 -> вес 32 -> 32*2=64 -> преобразовать в три младшие бита регистра OPTION PS[2:0] для предделителя TMR0.
То есть в этом случае 64-> PS[2:0]=101
Код: Выделить всё
PS<2:0>: Prescaler Rate Select bits Bit Value TMR0
000 1:2
001 1:4
010 1:8
011 1:16
100 1:32
101 1:64
110 1:128
111 1:256
И это мне ещё повезло, что остальные биты OPTION всегда нулевые будут, и можно просто писать