Jump to content

СТМ8

СТМ8С
Плашка STM8L152

STM8 STMicroelectronics семейство 8- микроконтроллеров компании . битных Микроконтроллеры STM8 используют расширенный вариант архитектуры микроконтроллера ST7 . Микроконтроллеры STM8 особенно дешевы для полнофункционального 8-битного микроконтроллера. [1]

Архитектура

[ редактировать ]

STM8 очень похож на более ранний ST7, но лучше подходит в качестве цели для C благодаря своим 16-битным индексным регистрам и режиму адресации относительно указателя стека . Несмотря на то, что внутренняя архитектура представляет собой Гарвардскую архитектуру, она имеет «мост памяти», который создает единое 24-битное адресное пространство, позволяя выполнять код из ОЗУ (полезно для внутрисистемного программирования флэш -ПЗУ ), а данные (например, таблицы поиска ) — быть доступным из ПЗУ. При доступе «мост памяти» при необходимости останавливает ЦП, чтобы стал возможен доступ к записи во флэш-ПЗУ, подобный ОЗУ. Выполнение кода из EEPROM отклоняется и создается событие сброса. Произвольный доступ к данным размером более 64 КБ ограничен специальными инструкциями «загрузить далеко»; Операнды памяти большинства операций могут иметь доступ не более чем к 128 КБ (16-битный базовый адрес плюс 16-битное смещение).

В зависимости от типа устройства объем оперативной памяти находится в диапазоне от 1 до 6 КиБ, а объем ПЗУ — от 4 до 8 КиБ (низкая плотность), от 16 до 32 КиБ (средняя плотность) или от 32 до 96 КиБ ( Высокая плотность).

Он имеет те же шесть регистров (A, X, Y, SP, PC, CC), что и ST7, но индексные регистры X и Y расширены до 16 бит, а счетчик программ расширен до 24 бит. Аккумулятор . A и указатель стека остаются 8- и 16-битными соответственно [2]

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

Подсемейства

[ редактировать ]
  • СТМ8АФ автомобильный
  • СТМ8АЛ автомобильный маломощный
  • STM8L маломощный
  • СТМ8С общего назначения
  • STM8T сенсорный
  • Управление освещением STLUX
  • STNRG с широтно-импульсной модуляцией Контроллеры

Поддержка компилятора

[ редактировать ]

STM8 поддерживается бесплатным компилятором C Small Device , бесплатным компилятором Cosmic C с закрытым исходным кодом, [3] и несвободные компиляторы IAR C и Raisonance. Помимо C существует STM8 eForth с открытым исходным кодом, [4] интерактивная система Forth для STM8.

Изменения по сравнению с ST7

[ редактировать ]

Набор инструкций STM8 в основном является расширенным набором инструкций ST7, но он не полностью совместим на уровне двоичного кода.

Операции с регистрами X и Y расширены до 16 бит. Таким образом, операции загрузки и сохранения получают доступ к двум байтам памяти, а не к одному. (Кроме того, флаг полупереноса был изменен, чтобы отразить перенос с бита 7 на бит 8 16-битного результата, а не с бита 3 на 4.)

Прерывания передают девять байтов состояния вместо пяти, как в ST7.

Команда умножения сохраняет 16-битное произведение в указанном индексном регистре (например, X), а не делит его между X и A.

Режимы косвенной адресации, которые извлекают 8-битный адрес из памяти (коды операций 92 2x, 92 3x, 92 Bx, 92 6x, 92 Ex, 91 6x, и 91 Ex) были удалены; все режимы косвенной адресации выбирают 16-битные адреса. Новый байт префикса 72 был добавлен и использовался для косвенного кодирования, начиная с 16-битного адреса.

Инструкции по битовым манипуляциям были изменены: теперь они используют 16-битный адрес и требуют 72 префиксный байт. Коды операций без префиксов 0x и 1x они ранее были заняты, вместо этого используются для относительной адресации указателя стека.

