![]() | |
НПО Системы Безопасности (499)340-94-73 График работы: ПН-ПТ: 10:00-19:00 СБ-ВС: выходной ![]() ![]() |
Главная » Периодика » Безопасность 0 ... 113114115116117118119 ... 159
TFlag = 1 TCycles = TCycles - (Value * 3) else If ((TFlag 1= 0) U (((Value . 3) + 1) <= Tcycles)) bsf DlayCount, i TCycles = TCycles - ((Value . 3) +1) endif endif Value = Value >> 1 1 = 1-1 endw if (TCycles > 3) Error Задержки слишком велики для макроса" endif decfsz OlayCount, f goto $ - 1 endif while (TCycles > 1) goto $ + 1 TCycles = TCycles - 2 endw If (TCycles == 1) nop ; Следующий цикл, endif endm Ниже представлена 16-разрядная задержка. Каждая итерация требует пяти командных циклов. Длительность задержки может быть определена следующим образом: Delay =(InstructionCycleDelay / 5). Следует обратить внимание, что при инициализации переменных к переменной InstructionCycleDelay добавляется 256. movlw HIGH ((InstructionCycleDelay / 5) + 256) movwf HiCount movlw LOW ((InstructionCycleDelay / 5) + 256) Dlay addlw OxOFF ; Декрементирование счетчика, btfsc STATUS, Z decfsz HiCount, f ; Декрементирование старщего байта ; счетчика. goto Dlay ПОЛУЧЕНИЕ ДОПОЛНИТЕЛЬНОГО КОДА СОДЕРЖИМОГО РЕГИСТРА (ИЗМЕНЕНИЕ ЗНАКА) Операция дополнения до дв)х (получение дополнительного кода) без изменения содержимого регистра w выполняется следующим образом: comf Reg, f incf Reg, f Инвертирование битов в регистре. Добавление единицы для получения дополнительного кода. Этот фрагмент не должен применяться для регистров спецфункций. Дополнение для содержимого регистра w может быть получено для PIC-микроконтроллера младшего подсемейства с помощью следующих команд: addwf Reg, w : w = w + Reg. subwf Reg, w ; w = Reg - w. ; w = Reg - (w + Reg). ; w = -w. Б этом фрагменте разрешается использовать любой регистр, поскольку его содержимое не изменяется. Для PIC-микроконтроллера среднего подсемейства может применяться одна команда: sublw О ; W = О - W. ИНКРЕМЕНТИРОВАНИЕ/ДЕКРЕМЕНТИРОВАНИЕ СОДЕРЖИМОГО РЕГИСТРА W Для инкрементирования/декрементирования содержимого регистра W в микроконтроллерах младшего подсемейства, не имеющих команд addlw и sublw, удобна приведенная ниже подпрограмма. Б качестве регистра Reg способен выступать любой регистр, не меняющийся во время выполнения трех команд. Для микроконтроллеров младшего подсемейства может использоваться любой файловый регистр, поскольку они не обновляются обработчиком прерываний. Для инкрементирования содержимого регистра последовательность команд такова: xorlw OxOFF addwf Reg, w subwf Reg, w Обратный код (инвертирование). w = Reg + (w"OxOFF). w = Reg + ((Reg + ((Reg + ((wOxOFF)) "OxOFF) + 1. w = w + 1. Для декрементирования она изменяется: subwf Reg, w xorlw OxOFF addwf Req, w w = Reg + (2-OxOFF) + 1. Инвертирование. w = w - 1. «ВРАЩЕНИЕ HA МЕСТЕ» Приведенные ниже строки обеспечивают циклический сдвиг содержимого регистра. Эта подпрограмма дает возможность сдвига влево, сдвиг вправо выполняется аналогично. rlf rlf Register, w Register, f Загрузка старшего бита в перенос. Сдвиг влево, при котором старший бит становится младшим. 0 ... 113114115116117118119 ... 159 |