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

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

0 ... 113114115116117118119 ... 159


Условие перехода

Условия, подлежащие проверке

Фрагменты программ

А == В

А - в = 0

movf А w/movlw А subwf В, w/sublw В btfsc STATUS Z

goto Label , Переход если Z = 1

А = В

А - В = 0

rrovf A, w/movlh A subwf В w/sublw В btfss STATUS Z

goto Label , Переход если Z = 0

А > В

А - В < 0

movf B, w/movlw A subwf B, w/sublw В btfss STATUS С

qoto Label Переход, если С = 0

А >= В

А - В >= 0

movf В w/movlw В subwf A w/sublw В btfsc STATUS С

qoto Label Переход если С = 1

А < В

А - В < 0

movf В w/movlw В subwf A, w/sublw A btfss STATUS, С

qoto Label Переход если С = 0

А <= В

В - А > 0

movf A w/movlw A subwf A, w/movlw 8 btfsc STATUS, С

qoto Label Переход если С = 1

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