Коды операций некоторых редко используемых инструкций ветвления были изменены, чтобы требовать 90 префикс, а коды операций без префикса переназначаются подписанным ветвям, которые зависят от флага V.

Инструкции загрузки и сравнения, предназначенные для регистра X, малопригодны для ST7, поскольку режимы адресации индексируются регистром X. В STM8, когда такие операции указывают операнд памяти, индексированный регистром X, операнд регистра изменяется на Y. 90 префикса, регистры меняются местами, поэтому индексный регистр равен Y, а регистр операнда — X.

Одним из основных отличий в производительности является то, что STM8 извлекает 32 бита из ПЗУ за цикл, а выполнение многих инструкций занимает один цикл. В зависимости от длины инструкции и количества необходимых циклов выполнение из ОЗУ происходит несколько медленнее. ST7, напротив, извлекает 8 бит за такт и занимает один такт на каждый байт инструкции.

Набор инструкций

[ редактировать ]

Большинство байтов кода операции STM8 состоят из 1 бита типа (один или два операнда), трех битов режима адресации и четырех битов кода операции. Назначаются только 6 режимов адресации и 12 однооперандных кодов операций, оставляя место для кодирования, где размещаются другие инструкции.

Обзор инструкций STM8 [2]
7 6 5 4 3 2 1 0 Описание
0 режим код операции Инструкции с одним операндом (режим ≠ 1, 2)
0 0 0 1 код операции Дополнительные инструкции с двумя операндами
0 0 1 0 код операции Условные ветки
0 код операции 0 0 0 1 Другие арифметические инструкции
(код операции ≠ 1, 2)
0 код операции 0 0 1 0
0 код операции 0 1 0 1
0 код операции 1 0 1 1
1 режим код операции Инструкции с двумя операндами (режим ≠ 0, 1)
1 0 0 код операции Различные неарифметические инструкции

Инструкции STM8 состоят из необязательного префиксного байта ( 7216, 9016, 9116, или 9216), байт кода операции и несколько (до четырех, но редко более двух) байтов операндов. Байты префикса в основном изменяют режим адресации, используемый для указания операнда памяти, но в некоторых случаях префиксы 72 и 90 полностью измените значение байта кода операции.

Префикс 90 меняет местами X и Y в следующей инструкции. В таблице ниже эти варианты объединены в одну строку записью «X/Y», что означает либо «X», либо «Y». Префикс 90 также используется в двух местах для введения новых кодов операций: инструкций BCPL и BCCM и некоторых условий ветвления.

Префикс 92 преобразует инструкции со смещенным операндом ( addr16 ,X) в косвенную адресацию ([ addr8 ],X). Смещение заменяется 8-битным адресом 16-битного значения смещения в памяти. Он используется только для этой функции.

