Эта команда сдвигает содержимое регистра данных на один бит вправо, при этом вдвигаемый бит считывается из флага, значение которого затем в соответствии с выдвинутым битом.
Учитывая эту особенность команды, программист может выполнить нормальный сдвиг вправо с загрузкой в старший бит нуля (Рис. 7.3), если сбросить флаг С перед выполнением команды сдвига.
BCF STATUS,C ; сброс флага С регистра STATUS
RRF H’30;сдвиг регистра 30Н вправо

Рис.7.3. Циклический сдвиг содержимого регистра данных вправо
Пример 3: побитовая проверка данных.
Предположим, состояние 8 кнопок сотового телефона сохранено в регистре данных ТЕМР. Требуется определить самую левую замкнутую кнопку, считая, что замкнутой кнопке соответствует 1, а разомкнутой-0. Были считаны следующие состояния:

Подсчет сдвигов производится в регистре KEY_COUNT. Флаг переноса перед каждым сдвигом сбрасывается, вдвигается всегда лог.0. В какой-то момент остаток становится равным нулю и процесс завершается.
00010111 (1)→ 00001011(2)→00000101(3)→00000010(4)→00000001(5)→00000000(6)
Содержимое регистра KEY_COUNT число 6 (b’00001100’).
;*********************************************
;HIGH_BIT–Поиск самого старшего бита в регистре
;*********************************************
SWICH_PATERN EQU 26H
KEY_COUNT EQU 27H
;------------------------------------------------------------------
HIGH_BIT
CLRW ; обнуляем счетчик
LOOP
MOVFW H’26’ ; остаток равен нулю?
BTFSC STATUS,Z ; ЕСЛИ да
GOTO EXIT ; ТО выходим из цикла
BCF STATUS,C ; ИНАЧЕ сбрасываем флаг С
RRF SWICH_PATERN,f ; сдвигаем регистр вправо
ADDLW 1 ; увеличиваем счетчик на 1
GOTO LOOP ; и выполняем следующий сдвиг
EXIT
MOVWF KEY_COUNT ; номер бита в KEY_COUNT