![]() | |
НПО Системы Безопасности (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:
Существует два пути выполнения операции НЕ. Если операция заключается в инвертировании бита, код выглядит так: 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)
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 |