Префикс 91 имеет оба предыдущих эффекта, преобразуя режимы адресации ([ addr16 ,X) в ([ addr8 ],Y).

Префикс 72 используется во многих местах, но гораздо менее регулярно. В некоторых случаях он вводит новые режимы адресации (в частности, 16-битный косвенный режим ([ addr16 ],X)), но также вводит множество совершенно новых операций.

Набор инструкций STM8 [2]
Префикс 7 6 5 4 3 2 1 0 Операнды Мнемоника Описание
0 0 0 0 код операции адрес8 ОП ( адрес8 , ИП) Инструкции с одним операндом (см. ниже)
0 0 0 1 код операции адрес8 ОП А, ( адрес8 , СП) Инструкции с двумя операндами и стековым операндом
0 0 0 1 0 0 0 0 адрес8 SUB A, ( адрес 8 , SP) А := А - операнд
0 0 0 1 0 0 0 1 адрес8 CP A, ( адрес8 , SP) Сравните A — операнд
0 0 0 1 0 0 1 0 адрес8 SBC A, ( адрес8 , SP) A := A − операнд − C вычитание с заимствованием
0 0 0 1 0 0 1 1 адрес8 CPW X,( адрес8 ,SP) Сравнить X — операнд (16-битный)
0 0 0 1 0 1 0 0 адрес8 И А,( адрес8 ,SP) A := A & операнд, поразрядно и
0 0 0 1 0 1 0 1 адрес8 BCP A, ( адрес8 , SP) Побитовый тест A и операнд
0 0 0 1 0 1 1 0 адрес8 LDW Y,( адрес8 ,SP) Y := операнд ( LD A,( addr8 ,SP), назначенный коду операции 7B)
0 0 0 1 0 1 1 1 адрес8 LDW ( адрес8 , SP),Y Операнд := Y ( LD ( addr8 ,SP),A назначен коду операции 6B)
0 0 0 1 1 0 0 0 адрес8 XOR A, ( адрес8 , SP) A := A ^ операнд, исключающее-или
0 0 0 1 1 0 0 1 адрес8 АЦП А, ( адрес8 , SP) A := A + операнд + C, добавить с переносом
0 0 0 1 1 0 1 0 адрес8 ИЛИ A,( адрес8 ,SP) А := А | операнд, включающий или
0 0 0 1 1 0 1 1 адрес8 ДОБАВИТЬ A,( адрес8 ,SP) А := А + операнд
0 0 0 1 1 1 0 0 имм16 ADDW X,#imm16 X := X + немедленно (= JP ( addr8 ,SP) )
0 0 0 1 1 1 0 1 имм16 СУБВ X,#imm16 X := X - немедленный (= CALL ( addr8 ,SP) )
0 0 0 1 1 1 1 0 адрес8 LDW X,( адрес8 ,SP) X := операнд
0 0 0 1 1 1 1 1 адрес8 LDW ( адрес8 , SP),X Операнд := Х
72/90 0 0 0 с кусочек v операнды Битовые операции
72 0 0 0 0 кусочек 0 адрес16 софф8 BTJT addr16 , # бит , метка Перейти к ПК + soff8, если исходный бит истинен (установлен)
72 0 0 0 0 кусочек 1 адрес16 софф8 BTJF addr16 , # бит , метка Перейти к ПК + soff8, если исходный бит ложный (сброс)
72 0 0 0 1 кусочек 0 адрес16 BSET адрес16 , # бит Установить указанный бит в 1
72 0 0 0 1 кусочек 1 адрес16 BRES адрес16 , # бит Сбросить (очистить) указанный бит в 0
90 0 0 0 1 кусочек 0 адрес16 BCPL адрес16 , # бит Дополнить (переключить) выбранный бит
90 0 0 0 1 кусочек 1 адрес16 BCCM адрес16 , # бит Записать флаг переноса в бит памяти
—/90 0 0 1 0 состояние soff8 Условные переходы (8-битное знаковое смещение)
0 0 1 0 0 0 0 0 soff8 JRA Этикетки Ветка всегда (истина)
0 0 1 0 0 0 0 1 soff8 JRF Этикетка Ветка никогда (ложь)
0 0 1 0 0 0 1 0 soff8 JRUGT Этикетка Переход, если беззнаковое число больше (C=0 и Z=0)
0 0 1 0 0 0 1 1 soff8 JRULE Ярлык Переход, если беззнаковое число меньше или равно (C=1 или Z=1)
0 0 1 0 0 1 0 0 soff8 JRNC Этикетка Переходить, если нет переноса (C=0)
0 0 1 0 0 1 0 1 soff8 JRC Этикетка Ответвление при переносе (C=1)
0 0 1 0 0 1 1 0 soff8 JRNE Этикетка Разветвление, если не равно (Z=0)
0 0 1 0 0 1 1 1 soff8 JREQ Метка Разветвление при равенстве (Z=1)
0 0 1 0 1 0 0 0 soff8 JRNV Этикетка Переходить, если нет переполнения (V=0)
90 0 0 1 0 1 0 0 0 soff8 JRNH Этикетка Переход, если не полуперенос (H=0)
0 0 1 0 1 0 0 1 soff8 JRV Этикетка Переходить при переполнении (V=1)
90 0 0 1 0 1 0 0 1 soff8 JRH Этикетка Переход в случае полупереноса (H=1)
0 0 1 0 1 0 1 0 soff8 JRPL Лейбл Переход, если плюс (N=0)
0 0 1 0 1 0 1 1 soff8 JRMI Этикетка Переходить, если минус (N=1)
0 0 1 0 1 1 0 0 soff8 JRSGT Этикетка Переход, если знак больше (S=0 и N=V)
90 0 0 1 0 1 1 0 0 soff8 JRNM Этикетка Переход по маске прерывания (I=0)
0 0 1 0 1 1 0 1 soff8 JRSLE Этикетка Переход, если знак меньше или равен (S=1 или N≠V)
90 0 0 1 0 1 1 0 1 soff8 JRM Этикетки Переход, если прерывания замаскированы (I=1)
0 0 1 0 1 1 1 0 soff8 JRSGE Этикетка Ветвь, если знак больше или равен (N=V)
90 0 0 1 0 1 1 1 0 soff8 JRIL Этикетка Переход, если линия прерывания имеет низкий уровень
0 0 1 0 1 1 1 1 soff8 JRSLT Этикетка Ветвь, если знак меньше (N≠V)
90 0 0 1 0 1 1 1 1 soff8 JRIH Этикетка Переход, если линия прерывания имеет высокий уровень
префикс 0 режим код операции операнд Инструкции с одним операндом
0 0 0 0 код операции адрес8 ОП ( адрес8 , ИП) Указатель стека относительно
0 0 0 1 код операции (переназначено на инструкции с двумя операндами со стеком; см. выше)
0 0 1 0 код операции (переназначено на условные ветки; см. выше)
0 0 1 1 код операции адрес8 ОП адрес8 8-битный абсолютный адрес
72 0 0 1 1 код операции адрес16 ОП [ адрес16 ] 16-битный косвенный адрес
92 0 0 1 1 код операции адрес8 ОП [ адрес8 ] 8-битный косвенный адрес 16-битного адреса
0 1 0 0 код операции ОП А аккумулятор
72/90 0 1 0 0 код операции адрес16 ОП ( адрес16 , X/Y) Индексировано с 16-битным смещением
—/90 0 1 0 1 код операции ОПВ X/Y Регистр X/Y (16-битная операция)
72 0 1 0 1 код операции адрес16 ОП адрес 16 16-битный адрес
—/90 0 1 1 0 код операции адрес8 ОП ( адрес8 , X/Y) 8-битный адрес плюс X/Y
72 0 1 1 0 код операции адрес16 ОП ([ адрес16 ],X) 16-битный косвенный адрес плюс X
92/91 0 1 1 0 код операции адрес8 ОП ([ адрес8 ],X/Y) 8-битный косвенный адрес плюс X/Y
—/90 0 1 1 1 код операции ВВЕРХ (X/Y) Индексировано без смещения
префикс 0 режим 0 0 0 0 операнд ОБРАТНЫЙ операнд Отрицание с дополнением до двух
0 режим 0 0 0 1 (переназначено на обменные операции; см. следующий раздел)
0 режим 0 0 1 0 (переназначено на другие операции; см. следующий раздел)
префикс 0 режим 0 0 1 1 операнд CPL- операнд Дополнение единиц , логическое нет
префикс 0 режим 0 1 0 0 операнд SRL операнд Логический сдвиг вправо, мсбит очищен, лсбит переносится: (операнд:C) := (0:операнд)
0 режим 0 1 0 1 (переназначено на другие операции; см. следующий раздел)
префикс 0 режим 0 1 1 0 операнд RRC Операнд Поворот вправо через перенос, (операнд:C) := (C:operand)
префикс 0 режим 0 1 1 1 операнд SRA Операнд Сдвиг вправо в арифметике, мсбит сохраняется, лсбит переносится
префикс 0 режим 1 0 0 0 операнд SLL- операнд Сдвиг влево, мбит для переноса: (C:operand) := (operand:0)
префикс 0 режим 1 0 0 1 операнд RLC- операнд Поворот влево посредством переноса, (C:operand) := (operand,C)
префикс 0 режим 1 0 1 0 операнд декабря операнд Декремент; N и Z установлены, перенос без изменений
0 режим 1 0 1 1 (переназначено на другие операции; см. следующий раздел)
префикс 0 режим 1 1 0 0 операнд ВКЛ. операнд Приращение; N и Z установлены, перенос без изменений
префикс 0 режим 1 1 0 1 операнд ТНЗ операнд Проверьте ненулевое значение: установите N и Z на основе значения операнда
префикс 0 режим 1 1 1 0 операнд замены Операнд Поменять местами половины операнда (4-битное вращение; 8-битное для SWAPW X и SWAPW Y)
префикс 0 режим 1 1 1 1 операнд CLR операнд Установить операнд в 0, N очищено, Z установлено.
префикс 0 режим код операции операнд Переназначены оподы [03-7][125B] из диапазона с одним операндом.
—/90 0 0 0 0 0 0 0 1 RRWA X/Y Поворот слова вправо через A: 8-битный поворот вправо из 24-битной конкатенации X/Y и A; (Х:А) := (А:Х)
0 0 1 1 0 0 0 1 адрес16 EXG А, адрес 16 Обмен A с памятью
0 1 0 0 0 0 0 1 EXG А,XL Обмен A на X (меньшая половина)
0 1 0 1 0 0 0 1 ЭКГВ X,Y Обмен X на Y (16 бит)
0 1 1 0 0 0 0 1 EXG А,YL Обмен A на Y (меньшая половина)
0 1 1 1 0 0 0 1 (сдержанный)
—/90 0 0 0 0 0 0 1 0 РЛВА X/Y Поворот слова влево через A: 8-битный поворот влево из 24-битной конкатенации X/Y и A; (А:Х) := (Х:А)
0 0 1 1 0 0 1 0 адрес16 POP- адрес 16 Вытащить из стека
—/90 0 1 0 0 0 0 1 0 МУЛ X/Y,А X/Y := XL/YL × A
0 1 0 1 0 0 1 0 imm8 SUBW SP,#imm СП := СП − imm8
—/90 0 1 1 0 0 0 1 0 РАЗДЕЛ X/Y,А Разделите X/Y на A; 16-битное частное в X/Y, остаток в A
0 1 1 1 0 0 1 0 ПРЕФИКС Префикс инструкции 72: изменить следующий код операции
0 0 0 0 0 1 0 1 (сдержанный)
0 0 1 1 0 1 0 1 imm8 адрес16 MOV адрес16 , # imm8 Немедленное перемещение в память (флаги не затрагиваются)
0 1 0 0 0 1 0 1 адрес8 адрес8 MOV адрес8 , адрес8 Переместить память в память (флаги не затронуты)
0 1 0 1 0 1 0 1 адрес16 адрес16 MOV адрес16 , адрес16 Переместить память в память (флаги не затронуты)
0 1 1 0 0 1 0 1 РАЗДЕЛ X,Y Разделить X на Y (16 бит); частное по X, остаток по Y
0 1 1 1 0 1 0 1 (сдержанный)
0 0 0 0 1 0 1 1 (сдержанный)
0 0 1 1 1 0 1 1 адрес16 НАЖМИТЕ адрес 16 Поместить в стек
0 1 0 0 1 0 1 1 imm8 НАЖМИТЕ #imm8 Поместить в стек
0 1 0 1 1 0 1 1 imm8 ADDW SP,#imm8 СП := СП + imm8
0 1 1 0 1 0 1 1 адрес8 ЛД ( адрес8 , СП),А Хранить относительно стека
0 1 1 1 1 0 1 1 адрес8 LD A,( адрес8 ,SP) Загрузка относительно стека
1 0 0 код операции Разные инструкции. Ни один неявно не устанавливает коды условий.
1 0 0 0 0 0 0 0 Он пойдет Возврат из прерывания (pop CC, A, X, Y, PC)
1 0 0 0 0 0 0 1 ВЕРНО Извлечь 16-битный обратный адрес из стека на ПК
1 0 0 0 0 0 1 0 адрес24 ИНТ. Специальный переход для таблицы векторов прерываний
1 0 0 0 0 0 1 1 ЛОВУШКА Принудительное прерывание ловушки
1 0 0 0 0 1 0 0 ПОП А Вытащить A из стека
—/90 1 0 0 0 0 1 0 1 ПОПВ X/Y Извлечение X/Y из стека (16 бит)
1 0 0 0 0 1 1 0 ПОП СС Извлечь коды условий из стека
1 0 0 0 0 1 1 1 РЕТФ Извлечь 24-битный обратный адрес из стека на ПК
1 0 0 0 1 0 0 0 НАЖМИТЕ А Поместите A в стек
—/90 1 0 0 0 1 0 0 1 НАЖМИТЕ X/Y Поместить X/Y в стек (16 бит)
1 0 0 0 1 0 1 0 НАЖМИТЕ СС Поместить коды условий в стек
1 0 0 0 1 0 1 1 ПЕРЕРЫВ Остановить отладчик, если он присутствует, или NOP.
1 0 0 0 1 1 0 0 CCF Дополнить (переключить) флаг переноса
1 0 0 0 1 1 0 1 адрес24 CALLF адрес 24 Нажмите 24-битный ПК; ПК := адрес24
92 1 0 0 0 1 1 0 1 адрес16 CALLF [ адрес 16 ] Косвенный дальний звонок; адрес имеет 24-битный указатель
1 0 0 0 1 1 1 0 ОСТАНОВКА Остановить процессор и часы
1 0 0 0 1 1 1 1 ВФИ Дождитесь прерывания, останавливая процессор, но не часы.
72 1 0 0 0 1 1 1 1 ВФЕ Дождитесь события (сопроцессора), нормально обрабатывая прерывания во время ожидания
1 0 0 1 0 0 0 0 ПДИ Префикс инструкции 90: поменять местами X и Y в следующей инструкции
1 0 0 1 0 0 0 1 Толстый Префикс инструкции 91: PDY плюс PIX
1 0 0 1 0 0 1 0 ПИКС Префикс инструкции 92: использовать косвенную 8-битную память для операнда
—/90 1 0 0 1 0 0 1 1 ЛДВ X/Y,Y/X X/Y := Y/X
—/90 1 0 0 1 0 1 0 0 ЛДВ СП,X/Y СП := X/Y
—/90 1 0 0 1 0 1 0 1 ЛД XH/YH,A XH/YH := А
—/90 1 0 0 1 0 1 1 0 ЛДВ X/Y,СП X/Y := СП
—/90 1 0 0 1 0 1 1 1 ЛД XL/YL,А XL/YL := А
1 0 0 1 1 0 0 0 РШФ Сбросить (очистить) флаг переноса
1 0 0 1 1 0 0 1 СКФ Установить флаг переноса
1 0 0 1 1 0 1 0 РИМ Сбросить маску прерываний (включить прерывания)
1 0 0 1 1 0 1 1 Сим Установить маску прерываний (отключить прерывания)
1 0 0 1 1 1 0 0 РВФ Сбросить (очистить) флаг переполнения
1 0 0 1 1 1 0 1 НЕТ Нет операции
—/90 1 0 0 1 1 1 1 0 ЛД А,XH/YH А := XH/YH
—/90 1 0 0 1 1 1 1 1 ЛД А,XL/YL А := XL/YL
Префикс 1 режим код операции операнд Инструкции с двумя операндами A := Оп операнд
0 0 0 0 код операции адрес8 ОП А, ( адрес8 , СП) (коды операций 6, 7, C, D различаются; см. выше)
1 0 0 код операции (переназначено на разные инструкции; см. выше)
1 0 1 0 код операции imm8 ОП А, # imm8 8-битный непосредственный операнд (запрещен как пункт назначения)
1 0 1 1 код операции адрес8 ОП А, адрес 8 8-битный абсолютный адрес (запрещен для перехода/вызова)
1 1 0 0 код операции адрес16 ОП А, адрес 16 16-битный абсолютный адрес
72 1 1 0 0 код операции адрес16 ОП А, [ адрес16 ] 16-битный косвенный адрес
92 1 1 0 0 код операции адрес8 ОП А, [ адрес8 ] 8-битный косвенный адрес 16-битного адреса
—/90 1 1 0 1 код операции адрес16 ОП А, ( адрес16 , X/Y) Индексировано с 16-битным смещением
72 1 1 0 1 код операции адрес16 ОП А,([ адрес16 ],X) 16-битный косвенный + X
92/91 1 1 0 1 код операции адрес16 ОП А,([ адрес8 ],X/Y) 8-битный косвенный + X/Y
—/90 1 1 1 0 код операции адрес8 ОП А, ( адрес8 , X/Y) Индексировано с 8-битным смещением
—/90 1 1 1 1 код операции НА А,(X/Y) Индексировано без смещения
префикс 1 режим 0 0 0 0 операнд СУБ А, операнд А := А - операнд
префикс 1 режим 0 0 0 1 операнд CP A, операнд Сравните A — операнд
префикс 1 режим 0 0 1 0 операнд SBC A, операнд A := A − операнд − C вычитание с заимствованием
префикс 1 режим 0 0 1 1 операнд CPW X/Y, операнд Сравнить X/Y — операнд (16 бит); сравнить Y/X, если режим операнда индексируется X/Y (коды операций D3, E3, F3)
префикс 1 режим 0 1 0 0 операнд И А, операнд A := A & операнд, поразрядно и
префикс 1 режим 0 1 0 1 операнд BCP A, операнд Побитовый тест A и операнд
префикс 1 режим 0 1 1 0 операнд LD A, операнд А := операнд
префикс 1 режим 0 1 1 1 операнд LD операнд ,A режим 2 LD #imm8,A Операнд := A ( переназначен , см. ниже)
префикс 1 режим 1 0 0 0 операнд Исключающее ИЛИ А, операнд A := A ^ операнд, исключающее-или
префикс 1 режим 1 0 0 1 операнд АЦП А, операнд A := A + операнд + C, добавить с переносом
префикс 1 режим 1 0 1 0 операнд ИЛИ А, операнд А := А | операнд, включающий или
префикс 1 режим 1 0 1 1 операнд ДОБАВИТЬ А, операнд А := А + операнд
префикс 1 режим 1 1 0 0 операнд JP операнд Младшие 16 бит PC := операнда, безусловный переход (режимы 2 JP #imm8 и 3 JP addr8 переназначены, см. ниже)
префикс 1 режим 1 1 0 1 операнд ВЫЗОВ операнда Нажмите 16-битный ПК, младшие 16 бит ПК := операнд (переназначены режимы 2 CALL #imm8 и 3 CALL addr8 , см. ниже)
префикс 1 режим 1 1 1 0 операнд LDW X/Y, операнд Загрузить X/Y := операнд; используйте 16 вместо 90 1E для LDW Y,( addr8 ,SP)
префикс 1 режим 1 1 1 1 операнд LDW Операнд , X/Y Операнд := X/Y (16 бит, режим 2 LD #imm8,X переназначен, см. ниже); сохранить Y/X, если режим операнда индексируется X/Y (коды операций DF, EF, FF); используйте 17 вместо 90 1F для LDW ( addr8 ,SP),Y
Префикс 1 режим код операции операнд Переназначены коды операций A7, AC, BC, AD, BD, AF из диапазона двух операндов.
—/90 1 0 1 0 0 1 1 1 адрес24 ЛДФ ( адрес24 ,X/Y),A Загрузка далеко (= LD #imm8,A )
92/91 1 0 1 0 0 1 1 1 адрес16 ЛДФ ([ адрес16 ],X/Y),A 16-битный адрес 24-битного указателя
1 0 1 0 1 1 0 0 адрес24 JPF адрес 24 ПК:= addr24 (= JP #imm8 )
92 1 0 1 0 1 1 0 0 адрес16 JPF [ адрес 16 ] Непрямой прыжок вдаль; адрес имеет 24-битный указатель
1 0 1 1 1 1 0 0 адрес24 ЛДФ А, адрес 24 Загрузить далеко (= JP addr8 )
92 1 0 1 1 1 1 0 0 адрес16 ЛДФ А,[ адрес16 ] Загрузить дальний 16-битный адрес 24-битного указателя
1 0 1 0 1 1 0 1 soff8 CALLR Метка Нажмите 16-битный ПК, ПК := ПК + операнд (= CALL #imm8 )
1 0 1 1 1 1 0 1 адрес24 ЛДФ адрес 24 Операнд:= A (= ВЫЗОВ адрес8 )
92 1 0 1 1 1 1 0 1 адрес16 ЛДФ [ адрес16 ],А Операнд: = A, 16-битный адрес 24-битного указателя.
—/90 1 0 1 0 1 1 1 1 адрес24 ЛДФ А,( адрес24 ,X/Y) Загрузить далеко (= LDW #imm8,X )
92/91 1 0 1 0 1 1 1 1 адрес16 ЛДФ A,([ адрес16 ],X/Y) 16-битный адрес 24-битного указателя
72 1 режим код операции операнд Арифметика индексного регистра (16 бит) X/Y := X/Y ± операнд
72 1 0 1 0 код операции имм16 OPW X/Y,# imm16 16-битный немедленный
72 1 0 1 1 код операции адрес16 OPW X/Y, адрес 16 16-битный абсолютный
72 1 1 1 1 код операции адрес8 OPW X/Y, ( адрес8 , SP) относительно стека
72 1 режим 0 0 0 0 операнд SUBW X, операнд X := X − операнд (предпочитайте код операции 1D для SUBW X,# imm16 )
72 1 режим 0 0 1 0 операнд SUBW Y, операнд Y := Y - операнд
72 1 режим 1 0 0 1 операнд ADDW Y, операнд Y := Y + операнд
72 1 режим 1 0 1 1 операнд ADDW X, операнд X := X + операнд (предпочтительно использовать код операции 1C для ADDW X,# imm16 )

Для инструкций CPW и LDW, где режим адресации операнда индексируется X, STM8 по умолчанию использует регистр Y вместо X. Применение 90 префикс меняет местами X и Y, поэтому регистр равен X, а режим адресации индексируется Y.

  1. ^ Карлсон, Джей (15 сентября 2017 г.). «СТ СТМ8» . Проверено 12 июня 2018 г.
  2. ^ Перейти обратно: а б с «PM0044: Руководство по программированию процессора STM8» (PDF) . СТМикроэлектроника. Сентябрь 2011 г. Документ 13590 Ред. 3 . Проверено 10 июня 2018 г.
  3. ^ «COS-C-COMPILER — бесплатный компилятор C для всех STM8 от Cosmic» (пресс-релиз). СТМикроэлектроника . Проверено 24 марта 2016 г.
  4. ^ «STM8 eForth — удобный для пользователя Forth для простых микросхем с документацией» . Гитхаб . 18 ноября 2022 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 8d5eaa7e6094a11baa003e70880895fe__1710774600
URL1:https://arc.ask3.ru/arc/aa/8d/fe/8d5eaa7e6094a11baa003e70880895fe.html
Заголовок, (Title) документа по адресу, URL1:
STM8 - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)