НПО Системы Безопасности
(499)340-94-73 График работы:
ПН-ПТ: 10:00-19:00
СБ-ВС: выходной

Главная » Периодика » Безопасность

0 ... 116117118119120121122 ... 159


bsf Result , Установка бита результата в 1

btfsc BitA , Если BitA = 1, то бит результата

, станет равен О

btfss BitB , Если BitB == О, то бит результата

, станет равен О

bcf Result Когда BitB & BitA =1 эта команда

, пропускается

Применение к двум битам операции ИЛИ аналогично применению операции И за исключением того, что ожидается получение О, когда оба бита равны 0. Когда один бит равен 1, бит результата будет также равен 1:

Result

, Установка бита результата в 0

btfss

BitA

, Если BitA 1=0, то бит результата

, станет равен 1

btfsc

BitB

, Если BitB == 1, то бит результата

, станет равен 1

Result

, Когда BitB 1 BitA = 0, эта команда

, пропускается

Существует два пути выполнения операции НЕ. Если операция заключается в инвертировании бита, код выглядит так:

movlw 1 << BitNumber , Инвертирование заданного бита

xorwf BitRegister, f

Если требуется инвертировать бит одного регистра в зависимости от значения тестируемого бита другого регистра, можно использовать следующий код:

bcf Result , Установка бита результата в О

btfss Bit , Если тестируемый бит равен 1

результат не изменяется bsf Result , Если тестируемый бит равен О

, результат инвертируется

УМНОЖЕНИЕ НА КОНСТАНТУ

Ниже представлен макрос, который позволяет выполнить умноже ние восьмибитной величины на константу:

multiply macro Register, , Умножение восьмибитной Value variable i = О, TValue, величины на константу lvalue = Value , Загрузка константы (множитель)

movf Register, w

movwf Temporary , Использование Temporary

в качестве сдвигаемой величины



jjlrf Temporary + 1

girf Product

girf Product + 1

while (1 < 8)

if ((TValue & 1) I = 0)

movf

Tempo ra ry

1, w

addwf

Product +

movf

Temporary,

addwf

Product, f

btfsc

STATUS, С

incf

Product +

endif

STATUS, С

Tempera ry,

Temporary

1, f

TValue =

TValue >> 1

1 = 1 + 1

endw endm

Если младший бит множителя равен 1, выполняется сложение

Сдвиг временного множимого в сторону старших разрядов

Сдвиг множителя в сторону младших разрядов, чтобы проверить следующий бит

ДЕЛЕНИЕ НА КОНСТАНТУ

Данная макрокоманда возвращает целое частное, полученное в результате деления переменной на константу:

divide macro Register, Value variable i = 0, TValue TValue = 0x010000 / Value movf Register, w

movwf Temporary + 1

Деление восьмибитной величины на константу Загрузка константы (делитель)

Использование Temporary

в качестве сдвигаемой величины

clrf clrf clrf

while (1 bcf

Tempo ra ry Quotient Quotient + < 8)

STATUS, С

rrf rrf

movf addwf

Сдвиг Temporary

в сторону младших битоЕ

Temporary + 1, Temporary, f ((TValue & 0x08000)

Temporary + 1, w Quotient + 1, f

1= 0) , Если младший бит равен 1, , выполняется сложение



movf addwf btfsc incf endif

TValue = TValue << 1

Temporary, w Quotient, f STATUS, С Quotient + 1,

1 = 1 endw movf btfsc incf movwf endm

Quotient + 1, Quotient, 7 Quotient + 1, Quotient

Сдвиг в сторону старшего разряда, чтобы проверить следующий бит.

Округление результата.



0 ... 116117118119120121122 ... 159