Помощь в написании студенческих работ
Антистрессовый сервис

Микроконтроллеры MSP430

КурсоваяПомощь в написанииУзнать стоимостьмоей работы

Как и AVR микроконтроллеры, MSP реализует RISC (Reduced Instruction Set Computer) идеологию (всего 27 базовых команд). Однако, а отличие от AVR, данная серия построена по фон-неймановской (von Neumann) архитектуре, предполагающей, что память программ и память данных находятся в одном адресном пространстве. Основными чертами рассматриваемых микроконтроллеров являются широкий набор встроенных… Читать ещё >

Микроконтроллеры MSP430 (реферат, курсовая, диплом, контрольная)

  • Микроконтроллеры MSP430
  • Содержание
  • Введение
  • 1. Центральный процессор MSP430
    • 1.1 Адресное пространство микроконтроллеров MSP430F1xx
    • 1.2 Регистровый файл
    • 1.3 Байтовая и словная формы инструкций
    • 1.4 Режимы адресации
      • 1.4.1 Регистровая адресация
      • 1.4.2. Индексная адресация
      • 1.4.3 Символьная адресация
      • 1.4.4 Абсолютная адресация
      • 1.4.5 Косвенная адресация
      • 1.4.6 Косвенная адресация с автоинкрементом
      • 1.4.7 Непосредственная адресация
  • 2. Система команд MSP микроконтроллеров
    • 2.1 Двухадресные команды
    • 2.2 Одноадресные команды
    • 2.3 Команды переходов
    • 2.4 Эмулируемые команды
  • 3. Периферийные устройства микроконтроллеров MSP430F1xx
    • 3.1 Внешние выводы микроконтроллера MSP430F149
    • 3.2 Система прерываний
    • 3.3 Система тактирования
    • 3.4 Сторожевой таймер
    • 3.5 Аппаратный умножитель
    • 3.6 Порты ввода/вывода
    • 3.7 Таймер A3
    • 3.8 Таймер B7
    • 3.9 Интерфейс USART
    • 3.9.1 Режим UART
      • 3.9.1.1 Передача данных
      • 3.9.1.2 Передача данных
      • 3.9.1.3 Поддержка коммуникации в многопроцессорных системах
      • 3.9.1.4 Обнаружение стартового бита при приеме
      • 3.9.1.5 Скорость передачи
      • 3.9.1.6 Регистры USART
    • 3.9.2 Режим SPI
    • 3.9.3 Режим I2C
    • 3.10 Аналоговый компаратор
    • 3.11 Аналого-цифровой преобразователь ADC12
    • 3.12 Flash контроллер
    • 3.12.1 Стирание Flash памяти
    • 3.12.2 Запись Flash памяти
    • 3.12.3 Регистры Flash контроллера
  • Введение
  • Микроконтроллеры семейства MSP430 — серия 16-ти разрядных микроконтроллеров фирмы Texas Instruments (www.ti.com). Американская фирма TI является мировым лидером по производству цифровых сигнальных процессоров. Ею также производятся микроконтроллеры индустриального применения, аналоговые и цифровые микросхемы широкого применения.
  • Микроконтроллеры семейства MSP430 имеют одинаковое 16-разрядное процессорное ядро и отличаются друг от друга объемом встроенной памяти программ и данных, набором периферийных устройств, количеством внешних выводов.
  • Как и AVR микроконтроллеры, MSP реализует RISC (Reduced Instruction Set Computer) идеологию (всего 27 базовых команд). Однако, а отличие от AVR, данная серия построена по фон-неймановской (von Neumann) архитектуре, предполагающей, что память программ и память данных находятся в одном адресном пространстве. Основными чертами рассматриваемых микроконтроллеров являются широкий набор встроенных периферийных устройств, высокая производительность процессора и крайне низкая мощность потребления, что делает их идеальными для применения в портативных измерительных индустриальных и биомедицинских приборах.
  • В настоящее время имеется 5 групп микроконтроллеров MSP430:
  • · MSP430C3xx — имеет производительность до 4 миллионов инструкций в секунду (4 MIPS), память программ — ПЗУ до 32 kB, память данных (ОЗУ) — до 1 kB, имеется аппаратная поддержка ЖК индикаторов. В настоящее время эта серия считается устаревшей и в новых разработках не используется.
  • · MSP430F1xx — имеет производительность 8 MIPS, Flash память программ до 60 kB, ОЗУдо 2 kB (ОЗУ модели MSP430F1610 — 10 kB);
  • · MSP430F4xx — производительность 8 MIPS, Flash память программ до 120 kB, ОЗУ-до 8 kB, имеется аппаратная поддержка ЖКИ;
  • · MSP430F2xx — производительность 16 MIPS, Flash память программ до 120 kB, ОЗУ-до 8 kB, имеет усиленную по отношению к MSP430F1xx периферию;
  • · MSP430F5xx — новейшая серия, анонсированная во 2 квартале 2008 г, имеет производительность до 25 MIPS, Flash память программ до 256 kB, ОЗУ-до 16 kB, имеет усиленную по отношению к MSP430F2xx периферию;
  • Новейшие микроконтроллеры, имеющие объем встроенной Flash памяти больше 64 kB, оснащены усиленным процессорным ядром MSP430X, поддерживающим 20-ти разрядную арифметику и имеют расширенную систему команд. В данном курсе будут рассматриваться только микросхемы группы MSP430F1xx .
  • Микроконтроллеры серии MSP430F1xx строятся по модульному принципу, включая в себя набор однотипных функциональных устройств.
  • Все микроконтроллеры серии содержат следующие функциональные модули:
  • — память программ типа Flash ;
  • — память данных RAM (Random Access Memory);
  • — сторожевой таймер (Watch Dog Timer);
  • — супервизор питания;
  • — аналоговый компаратор;
  • — 16-разрядный таймер A с тремя модулями захвата/сравнения (Capture/Compare);
  • — перестраиваемый RC — генератор DCO (Digitally Controlled Oscillator).
  • Модели микроконтроллеров внутри семейства отличаются друг от друга объемами встроенной памяти и набором дополнительных периферийных устройств. В таблице 1 сведены характеристики микроконтроллеров серии MSP430F1xx.
  • В таблице 1 приняты следующие обозначения:
  • · Int (interrupt) — количество источников прерывания;
  • · I/O (input/output) — количество внешних линий портов ввода/вывода;
  • · Mul (multiplier) — наличие аппаратного умножителя;
  • · #CC (capture/compare) — количество модулей захвата/сравнения;
  • · ADC# (Analog to Digital Converter) — разрядность аналого-цифрового преобразователя;
  • · DAC (Digital to Analog Converter) — количество цифро-аналоговых преобразователей;
  • · DMA (Direct Memory Access) — количество каналов контроллера прямого доступа в память.
  • Таблица 1
  • Модель

    Flash, kB

    RAM, B

    Int

    I/O

    Mul

    TimerB

    UART/SPI

    ADC

    DAC

    DMA

    • Выв.

    корпуса

    MSP430F1101

    ;

    ;

    ;

    ;

    ;

    ;

    MSP430F1121

    ;

    ;

    ;

    ;

    ;

    ;

    MSP430F122

    ;

    ;

    ;

    ;

    ;

    MSP430F123

    ;

    ;

    ;

    ;

    ;

    MSP430F1222

    ;

    ;

    ADC10

    ;

    ;

    MSP430F1232

    ;

    ;

    ADC10

    ;

    ;

    MSP430F133

    ;

    3CC

    ADC12

    ;

    ;

    MSP430F135

    ;

    3CC

    ADC12

    ;

    ;

    MSP430F147

    1k

    7CC

    ADC12

    ;

    ;

    MSP430F148

    2k

    7CC

    ADC12

    ;

    ;

    MSP430F149

    2k

    7CC

    ADC12

    ;

    ;

    MSP430F155

    ;

    3CC

    ADC12

    MSP430F156

    1k

    ;

    3CC

    ADC12

    MSP430F157

    1k

    ;

    3CC

    ADC12

    MSP430F167

    1k

    7CC

    2 +I2C

    ADC12

    MSP430F168

    2k

    7CC

    2 +I2C

    ADC12

    MSP430F169

    2k

    7CC

    2 +I2C

    ADC12

    MSP430F1610

    5k

    7CC

    2 +I2C

    ADC12

    MSP430F1611

    10k

    7CC

    2 +I2C

    ADC12

    1. Центральный процессор MSP430

    1.1 Адресное пространство микроконтроллеров MSP430F1xx

    Т.к. MSP микроконтроллеры построены по фон-неймановской архитектуре, все классы памяти, включающие Flash-память программ, ОЗУ, регистры управления периферийных устройств, отображены на единое адресное пространство общей емкостью 64 килобайта. Типовое распределение памяти приведено на рис. 1.

    Рисунок 1. Распределение памяти микроконтроллеров MSP430F1xx

    Младшие адреса памяти занимает область SFR (Special Function Registers) в которой находятся несколько 8-битных регистров, предназначенных для конфигурации некоторых периферийных устройств.

    В диапазоне адресов FFh — 10h находятся регистры управления 8-битных периферийных устройств, таких как порты ввода/вывода, UART и т. д. К этим регистрам, также как и к регистрам SFR, необходимо обращаться, используя только байтовые формы инструкций.

    В диапазоне адресов 1FFh — 100h находятся регистры управления 16-битных периферийных устройств, таких как таймеры, АЦП и т. д. К этим регистрам необходимо обращаться, используя только словные (16-ти разрядные) формы инструкций.

    Начиная с адреса 200h, располагается ОЗУ памяти данных. Верхняя граница этой области зависит от физического объема памяти для данной модели. Так для устройств, снабженных ОЗУ объемом 2 kB, верхняя граница имеет адрес 9FFh. К ОЗУ данных можно обращаться, используя как байтовую, так и словную форму инструкций.

    Область BSL (Bootstrap Loader) представляет собой ПЗУ, в которой записаны специальные отладочные подпрограммы, предназначенные для загрузки пользовательских программ через встроенный последовательный порт. Правила работы с BSL в данном документе рассматриваться не будут.

    К области BSL примыкает Flash память данных. Эта память может программироваться так же, как и основная память программ. Различие заключается в том, что стирание этой памяти осуществляется сегментами меньшего размера.

    Старшие адреса занимает Flash память программ. Адрес начала этого класса памяти зависит от физического объема памяти для данной модели. Для моделей, имеющих общий объем памяти программ 60 kB, эта область примыкает к Flash памяти данных и ее начальный адрес равен 1100h.

    Последние 32 байта адресного пространства также реализованы как Flash память и предназначены для хранения векторов прерывания.

    1.2 Регистровый файл

    Все микроконтроллеры семейства MSP430 имеют в своем составе регистровый файл, состоящий из 16 16-ти разрядных регистров. Регистровый файл не отображается на общее адресное пространство, поэтому к регистрам можно обращаться только по их именам — R0, R1, … R15. Большинство регистров из регистрового файла могут выступать как источник или приемник данных, или использоваться в качестве указателей. Регистры с индексами от R0 до R3 имеют специальные предназначения, в то время как регистры R4-R15 являются регистрами общего назначения.

    Регистр R0 является программным счетчиком (Program Counter) и к нему можно также обращаться по имени PC. Регистр PC содержит адрес команды, которую должен выполнить процессор в данный момент. Так как все команды процессора имеют четное количество байт, младший бит этого регистра всегда имеет значение 0.

    Регистр R1 является указателем стека (Stack Pointer) и к нему можно обращаться по имени SP. Стек — это область памяти ОЗУ, предназначенная, главным образом, для хранения адресов возврата из подпрограмм. Стек также может использоваться для временного хранения содержимого регистров и ячеек памяти. В MSP контроллерах используется падающая модель стека, т.о. ячейки памяти стека заполняются от старших адресов к младшим. Регистр SP всегда содержит адрес последней (с младшим адресом) ячейки стека, в которую производилась запись. В начале прикладной программы необходимо инициализировать регистр SP. Т.к. при сохранении данных на стеке, например с помощью команды PUSH, содержимое SP всегда уменьшается на 2, необходимо чтобы его начальное значение было бы четным. Обычно SP настраивают так, чтобы он указывал на самую верхнюю область ОЗУ. Для моделей, содержащих 2 килобайта памяти данных, в регистр SP записывается значение, равное 0A00h.

    Регистр R2 является статусным регистром (Status Register) и к нему можно обращаться по имени SR. Регистр SR содержит, во-первых, биты управления режимами работы центрального процессора и, во-вторых, флаги, сигнализирующие о результате последней операции. Структура регистра SR представлена ниже.

    Зарезервировано

    V

    SCG1

    SCG0

    OSCOFF

    CPUOFF

    GIE

    N

    Z

    C

    Регистр SR содержит следующие биты:

    · Бит 8: V (oVerflow) — переполнение. Устанавливается аппаратно если в результате последней операции зарегистрировано арифметическое переполнение, т. е. произошел перенос в старший, знаковый бит. Если переполнения не было, бит аппаратно сбрасывается.

    · Биты 7 и 6: SCG1, SCG0 — (System Clock Generator) — предназначены для управления системным тактовым генератором. Назначение этих бит будет рассмотрено позже (п. 3.3).

    · Бит 5: OSCOFF — выключение осциллятора. Устанавливается программно для отключения тактового генератора. В этом случае останавливается центральный процессор и вся тактируемая периферия. Уровень электрического потребления падает до долей микроампер.

    · Бит 4: CPUOFF — выключение центрального процессора. Программная установка этого бита отключает тактирование центрального процессора, при этом периферийные устройства могут находиться в активном режиме. Комбинация состояний битов 7…4 дает возможность гибкого управления режимами пониженного потребления всего микроконтроллера. Различные режимы потребления будут рассмотрены ниже (п. 3.3).

    · Бит 3: GIE (Global Interrupt Enable) — глобальное разрешение прерываний. Устанавливается/сбрасывается программно для разрешения/запрещения всех прерываний процессора.

    · Бит 2: N (Negative) — бит фиксации отрицательного результата. Устанавливается аппаратно, если в качестве результата последней операции было получено отрицательное значение, в противном случае — сбрасывается. Фактически в бит N переписывается старший значащий бит результата: 15-й бит для словной формы или 7-й бит для байтовой формы данных.

    · Бит 1: Z (Zero) — бит фиксации нулевого результата. Устанавливается аппаратно, если в качестве результата последней операции было получено нулевое значение, в противном случае — сбрасывается.

    · Бит 0: С (Carry) — бит переноса. Устанавливается аппаратно, если результат последней операции не умещается в разрядной сетке операции (16 бит для словной формы или 8 бит для байтовой данных), в противном случае сбрасывается.

    Все биты флагов в регистре SR также могут устанавливать/сбрасываться программно.

    Ассемблер использует ссылку на регистр R2 для генерации некоторых констант (см. ниже).

    Регистр R3 является генератором констант. Он используется неявно ассемблером для генерации часто используемых констант: 0, 1, 2, 4, 8, -1. Для этого при кодировании ассемблер достаточно хитроумно используют различные способы адресации к регистрам R2 и R3. Использование в коде команды ссылки на регистр R2 при генерации констант становится возможным, т.к. использование R2 в качестве регистра-указателя не имеет смысла.

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

    Регистры R4 — R15 программист может использовать свободно по своему усмотрению.

    1.3 Байтовая и словная формы инструкций.

    16-ти разрядное арифметико-логическое устройство процессора имеет возможность оперировать как с 16-ти разрядными, так и с 8-ми разрядными данными. Для того чтобы показать, с данными какой разрядности должен работать процессор, большинство команд (инструкций процессора) имеют байтовую (8 бит) и словную (16 бит) формы. Для этого используются суффиксы `b' (byte) и `w' (word), записываемые после мнемоники инструкции и отделенные от нее десятичной точкой. Например, запись `mov.b' определяет байтовую, а запись `mov.w' - словную форму команды `mov'. В том случае, если после мнемоники команды суффикс вообще не ставится, по умолчанию, подразумевает словная форма.

    Все ячейки памяти ОЗУ могут быть рассмотрены как массив байт, в случае обращения к ним с использования байтовой формы инструкции или как массив слов — для словной формы. То же самое можно сказать о Flash памяти, т.к. для микроконтроллеров с фон-неймановской архитектурой, по крайней мере, чтение данных из памяти программ, ничем не отличается от чтения ОЗУ. Однако адресация памяти в MSP микроконтроллерах всегда производится побайтно. При этом младшие байты 16-ти разрядных слов всегда должны иметь четные адреса, а старшие байты — адрес на единицу больше адреса его младшего байта. Адрес 16-ти разрядной ячейки памяти совпадает с адресом ее младшего байта. Например, словная ячейка памяти с адресом 200h состоит из младшего байта, который также имеет адрес 200h, и старшего байта с адресом 201h. Использование словных инструкций применительно к ячейкам памяти с нечетными адресами может вызвать либо ошибку трансляции при явном определении адреса, либо непредсказуемое поведении процессора при косвенной адресации.

    Регистры регистрового файла не имеют деления на старший и младший байты и всегда воспринимаются как 16-ти разрядные. Однако это не значит, что к ним не применимы байтовые формы инструкций, при этом регистр может выступать как в качестве источника данных, так и в качестве приемника. В том случае, если регистр выступает в качестве источника в байтовой инструкции, используется только содержимое его младших 8-ми бит, при этом содержимое всего регистра не меняется. Если регистр используется как приемник, данные записываются в его младшие 8 разрядов, при этом старшие разряды обнуляются.

    Пример.

    Пусть изначально регистр R4 содержит шестнадцатеричное значение 1234h, байт с адресом 200h — ABh, а байт с адресом 201h — значение 89h.

    Если при этих исходных данных содержимое регистра R4 переслать как байт (команда mov. b) по адресу 200h, то содержимое этой ячейки станет 34h. Содержимое ячейки по адресу 201h не изменится.

    Если содержимое R4 переслать как слово (команда mov. w), ячейка с адресом 200h будет содержать значение 34h, а 201h — 12h.

    Если байт с адресом 200h пересылается в R4, регистр после операции будет содержать значение ABh. Если использовать словную пересылку, содержимое регистра будет равно 89ABh.

    1.4 Режимы адресации

    Микроконтроллеры MSP имеют ортогональную систему команд. Это означает, что каждая команда может адресовать данные, используя любой доступный режим адресации. Поэтому, прежде чем рассматривать систему команд, необходимо описать все режимы адресации к данным. Как указывается в технической документации Texas Instruments, MSP микроконтроллеры поддерживают следующие режимы адресации к данным:

    — регистровый;

    — индексный;

    — символьный;

    — абсолютный;

    — косвенный;

    — косвенный с автоинкрементом;

    — непосредственный.

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

    Иллюстрацию работы различных режимов адресации будем проводить на примере инструкции `mov' (переслать). Данная команда относится к группе двух-операндных команд и производит пересылку содержимого операнда-источника по адресу операнда-приемника. Следует помнить, что каждая инструкция на языке ассемблера записывается в одной строке, при этом сначала записывается мнемоника команды, затем через пробелы или символы табуляции указывается операнд-источник и, через запятую, операнд-приемник.

    1.4.1 Регистровая адресация

    В регистровой адресации операндом-источником и/или операндом-приемником является регистр регистрового файла. Признаком регистровой адресации является имя регистра, записанное в качестве операнда.

    Пример:

    mov R5, R10 — содержимое регистра R5 (как слово) пересылается в регистр R10.

    mov.b SP, R5 — содержимое младшего байта указателя стека пересылается в регистр R5.

    mov PC, R7 — в регистре R7 запоминается текущее состояние программного счетчика.

    1.4.2 Индексная адресация

    С помощью индексной адресации производится обращение к ячейке памяти, адрес которой вычисляется как сумма содержимого регистра и постоянного смещения. Признаком индексной адресации является использование одного из операндов в виде X (Rn), где n — индекс используемого регистра (n=0.15), а X — произвольное целое число, записанное в десятичной или шестнадцатеричной форме, и находящееся в диапазоне 0.65 535 (0.FFFFh).

    Пример:

    mov 12(R5), 100h (R8) — содержимое ячейки памяти (как слово), адрес которой равен сумме содержимого регистра R5 и константы 12 (десятичное) переслать в ячейку памяти, адрес, которой равен сумме содержимого регистра R8 и константы 100h (шестнадцатеричное).

    Рассмотрим этот пример более подробно. Пусть на момент выполнения этой команды содержимое R5 = 200h, а содержимое R8 = 456h.

    Тогда адрес источника равен 200h+12 = 200h+0Ch = 20Ch

    Адрес приемника равен 456h+100h = 556h

    Таким образом, при данных начальных условиях, исполнение этой команды приведет к пересылке содержимого слова по адресу 20Ch в ячейку памяти с адресом 556h.

    В одной команде можно комбинировать регистровый и индексный способы адресации.

    Например

    mov.b 8(R10), R5 — содержимое байта по адресу, равному сумме содержимого R10 и константы 8, записывается в регистр R5.

    mov.w R12, 0(R14) — содержимое регистра R12 записывается в ячейку памяти (слово), адрес которой содержится в R14.

    1.4.3 Символьная адресация

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

    Пример:

    mov Lab1, R5

    .. .

    Lab1: dw 10

    Содержимое ячейки памяти, помеченной как Lab1, пересылается в регистр R5. Адрес Lab1 зарезервирован с помощью директивы компилятора dw (define word). В данном случае по адресу, соответствующему метке Lab1, располагается константа 10.

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

    Предположим, что данная команда занимает ячейки памяти программ, начиная с адреса 1234h, а метка Lab1 соответствует адресу 23AEh. Тогда смещение относительно PC можно рассчитать как 23AEh — 1234h = 117Ah, и данная команда будет оттранслирована как mov 117Ah (PC), R5

    Таким образом, после исполнения команды в регистр R5 будет записано значение 10.

    Использовать символьный режим адресации имеет смысл тогда, когда необходимо получить перемещаемый, т. е. адресно-независимый программный код. Этот прием применяется, например, в случае, если программе необходимо перепрограммировать часть собственной Flash памяти. В этом случае управляющая подпрограмма должна выполняться не из Flash памяти, а из ОЗУ. Для этого необходимо, чтобы подпрограмма программирования сначала располагалась во Flash, после чего ее тело необходимо скопировать в ОЗУ, и передать ей управление. Находясь в ОЗУ, подпрограмма может очистить Flash, возможно включая ту область, откуда она была скопирована. Таким образом, перемещаемый программный модуль, работающий относительно PC, может быть транслирован в привязке к одним адресам, а исполняться из другой области памяти.

    1.4.4 Абсолютная адресация

    Абсолютной адресацией пользуются при обращении к ячейкам памяти, имеющим фиксированные и известные на момент трансляции адреса. С помощью абсолютной адресации обычно обращаются к регистрам управления периферийных устройствами или ячейкам памяти ОЗУ, в том случае, если не используются перемещаемые программные модули. Признаком абсолютной адресации является символ `&', после которого записывается адрес требуемой ячейки памяти. Пример: mov &200h, 10(R5)

    В данном примере используется абсолютная адресация для источника и индексная адресация для приемника. Команда выполняет пересылку слова, расположенного по адресу 200h в ячейку памяти, адрес которой вычисляется как сумма содержимого R5 и смещения 10.

    Абсолютная адресация также является частным случаем индексной адресации, в котором в качестве базового регистра используется генератор констант. При этом трансляция проводится с таким режимом, что в регистр R3 аппаратно подставляется нулевое значение. Таким образом, данная команда транслируется как mov 200h (R3), 10(R5)

    При этом содержимое R3 на момент выполнения команды равно 0. Если быть более точным, то транслятор подставляет в коде команд ссылку (косвенная адресация) не на R3, а на R2. Программист, однако, может не вникать в нюансы кодирования, автоматически проводимым ассемблером, и просто использовать символ `&' для обозначения абсолютного режима адресации.

    1.4.5 Косвенная адресация

    Косвенная адресация применима только к операнду-источнику. Признаком косвенной адресации является символ `@' за которым следует имя регистра. В этом случае в качестве операнда-источника используется содержимое ячейки памяти, адрес которой содержится в данном регистре.

    Пример: mov. w @R12, &200h

    Содержимое ячейки памяти (слово), адрес которой содержится в регистре R12, пересылается в ячейку памяти с абсолютным адресом 200h. По своей логике эта команда эквивалентна команде mov. w 0(R12), &200h, однако команды, использующие косвенную адресацию вместо индексной, занимают в памяти меньше места и исполняются быстрее.

    1.4.6 Косвенная адресация с автоинкрементом

    Этот режим адресации применим только к операнду-источнику. Для обозначения режима используется нотация косвенной адресации, где после записи операнда-источника записывается символ `+'. Действие этого режима аналогично работе простой косвенной адресации, однако после выполнения команды, содержимое регистра указателя увеличивается на 1 для байтовой формы, или на 2 — для словной. Пример mov. b @R6+, R10

    В данной команде содержимое ячейки памяти (байт), адрес которой содержится в регистре R6, пересылается в регистр R10, после чего содержимое R6 увеличивается на 1.

    Предположим, что на момент исполнения команды, регистр R6 содержал значение 21Ah, тогда в регистр R10, будет переслано содержимое ячейки с адресом 21Ah, а сам регистр после исполнения команды будет содержать значение 21Bh. Если использовать команду mov. w, то содержимое R6 оказалось бы равным 21Ch.

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

    1.4.7 Непосредственная адресация

    Данный режим применяется только для операндов-источников и предназначен для использования констант, определенных на этапе компиляции программы. Для обозначения этого режима используется символ `#', за которым следует численное значение самой константы.

    Пример mov #1234, R12

    В этом примере число 1234 загружается в регистр R12.

    Абсолютная адресация не является самостоятельным типом. При кодировке данной команды ассемблер заменяет эту инструкцию следующей последовательностью:

    mov @PC+, R12

    dw 1234

    В данной реализации код команды mov занимает в памяти два байта. После вычитывания кода команды содержимое регистра PC автоматически увеличивается на 2, после чего PC содержит адрес, по которому располагается константа 1234. Согласно алгоритму работы косвенной адресации, содержимое ячейки памяти, адрес которой находится в PC (т.е. значение 1234), пересылается в R12, после чего содержимое PC опять увеличивается на 2, т.к. задан режим с автоинкрементом. Таким образом, после исполнения команды PC будет содержать адрес следующей за директивой dw инструкции.

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

    2. Система команд MSP микроконтроллеров

    Все команды MSP можно разделить на основные (базовые) и эмулированные. Основные команды — это инструкции, которые собственно исполняет процессор. Эмулированные команды представляют собой мнемоники, которые на этапе компиляции автоматически заменяются ассемблером на ту или другую команду из основного набора. Всего имеется 27 базовых команд и 24 эмулируемых.

    Базовые команды условно делятся на 3 группы: это двухадресные команды, одноадресные команды и команды переходов.

    Для описания действий процессора при исполнении инструкций введем некоторые обозначения:

    src (source) — операнд источник, может быть представлен любым типом адресации;

    dst (destination) — операнд приемник, может быть представлен регистровым, индексным, символьным или абсолютным режимами адресации;

    label — метка в теле программы;

    LSB (less significant bit) — младший значащий бит;

    MSB (most significant bit) — старший значащий бит;

    + операция арифметического сложения;

    — операция арифметического вычитания;

    & операция ЛОГИЧЕСКОЕ И;

    | операция ЛОГИЧЕСКОЕ ИЛИ;

    ^ операция ИСКЛЮЧАЮЩЕЕ ИЛИ;

    ~ операция ЛОГИЧЕСКОЙ ИНВЕРСИИ;

    записать.

    2.1 Двухадресные команды

    Ш Команда: MOV — MOVe — пересылка.

    Синтаксис: mov src, dst

    Операция: dst src

    Описание: Содержимое src записывается в dst

    Флаги: Не модифицируются

    Пример: Переслать содержимое R8 в ячейку памяти, адрес которой хранится в R12

    mov R8, 0(R12)

    Ш Команда: ADD — прибавить

    Синтаксис: add src, dst

    Операция: dst dst+src

    Описание: Содержимое src прибавляется к содержимому dst

    Флаги: флаги CZNV модифицируются согласно результату операции

    Пример: Прибавить число 35 к содержимому ячейки памяти с адресом 200h

    add #35, &200h

    Ш Команда: ADDC — ADD with Carry — прибавить с учетом переноса

    Синтаксис: addс src, dst

    Операция: dst st+src+С

    Описание: К содержимому dst прибавляется содержимое src и флаг C.

    Флаги: флаги CZNV модифицируются согласно результату операции

    Ш Команда: SUB — SUBtract — вычесть

    Синтаксис: sub src, dst

    Операция: dstdst-src

    Описание: Из содержимого dst вычитается содержимое src

    Флаги: флаги CZNV модифицируются согласно результату операции

    Пример: Из содержимого R12 вычесть содержимое ячейки памяти с адресом 22Ah

    sub &22Ah, R12

    Ш Команда: SUBC — SUBtract with Carry — вычесть c учетом переноса

    Синтаксис: subс src, dst

    Операция: dstdst-src-1+C

    Описание: Из содержимого dst вычитается содержимое src и инверсия C

    Флаги: флаги CZNV модифицируются согласно результату операции

    Ш Команда: CMP — CoMPare — сравнить

    Синтаксис: cmp src, dst

    Операция: dst-src

    Описание: Из содержимого dst вычитается содержимое src, результат никуда не заносится

    Флаги: флаги CZNV модифицируются согласно результату операции

    Пример: Сравнить содержимое ячейки памяти, адрес которой находится в регистре R12 с числом 100

    cmp #100, 0(R12)

    Ш Команда: DADD — Decimal ADDition — сложение операндов в BCD формате с учетом переноса

    Синтаксис: dadd src, dst

    Операция: dst dst + src + C

    Описание: Команда используется в предположении, что оба операнда имеют двоично-десятичную кодировку — BCD (Binary Coded Decimal). BCD кодировка используется в основном для подготовки числовых данных, поразрядно выводимых на индикатор.

    BCD кодировка предполагает, что в каждом полубайте операнда может находиться число в диапазоне 0 — 9. При сложении двух BCD чисел результатом исполнения команды является также правильное BCD число.

    Флаги: флаги CZNV модифицируются согласно результату операции

    Пример: Пусть R5 содержит значение 1234h, а R6 — 6789h. При выполнении команды

    dadd R5, R6

    регистр R6 получит значение 8023h. Т. е. шестнадцатеричные цифры трактуются как десятичные. В противоположность этому при тех же исходных условиях команда

    add R5, R6

    загрузит в R6 значение 79BDh. Это происходит потому, что

    1234h+6789h=4660+26 505=31165=79BDh

    Ш Команда: AND — логическое И

    Синтаксис: and src, dst

    Операция: dst dst & src

    Описание: В операнд приемник записывается значение побитной операции ЛОГИЧЕСКОЕ И между содержимым источника src и приемника dst.

    Флаги: флаги ZN модифицируются согласно результату операции, С = ~Z, V=0

    Пример: Сбросить 7, 6 и 4 биты в регистре R12

    and #2Fh, R12

    Ш Команда: BIT — BIt Test — тестирование бит

    Синтаксис: bit src, dst

    Операция: dst & src

    Описание: Выполняет те же действия, что и команда AND, однако результат никуда не записывается

    Флаги: флаги ZN модифицируются согласно результату операции, С = ~Z, V=0

    Пример: Проверить состояние младшего бита регистра R12

    bit #1, R12

    Ш Команда: BIS — BIt Set — установка бит

    Синтаксис: bis src, dst

    Операция: dst src | dst

    Описание: В приемнике dst устанавливаются в единицы те биты, которые были установлены в источнике src. Фактически выполняется операция ЛОГИЧЕСКОЕ ИЛИ.

    Флаги: Не модифицируются

    Пример: Установить 7-й и 1-й бит в регистре R12

    bis.b #82h, R12

    Ш Команда: BIC — BIt Clear — сброс бит

    Синтаксис: biс src, dst

    Операция: dst ~src & dst

    Описание: В приемнике dst сбрасываются в ноль те биты, которые были установлены в источнике src. Фактически выполняется операция ЛОГИЧЕСКОЕ И между приемником и битовой инверсией источника

    Флаги: Не модифицируются

    Ш Команда: XOR — eXlusive OR — «исключающее или»

    Синтаксис: xor src, dst

    Операция: dst src ^ dst

    Описание: В операнд приемник записывается значение побитной операции ИСКЛЮЧАЮЩЕЕ ИЛИ между содержимым источника и приемника.

    Флаги: флаги ZN модифицируются согласно результату операции,

    С = ~Z,

    V=1, если оба операнда отрицательные, в противном случае V=0.

    Все двухадресные команды поддерживают как байтовую, так и словную форму.

    Объем памяти, занимаемый двухадресными командами, а также скорость их исполнения не зависит от конкретной команды, а определяется исключительно режимом адресации приемника и источника. В таблице 2 приведены значения скорости исполнения команды и объем памяти, занимаемый командой, в зависимости от режима адресации источника/приемника. В числителе приведена скорость исполнения в машинных циклах, в знаменателе — объем памяти в байтах.

    Таблица 2

    Регистровый

    Индексный

    Символьный

    Абсолютный

    Регистровый

    1 / 2

    4 / 4

    4 / 4

    4 / 4

    Индексный

    3 / 4

    6 / 6

    6 / 6

    6 / 6

    Символьный

    3 / 4

    6 / 6

    6 / 6

    6 / 6

    Абсолютный

    3 / 4

    6 / 6

    6 / 6

    6 / 6

    Косвенный

    2 /2

    5 / 4

    5 / 4

    5 / 4

    Косв. с автоинк.

    2 / 2

    5 / 4

    5 / 4

    5 / 4

    Непосредственный

    2 /4

    5 / 6

    5 / 6

    5 / 6

    2.2 Одноадресные команды

    Ш Команда: RRC — Rotate Right through Carry — вращение вправо через перенос

    Синтаксис: rrc src

    Операция: C MSB. LSB C

    Описание: Содержимое операнда источника сдвигается на один бит вправо, значение бита переноса записывается в старший значащий бит, младший бит записывается в бит переноса. Поддерживает байтовую и словную форму. Для словно формы MSB — 15-й бит, для байтовой — 7-й. Операнд может иметь любой тип, кроме непосредственного.

    Флаги: флаги СZNV модифицируются согласно результату операции,

    Пример: Сдвинуть вправо содержимое ячейки памяти, адрес которой содержится в R5

    rrc @R5

    Ш Команда: RRA — Rotate Right Arithmetically — арифметический сдвиг вправо

    Синтаксис: rra src

    Операция: MSB MSB. LSB C

    Описание: Содержимое операнда источника сдвигается на один бит вправо, значение старшего бита не изменяется, младший бит записывается в бит переноса. Поддерживает байтовую и словную форму. Для словно формы MSB — 15-й бит, для байтовой — 7-й. Операнд может иметь любой тип, кроме непосредственного.

    Флаги: флаги СZNV модифицируются согласно результату операции,

    Пример: сдвинуть вправо содержимое регистра R5

    rra R5

    Ш Команда: PUSH — поместить

    Синтаксис: push src

    Операция: SPSP-2

    @SPsrc

    Описание: Содержимое операнда источника src записывается в стек. Поддерживает байтовую и словную форму, но в любом случае на каждую команду расходуется два байта стека.

    Флаги: Не модифицируются

    Пример: Поместить на стек число 1234

    push #1234

    Ш Команда: SWPB — SWaP Byte — перестановка

    Синтаксис: swpb src

    Описание: Меняет местами старший и младший байты источника. Не поддерживает байтовую форму. Не поддерживает непосредственную адресацию.

    Флаги: Не модифицируются

    Пример: Поменять местами байты в регистре R9

    swpb R9

    Ш Команда: CALL — вызов

    Синтаксис: call src

    Операция: SP SP-2

    @SP PC

    PC src

    Описание: Вызывает подпрограмму на исполнение. Для этого сначала сохраняет на стеке адрес возврата, после чего осуществляет переход на начало подпрограммы. Не поддерживает байтовую форму.

    Флаги: Не модифицируются

    Пример:

    call #proc — вызов подпрограммы помеченной меткой proc

    call proc — вызов подпрограммы, адрес которой содержится в ячейке памяти с именем proc

    call r5 — вызов подпрограммы, адрес которой содержится в регистре R5

    call @R5+ - вызов подпрограммы, адрес которой содержится в ячейке памяти, адрес которой в свою очередь, содержится в регистре R5, после чего содержимое R5 увеличивается на 2.

    Ш Команда: RETI — RETurn from Interrupt — возврат из подпрограммы обработки прерывания

    Синтаксис: reti

    Операция: SR @SP

    SP SP+2

    PC @SP

    SP SP+2

    Описание: Завершает подпрограмму обработки прерывания. Для этого сначала восстанавливает из стека содержимое статусного регистра, зафиксированное перед вхождением в прерывании, и передает управление на прерванный фрагмент программы.

    Флаги: восстанавливаются.

    Ш Команда: SXT — Sign eXTend — расширение знака

    Синтаксис: sxt src

    Описание: Копирует 7-й бит операнда в его старшие биты. Команда используется для преобразования байта в слово. Не поддерживает байтовую форму. Не поддерживает непосредственную адресацию.

    Флаги: флаги ZN модифицируются согласно результату операции, С = ~Z, V=0

    Данные об объеме памяти, занимаемой командами, и скорость их исполнения приведена в таблице 3. Формат данных в таблице — такой же как в таблице 2.

    Таблица 3

    RRA, RRC,

    SWPB, SXT

    PUSH

    CALL

    Регистровый

    1 / 2

    3 / 2

    4 / 2

    Индексный

    4 / 4

    5 / 2

    5 / 4

    Символьный

    4 / 4

    5 / 4

    5 / 4

    Абсолютный

    4 / 4

    5 / 4

    5 / 4

    Косвенный

    3 / 2

    4 / 2

    4 / 2

    Косв. с автоинк.

    3 / 2

    5 / 2

    5 / 2

    Непосредственный

    ;

    4 / 4

    5 / 4

    Команда RETI в памяти занимает 2 байта и исполняется за 5 тактов.

    2.3 Команды переходов

    Команды переходов могут быть условными и безусловными. Условные переходы выполняются на основе анализа состояния битов в статусном регистре SR. Переход осуществляется относительно содержимого регистра PC на расстояние от -511 до 512 слов.

    Для некоторых команд условных переходов ассемблер поддерживает альтернативную нотацию.

    Ш Команда: JNE/JNZ — Jump if Not Equal / Jump if Not Zeroпрыжок если не равно / прыжок если не ноль

    Синтаксис: jne label

    jnz label

    Описание: Тестируется состояние бита Z статусного регистра SR. Если Z=0 осуществляется переход на метку label.

    Флаги: Не модифицируются

    Пример: Очистить 30 байт ОЗУ начиная с адреса 200h

    mov #200h, R5; настраиваем указатель на начало блока ОЗУ

    Loop: mov. b #0, 0(R5) ; пересылаем число 0 в текущую ячейку ОЗУ

    add #1, R5 ; наращиваем указатель

    cmp #200h+30, R5 ; проверяем достиг ли указатель границы

    ; блока ОЗУ

    jne Loop ; Если нет — переход на начало цикла.

    Ш Команда: JQE/JZ — Jump if Equal / Jump if Zeroпрыжок если равно / прыжок если ноль

    Синтаксис: jeq label

    jz label

    Описание: Тестируется состояние бита Z статусного регистра SR. Если Z=1 осуществляется переход на метку label.

    Флаги: Не модифицируются

    Пример: Тестировать 7-й бит в регистре R10

    bit #80h, R10

    jz BitIsZero

    ... .

    BitIsZero:

    Ш Команда: JN — Jump if Negativeпрыжок если минус

    Синтаксис: jn label

    Описание: Тестируется состояние бита N статусного регистра SR. Если N=1 осуществляется переход на метку label.

    Флаги: Не модифицируются

    Пример: В регистр R12 записать сумму всех положительных значений в блоке ОЗУ с начальным адресом 2A0h и размером 50 байт.

    mov #0, R12 ; обнуляем сумму

    mov #2A0h, R10 ; настраиваем указатель на начало блока ОЗУ

    mov #50, R11 ; инициализируем счетчик циклов

    loop: mov. b @R10+, R8 ; читаем данные во временный регистр

    cmp #0, R8 ; сравниваем с 0

    jn skip ; если минус, пропустить следующую команду

    add R8, R12 ; накапливаем сумму

    skip: sub #1, R11 ; считаем количество циклов

    jnz loop ; если не все значения, переход на начало цикла

    Ш Команда: JC/JHS — Jump if Carry set / Jump if Higher or Sameпрыжок если флаг С установлен / прыжок если выше или равно

    Синтаксис: jc label

    jhs label

    Описание: Тестируется состояние бита C статусного регистра SR. Если C=1 осуществляется переход на метку label. Команда JHS обычно используется после сравнения беззнаковых операндов.

    Флаги: Не модифицируются

    Ш Команда: JNC/JLO — Jump if Carry Not set / Jump if Lowerпрыжок если флаг С сброшен / прыжок если ниже

    Синтаксис: jnc label

    jlo label

    Описание: Тестируется состояние бита C статусного регистра SR. Если C=0 осуществляется переход на метку label. Команда JLO обычно используется после сравнения беззнаковых операндов.

    Флаги: Не модифицируются

    Пример: В регистр R15 записать количество единичных бит, содержащихся в регистре R12.

    mov #16, R13 ; загружаем счетчик бит

    mov #0, R15 ; обнуляем регистр результата

    loop: rrc R12 ; сдвиг данных в бит C

    jnc skip ; если C=0, пропустить след. команду

    add #1, R15 ; увеличить результат

    skip: sub #1, R13 ; все биты сдвинуты?

    jne loop ; если нет — переход на начало цикла

    Тот же результат можно получить, если в приведенном фрагменте две команды

    jnc skip

    add #1, R15

    заменить одной:

    addc #0, R15

    Ш Команда: JGE — Jump if Greater or Equalпрыжок если больше или равно

    Синтаксис: jge label

    Описание: Если результат операции N^V равен 0, осуществляется переход на метку label. Команда JGE обычно используется после сравнения знаковых операндов.

    Флаги: Не модифицируются

    Пример: В регистр R12 записать максимальное знаковое значение, содержащееся в блоке памяти ОЗУ со стартовым адресом 200h и размером 100 слов.

    mov #-32 768, R12 ; инициализируем R12 наименьшим значением

    mov #200h, R15 ; настраиваем указатель на начало блока

    mov #100, R13 ; инициализируем счетчик циклов

    loop: cmp @R15+, R12 ; сравниваем текущее слово с текущим

    ; максимумом

    jge skip ; если меньше, пропускаем след. команду,

    mov -2(R15), R12 ; иначе меняем текущий максимум

    skip: sub #1, R13 ; проверяем окончание цикла

    jne loop ; если цикл не закончен, переход на начало

    ; цикла

    Ш Команда: JL — Jump if Lessпрыжок если меньше

    Синтаксис: jl label

    Описание: Если результат операции N^V равен 1, осуществляется переход на метку label. Команда JGE обычно используется после сравнения знаковых операндов.

    Флаги: Не модифицируются

    Ш Команда: JMP — Jumpпрыжок

    Синтаксис: jmp label

    Описание: Безусловный переход на метку label

    Флаги: Не модифицируются

    Все команды переходов в памяти занимают 2 байта и исполняются за два цикла.

    2.4 Эмулируемые команды

    Как уже указывалось выше, программист может свободно использовать эмулированные команды, однако на этапе трансляции ассемблер автоматически заменяет ее аналогом из базового набора. Использование эмулируемых команд в ряде случаев делает текст программы более понятным и наглядным. Флаги в статусном регистре модифицируются в соответствии с замещающими командами.

    Ш Команда: ADC — Add Carry — прибавить перенос

    Синтаксис: adc dst

    Эмуляция: addc #0, dst

    Описание: Если бит С регистра SR равен 1, операнд увеличивается на 1. Значение 0 подставляется из генератора констант.

    Ш Команда: SBC — SuBtract Carry — вычесть перенос

    Синтаксис: sbc dst

    Эмуляция: sbc #0, dst

    Описание: Если бит С регистра SR равен 0, операнд уменьшается на 1. Значение 0 подставляется из генератора констант.

    Ш Команда: DADC — Decimal Add Carry — прибавить перенос к BCD операнду

    Синтаксис: dadc dst

    Эмуляция: dadd #0, dst

    Описание: Если бит С регистра SR равен 1, BCD операнд увеличивается на 1. Значение 1 подставляется из генератора констант.

    Ш Команда: INC — INCrement — увеличить

    Синтаксис: inc dst

    Эмуляция: add #1, dst

    Описание: Операнд увеличивается на 1. Значение 1 подставляется из генератора констант.

    Ш Команда: INCD — INCrement Double — увеличить дважды

    Синтаксис: incd dst

    Эмуляция: add #2, dst

    Описание: Операнд увеличивается на 2. Значение 2 подставляется из генератора констант.

    Ш Команда: DEC — DECrement — уменьшить

    Синтаксис: dec dst

    Эмуляция: sub #1, dst

    Описание: Операнд уменьшается на 1. Значение 1 подставляется из генератора констант.

    Ш Команда: DECD — DECrement Double — уменьшить дважды

    Синтаксис: decd dst

    Эмуляция: sub #2, dst

    Описание: Операнд уменьшается на 2. Значение 2 подставляется из генератора констант.

    Ш Команда: INV — INVersion — инверсия

    Синтаксис: inv dst

    inv.b dst

    Эмуляция: xor #0FFFFh, dst

    xor.b #0FFh, dst

    Описание: Состояние всех бит операнда инвертируется. Значение FFFFh/FFh, что соответствует -1 подставляется из генератора констант.

    Ш Команда: RLC — Rotate Left trough Carry — вращение влево через перенос

    Синтаксис: rlc dst

    Эмуляция: addc dst, dst

    Описание: Все биты аргумента сдвигаются влево на один бит, в младший бит записывается содержимое бита C, старший бит операнда записывается в бит C.

    Ш Команда: RLA — Rotate Left Arithmetically — сдвиг влево арифметический.

    Синтаксис: rla dst

    Эмуляция: add dst, dst

    Описание: Все биты аргумента сдвигаются влево на один бит, в младший бит записывается 0, старший бит операнда записывается в бит C.

    Пример: Двоичное значение, содержащееся в регистре R12 преобразовать в BCD формат. Результат поместить в R15.

    mov #16, R13 ; Загрузка счетчика бит

    mov #0, R15; очистка R15

    loop: rla R12 ; сдвиг влево исходного числа

    dadd R15, R15 ; сдвиг результата влево с учетом C и

    ; BCD коррекция

    dec R13 ; Если сдвинуты не все биты,

    jne loop ; переход на начало цикла

    Ш Команда: TST — TeST — тестирование (на ноль и минус)

    Синтаксис: tst dst

    Эмуляция: cmp #0, dst

    Описание: Содержимое операнда сравнивается с нулем, по результату сравнения устанавливаются флаги Z и N.

    Ш Команда: POP — вытолкнуть

    Синтаксис: pop dst

    Эмуляция: mov @SP+, dst

    Описание: В операнд dst загружаются данные из стека, указатель стека перемещается на следующую позицию.

    Ш Команда: BR — BRanch — ветвление

    Синтаксис: br src

    Эмуляция: mov src, PC

    Описание: Осуществляет безусловный переход на произвольное адресное расстояние при использовании любого режима адресации.

    Пример:

    br #Lab ; переход наметку Lab

    br Lab ; переход по адресу, содержащемуся в ячейке,

    ; помеченной как Lab

    br R10 ; переход по адресу, содержащемуся в регистре R10

    br &200h ; переход по адресу, содержащемуся в ячейке с адресом 200h

    br @R10 ; переход по адресу, содержащемуся в ячейке,

    ; адрес которой содержится в R10

    br 4(R10) ; переход по адресу, содержащемуся в ячейке,

    ; адрес которой равен сумме содержимого R10 и смещения 4

    br @R10+ ; переход по адресу, содержащемуся в ячейке, адрес которой

    ; содержится в R10, после чего содержимое R10 увеличивается

    ; на 2.

    Ш Команда: RET — RETurn — вернуться

    Синтаксис: ret

    Эмуляция: mov @SP+, PC

    Описание: Осуществляет переход по адресу, сохраненному в стеке, после чего передвигает указатель стека на следующую позицию. Этой командой должна завершаться каждая подпрограмма.

    Ш Команда: CLR — CLeaR — очистить

    Синтаксис: clr dst

    Эмуляция: mov #0, dst

    Описание: Очищает операнд приемник. Значение 0 подставляется из генератора констант.

    Ш Команда: CLRС — CLeaR Carry — очистить флаг C

    Синтаксис: clrc

    Эмуляция: bic #1, SR

    Описание: Очищает флаг C в статусном регистре. Значение 1 подставляется из генератора констант.

    Ш Команда: SETС — SET Carry — установить флаг C

    Синтаксис: setc

    Эмуляция: bis #1, SR

    Описание: Устанавливает флаг C в статусном регистре. Значение 1 подставляется из генератора констант.

    Ш Команда: CLRZ — CLeaR Zero — очистить флаг Z

    Синтаксис: clrz

    Эмуляция: bic #2, SR

    Описание: Очищает флаг Z в статусном регистре. Значение 2 подставляется из генератора констант.

    Ш Команда: SETZ — SET Zero — установить флаг Z

    Синтаксис: setz

    Эмуляция: bis #2, SR

    Описание: Устанавливает флаг Z в статусном регистре. Значение 2 подставляется из генератора констант.

    Ш Команда: CLRN — CLeaR Negative — очистить флаг N

    Синтаксис: clrn

    Эмуляция: bic #4, SR

    Описание: Очищает флаг N в статусном регистре. Значение 4 подставляется из генератора констант.

    Ш Команда: SETN — SET Negative — установить флаг N

    Синтаксис: setn

    Эмуляция: bis #4, SR

    Описание: Устанавливает флаг N в статусном регистре. Значение 4 подставляется из генератора констант.

    Ш Команда: DINT — Disable INTerrupts — запретить прерывания

    Синтаксис: dint

    Эмуляция: bic #8, SR

    Описание: Очищает флаг GIE в статусном регистре. Все маскируемые прерывания процессора запрещаются. Значение 8 подставляется из генератора констант.

    Ш Команда: EINT — Enable INTerrupts — разрешить прерывания

    Синтаксис: eint

    Эмуляция: bis #8, SR

    Описание: Устанавливает флаг GIE в статусном регистре. Все маскируемые прерывания процессора разрешаются. Значение 8 подставляется из генератора констант.

    Ш Команда: NOP — No OPeration — нет операции

    Синтаксис: nop

    Эмуляция: mov R3, R3

    Описание: Не выполняет никаких операций. Используется для организации программной задержки на один такт.

    3. Периферийные устройства микроконтроллеров MSP430F1xx

    3.1 Внешние выводы микроконтроллера MSP430F149

    Каждый микроконтроллер серии MSP кроме процессорного ядра и встроенной памяти имеет в своем составе ряд периферийных устройств. Большинство из них для обеспечения своего функционирования должны иметь внешние выводы для общения с внешним миром. Почти все выводы, связанные с периферийными устройствами, разделяются с параллельными портами ввода/вывода. Поэтому все внешние выводы имеют, как минимум, две альтернативные функции. В качестве примера назначения внешних выводов рассмотрим модель MSP430F149.

    Микроконтроллер MSP430F149 имеет в своем составе следующие периферийные устройства:

    — Flash память программ объемом 60 kB + 256 B информационной памяти;

    — ОЗУ данных объемом 2 kB;

    — 6 двунаправленных 8-битных портов ввода/вывода;

    — 2 тактовых генератора для подключения внешних резонаторов, плюс встроенный RC генератор DCO;

    — аппаратный умножитель 16×16 бит;

    — супервизор питания;

    — сторожевой таймер WatchDog;

    — 16-ти битный таймер А3 с тремя модулями захвата/сравнения (СС модули);

    — 16-ти битный таймер В7 с семью модулями захвата/сравнения;

    — 2 универсальных синхронно-асинхронных последовательных приемо-передатчика USART;

    — 8-канальный 12-ти разрядный АЦП;

    — аналоговый компаратор.

    Микросхема MSP430F149 упакована в миниатюрный пластиковый квадратный корпус с 64 выводами QFP (Quad Flat Pack). Название, назначение и номера выводов представлены в таблице 4. В колонке Ввод/Вывод приняты обозначения: I — вход, O — выход, I/O — двунаправленный, S — вывод питания

    Таблица 4

    Наименование

    вывода

    Ввод/

    Вывод

    Назначение

    AVCC

    S

    Аналоговое питание для АЦП

    AVSS

    S

    Аналоговая земля для АЦП

    DVCC

    S

    Питание для цифровой части

    DVSS

    S

    Цифровая земля

    P1.0/TACLK

    I/O

    Бит 0 порта1; Вход тактирования для Таймера А

    P1.1/TA0

    I/O

    Бит 1 порта1; Вход/Выход модуля 0 захвата/сравнения Таймера А

    P1.2/TA1

    I/O

    Бит 2 порта1; Вход/Выход модуля 1 захвата/сравнения Таймера А

    P1.3/TA2

    I/O

    Бит 3 порта1; Вход/Выход модуля 2 захвата/сравнения Таймера А

    P1.4/SMCLK

    I/O

    Бит 4 порта1; Выход сигнала тактирования SMCLK

    P1.5/TA0

    I/O

    Бит 5 порта1; Выход модуля сравнения 0 Таймера А

    P1.6/TA1

    I/O

    Бит 6 порта 1; Выход модуля сравнения 1 Таймера А

    P1.7/TA2

    I/O

    Бит 7 порта 1; Выход модуля сравнения 2 Таймера А

    P2.0/ACLK

    I/O

    Бит 0 порта 2; Выход сигнала тактирования ACLK

    P2.1/TAINCLK

    I/O

    Бит 1 порта 2; Вход тактирования для Таймера А

    P2.2/CAOUT/TA0

    I/O

    Бит 2 порта 2; Выход Аналогового компаратора; Вход/Выход модуля 0 захвата/сравнения Таймера А

    P2.3/CA0/TA1

    I/O

    Бит 3 порта 2; Вход аналогового компаратора; Выход модуля сравнения 1 Таймера А

    P2.4/CA1/TA2

    I/O

    Бит 4 порта 2; Вход аналогового компаратора; Выход модуля сравнения 2 Таймера А

    P2.5/ROSC

    I/O

    Бит 5 порта 2; Вывод для подключения внешнего резистора DCO

    P2.6/ADC12CLK

    I/O

    Бит 6 порта 2; Вход внешнего тактирование АЦП

Показать весь текст
Заполнить форму текущей работой