Академический Документы
Профессиональный Документы
Культура Документы
SAR Les15
SAR Les15
контроля, управления и
регулирования (САК, САУ,САР)
ЛЕКЦИЯ 15. АВТОМАТИЧЕСКОЕ УПРАВЛЕНИЕ.
МИКРОКОНТРОЛЛЕР PIC16F84. РЕГИСТР STATUS
Регистр STATUS
Этот регистр, тесно связанный с АЛУ, содержит три бита-флага, которые используются для
информирования программы о результате выполнения команды.
В частности, не было ли переноса при выполнении операции сложения.
Бит 0 регистра STATUS используется в качестве флага переноса С (от англ. Carry - перенос). Основное
его назначение - хранение бита переноса предыдущей операции сложения. При операциях вычитания
значение этого бита соответствует инвертированному биту заёма.
Например, 24 - 12 = 12, а 12 -24 = 88 (от заема). Флаг С также используется в операциях сдвига. Пометка
<<R/W ?>> на рисунке отражает тот факт, что этот бит доступен как для чтения (R), так и для записи (W),
а после сброса по питанию его состояние не определено (при любом другом: сбросе состояние этого бита
не изменяется).
Бит 1 регистра STATUS используется в качестве флага десятичного переноса DC(от англ. digit carry).
Этот флаг функционирует точно так же, как и обычный флаг С, только содержит бит переноса из
младшего полубайта в старший, т.е. из 3-гo бита в 4-й. Аналогично флагу С, флаг DC содержит
дополнение бита заёма из 3-гo бита в 4-й.
Информация о наличии или отсутствии переноса между полубайтами полезна при работе с данными,
представленными в двоично-десятичном коде. При использовании этого кода в каждом полубайте
хранится 4-битное представление десятичного числа от 0 до 9 ,и флаг десятичного переноса указывает на
возникновение переноса между десятичными разрядами.
Бит 2 регистра STATUS используется в качестве флага нуля Z (от англ. zero -ноль). Этот бит
устанавливается, если результат выполнения команды равен нуля, и сбрасывается в противном случае.
В отличие от многих других микроконтроллеров, в микроконтроллерах PIC отсутствуют команды,
специально предназначенные для сброса или установки флагов, подобные команде sec, имеющейся в
микроконтроллерах семейств 6800/5/11 компании Motorola.
К регистру STATUS можно обращаться как к регистру данных с адресом h’03'. Поэтому любая команда,
которая изменяет содержимое регистра данных, может в принципе использоваться для изменения
состояния флагов.
Однако существует определенная проблема, заключающаяся в том, что многие из этих команд сами по
себе влияют на состояние одного или нескольких флагов (см., к примеру, таблицу ) и таким образом
переопределяют значение, являющееся результатом выполнения команды. Если мы, к примеру, попробуем
сбросить все флаги с помощью команды очистки регистра clrf , то в результате флаг Z окажется
установленным в 1, сообщая о том, что результат операции равен нулю!
Для изменения отдельных битов регистра STATUS рекомендуется использовать команды
сброса/установки бита регистра данных BCF и BSF (см. таблицу), поскольку сами по себе эти команды
не влияют на состояние флагов. Например, команда bsf 3, 0(установить 0-й бит регистра h’03')
эквивалентна команде sec, а команда bcf З, 2 (сбросить 2-й бит регистра h’03') сбросит флаг Z.
Флаг PD (Роwег Down) сбрасывается при выполнении команды sleep, которая используется для
выключения тактового генератора и перевода микроконтроллера в режим ожидания с малым
потреблением ( < 1 мкА).
Флаг ТО (Time Out) сбрасывается при наступлении тайм-аута сторожевого таймера.
Оба этих флага доступны только для чтения - их состояние не может быть изменено программно.
После сброса указанныефлаги устанавливаются в 1.
Все эти биты называются флагами или, иногда, семафорами, поскольку они сигнализируют о том или
ином результате выполнения команды. Бит 5 этого регистра несколько отличается от остальных, так как на
его состояние не влияют происходящие события. Наоборот, флаг RPO используется программистом для
изменения состояния процессора.
Шесть старших битов ( 13 ... 8) называются кодом операции или,
сокращенно, КОП. Каждая команда имеет уникальный КОП, и
именно по его значению
схема дешифратора определяет тип обрабатываемой команды.
Седьмой бит кода команды, обозначенный символом <<d>>,
определяет адресата
результата операции.
Для преодоления этого ограничения необходимо где-то взять дополнительные биты, чтобы расширить диапазон
адресов. В микроконтроллере PIC16F84 для этой цели используется 5-й бит регистра STATUS, который называется
RP0 (Register Page 0). Этот бит выполняет роль 8-uo бита адреса, позволяя использовать память данных, содержащую
до 256 регистров. При RP0 = 0 (после сброса по питания) обращения производятся к 0-му банку памяти данных
(регистры l1'00' ... l1'7F'). При RP0 = 1 разрешается доступ к 1-му банку, т.е. к регистрам l1'80' ... l1'FF'.
Несмотря на то что использование банков памяти является
довольно эффективным вариантом преодоления 7-битного
ограничения на размер адреса, их использование может вызвать
трудности у неопытных программистов.
В качестве примера рассмотрим фрагмент кода, в котором
осуществляется запись числа '00001111' в регистр h '86'. Для
выполнения этой операции мы воспользуемся командой movlw,
загружающей 8-битную константу в рабочий регистр: