Регистр состояния SRЕG микроконтроллеров АVR

Регистр состояния содержит флаги условий микроконтроллеров АVR и располагается в области ввода/вывода по адресу $ЗF (адрес SRАМ — $5F). После подачи сигнала сброса он инициализируется нулями.

В микроконтроллерах АVR для обозначения результата выполнения операций используются восемь различных флагов:

разряд О (С) — флаг переноса (Саггу); указывает на переполнение (перенос) после выполнения арифметической или логической операции;

разряд 1 (2) — нулевой флаг (Zего); всегда устанавливается, если результат арифметической или логической операции равен нулю; сбрасывается, если результат операции не равен нулю;

разряд 2 (N) — флаг отрицательного результата (Negative); указывает на отрицательный результат после выполнения арифметической или логической операции;

разряд 3 (V) — флаг переполнения при вычислениях в дополнительных кодах (Тwo’s соmр1еmепt Overflow); поддерживает арифметику дополнительных кодов (арифметика кодов с дополнением до двух); устанавливается, если при выполнении соответствующей операции происходит переполнение, в противном случае — сбрасывается;

разряд 4 (S) — флаг знака (Sign); S = NÅV — связь флагов N и V с помощью операции "Исключающее ИЛИ"; флаг знака может применять­ся для определения фактического результата арифметической операции;

разряд 5 (Н) — флаг половинного переноса (На№ Сапу); указывает на переполнение в младшем полубайте (разряды 0...3 байта данных); устанавливается, когда происходит перенос из младшего полубайта в старший, в противном случае — сбрасывается;

разряд 6 (Т) — флаг копирования (HalfCarry); предназначен для сво­бодного применения программистом (например, в качестве буфера);

разряд 7 (I) — общее разрешение прерываний (GlobalInterrupt); если прерывания, как таковые, должны быть разрешены, то должен быть установ­лен разряд 7 регистра состояния (в лог. 1).

Внутренняя и внешняя память SRАМ микроконтроллеров АVR

Память SRАМ микроконтроллеров АVR предназначена для хранения тех дан­ных, которые не помещаются в рабочих регистрах, а также для организации программного стека (см. следующий подраздел). Данные обычно сохраняют в SRАМ, начиная с первых адресов, а стеку соответствуют верхние адреса.

Стек

Стек — это особая область памяти данных, используемая процессором для временного хранения адресов возврата из подпрограмм, промежуточных результатов вычислений и др. В микроконтроллерах РIС и некоторых микроконтролле­рах АVR стек реализован аппаратно — для этого выделено отдельное запоми­нающее устройство фиксированного объема в несколько (или несколько десятков) байт. Для микроконтроллеров АVR компиляторы языка С (например, при обра­щении к подпрограммам) могут также создавать один или более стеков программ­но, начиная с верхних адресов области SRАМ.

Стек действует по принципу LIFO — "Lastin, FirstOut", что означает "по­следним вошел, первым вышел". Это означает, что новые данные вначале поме­щаются на вершину (первый уровень) стека, а затем, с поступлением следующих данных, "проталкиваются" на его нижние уровни. Извлечение из стека происходит в обратном порядке: вначале считываются данные, помещенные последнимина вершину, после чего данные, размещенные на нижних уровнях, как бы "вытал­киваются" на один уровень вверх. Ячейка памяти, которая является в данный мо­мент вершиной стека, адресуется указателем стека (для АVR — регистровой па­рой SPL, SPH).

Поскольку область памяти данных, отводимая для программного стека, огра­ничивается только объемом памяти SRАМ, при написании программ следует сле­дить за тем, чтобы стек не становился слишком большим, затирая полезные данные.

Память программ

Память программ как в микроконтроллерах АVR, так и в микроконтроллерах РIС реализована по технологии Flash-ЕРRОМ, которая подразумевает программи­рование пользователем и вытирание электрическим способом. Размер этой памяти варьируется в зависимости от микроконтроллера и обычно составляет несколько Кбайт командных слов.

Флэш-память является энергонезависимой, то есть, сохраняет записанную в нее информацию даже после отключения питания микроконтроллера. Несмотря на то, что память этого типа — программируемая, для записи в нее используются только внешние аппаратные средства, поэтому с точки зрения программиста можно сказать, что память программ доступна только для чтения.

Адресация команд в памяти программ реализуется с помощью специального регистра — счетчика команд, разрядность которого определяет допустимый раз­мер этой памяти. Разрядность ячеек памяти программ, в зависимости от типа мик­роконтроллера, может составлять 14-16 бит.

Кроме того, следует отметить, что в микроконтроллерах РIС в первых ячейках памяти программ (начиная с адреса 0x0000) содержатся векторы (адреса перехода) сброса и прерываний.

Наши рекомендации