Ремонт принтеров, сканнеров, факсов и остальной офисной техники


назад Оглавление вперед




[1]

-циклический сдвиг (команды RL, RR, RLC, RRC),

-приращение и уменьшение (команды INC, DEC),

-переходы (команды SZ, SNZ, SIZ, SDZ,...).

В необходимых случаях АЛУ не только осуществляет обработку данных, но и изменяет значение регистра состояния.

Регистр состояния STATUS

Регистр состояния (0AH) содержит флаг нуля (Z), флаг переноса (C), вспомогательный флаг переноса (AC), флаг переполнения (OV), флаг экономичного режима (PD), и флаг тайм-аута сторожевого таймера (TO). Флаги индицируют текущее состояние микроконтроллера и влияют последовательностью действий.

За исключением флагов PD и TO биты регистра могут быть изменены командами, равно как и в случае обращения к другим регистрам данных. Значения флагов PD и TO не изменяются при выполнении операций над регистром состояния. Изменение значения флага TO происходит при включении питания, при наступлении тайм-аута сторожевого таймера, или при выполнении команд CLR WDT, HALT. Изменение состояния флага PD происходит при выполнении команд HALT, CLR WDT или при выключении питания.

Флаги Z, OV, AC и C отражают состояние после последней выполненной АЛУ операцией.

Флаги регистра состояния

Флаг

Бит

Функция

C

0

Устанавливается, когда выполнение операции сложения приводит к переносу или выполнение операции вычитания не приводит к заёму, в противном случае очищается. Изменяется также и при выполнении операций циклического сдвига командами RLC и RRC.

AC

1

Устанавливается, когда выполнение операции сложения приводит к переносу в младшем полубайте, или когда операция вычитания не приводит к заёму в старшем полубайте, в противном случае очищается.

Z

2

Устанавливается, когда результатом арифметической или логической операции является 0, в противном случае очищается.

OV

3

Устанавливается, когда операция приводит к переносу в самый старший бит, но не переносу из старшего бита, и, наоборот, в противном случае очищается.

PD

4

Очищается при включении питания или выполнении команды CLR WDT. Устанавливается при выполнении команды HALT.

TO

5

Очищается при включении питания или выполнении команд CLR WDT и HALT. Устанавливается при наступлении тайм-аута сторожевого таймера.

-

6, 7

Не определены, читается 0.

Следует иметь в виду, что при обработке прерывания или вызове подпрограммы содержимое регистра состояния не сохраняется автоматически. Поэтому в случае, когда его значение необходимо сохранить, требуется вставить в программу соответствующий код.

Прерывания

Микроконтроллер обеспечивает обработку прерываний от внешнего источника и от таймера/счётчика событий. Регистр управления прерываниями (INTC, 0BH) биты разрешения/запрета прерываний и флаги запроса прерываний. При выполнении подпрограммы обслуживания прерывания, другое прерывание заблокировано (очищается бит EMI). Таким образом, предотвращается возможность получения вложенных прерываний. Запрос на другое прерывание, поступивший в этот период, приводит только к установке флага запроса прерывания. Для того чтобы разрешить обслуживание прерывание в процессе выполнения подпрограммы обслуживания другого прерывания, необходимо установить бит EMI и соответствующий бит разрешения прерывания. Если стек подпрограмм заполнен, запрос на прерывание не будет обработан, даже если вложенное прерывание разрешено, пока не будет закончено выполнение текущей подпрограммы. Поэтому, если есть необходимость в постоянной готовности микроконтроллера к выполнению прерывания, требуется принять меры к предотвращению заполнения стека.

Оба вида прерываний обеспечивают возможность «пробуждения» микроконтроллера из экономичного режима. При переходе к подпрограмме обслуживания прерывание предыдущее значение счётчика команд сохраняется в стеке, после чего управление передаётся подпрограмме обработки прерывания. Если содержимое регистров или регистра состояния будет изменяться подпрограммой обработки прерывания и это может при-


вести в дальнейшем к некорректному ходу программы, то в начале подпрограммы необходимо сохранить, а в конце подпрограммы - восстановить их значение.

