Флаг нуля
Бит 2 регистра STATUS используется в качестве флага нуля Z (от англ. zero — ноль). Этот бит устанавливается, если результат выполнения команды равен нулю, и сбрасывается в противном случае.
В отличие от многих других микроконтроллеров, в микроконтроллерах PIC отсутствуют команды, специально предназначенные для сброса или установки флагов, подобные команде sec, имеющейся в микроконтроллерах семейств 6800/5/11 компании Motorola.
Тем не менее, как видно из Рис. 4.7, к регистру STATUS можно обращаться как к регистру данных с адресом h’03’. Поэтому любая команда, которая изменяет содержимое регистра данных, может в принципе использоваться для изменения состояния флагов. Однако существует определенная проблема, заключающаяся в том, что многие из этих команд сами по себе влияют на состояние одного или нескольких флагов (см., к примеру, Табл. 5.1 на стр. 129) и таким образом переопределяют значение, являющееся результатом выполнения команды. Если мы, к примеру, попробуем сбросить все флаги с помощью команды очистки регистра сlrf 3 (см. Табл. 5.2 на стр. 131), то в результате флаг Z окажется установленным в 1, сообщая о том, что результат операции равен нулю! Для изменения отдельных битов регистра STATUS рекомендуется использовать команды сброса/установки бита регистра данных bcf и bsf (см. Табл. 5.2), поскольку сами по себе эти команды не влияют на состояние флагов. Например, команда bsf 3,0 (установить 0-й бит регистра h’03’) эквивалентна команде sec, а команда bcf 3,2 (сбросить 2-й бит регистра h’03’) сбросит флаг Z.
Назначение более специализированных флагов, размещающихся в 3-м и 4-м битах, будет описано в последующих главах. В общих чертах флаг (Power Down) сбрасывается при выполнении команды sleep, которая используется для выключения тактового генератора и перевода микроконтроллера в режим ожидания с малым потреблением (< 1 мкА). Флаг (Time Out) сбрасывается при наступлении тайм-аута сторожевого таймера[70]. Оба этих флага доступны только для чтения — их состояние не может быть изменено программно. После сброса указанные флаги устанавливаются в 1.
Все эти биты называются флагами или, иногда, семафорами, поскольку они сигнализируют о том или ином результате выполнения команды. Бит 5 этого регистра несколько отличается от остальных, так как на его состояние не влияют происходящие события. Наоборот, флаг RP0 используется программистом для изменения состояния процессора. Чтобы проиллюстрировать назначение этого бита-переключателя, нам потребуется более подробно изучить структуру памяти данных микроконтроллера PIC16F84.
На Рис. 4.7 приведена упрощенная модель памяти данных микроконтроллера PIC16F84. Эту память данных можно представить в виде картотечного шкафа, который в данном случае имеет два отделения (банка). Внутри каждого отделения имеется некоторое количество папок, или файлов, каждый из которых содержит восемь битов данных. Наравне с этим термином также используется термин регистр[71].
Рис. 4.7. Упрощенная структура памяти данных микроконтроллера PICI6F84
Вообще говоря, в нашей картотеке присутствуют файлы двух типов. Некоторые из этих файлов имеют названия и выполняют специальные, заранее заданные функции. Такие файлы называются регистрами специального назначения (РСН). РСН используются для управления и отслеживания состояния микроконтроллера и его различных периферийных устройств. В частности, как мы уже видели на Рис. 4.6, регистр с адресом h’03’ является регистром STATUS, а регистр с адресом h’06’ представляет собой регистр данных параллельного порта В, связанного с выводами RB7…RB0 (обычно обозначаемыми как RB[7:0]) микроконтроллера, как показано на Рис. 4.1.
Остальные файлы, выделенные на рисунке серым цветом, программист может называть по своему усмотрению и использовать для хранения пользовательских данных общего назначения. В микроконтроллере PIC16F84 имеется 68 таких регистров общего назначения (РОН), адреса которых лежат в диапазоне h’0C’…h’4F’. Во всех микроконтроллерах PIC среднего уровня регистры с младшими адресами используются в качестве РСН, а регистры со старшими адресами — в качестве РОН. Однако в более новых представителях семейства, таких как PIC16F628, требуется больше РСН в связи с большим числом периферийных устройств. При этом под РСН резервируется память с адресами до h’1F’. С учетом сказанного, во всех программах, приведенных в настоящей книге, предполагается, что для хранения переменных доступна область памяти, начиная с адреса h’20’.
70
Этот дополнительный счетчик, который рассматривается в