Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МвСУ_16.11.2011.doc
Скачиваний:
12
Добавлен:
01.04.2025
Размер:
7 Мб
Скачать
☆

5.2. Процессор микроконтроллера avr

Процессор формирует адрес очередной команды, выбирает команду из памяти и организует ее выполнение. Код команды имеет тип данных слово (16 бит) или два слова.

В счетчике команд адрес очередной команды формируется путем добавления 1 к числу, код которого хранится в счетчике команд. При пуске и перезапуске МК в счетчик команд заносится код числа 0 и первая команда выбирается из FlashROM по адресу 0.

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

Блок регистров общего назначения содержит 32 восьмиразрядных регистра, которым присвоены имена R0, R1, ..., R31. В некоторых операциях в АЛУ могут участвовать лишь регистры со старшими номерами (от R16 до R31). Регистры с именами от R24 до R31 могут образовывать пары, используемые для хранения слов, при этом регистр с четным номером хранит младший байт, а регистр с нечетным номером – старший байт. Регистр управления МК – MCUCR.

Паре регистров R26, R27 присвоено имя X, паре регистров R28, R29 – имя Y, паре регистров R30, R31 – имя Z. Эти пары регистров используются для хранения адресов при обращениях к памяти с косвенной адресацией.

Область ввода/вывода МК AVR содержит 64 регистра, используемых для управления или хранения данных периферийных устройств.

Регистр состояния содержит флаги условий МК AVR и располагается в области ввода/вывода по адресу $3F (адрес SRAM – $5F). После подачи сигнала сброса он инициализируется нулями. Общий регистр флагов прерываний – GIFR, общий регистр маскирования прерываний – GIMSK, TIFR – Регистр флагов прерываний от таймеров/счетчиков, TIMSK – Регистр маскирования прерываний от таймеров.

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

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

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

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

– разряд 3 (V) – флаг переполнения при вычислениях в дополнительных кодах (Two's complement Overflow); поддерживает арифметику дополнительных кодов (арифметика кодов с дополнением до двух); устанавливается, если при выполнении соответствующей операции происходит переполнение, в противном случае – сбрасывается;

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

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

– разряд 6 (Т) – флаг копирования (Transfer or Copy); предназначен для свободного применения программистом (например, в качестве буфера);

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

Регистр-указатель стека хранит и формирует адрес при обращении к стеку типа LIFO (Last In, First Out). Указатель стека (старший байт) – SPH, указатель стека (младший байт) – SPL, SREG – регистр состояния. В МК типа t1l, t12, t15, 1200 и t28 в качестве стека используется специальное ЗУ (аппаратный стек). Этот стек используется только для хранения адресов возврата при прерываниях и обращениях к подпрограммам.