Внешнее прерывание вызывается переходом от высокого уровня сигнала к низкому на выводе INT микроконтроллера, при этом устанавливается флаг запроса внешнего прерывания EIF регистра управления прерываниями INTC. В этом случае, если прерывание разрешено (установлен бит EEI), а стек подпрограмм не полон, выполняется переход к подпрограмме обслуживания прерывания по адресу 04H. Флаг запроса прерывания EIF и бит EMI регистра очищаются.

Внутреннее прерывание от таймера/счётчика событий вызывается переполнением таймера, при этом устанавливается флаг запроса внутреннего прерывания TF регистра управления прерываниями. Если прерывание разрешено (установлен бит ETI), а стек подпрограмм не полон, выполняется переход к подпрограмме обслуживания прерывания по адресу 08H. Флаг запроса прерывания TF и бит EMI регистра очищаются.

При выполнении подпрограммы обработки прерывания другие запросы на обработку прерываний не выполняются, пока не будет выполнена команда возврата из подпрограммы RETI, или не будут установлены бит EMI регистра управления прерываниями и соответствующий бит разрешения прерывания (если конечно стек подпрограмм не полон). Возврат из подпрограммы обработки прерывания может осуществляться командами RET и RETI. Команда RETI, в отличие от команды RET, устанавливает бит EMI регистра управления прерываниями.

Прерывания, возникающие между двумя фронтами тактовых импульсов фазы T2, будут обрабатываться в период между следующими фазами T2. В случае одновременного поступления запросов на прерывание внешнее прерывание имеет высший приоритет при обработке. Если флаги запроса прерывания установлены, они сбрасываются при выполнении соответствующих подпрограмм обслуживания прерываний, или очищаются командой программы.

Нежелательно осуществлять переход к выполнению подпрограммы командой CALL внутри подпрограммы обработки прерывания, так как обычно нельзя предсказать появление запроса на прерывание и может потребоваться немедленное его обслуживание, требующее свободного места в стеке.

Сторожевой таймер - WDT

Источником тактовых импульсов сторожевого таймера может быть встроенный RC-генератор или делитель на 4 тактовой частоты микроконтроллера, что определяется при программировании. При программировании можно также заблокировать сторожевой таймер. Внутренний тактовый генератор имеет период повторения импульсов около 78 мкс, который изменяется в зависимости от температуры кристалла и напряжения питания. Сторожевой таймер снабжён 8-разрядным фиксированным делителем на 256, увеличивающим минимальное значение периода тайм-аута при тактировании от встроенного RC-генератора до прибизительно 20 мс. Дальнейшее увеличение периода тайм-аута обеспечивается 7-битным программируемым предварительным делителем, значение коэффициента деления которого определяется битами WS0...WS2 регистра управления сторожевым таймером WDTS, и изменяется в пределах от 1:1 до 1:128. Таким образом, максимальное значение периода тайм-аута может составлять около 2,6 с.

Старший полубайт и бит 3 регистра управления WDTS зарезервированы для флагов пользователя, и могут использоваться программистом по своему усмотрению.

Если внутренний генератор сторожевого таймера отключен, то таймер тактируется от тактового генератора микроконтроллера, но следует иметь в виду, что при выполнении команды HALT перехода в экономичный режим тактовый генератор микроконтроллера останавливается, и выполнение функций сторожевого таймера тоже будет остановлено. Поэтому рекомендуется использовать внутренний тактовый генератор.

Переполнение сторожевого таймера при нормальной работе вызывает сброс микроконтроллера и установку бита TO регистра состояния. Однако при нахождении в экономичном режиме в результате выполнения команды HALT переполнение сторожевого таймера «горячий сброс», когда обнуляется только регистр счётчика команд PC и стек подпрограмм SP. Чтобы очистить содержимое сторожевого таймера, включая предварительный делитель, существуют три метода: внешний сброс при низком уровне на выводе RES микроконтроллера, программные команды и команда HALT. Команды очистки содержимого таймера включают команду CLR WDT и альтернативный набор команд CLR WDT1 и CLR WDT2. При программировании микроконтроллера может быть выбрана одна из этих двух альтернатив, иначе сторожевой таймер сбрасывается только в результате наступления тайм-аута.


