Однокристальные PIC-микроконтроллеры. Технология разработки и отладки программ для микроконтроллеров PIC16, страница 10

movlw  0xFF           ; загрузить число  FFh  в регистр W

movwf  PORTB      ; переслать содержимое регистра W в регистр PORTB

rlf   PORTB, F        ; сдвиг содержимого регистра  PORTB  влево

rlf   PORTB, F        ; сдвиг содержимого регистра  PORTB  влево

rlf   PORTB, F        ; сдвиг содержимого регистра  PORTB  влево

Задание 2. Запишите коды примера в базовую программу, выполните ее компилирование и проверьте работу в пошаговом режиме. Выполните проверку сдвигов содержимого регистра  PORTB  «вручную» и сравните результаты.

3.11.  Команды сброса и установки битов

Команда очистки (сброса) бита  bcf  f, d  и команда установки бита  bsf  f, d  используются для работы с отдельными битами в регистрах. Параметр  b  означает номер бита, с которым производится операция, и может принимать значения от 0 до 7.

Вот пример программы, которая включает и выключает светодиод  VD7, присоединенный к 7-му разряду порта B демонстрационного МКУ:

clrf  PORTB         ; вывести нули в порт B (выключить светодиоды)

bsf   PORTB, 7    ; вывести 1 в 7-й разряд  порта  B  (зажечь  VD7)

bcf   PORTB, 7    ; вывести 0 в 7-й разряд порта  В  (погасить  VD7)

     Задание1.  Занесите пример  в базовую программу, выполните ее компилирование и проверьте работу с помощью симулятора в пошаговом режиме.

3.11.   Исследование команд условных переходов

В МК PIC16F84A отсутствуют команды условных переходов, подобные командам МК семейства MCS-51. Вместо них применяются такие, которые позволяют пропустить выполнение следующей команды программы. Имеется два варианта подобных команд.

Первый вариант – это команды инкремента  incfsz  f,d  и декремента decfsz f,d с пропуском следующей команды при нулевом результате. С точки зрения обработки данных они работают аналогично командам  incf  f,d  и  decf  f,d. Основное отличие от этих команд заключается в том, что при нулевом результате выполнения команды  incfsz  f,d  или  decfsz  f,d  пропускается следующая за ней команда. Это означает, что команды  incfsz  f,d  и  decfsz  f,d  могут использоваться для организации программных циклов. Другая особенность этих команд состоит в том, что они не влияют на флаги регистра STATUS.

Вот типичный пример использования цикла:

movlw  .10               ; Загрузить число 10 в рабочий регистр W

movwf   Temp1       ; Переслать содержимое W регистр Temp1

loop

decfsz   Temp1, F    ; Декремент регистра Temp1

goto   loop                ; Повторение цикла 10 раз

movf  Temp1, W     ; Переслать Temp1 в регистр  W

movwf   PORTB      ; Вывод содержимого W в порт B

     Задание 1.  Занесите пример  в базовую программу, выполните ее компилирование и проверьте работу с помощью симулятора  в пошаговом режиме. Какая информация будет на выводах порта  B, какие светодиоды будут гореть?                 

Второй вариант команд перехода – это команды  btfsc  f, b  и  btfss f, b.                    

Эти команды проверяют состояние заданного бита в любом регистре, и в зависимости от результата пропускают или нет следующую команду. Параметр  b  означает номер бита, который проверяется, и может принимать значения от 0 до 7.

Команда  btfsc  f, b  проверяет заданный бит регистра на нуль и если это выполняется, то следующая за ней команда программы пропускается.

Команда  btfss  f, b проверяет, равен ли заданный бит единице, и если это так, то следующая за ней команда программы пропускается.

Вот простой пример для заданного МКУ:          

clrf  PORTB                ; выключить  все светодиоды

loop

btfsc    PORTA,2         ; Проверить бит с номером 2 на входе порта A

goto  loop                     ; цикл ожидания появления низкого уровня

; на входе порта А

bsf  PORTB,7              ; Включить светодиод  VD7, если  RA2 = 0

В этом примере проверяется 2-й разряд порта A и, если на этом выводе будет низкий уровень, включается светодиод VD7 (см. рисунок).