Регистр состояния 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) содержатся векторы (адреса перехода) сброса и прерываний.