Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на Ассемблере для PIC.docx
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

Проверить бит на равенство нулю btfsc f,b

если бит B=1, то выполняется следующая инструкция

если бит B=0, то следующая инструкция пропускается

 

Проверить бит на равенство единице btfss f,b

если бит B=0, то выполняется следующая инструкция

если бит B=1, то следующая инструкция пропускается

Разберем фрагмент этого кода. По́мните, биты в регистре нумеруются справа налево и от нуля до семи, следовательно, первый бит в примере у нас равен нулю. Сделав первую проверку по команде BTFSC PORTB,1 обнаруживается совпадение и пропускается следующая команда – GOTO Metka1. Во второй проверке по команде BTFSS PORTB,1 обнаруживается несовпадение и выполняется следующая команда – GOTO Metka2.

 

Важный вывод. Комбинация команд "переходов по результатам проверки" и команд простых переходов позволяют разветвлять ход программы по нескольким сценариям, тем сам выполнять те или иные задачи.

Флаги как индикаторы событий

Под флагами понимаются значения некоторых битов в регистрах специального назначения. Такие биты в регистрах специального назначения после выполнения определенных команд могут устанавливаться в единицу (иначе говорят – флаг установлен или поднят), а могут опускаться в ноль (иначе – флаг опущен или сброшен).

 

В регистре STATUS с адресом H03 мы рассмотрим два флага:  

– флаг Z (второй бит) – флаг нулевого результата

если Z=1, то был нулевой результат выполнения команды

если Z=0, то ненулевой результат выполнения команды

– флаг C (нулевой бит) – флаг переноса-займа

если C=1, то было переполнение регистра (происходил перенос)

если C=0, то не было переполнения регистра (либо был заём)

 

Как работать с флагами?

Если в ходе программы предполагается переполнение регистра (или ожидается заём) и нам необходимо отслеживать эти события, то выполняем следующую последовательность:

 

STATUS EQU H0003 ; определяем регистр

C EQU H0000 ; определяем номер бита для флага C

Z EQU H0002 ; определяем номер бита для флага Z

; ============================================================

 

 

; Проверка на факт переноса

...

BCF STATUS,C ; опускаем флаг C в ноль

;... операции увеличения каких либо регистров

BTFSS STATUS,C ; делаем бит-проверку C-флага

; если бит C=0, то выполняется следующая инструкция

; если бит C=1, то следующая инструкция пропускается

; ============================================================

Установка флага из нуля в единицу подтверждает факт переноса.

 

; Проверка на факт займа

...

BSF STATUS,C ; поднимаем флаг C в единицу

;... операции уменьшения каких либо регистров

BTFSC STATUS,C ; делаем бит-проверку C-флага

; если бит C=1, то выполняется следующая инструкция

; если бит C=0, то следующая инструкция пропускается

; ============================================================

Установка флага из единицы в ноль подтверждает факт займа.

 

 

Ранее было обещано рассмотрение команды "MOVF KLOP,F" , в которой результат копирования помещается назад в регистр KLOP. Если регистр KLOP равен нулю, то после команды "MOVF KLOP,F" флаг Z из нуля поднимется в единицу; иначе из единицы опустится в ноль.

; ============================================================