Вы находитесь на странице: 1из 12

Основы систем автоматического

контроля, управления и
регулирования (САК, САУ,САР)
ЛЕКЦИЯ 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>>,
определяет адресата
результата операции.

Проанализировав адресацию комманд, можно заметить, что из


14 бит, составляющих код команды, семь зарезервировано под
адрес операнда в памяти данных. Семь битов дают нам всего
2^7= 128 адресов, т.е. страницу или банк, вмещающий в себя
128 регистров.

 Для преодоления этого ограничения необходимо где-то взять дополнительные биты, чтобы расширить диапазон
адресов. В микроконтроллере 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-битную константу в рабочий регистр:

movlw b‘00001111' ; Загружаем константу h'0F' в W


movwf h'86' ; и копируем его в регистр с адресом h'86'
 В коде ошибочно указан адрес h'86', или b' 10000110', значение которого слишком велико для имеющегося
размера поля. Большинство ассемблеров просто обрежут биты, выходящие за границы поля, в результате
чего мы получим адрес h'06', или b'0000110’
 Таким образом, с точки зрения ассемблера адреса h'86’ и h'06' являются одинаковыми, хотя большинство
ассемблеров при этом выдадут программисту предупредительное сообщение.

Вам также может понравиться