Микроконтроллеры MSP430
Адресное пространство микроконтроллеров MSP430F1xx. Байтовая и словная формы инструкций. Система команд MSP микроконтроллеров. Периферийные устройства микроконтроллеров MSP430F1xx. Аналого-цифровой преобразователь ADC12, его технические характеристики.
Рубрика | Коммуникации, связь, цифровые приборы и радиоэлектроника |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 04.05.2014 |
Размер файла | 278,1 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
- Микроконтроллеры 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
- Выв.
Использование микроконтроллеров AVR фирмы Atmel в проектируемой аппаратуре. Архитектура и общие характеристики прибора, предназначение арифметики логического устройства и понятие флэш-памяти. Формат пакета данных, алгоритм их передачи и система команд.
контрольная работа [427,3 K], добавлен 12.11.2010Семейство 16-разрядных микроконтроллеров Motorola 68HC12, их структура и функционирование. Модуль формирования ШИМ-сигналов. Средства отладки и программирования микроконтроллеров 68НС12. Особенности микроконтроллеров семейства MCS-196 фирмы INTEL.
курсовая работа [239,6 K], добавлен 04.01.2015Рассмотрение структуры и принципов работы таймеров/счетчиков (общего назначения, сторожевого, типов А, В, С, D, Е) микроконтроллеров и аналого-цифрового преобразователя семейства AVR с целью разработки обучающего компьютерного электронного пособия.
курсовая работа [1,0 M], добавлен 06.03.2010Микроконтроллеры - микросхемы, предназначенные для управления электронными устройствами, их классификация. Структура процессорного ядра микроконтроллеров, основные характеристики, определяющие его производительность. CISC и RISC архитектура процессора.
курсовая работа [43,2 K], добавлен 03.10.2010Общая характеристика и применение микроконтроллеров FUJITSU MB-90 и MCS-196 фирмы Intel. Основные особенности микроконтроллеров серии MCS-96 и MB90385. Внутренняя архитектура процессоров. Система команд, работа с внутренними и внешними устройствами.
курсовая работа [768,0 K], добавлен 01.12.2010Классификация, структура, архитектура и модульная организация микроконтроллеров. Средства разработки программного обеспечения AVR-контроллеров. Директивы транслятора ассемблера, рабочая частота и циклы. Исследование арифметических и логических команд.
методичка [3,0 M], добавлен 19.09.2019Проектирование измерительных приборов. Параметры цифрового вольтметра. Принцип время-импульсного преобразования. Области применения микроконтроллеров. Алгоритм приложения для цифрового милливольтметра постоянного тока. Сборка элементов на печатной плате.
дипломная работа [891,7 K], добавлен 17.06.2013Общая характеристика операций, выполняемых по командам базовой системы. Описание и мнемокоды команд, используемых при разработке программы на языке AVR Ассемблера. Основные принципы работы команд с обращением по адресу SRAM и к регистрам ввода–вывода.
реферат [148,4 K], добавлен 21.08.2010Особенности проектирования микропроцессорного устройства "Цифровой осциллограф". Выбор микроконтроллера, описание периферийных устройств. Разработка принципиальной схемы устройства и программы для микроконтроллера, осуществляющей все функции устройства.
курсовая работа [923,5 K], добавлен 24.12.2012Понятие и виды микроконтроллеров. Особенности программирования микропроцессорных систем, построение систем управления химико-технологическим процессом. Изучение архитектуры микроконтроллера ATmega132 фирмы AVR и построение на его основе платформы Arduino.
курсовая работа [1,9 M], добавлен 13.01.2011
Модель |
Flash, kB |
RAM, B |
Int |
I/O |
Mul |
TimerB |
UART/SPI |
ADC |
DAC |
DMA |
корпуса |
|
MSP430F1101 |
1 |
128 |
7 |
14 |
- |
- |
- |
- |
- |
- |
20 |
|
MSP430F1121 |
4 |
256 |
7 |
14 |
- |
- |
- |
- |
- |
- |
20 |
|
MSP430F122 |
4 |
256 |
9 |
24 |
- |
- |
1 |
- |
- |
- |
28 |
|
MSP430F123 |
8 |
256 |
9 |
24 |
- |
- |
1 |
- |
- |
- |
28 |
|
MSP430F1222 |
4 |
256 |
10 |
24 |
- |
- |
1 |
ADC10 |
- |
- |
28 |
|
MSP430F1232 |
8 |
256 |
10 |
24 |
- |
- |
1 |
ADC10 |
- |
- |
28 |
|
MSP430F133 |
8 |
256 |
15 |
54 |
- |
3CC |
2 |
ADC12 |
- |
- |
64 |
|
MSP430F135 |
16 |
512 |
15 |
54 |
- |
3CC |
2 |
ADC12 |
- |
- |
64 |
|
MSP430F147 |
32 |
1k |
15 |
54 |
+ |
7CC |
2 |
ADC12 |
- |
- |
64 |
|
MSP430F148 |
48 |
2k |
15 |
54 |
+ |
7CC |
2 |
ADC12 |
- |
- |
64 |
|
MSP430F149 |
60 |
2k |
15 |
54 |
+ |
7CC |
2 |
ADC12 |
- |
- |
64 |
|
MSP430F155 |
16 |
512 |
16 |
54 |
- |
3CC |
1 |
ADC12 |
2 |
3 |
64 |
|
MSP430F156 |
24 |
1k |
16 |
54 |
- |
3CC |
1 |
ADC12 |
2 |
3 |
64 |
|
MSP430F157 |
32 |
1k |
16 |
54 |
- |
3CC |
1 |
ADC12 |
2 |
3 |
64 |
|
MSP430F167 |
32 |
1k |
16 |
54 |
+ |
7CC |
2 +I2C |
ADC12 |
2 |
3 |
64 |
|
MSP430F168 |
48 |
2k |
16 |
54 |
+ |
7CC |
2 +I2C |
ADC12 |
2 |
3 |
64 |
|
MSP430F169 |
60 |
2k |
16 |
54 |
+ |
7CC |
2 +I2C |
ADC12 |
2 |
3 |
64 |
|
MSP430F1610 |
32 |
5k |
16 |
54 |
+ |
7CC |
2 +I2C |
ADC12 |
2 |
3 |
64 |
|
MSP430F1611 |
48 |
10k |
16 |
54 |
+ |
7CC |
2 +I2C |
ADC12 |
2 |
3 |
64 |
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..65535 (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+26505=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 #-32768, 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 |
64 |
S |
Аналоговое питание для АЦП |
|
AVSS |
62 |
S |
Аналоговая земля для АЦП |
|
DVCC |
1 |
S |
Питание для цифровой части |
|
DVSS |
63 |
S |
Цифровая земля |
|
P1.0/TACLK |
12 |
I/O |
Бит 0 порта1 ; Вход тактирования для Таймера А |
|
P1.1/TA0 |
13 |
I/O |
Бит 1 порта1 ; Вход/Выход модуля 0 захвата/сравнения Таймера А |
|
P1.2/TA1 |
14 |
I/O |
Бит 2 порта1 ; Вход/Выход модуля 1 захвата/сравнения Таймера А |
|
P1.3/TA2 |
15 |
I/O |
Бит 3 порта1 ; Вход/Выход модуля 2 захвата/сравнения Таймера А |
|
P1.4/SMCLK |
16 |
I/O |
Бит 4 порта1 ; Выход сигнала тактирования SMCLK |
|
P1.5/TA0 |
17 |
I/O |
Бит 5 порта1 ; Выход модуля сравнения 0 Таймера А |
|
P1.6/TA1 |
18 |
I/O |
Бит 6 порта 1 ; Выход модуля сравнения 1 Таймера А |
|
P1.7/TA2 |
19 |
I/O |
Бит 7 порта 1 ; Выход модуля сравнения 2 Таймера А |
|
P2.0/ACLK |
20 |
I/O |
Бит 0 порта 2 ; Выход сигнала тактирования ACLK |
|
P2.1/TAINCLK |
21 |
I/O |
Бит 1 порта 2 ; Вход тактирования для Таймера А |
|
P2.2/CAOUT/TA0 |
22 |
I/O |
Бит 2 порта 2; Выход Аналогового компаратора; Вход/Выход модуля 0 захвата/сравнения Таймера А |
|
P2.3/CA0/TA1 |
23 |
I/O |
Бит 3 порта 2 ; Вход аналогового компаратора; Выход модуля сравнения 1 Таймера А |
|
P2.4/CA1/TA2 |
24 |
I/O |
Бит 4 порта 2 ; Вход аналогового компаратора; Выход модуля сравнения 2 Таймера А |
|
P2.5/ROSC |
25 |
I/O |
Бит 5 порта 2 ; Вывод для подключения внешнего резистора DCO |
|
P2.6/ADC12CLK |
26 |
I/O |
Бит 6 порта 2 ; Вход внешнего тактирование АЦП |