На Рис.5.7. приведена упрощенная модель памяти микроконтроллера РIС16F84. Память данных можно представить в виде картотечного шкафа, который имеет два отделения (банка). Внутри каждого отделения (банка) имеется ряд папок (регистров), имеющих по 8 бит данных.
В нашей картотеке присутствуют регистры двух типов. Некоторые из них имеют названия и выполняют специальные, заранее заданные функции. Такие регистры называются регистрами специального назначения SFR (Special Function Registers). Они предназначены для управления и отслеживания состояния микроконтроллера и его отдельных узлов. В частности, регистр с адресом Н’03’ является регистром STATUS, а с адресом Н’06’ представляет собой регистр PORTB параллельного порта В, связанного с выводами микроконтроллера RB0-RB7.
Рис. 5.7. Память данных микроконтроллера РIС16F84
Во всех микроконтроллерах требуется иметь возможность управлять состоянием отдельных битов регистра как для задания отдельных опций в SFR, так и для управления ножками портов ввода/вывода. В микроконтроллерах PIC для этих целей используются следующие команды:
BCF
Команда сброса бита регистра данных (Bit Clear File) позволяет программисту сбросить любой бит в любом регистре. Например, команда BCF Н’25’,5 сбрасывает 5 бит в регистре Н’25’. Состояние остальных битов при этом не изменяется.
BSF
Команда установки бита регистра данных (Bit Set File) позволяет программисту установить любой бит в любом регистре. Например. BSF H’31’,3 устанавливает 3 бит в регистре H’31’. Состояние остальных битов при этом не изменяется.
Остальные регистры, выделенные белым цветом, программист может называть по своему усмотрению, использовать для хранения данных общего назначения. В микроконтроллере РIС16F84 имеется 68 таких регистров общего назначения GPR (General Properties Registers), расположенных по адресам 0CH…4FH.
Из 14 бит, составляющих код команды 7 зарезервировано под адрес операнда в памяти данных. Семь битов дают 27 =128 адресов, т.е. страницу или банк, вмещающий в себя 128 регистров. Для преодоления этого ограничения нужно где-то взять дополнительные биты, чтобы расширить диапазон адресов. В микроконтроллере РIС16F84 для этой цели используется 5 бит регистра STATUS, который называется RP0 (Register Page 0). Этот бит выполняет роль 8-го разряда регистра адреса, расширяя адресное пространство до 256 регистров.
При RP0=0 происходит обращение к page 0 памяти данных (регистры 00Н – 4FН),
При RP0=1 происходит обращение к page 1 памяти данных (регистры 80Н – СFН).
На самом деле использование 1 банка в микроконтроллере РIС16F84 сведено к минимуму. Все 68 регистров GPR отображены на оба банка памяти, т.е по адресу H’n’ и H’(n+80Н)’ находится один и тот же регистр.