Экономичный режим

Переход в экономичный режим инициализируется выполнением команды HALT, в результате чего происходит следующее:

-тактовый генератор микроконтроллера останавливается, однако тактовый генератор сторожевого таймера (если он выбран) продолжает функционировать;

-содержание памяти данных и регистров остаётся неизменным;

-содержимое сторожевого таймера и его предварительного делителя очищается (если он тактируется от встроенного генератора);

-все порты ввода-вывода сохраняют своё состояние;

-устанавливается флаг PD и сбрасывается флаг TO регистра состояния.

Система может «пробуждаться» из экономичного режима внешним сбросом, внешним прерыванием, срезом импульса на одном из выводов порта A или переполнением сторожевого таймера. Внешний сброс вызывает инициализацию устройства, а переполнение сторожевого таймера - «горячую» инициализацию. После анализа флагов TO и PD определяется причина сброса. Флаг PD сбрасывается при включении питания и выполнении команды CLR WDT и устанавливается при выполнении команды HALT. Флаг TO устанавливается при наступлении переполнения сторожевого таймера. Если флаг TO установлен, то при «пробуждении» очищаются только счётчик команд PC и указатель стека подпрограмм SP.

Каждый вывод порта A может быть независимо запрограммирован для «пробуждения» микроконтроллера из экономичного режима. При «пробуждении» сигналом на выводе порта A микроконтроллер продолжит выполнение программы со следующей команды. Если «пробуждение» вызвано сигналом на выводе внешнего прерывания, возможны два варианта. Если прерывание запрещено, или стек подпрограмм полон, продолжается выполнение программы со следующей команды. Если прерывание разрешено, а стек подпрограмм не полон, выполняется подпрограмма обслуживания прерывания. Если флаг запроса прерывания был установлен до выполнения команды HALT, то функция «пробуждения» от внешнего прерывания будет заблокирована.

При наступлении события пробуждения требуется 1024 тактов тактового генератора микроконтроллера для перехода к нормальному режиму функционирования.

Чтобы минимизировать потребление энергии при переходе в экономичный режим, необходимо соответствующим образом запрограммировать все линии ввода-вывода перед выполнением команды HALT.

Сброс

В микроконтроллере предусмотрены четыре режима выполнения сброса:

-сброс при включении питания,

-внешний сброс в нормальном режиме,

-внешний сброс в экономичном режиме,

-сброс при наступлении тайм-аута сторожевого таймера в нормальном режиме.

«Горячий» сброс при наступлении тайм-аута сторожевого таймера в экономичном режиме не является полноценным сбросом, так как обеспечивает очистку только регистров PC и SP. Некоторые регистры не изменяют своего содержания и в других режимах сброса. Большинство регистров сбрасывается в начальное состояние. Микроконтроллер определяет режим сброса, анализируя состояние флагов PD и TO.

Для обеспечения гарантий стабилизации работы генератора тактовых импульсов стартовый таймер микроконтроллера SST обеспечивает пусковую задержку в 1024 периода тактовой частоты перед началом выполнения программы при включении питания или «пробуждении» из экономичного режима. Однако в том случае, когда сброс происходит от вывода внешнего сброса, задержка от стартового таймера блокируется.

Таймер/счётчик событий

Встроенный программируемый таймер/счётчик событий может тактироваться от внешнего источника или от делителя на 4 тактовой частоты микроконтроллера.

При использовании тактового генератора микроконтроллера таймер может только формировать временные интервалы. При использовании внешнего источника тактовых импульсов с помощью таймера можно вести подсчёт внешних событий, измерять временные интервалы и ширину импульсов или генерировать точные временные интервалы.

С таймером/счётчиком связаны два регистра: TMR (0DH) и TMRC (0EH). С регистром TMR связаны два физических регистра: при записи в регистр в таймер/счётчик записывается стартовое значение (регистр загрузки),



[стр.Начало] [стр.1] [стр.2]