ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ Государственное образовательное учреждение высшего профессионального образования «Санкт-Петербургский государственный электротехнический университет “ЛЭТИ” имени В.И. Ульянова (Ленина)» (СПбГЭТУ) __________________________________________________________________ А.Ю. ВОЛКОВ В.А. КАРТАВЕНКО Д.К. КОСТРИН А.А. УХОВ МИКРОПРОЦЕССОРНАЯ ТЕХНИКА Методические рекомендации по проведению практических и лабораторных занятий Санкт-Петербург 2008 Введение Семейство КМОП микроконтроллеров ST7 было разработано и построено вокруг 8-битного ядра и набора периферийных блоков, которые включают ПЗУ, стираемую программируемую постоянную память (EPROM), ОЗУ, электрически стираемую программируемую постоянную память (EEPROM), порты вводы/вывода, последовательные интерфейсы (SPI, SCI, I2C...), 16-битные таймеры, и т.д. Эти блоки могут быть собраны в различных комбинациях, чтобы обеспечить рентабельные решения для различных устройств. Семейство ST7 является частью 8-битовой производственной линии микроконтроллеров фирмы STMicroelectronics, и находит место в широком разнообразии применений, таких как: автоматические системы, устройства дистанционного управления, видео мониторы, автомобильные радиоприемники, и во многих других потребительских, индустриальных, телекоммуникационных, мультимедийных и автомобильных устройствах. Технические характеристики микроконтроллеров ST7LITE2 Память: - 8 Кбайт флэш-памяти программ с защитой от считывания. Внутрисхемное (ICP) и внутрипрограммное (IAP) программирование. Гарантированные 10.000 циклов записи/чтения; - 384 байта ОЗУ. Тактовый генератор, сброс и питание: - Усовершенствованная система сброса; - Усовершенствованный низковольтный супервизор для основного питания и вспомогательный детектор напряжения с возможностью прерывания для обеспечения безопасного сброса системы; - Источники тактовых импульсов: внутренний RC осциллятор с точностью 1%, кварцевый/керамический резонатор или источник внешнего тактирования; - Внутренний 32 МГц тактовый генератор для автоматически перезагружаемого таймера; - Опциональный делитель (PLL) на 4 или на 8 для получения частоты импульсов 4 или 8 МГц; - Пять режимов пониженного энергопотребления: остановка (halt), активная остановка (active halt), ожидание (wait), замедление (slow), автоматическое включение после остановки (auto wake up from halt). Порты ввода/вывода: - До 15 многофункциональных двунаправленных линий ввода/вывода; - 7 линий с высоким входным током. Таймеры: - Настраиваемый сторожевой таймер (watchdog timer); - Два 8-битных Lite-таймера с предделителем; - Один 12-битный автоматически перезагружаемый таймер с 4 ШИМ выходами. Последовательный интерфейс: - Синхронный последовательный интерфейс SPI. Обработка прерываний: - 10 векторов прерываний, плюс программное прерывание и сброс; - 15 внешних линий прерываний (по 4 векторам). Аналого-цифровой преобразователь: - 7 входных каналов; - Операционный усилитель с фиксированным коэффициентом усиления; - 13-битное разрешение для напряжения 0 – 430 мВ (при питании 5 В); - 10-битное разрешение для напряжения 430 мВ – 5 В (при питании 5 В). Система команд: - 8-битная обработка данных; - 63 основных инструкции с определением ошибочных кодов; - 17 основных режимов адресации; - инструкции беззнакового умножения двух 8-битных чисел. Средства разработки: - Полный набор программных и аппаратных средств разработки; - Модуль отладки. В таблице 1 приведены основные характеристики некоторых микроконтроллеров семейства ST7LITE2. Микроконтроллеры ST7LITE2 являются частью семейства микроконтроллеров ST7, основанных на общепринятой промышленно стандартной 8-битной архитектуре ядра. Они имеют усовершенствованную систему команд. Флэш-память ST7LITE2 имеет возможность внутрисхемного (ICP) и внутрипрограммного (IAP) программирования. Существует возможность программного перевода микроконтроллера в режим ожидания, замедления или остановки, уменьшая энергопотребление в случае, когда программа бездействует или находится в режиме ожидания. Таблица 1. Характеристики микроконтроллеров семейства ST7LITE2 Характеристика ST7LITE20 ST7LITE25 ST7LITE29
Память программ, байт 8 К
Оперативная память (стек), байт 384 (128)
Память EEPROM, байт - - 256
Периферийные устройства 8-битный Lite-таймер, сторожевой таймер, автоматически перезагружаемый таймер, интерфейс SPI, 10-битный АЦП с операционным усилителем
Рабочее напряжение 2,4 … 5,5 В
Тактовая частота До 8 МГц (с внешним осциллятором до 16 МГц) До 8 МГц (с внешним осциллятором до 16 МГц, 1МГц внутренний RC осциллятор, делитель частоты на 8/4)
Температурный диапазон - 40…+ 85 оС
Тип корпуса SO20 300”, DIP20
Усовершенствованная система команд и режимы адресации ST7 предлагают разнообразные возможности разработчикам, позволяя создавать эффективный и компактный код программ. Общая структурная схема микроконтроллера семейства ST7LITE2 приведена на рис. 1.
Рис. 1. Общая структурная схема микроконтроллера Назначение выводов микроконтроллера На рис. 2 приведена цоколевка микроконтроллера в корпусе DIP20. Символы HS около выводов показывает линии способные проводить ток до 20 мА. Обозначение ei0 – ei3 соответствует внешним векторам прерываний микроконтроллера.
Рис. 2. Цоколевка микроконтроллера в корпусе DIP20 В таблице 2 приведено описание функций всех выводов микроконтроллера ST7LITE2. В таблице используются следующие обозначения: тип = I – ввод, O – вывод, S – питание; входной/выходной уровень = CT – КМОП 0,3VDD/0,7VDD с входным триггером; выходной уровень = HS – 20 мА выходной ток. Конфигурация портов и управления: вход = float – плавающий, wpu – слабое подтягивание, int – прерывание, ana – аналоговый; выход = OD - открытый сток, PP – push-pull. Состояние каждой ножки после сброса показано полужирным шрифтом. Таблица 2. Назначение выводов микроконтроллера ST7FLITE29 № конт. Наименование вывода Тип Уровень Порт / управление Основная функция (после сброса)
Альтернативная функция
SO20 DIP20
Вх. Вих. Вх. Вих.
float wpu int ana OD PP
1 16 VSS S
Общий вывод
2 17 VDD S
Вывод питания
3 18 RESET I/O CT
X
X
Немаскируемое наиболее приоритетное прерывание (активный уровень - 0)
4 19 PB0/AIN0/SS I/O CT X ei3 X X X Порт B0 Аналоговый вход АЦП 0 / SPI выбор Slave (активный уровень – 0) Внимание: недопустима подача отрицательного напряжения на этот контакт
5 20 PB1/AIN1/SCK
I/O
CT
X
X
X
X
Порт B1 Аналоговый вход АЦП 1 / тактирование SPI Внимание: недопустима подача отрицательного напряжения на этот контакт
6 1 PB2/AIN2/ MISO I/O CT X
X X X Порт B2 Аналоговый вход АЦП 2 / SPI: Master In/Slave Out
7 2 PB3/AIN3/ MOSI I/O CT X
ei2 X X X Порт B3 Аналоговый вход АЦП 3 / SPI: Master Out/Slave In
8 3 PB4/AIN4/ CLKIN I/O CT X
X X X Порт B4 Аналоговый вход АЦП 4 / Вход внешнего источника тактов
9 4 PB5/AIN5 I/O CT X
X X X Порт B5 Аналоговый вход АЦП 5
10 5 PB6/AIN6 I/O CT X
X X X Порт B6 Аналоговый вход АЦП 6
11 6 PA7 I/O CT HS X ei1
X X Порт A7 -
12 7 PA6 /MCO/ ICCCLK/ BREAK I/O CT X ei1
X X Порт A6 Выход основного тактового генератора / тактирование ICC / внешний сигнал остановки
Таблица 2 (продолжение). № конт. Наименование вывода Тип Уровень Порт / управление Основная функция (после сброса)
Альтернативная функция
SO20 DIP20
Вх. Вих. Вх. Вих.
float wpu int ana OD PP
13 8 PA5 /ATPWM3/ ICCDATA I/O CT HS X
ei1
X X Порт A5 ШИМ 3 автоперезагружаемого таймера / данные ICC
14 9 PA4/ATPWM2 I/O CT HS X
X X Порт A4 ШИМ 2 автоперезагружаемого таймера
15 10 PA3/ATPWM1 I/O CT HS X
ei0
X X Порт A3 ШИМ 1 автоперезагружаемого таймера
16 11 PA2/ATPWM0 I/O CT HS X
X X Порт A2 ШИМ 0 автоперезагружаемого таймера
17 12 PA1/ATIC I/O CT HS X
X X Порт A1 Вход захвата автоперезагружаемого таймера
Организация памяти Как показано на рис. 3 микроконтроллер может обращаться к 64 Кб памяти и регистрам ввода/вывода. Доступные области памяти включают в себя 128 байт регистров, 384 байта ОЗУ, 256 байт данных EEPROM и 8 Кб пользовательской памяти программ. Пространство ОЗУ включает в себя до 128 байт под стек с адресами от 180h до 1FFh. Верхние адреса памяти содержат пользовательский сброс и вектора прерываний. Флэш память состоит из двух секторов расположенных в верхней части адресного пространства ST7 (рис. 3), таким образом, пользовательский сброс и вектора прерываний расположены в нулевом секторе (F000h – FFFFh). Размер нулевого сектора флэш-памяти и другие опции настраиваются с помощью специального байта. Внимание: адреса памяти, отмеченные как «зарезервированные» никогда не должны использоваться. Доступ к зарезервированной области может привести к непредсказуемым последствиям.
Рис. 3. Организация памяти В таблице 3 приведены адреса всех регистров микроконтроллера. В данной таблице приняты следующие обозначения: x – значение не определено, R/W – чтение/запись. Следует отметить, что содержимое регистров DR портов ввода/вывода можно прочитать только в режиме вывода. Биты соответствующие несуществующим пинам должны всегда сохранять исходное значение. Таблица 3. Регистры микроконтроллера ST7 Адреса Блок Метка регистра Наименование регистра Исходное значение Примеч.
0000h 0001h 0002h Порт А PADR PADDR PAOR Регистр данных порта А Регистр направления передачи порта А Регистр настройки порта А FFh 00h 40h R/W R/W R/W
0003h 0004h 0005h Порт B PBDR PBDDR PBOR Регистр данных порта В Регистр направления передачи порта В Регистр настройки порта В FFh 00h 00h R/W R/W R/W)
Центральное процессорное устройство (ЦПУ) ЦПУ имеет 8-битную архитектуру (фон-неймановскую) и содержит 6 внутренних регистров, позволяющих производить эффективную манипуляцию с 8-битными данными. Основными характеристиками ЦПУ являются: 63 базовых команды; быстрое умножение двух 8-битных чисел; 17 основных режимов адресации; 2 8-битных индексных регистра; 16-битный указатель стека; режимы пониженного энергопотребления; маскируемые аппаратные прерывания; немаскируемое программное прерывание. Шесть регистров ЦПУ (показаны на рис. 4) не представлены в распределении памяти и доступны посредством специальных инструкций.
Рис. 4. Регистры ЦПУ Аккумулятор (A) – это 8-битный регистр общего назначения, используемый для хранения операндов и результатов арифметических и логических операций, а также для операций с данными. Индексные 8-битные регистры (X и Y) используется в индексном адресном режиме для создания либо эффективных адресов, либо для временного хранения данных. Регистр Y не затрагивается автоматическими процедурами прерываний, т.е. не сохраняется в стек и не считывается из него. Счетчик команд (Program Counter - PC) является 16-битным регистром, содержащим адрес следующей выполняемой ЦПУ команды. Данный регистр состоит из двух 8-битных регистров PCL (Program Counter Low) и PCH (Program Counter High). Регистр состояния (Condition Code Register – CC) – это 8-битный регистр, включающий маску прерываний и 4 флага, определяющие результат только что выполненной команды. Над данным регистром могут быть произведены операции записи в стек (PUSH) и чтения из стека (POP). 7
0
1 1 1 H I N Z C
Данные биты могут быть проверены индивидуально, а также использованы некоторыми командами. При сбросе содержимое регистра приобретает вид 111х1ххх, где х – неопределенное значение. Бит 4 (H) регистра CC является флагом полупереноса (Half Carry). Данный флаг аппаратно устанавливается, когда происходит перенос между 3-ьим и 4-ым битами АЛУ при операциях ADD или ADC. Флаг сбрасывается аппаратно во время аналогичных инструкций. Значение H = 0 соответствует отсутствие переноса, H = 1 – перенос имел место. Данный бит проверяется во время инструкций JRH и JRNH. Бит 3 (I) – маска прерываний (Interrupt Mask). Этот бит устанавливается аппаратно при входе в прерывание или программно для запрета всех прерываний за исключением программного прерывания TRAP. Данный бит сбрасывается программно. Значение I = 0 – прерывания разрешены, I = 1 – прерывания запрещены. Бит I контролируется инструкциями RIM, SIM и IRET и проверяется командами JRM и JRNM. Прерывания, запрошенные, в то время как флаг I установлен в единицу, захватываются и могут быть обработаны после установления флага в ноль. По умолчанию процедура прерывания не может быть прервана поскольку, флаг I аппаратно устанавливается в единицу в начале процедуры и сбрасывается командой IRET в конце процедуры. Если бит I сбрасывается программно во время процедуры обработки прерывания, ожидающие прерывания обрабатываются вне зависимости от уровня приоритета выполняемой в данный момент процедуры обработки прерывания. Бит 2 (N) – отрицание. Этот бит устанавливается и сбрасывается только аппаратно. Данный флаг показывает знак результата последней арифметической или логической операции, или операции переноса данных. Он является копией 7-го бита результата. Если N = 0, то результат последней операции положителен или равен нулю, если N = 1, то результат отрицательный (7-бит равен единице). Данный флаг используется командами JRMI и JRPL. Бит 1 (Z) – флаг нуля. Данный бит устанавливается и сбрасывается аппаратно. Флаг Z показывает, что результат последней арифметической или логической операции, или операции переноса данных равен нулю. Если Z = 0 то результат отличен от нуля, если Z = 1, то результат последней операции равен нулю. Данный бит проверяется командами JREQ и JRNE. Бит 0 (С) – флаг переноса/заема. Этот флаг может быть установлен как аппаратно, так и программно. Флаг C показывает, что в результате операции возник перенос или заем. Значение C = 0 показывает отсутствие переноса/заема, C = 1, перенос/заем произошел. Данный бит устанавливается командами SCF и RCF и проверяется инструкциями JRC и JRNC. Он также подвержен влиянию команд проверки битов, сдвига и циклического сдвига. Признак переноса C устанавливается, если результат операции сложения превышает значение 0FFh, или результат операции вычитания меньше 0h. Данный признак используется в арифметических операциях с 16-разрядными (и более) числами, чтобы увеличить на 1 (при сложении) или уменьшить на 1 (при вычитании) результат сложения старших байтов, если при операции с младшими байтами результат вышел за границы 8-разрядной сетки. Признак также может устанавливаться/сбрасываться с помощью команд SCF и RCF соответственно, проверка признака осуществляется командами JRC и JRNC. Кроме того, признак может устанавливаться при выполнении команд сдвига/вращения. Таблица 4. Назначение битов регистра кода условия Бит Символ Имя Описание
7 - Не используется Равен 1
6 - Не используется Равен 1
5 - Не используется Равен 1
4 Н Признак переноса для полубайтов H=1, когда есть перенос (заем) в старший полубайт (из старшего полубайта) в результате выполнения операции сложения (вычитания)
3 I Маска прерываний I=1 отключает прерывания
2 N Признак отрицательного значения N=1, если результат последней операции отрицательный
1 Z Признак нулевого значения Z=1, если результат последней операции равен нулю
0 С Признак переноса C=1, когда результат операции сложения (вычитания) выходит за границы 8-разрядной сетки
Признак нулевого значения Z устанавливается при нулевом результате операции. Таким образом, команды «OR A, #0» и «AND A,$FF» могут быть использованы для проверки содержимого аккумулятора: в случае нулевого значения признак Z будет установлен. Проверку признака можно осуществить с помощью команд JREQ и JRNE. Признак отрицательного значения N устанавливается, когда старший (7-й) бит аккумулятора равен 1. Проверка значения признака осуществляется командами JRMI и JRPL. Маска прерываний I не устанавливается в результате каких-либо арифметических операций. Значение данного бита регистра CC счи-тывается дешифратором при возникновении запроса на прерывание. Если I=1, то прерывание только фиксируется, но его обработка не выполняется. Маска управляется командами RIM (сброс), SIM (установка) и IRET (возврат из обработчика прерываний), проверка маски осуществляется командами JRM и JRNM. Признак переноса для полубайтов H устанавливается при переносе (займе) в старший полубайт (из старшего полубайта) в результате выполнения операции сложения (вычитания). Данный признак обычно используется при реализации алгоритмов обработки чисел, в которых каждый разряд представляется одним байтом (например, двоично-десятичные числа). Проверка признака осуществляется командами JRH и JRNH. Указатель стека (Stack Pointer - SP) – это 16-битный регистр, всегда показывающий на следующий свободный адрес в стеке. Указатель стека декрементируется, когда данные считываются из стека и инкрементируется, когда данные в стек записываются (см. рис. 5).
Рис. 5. Примеры операций со стеком Так как глубина стека составляет 128 бит, то старшие 9 бит задаются аппаратно. После сброса микроконтроллера или после команды сброса указателя стека RSP, указатель стека принимает исходное значение (01FFh) являющееся крайним значением адреса. 15
8
0 0 0 0 0 0 0 1
7
0
1 sp6 sp5 sp4 sp3 sp2 sp1 sp0
К младшему байту указателя стека (называемому S) можно непосредственно обратиться с помощью команды LD. При переходе через нижнюю границу стека, регистр SP принимает значение верхнего предела, при этом индикация переполнения стека не производится. Сохраненная ранее информация перезаписывается и таким образом теряется. Аналогичный переход, но только от верхнего предела к нижнему, происходит при переходе через верхнюю границу стека. Стек используется для сохранения адреса возврата при вызове подпрограммы, а также для хранения данных из ЦПУ при обработке прерывания. Также, может быть осуществлен доступ к стеку посредством команд PUSH и POP. В случае прерывания PCL сохраняется по первому адресу, указанному в SP, а дальше в стек помещаются другие регистры в порядке, показанном на рис. 5. Вызов подпрограммы занимает две позиции в стеке, а обработка прерывания пять позиций. Система команд Система команд ST7 предоставляет большие возможности обработки данных, реализацию арифметических, логических операций, команды вызова подпрограмм и возврата, безусловного и условного переходов, команды обработки отдельных бит и пересылки данных, а также обеспечивает управление в режиме реального времени. Процессор ST7 содержит регистр-аккумулятор, два индексных регистра X и Y, регистр состояния процессора, счетчик команд, адресующий 64 Кбайт памяти, 16-разрядный указатель стека, в котором доступен только младший байт (остальные 8 бит зарезервированы и аппаратно устанавливаются в единицу). Система команд включает в себя 63 инструкции длиной от 1 до 4 байт. Минимальное время исполнения 1-байтной команды составляет 250 нс при внутренней тактовой частоте 8 МГц. Далее в описании машинных команд микроконтроллера ST7 будут использоваться некоторые условные обозначения. Флаги: H – полуперенос (half carry bit), I – маска прерываний (interrupt mask), N – отрицательный (negative), Z – ноль (zero), C – перенос (carry/borrow). Переменные: dst – приемник (destination), src – источник (source), SP – указатель стека (stack pointer), PC – счетчик команд (program counter), CC – регистр кодов признаков (conditional code register). Таблица 5. Виды команд ST7 Загрузка LD CLR
Изменение флагов регистра кода условия SIM RIM SCF RCF
Таблица 6. Система команд микроконтроллера ST7 Мнемоника Описание Синтаксис Флаги
H I N Z C
ADC Сложение с переносом adc dst, src H
N Z C
ADD Сложение add dst, src H
N Z C
AND Логическая операция И and dst, src
N Z
BCP Логическое побитное сравнение bcp dst, src
N Z
BRES Установка бита в ноль bres dst, #pos
BSET Установка бита в единицу bset dst, #pos
BTJF Проверка бита и переход если ноль btjf dst, #pos, rel
C
BTJT Проверка бита и переход если единица btjt dst, #pos, rel
C
CALL Вызов подпрограммы (безусловный) call dst
CALLR Вызов подпрограммы (условный) callr dst
CLR Обнуление байта clr dst
0 1
CP Сравнение cp dst, src
N Z C
CPL Логическая инверсия cpl dst
N Z 1
DEC Декремент dec dst
N Z
HALT Остановка работы программы halt
0
INC Инкремент inc dst
N Z
IRET Возврат из обработки прерывания iret H I N Z C
JP Переход (безусловный) jp dst
JRA Относительный безусловный переход jra dst
JRC Переход если флаг переноса единица jrc dst
JREQ Переход в случае равенства jreq dst
JRF Переход если условие ложно jrf dst
JRH Перенос если флаг полупереноса единица jrh dst
JRIH Переход если уровень линии прерывания высокий jrih dst
JRIL Переход если уровень линии прерывания низкий jril dst
JRM Переход если прерывания запрещены jrm dst
JRMI Переход если результат отрицательный jrmi dst
JRNC Переход если флаг переноса ноль jrnc dst
JRNE Переход в случае неравенства jrne dst
JRNH Перенос если флаг полупереноса ноль jrnh dst
JRNM Переход если прерывания разрешены jrnm dst
JRPL Переход если результат положительный jrpl dst
JRT Переход если условие истинно jrt dst
JRUGE Переход если больше либо равно jruge dst
JRUGT Переход если больше jrugt dst
JRULE Переход если меньше либо равно jrule dst
JRULT Переход если меньше jrult dst
LD Загрузка данных ld dst, src
N Z
MUL Умножение (беззнаковое) mul dst, src 0
0
NEG Отрицание neg dst
N Z C
NOP Нет команды nop
OR Логическая операция ИЛИ or dst, src
N Z
Таблица 6 (продолжение). Мнемоника Описание Синтаксис Флаги
H I N Z C
POP Чтение из стека pop dst H I N Z C
PUSH Запись в стек push dst
RCF Обнуление флага переноса rcf
0
RET Возврат из подпрограммы ret
RIM Разрешение прерываний rim
0
RLC Логический сдвиг влево через флаг переноса rlc dst
N Z C
RRC Логический сдвиг вправо через флаг переноса rrc dst
N Z C
RSP Обнуление регистра SP rsp
SBC Вычитание с переносом sbc dst, src
N Z C
SCF Установка флага переноса scf
1
SIM Запрет прерываний sim
1
SLA Арифметический сдвиг влево sla dst
N Z C
SLL Логический сдвиг влево sll dst
N Z C
SRA Арифметический сдвиг вправо sra dst
N Z C
SRL Логический сдвиг вправо srl dst
N Z C
SUB Вычитание sub dst, src
N Z C
SWAP Обмен нибблами swap dst
N Z
TNZ Проверка на отрицательность или ноль tnz dst
N Z
TRAP Программное прерывание trap
1
WFI Ожидание прерывания wfi
0
XOR Логическая операция исключающее ИЛИ xor dst, src
N Z
Режимы адресации Микроконтроллеры семейства ST7 выполняют набор операций над операндами, размещенными в аккумуляторе, индексных регистрах X и Y, памяти. Предоставляется 17 различных режимов адресации, которые можно разделить на следующие 7 групп: – адресация кодом команды, или безадресный режим (inherent); – непосредственная адресация (immediate); – прямая (direct); – индексированная (indexed); – косвенная (indirect); – относительная (relative); – битовые операции (bit operations). Для минимизации длины инструкции в байтах большинство режимов адресации имеют длинный и короткий способы. При длинном способе адресации адрес задается 16-ю битами, при коротком – 8-ю. Таким образом, длинный режим адресации позволяет получить доступ к любому байту из адресуемых 64 кб адресного пространства, а короткий – предоставляет доступ только к нулевой странице памяти (диапазон 00..FF). Выбор способа адресации осуществляется автоматически без дополнительного участия программиста. Инструкции CLR, CPL, NEG, BSET, BRES, BTJT, BTJF, INC, DEC, RLC, RRC, SLL, SRL, SRA, SWAP работают только с коротким способом адресации. Ниже приведено описание режимов адресации семейства микроконтроллеров ST7. Адресация кодом команды или безадресный режим. Данный режим адресации используется для команд, которые не требуют операндов. Код операции полностью определяет, какие действия должны быть выполнены. Инструкции такого типа занимают 1 байт памяти. Таблица 7. Инструкции, использующие безадресный режим адресации Инструкция Описание
NOP Пустая операция
TRAP Программное прерывание
WFI Ждать прерывания
HALT Остановка
RET Возврат из подпрограммы
IRET Возврат из подпрограммы обработки прерывания
SIM Установка маски прерывания
RIM Сброс маски прерывания
SCF Установка флага переноса
RCF Сброс флага переноса
RSP Сброс указателя стека
PUSH/POP Протолкнуть в стек/вытолкнуть из стека
Непосредственная адресация. В данном режиме адресации 8-разрядный операнд следует сразу за кодом операции (табл. 8). Признак режима непосредственной адресации – символ # перед операндом. Таблица 8. Инструкции, использующие непосредственную адресацию Инструкция Описание Пример
LD Загрузка LD A, #$3
CP Сравнение CP A, #%00001000
BCP Битовое сравнение BCP A, #%01011010
AND, OR, XOR Логические операции AND A, #$D6
ADC, ADD, SUB, SBC Арифметические операции ADD A,8
В примере, показанном на рис. 6, производится загрузка константы $10, указанной непосредственно, в аккумулятор.
Рис. 6. Пример непосредственной адресации Прямая адресация. При прямой адресации 8- (короткий способ) или 16-разрядный (длинный способ) адрес операнда задается сразу после кода операции. В таблице 9 приведены инструкции, использующие данный режим адресации с указанием допустимых способов адресации. Таблица 9. Инструкции, использующие прямую адресацию Инструкция Описание Пример Короткий способ Длинный способ
LD Загрузка LD A,$55 Да Да
CP Сравнение CP A,$55 Да Да
BCP Битовое сравнение BCP A,$55 Да Да
AND, OR, XOR Логические операции OR A, $55 Да Да
ADC, ADD, SUB, SBC Арифметические операции ADC A, $55 Да Да
CLR Очистка CLR A Да Нет
INC, DEC Инкремент/ декремент INC addr Да Нет
TNZ Проверка на <=0 TNZ A Да Нет
CPL, NEG Перевод в дополнительный код CPL label Да Нет
BSET, BRES Установка/сброс битов BRES ATCSR,#CMPIE Да Нет
BUT, BTJF Проверка битов и переходы BTJT variable, #3, label Да Нет
SLL, SRL, SRA, RLC, RRC Операции сдвига и вращения SRL addr,#3 Да Нет
SWAP Обмен полубайтов SWAP A Да Нет
CALL, JP Вызовы подпрограмм, безусловные переходы CALL subpr Да Нет
В примере, показанном на рис. 7, производится декремент данных, размещенных по адресу $40.
Рис. 7. Пример прямой адресации Индексированная адресация. При индексированной адресации адрес операнда образуется сложением содержимого индексного регистра (X или Y) и 8- или 16-разрядного смещения, заданного во втором и третьем байте команды. Регистр X используется по умолчанию, для указания регистра Y используется префикс. Таким образом, команды, использующие регистр Y, длиннее на 1 байт, чем команды, использующие регистр X. Так как оба индексных регистра являются 8-битными, то без смещения можно получить доступ только к диапазону адресов 00h-FFh. Возможные варианты задания смещения приведены в таблице 10, а перечень инструкций - в таблице 11. Таблица 10. Варианты смещения для индексной адресации Тип смещения Длина в байтах Адресуемое пространство Примеры
без смещения 0 00.. FF NEG (X)
короткое смещение 1 00..1FE SWAP (variable, X)
длинное смещение 2 64 кБ OR A, (variable, Y)
Таблица 11. Инструкции, использующие индексированную адресацию Инструкция Описание Пример Короткий способ Длинный способ
LD Загрузка LD A,(txtoff,X) Да Да
CP Сравнение CP A, (Y) Да Да
BCP Битовое сравнение BCP A, (X) Да Да
AND, OR, XOR Логические операции AND A, (Y) Да Да
ADC, ADD, SUB, SBC Арифметические операции SUB A, (X) Да Да
CLR Очистка CLR (Y) Да Нет
INC, DEC Инкремент/ декремент DEC (X) Да Нет
TNZ Проверка на <=0 TNZ (Y) Да Нет
CPL, NEG Перевод в дополнительный код CPL (Y) Да Нет
BSET, BRES Установка/сброс битов BSET (X), #3 Да Нет
BUT, BTJF Проверка битов и переходы BTJF (X), #3, label Да Нет
SLL, SRL, SRA, RLC, RRC Операции сдвига и вращения RLC (variable, Y) Да Нет
SWAP Обмен полубайтов SWAP (variable, Y) Да Нет
CALL, JP Вызовы подпрограмм, безусловные переходы JP (X) Да Нет
На рис. 8 показан пример индексированной адресации без смещения. В дополнительный код переводятся данные, находящиеся по адресу, который хранится в индексном регистре Y. На рис. 9 показан пример длинного способа индексированной адресации со смещением. В аккумулятор загружаются данные, находящиеся по адресу $2AA5, вычисляющегося как сумма label=$2AA4 и значения индексного регистра X=$01.
Рис. 8. Пример индексированной адресации без смещения
Рис. 9. Пример индексированной адресации со смещением Косвенная адресация. Данные, используемые в операции, находятся по адресу, который хранится в памяти (указателю). Адрес указателя следует за кодом операции. Возможны короткий (указатель находится в пределах 00..FF) и длинный (указатель находится в любой ячейке из 64 кБ адресного пространства) способы адресации (табл. 12). Таблица 12. Инструкции, позволяющие использовать косвенную адресацию Инструкция Описание Пример Короткий способ Длинный способ
LD Загрузка LD A, [label.w] Да Да
СР Сравнение CP A, [label.w] Да Да
ВСР Битовое сравнение BCP A, [label.w] Да Да
AND, OR, XOR Логические операции AND A, [label.w] Да Да
ADC, ADD, SUB, SBC Арифметические операции ADD A, [label.w] Да Да
CLR Очистка CLR [label] Да Нет
INC, DEC Инкремент/ декремент INC [variable] Да Нет
TNZ Проверка на <=0 TNZ [variable] Да Нет
CPL, NEG Перевод в дополнительный код CPL [variable] Да Нет
BSET, BRES Установка/ сброс битов BRES [variable], #7 Да Нет
BUT, BTJF Проверка битов и переходы BTJT [variable], #3, label Да Нет
SLL, SRL, SRA, RLC, RRC Операции сдвига и вращения RLC [variable],#3 Да Нет
SWAP Обмен полубайтов SWAP [label] Да Нет
CALL, JP Вызовы подпрограмм, безусловные переходы CALL [label] Да Нет
На рис. 10 косвенный режим адресации проиллюстрирован на примере команды SWAP. Данная команда меняет местами полубайты ячейки по адресу, указатель на который хранится в label=$3C.
Рис. 10. Пример косвенной адресации Относительная адресация. Относительная адресация используется только в командах ветвления. Адрес следующей команды образуется сложением текущего содержимого счетчика команд (PC) и заданного во втором байте команды 8-битного смещения. Смещение является знаковым числом и может задаваться прямым (указывается в явном виде сразу после кода операции) или непрямым (после кода операции указывается адрес, по которому хранится смещение) способами (табл. 12). При относительной адресации возможен переход к командам, расположенных в пределах 127 позиций ниже или выше текущей команды программы. Таблица 12. Инструкции, использующие относительную адресацию Инструкция Описание Пример
JRxx Условные переходы JREQ timerb_exit
CALLR Вызов подпрограммы CALL lcd_reg_write
В таблице 13 сгруппированы все рассмотренные выше режимы адресации и их комбинации. Таблица 13. Режимы адресации микроконтроллеров ST7 Режим адресации Пример Диапазон адресов Размер указателя Размер в байтах
Безадресный NOP
+ 0
Непосредственный LD А,#$55
+ 1
Короткий Прямой
LD A,$10 00..FF
+ 1
Длинный Прямой
LD A,$1000 0000..FF FF
+ 2
Без смещения Прямой Индекс. LD A,(X) 00..FF
+ 0 (при X) + 1 (при Y)
Короткий Прямой Индекс. LD A,($10,X) 00..1FE
+ 1
Длинный Прямой Индекс. LD A,($1000,X ) 0000..FF FF
+ 2
Короткий Косвенный
LD A,[$10] 00..FF Байт + 2
Длинный Косвенный
LD A,[$10.W] 0000..FF FF Слово + 2
Короткий Косвенный Индекс. LD А,([$10],Х) 00..1FE Байт + 2
Длинный Косвенный Индекс. LD 0000..FF FF Слово + 2
Обработка прерываний Запросы на прерывания могут генерироваться несколькими внутренними (таймеры, порт SPI) или внешними источниками (порты ввода/вывода). Кроме того, в микроконтроллерах семейства ST7 поддерживаются программные прерывания (инструкция TRAP). На рис. 11 показаны различные возможные источники прерываний.
Рис. 11. Источники прерываний Механизм обработки прерываний (рис. 12) состоит из следующих этапов: – сохранение текущего контекста (регистры CC, A, X , PC) в стеке; – отключение всех других прерываний путем установки бита I в регистре кода условия; – загрузка вектора прерывания в счетчик команд; – обработка прерывания; – восстановление контекста; – разрешение прерываний (сброс бита I).
Рис. 12. Механизм обработки прерываний семейства ST7 Приоритет между прерываниями распределяется согласно вектору прерывания (рис. 13).
Рис. 13. Приоритет прерываний семейства ST7 Программное обеспечение лабораторного стенда Язык ассемблера является родным языком для каждого микропроцессора. Процесс написания программы на языке ассемблера требует особой осторожности и внимания, а также большого количества строк программного кода для выполнения относительно маленькой несложной задачи. Однако язык ассемблера был и есть достаточно востребованным, когда речь идет об оптимизации используемых ресурсов (скорость выполнения программы, экономия памяти данных, памяти программ и т.д.), либо когда алгоритм является достаточно простым. В остальных случаях рекомендуется применение языков высокого уровня, таких как C. Помимо этого при написании программы разработчик получает возможность использовать «смешанный» стиль описания, когда в исходный код на языке высокого уровня вставляются ассемблерные вставки. Разработка программы, в общем случае, состоит из трех основных этапов: анализ, написание кода (кодирование), отладка. На первом этапе программист должен понять, что программа должна делать. Особенность данного этапа заключается в том, что в большей степени это бумажная работа (представление программы на уровне блочной структуры, составление алгоритмов, определение параметров и типов входных/выходных данных, приблизительный анализ необходимого объема памяти и т.д.). На втором этапе происходит процесс трансляции результатов первого этапа, результатом которой является исходный код и несколько служебных (проектных) файлов, управляющих утилитами программирования. Третий этап состоит из операций, необходимых для корректной трансляции исходного кода – удаления программных ошибок, которые могут появиться на предыдущих этапах разработки (логические ошибки, управления данными и т.д.). Данный этап является наиболее трудоемким и занимает наибольшую часть времени из всех вышеперечисленных. Когда программа функционально закончена и отлажена, она сохраняется в EPROM, которая может быть как внешней, так и внутренней по отношению к МК. Язык ассемблера – это набор мнемоник, которые просто дублируют каждую инструкцию ядра МК в более читабельной форме. Данный набор формирует определенный алгоритм работы всей системы (операции над данными, настройка периферийных узлов и т.д.). Следует также различать понятие «ассемблер» и «язык ассемблера», так как под ассемблером понимают не только программный код, но и набор утилит и средств для интерпретации программы в машинный код, с последующей имплементацией его в микроконтроллер. Выходным результатом программного кода на языке ассемблера является: – объектный файл, содержащий двоичный код (*.obj); – листинг файл – файл отчета, который включает в себя исходный код на ассемблере, а также его цифровую интерпретацию (*.lst); – другие файлы, количество и тип которых зависит от конкретного типа ассемблера: файлы отчетов об ошибках (*.err), файлы символьных таблиц (*.sym), типах переменных и т.д. В настоящее время большинство приложений строится из множества файлов проекта (библиотеки и т.д.), каждый из которых содержит сотни и тысячи строк ассемблерного кода. Для организации механизма разработки иерархических проектов ассемблер ST7 ряд дополнительных ключевых слов и инструкций EXTERN и PUBLIC. Ключевое слово EXTERN для компоновщика означает, что конкретная метка (функция, переменная) объявлена во внешнем файле. Ключевое слово PUBLIC означает, что данная переменная (функцию) может использоваться в других внешних файлах проекта. Таким образом, обязательным атрибутом любого ассемблера является наличие компоновщика (linker), в задачи которого входит: – объединение объектных файлов (*.obj) в один; – корректировка значений адресов во всех операндах команд, которые ссылаются на объект, чье расположение в памяти установлено либо изменено в процессе конкатенации. Для выполнения подобных действий необходим контрольный файл, в котором бы оговаривались правила последовательности объединения объектов (*.obj), их перечень, а также абсолютные адреса, к которым будет произведена привязка при занесении их в память микроконтроллера. Как только программа скомпонована, на выходе получаем абсолютный объектный файл (*.abs или *.cod), который может использоваться как для отладки в эмуляторе, так и для прошивки EPROM микроконтроллера. Результатом работы компоновщика являются: – абсолютный объектный файл (*.cod или *.abs); – файл таблицы имен (*.sym); – файл распределения (*.map). Файл таблицы имен (*.sym) содержит используемые в программе идентификаторы (метки, имена подпрограмм и переменных) и их атрибуты (признаки); таблица имен создается во время работы транслятором и компоновщиком; используется на стадиях семантического анализа и генерации промежуточного кода, а также для компоновки программы. Она может быть сохранена соответственно в объектном или загрузочном модуле для целей отладки. Файл распределения (*.mар) содержит информацию о компонуемых файлах и внешних (public) символах. Программный код, написанный на языке ассемблера ST7 и сохраненный в текстовом ASCII формате, называется исходным файлом проекта. Исходный файл проекта имеет расширение *.asm. Как и для любого ассемблера, исходный файл проекта для микроконтроллеров ST7 имеет строгий формат и синтаксис. Первая строка данного файла зарезервирована для указания *.tab файла, т.е. целевого процессора, под который пишется программа. Исходный файл проекта на языке ассемблере ST7 обязательно должен заканчиваться ключевым словом END, в противном случае компилятор выдаст ошибку. Остальной формат исходного кода имеет следующий вид: [метка[:]]<space>[КОП]<space>[операнд]<space>[;комментарий] где <space> – это символ клавиши «SPACE» или «TAB»; КОП – код операции. Все четыре поля могут быть пустыми, однако поле <space> является обязательным, если: – вся строка пустая; – строка начинается с комментария; – строка заканчивается перед оставшимся полем. Пример кода на ассемблере ST7: ld X, #255 ; загрузим в регистр Х значение 255 Меткой может быть имя переменной или адрес в коде, для того чтобы упростить доступ к памяти и работу с инструкцией JUMP соответственно. Метки следует всегда начинать с первой колонки, и наоборот, каждое выражение, начинающееся в первой колонке, будет рассматриваться компилятором как метка. Мнемоники или код операции получают имя, для того чтобы упростить понимание кода программы и заменить машинный код на более интуитивно понятный. Они никогда не могут находиться в первой колонке. Директивы дают указание ассемблеру или компоновщику для управления процессом трансляции и компоновки исходного текста в файл прошивки: #INCLUDE "ST7Lite2.INC" ; Директива ассемблера WORDS ; Директива ассемблера segment 'rom' ; Директива компоновщика … ; .NEXT ; Метка LD (Table, X), A ; Мнемоника DEC X ; Мнемоника JRPL NEXT ; Мнемоника Следующим в структуре файла исходного кода идет раздел объявления файлов включения (*.inc), в которых хранятся прототипы импортируемых функций и переменных, распределение регистров и памяти конкретного семейства микроконтроллеров фирмы STM. Например, файл ST7Lite2.inc содержит прототипы предопределенных переменных (распределение регистров и памяти) для МК ST7FLite29. Данная структура не является строгой, но, файлы ST7Lite2.asm и ST7Lite2.inc должны быть включены в проект обязательно. Разработчику рекомендуется выносить константы и переменные всего проекта в отдельные файлы – например, const.asm и variable.asm и делать глобальными только те из них, которые он сам считает необходимым, описывая их в файле const.inc и variable.inc соответственно. По умолчанию все переменные, константы и т.д. в исходном коде являются локальными, т.е. недоступными извне. Если же предполагается экспортировать эти данные в другой модуль, для этого необходимо объявить их глобальными. Сделать это можно несколькими способами – поставить точку перед меткой (например, .var_exp) или использовать ключевое слово PUBLIC перед списком глобальных переменных в первом модуле. Второй шаг – размещение ключевого слова EXTERN в файле включения (*.inc) перед необходимым списком внешних переменных и подключение этого файл к другому модулю. Символы, как и константные типы данных, определяются в исходном файле и не могут изменяться во время выполнения программы. Основным отличием является то, что их значения доступны только на время сборки (времени ассемблирования), а не во время выполнения программы. Особую ценность символы представляют для генерации константных данных. Символические значения определяются при помощи оператора EQU. Например: A_DOZEN EQU 12 После этого, слово A_DOZEN может быть там, где есть необходимость использовать число 12. Данный подход особенно полезен, если определенное значение предполагается применять в нескольких частях программного кода. Перед тем как в программном коде использовать переменные и константы, они должны быть изначально объявлены. Для выделения части оперативной памяти RAM (для переменных) необходимо использовать ключевые слова DS.b и DS.w для определения переменной типа байт (byte - 8 бит) и типа слово (word - 16 бит) соответственно: aByte: DS.B 1 ; переменная типа байтa aWord: DS.W 1 ; переменная типа word – 2 байта Array1: DS.B 20 ; массив 20 однобайтовых переменных Array2: DS.W 40 ; массив 20 двухбайтовых переменных Константы в языке ассемблер ST7 могут быть двух типов: константные данные и данные символьного типа. Для объявления констант необходимо выделить часть памяти (ROM), для этого используются следующие директивы – DC.b (byte), DC.w (word). Использование ключевого слова WORD вместо DC.w позволяет выделить память, начиная с младшего байта, однако BYTE и DC.b работают одинаково: Примечание: необходимо использовать ключевое слово DS. всегда, когда надо выделить память под переменную, вместо ключевого слова EQU, которое не резервирует никакой памяти. Примечание: для оптимизации работы программы рекомендуется размещать часто используемые переменные на «нулевой странице» (‘ram0’, т.е. от 0 до 0FFh). Директивы BYTES, WORDS определяют 8 или 16 битовый адрес для меток, следующих за ними. Следовательно, ключевое слово BYTES необходимо располагать перед определением аппаратных регистров и переменных в оперативной памяти (RAM) на «нулевой странице» (0..0FFh). Директиву WORDS следует использовать во всех остальных случаях, например, при определении переменных в RAM на других страницах, EEPROM переменных, для программного кода, констант и векторов прерывания в памяти ROM. Ключевое слово segment является директивой компоновщика и используется для определения границ памяти. Данная директива опрашивается каждый раз, когда вы хотите поместить переменную или программный код в разных границах памяти. Существует несколько групп сегментов, называемых классом. Понятие класс не имеет никаких свойств. Их концепция была введена для того, чтобы помочь разработчику сформировать адресуемое пространство в зависимости от характеристик конкретных областей памяти. Для блока исходного кода, директива segment может использоваться только после безусловного перехода или инструкции выхода из подпрограммы из-за того, что два сегмента являются независимыми объектами, которые могут располагаться в различных частях памяти. Т.е. два сегмента, которые следует друг за другом в исходном файле, могут быть размещены в разных частях памяти в процессе трансляции исходного кода. Разделение программы на сегменты позволяет упростить процесс ее размещения. Таблица 14. Набор стандартных классов сегментов Имя класса Тип класса и область применения
‘ROM’ в ПЗУ (ROM) МК, для макрокоманд
‘RAMO’ в ОЗУ (RAM) МК, «нулевая страница» (0..0FFh)
‘RAM’ в ОЗУ (RAM) МК, используется расширенная адресация
‘STACK’ в ОЗУ (RAM), доступна указателю стека для регистров ввода/вывода (всегда на «нулевой странице»)
Примечание: ассемблер не может определить длину (разрядность) метки по ключевому слову segment, которое распознает только компоновщик, вот почему необходимо указывать длину метки, используя ключевые слова BYTES и WORDS. Примечание: WORDS является значением по умолчанию. Рекомендуется размещать его в начале *.asm - файла и в конце файла *.inc. Примечание: BYTES и WORDS определяют не длину переменной, а длину адреса переменной. Возможна ситуация, когда 16-битовые данные (слово) размещено на «нулевой странице» и байт (8-битовая переменная) хранятся после адреса $100. Таким образом, нельзя смешивать в программном коде директивы BYTES и WORDS с BYTE и WORD: BYTES segment 'ram0' .count ds.w 1 ; зарезервировать на 0-ой странице RAM ; переменную count типа word WORDS segment 'ram1' .step ds.b 3 ; зарезервировать 3 байта ; для переменной step segment 'rom' .rate dc.w 9600 ; зарезервировать константу rate в ROM .tab dc.b $AA,%01010101 ; зарезервировать константу tab в ; два байта Большинство современных программ имеют нелинейную структуру. Зачастую при написании исходного кода разработчик сталкивается с необходимостью выполнения микроконтроллером одних и тех же часто повторяющихся операций, например: обмен данными с периферийными устройствами (опрос датчиков и исполнительных устройств), работа с индикацией, обработка прерываний и т.д. Для уменьшения количества строк и структуризации исходного кода программы используется модульно-процедурный подход программирования, где основной минимальной структурной единицей является подпрограмма (функция или процедура). Ассемблер ST7 позволяет разработчику делить основную программу на процедуры и функции и, в зависимости от выполняемой задачи, вызывать необходимые. Ниже приведен пример подпрограммы формирования задержки: wait: ld X,#255 decr2: ld Y,#255 decr1: dec Y jrne decr1 dec X jrne decr2 ret Обязательными параметрами является пара – метка (имя подпрограммы) и ключевое слово ret (возврат из подпрограммы). Для вызова процедуры в исходном коде главной программы используется инструкция CALL имя_подпрограммы. Например: call init_port call wait После выполнения директивы CALL адрес следующей за ней инструкции сохраняется в стеке и только после этого осуществляется переход в подпрограмму. Специальная команда ret осуществляет выход из подпрограммы – загружает в счетчик команд (PC) хранимое значение адреса следующей команды ассемблера основной программы из стека. Все подпрограммы должны быть определены перед тем, как будут использованы в исходном коде (перед вызовом CALL). Как уже было сказано выше, разработчик также получает возможность их экспортировать в другие файлы проекта (использовать в качестве библиотечных функций), для этого используются ключевые слова PUBLIC и EXTERN. Выполнение программы на микроконтроллере ST7FLITE29 начинается с вызова вектора прерывания RESET, которому может быть назначена подпрограмма, в разделе описания векторов, обрабатывающая его. Она и является основным телом программы, с которой начинается выполнение всего программного кода. В нашем случае вектор прерывания RESET обрабатывает подпрограмма main, которая, в свою очередь, является точкой входа в основную программу. Микроконтроллер – программируемый компонент, который выполняет только одну инструкцию в определенный промежуток времени. Однако, большинство, если не все приложения, требуют управления многими задачами одновременно. Обычно для повышения эффективности и упрощения систем на микроконтроллере разработчики пытаются реализовать большее количество функциональных возможностей на одном чипе. Решением подобной проблемы находится в двух сферах – программной и аппаратной. Аппаратный подход – применение механизма прерываний, программный – многозадачность. Прерывание в компьютерной терминологии – механизм, который позволяет приостановить текущее выполнение программы в случае возникновения какого-либо события с более высоким приоритетом. После этого события вызывается подпрограмма обработки прерывания, а затем происходит возврат в исходную точку главной программы. При появлении запроса на прерывание от внешнего источника, первое, что делает микропроцессорное ядро (после окончания выполнения текущей инструкции) – сохранение состояния внутренних регистров, чтобы по возврату из подпрограммы обработки прерывания продолжить работу без потери данных. Данная процедура выполняется следующим образом: значения всех регистров ядра сохраняются в стеке (счетчик команд, регистр X, аккумулятор, регистр признака) кроме значения регистра Y, т.к. архитектура ST7 была наследована от архитектуры микроконтроллера, у которого он отсутствовал. Если существует необходимость, то значение регистра Y может быть принудительно помещено в стек в начале выполнения подпрограммы обработки прерывания (команда PUSH Y). Подпрограмма обработки прерывания всегда представлена в виде пары: метка – имя и ключевое слово IRET – выход из подпрограммы. После выхода из подпрограммы обработки прерывания происходит возврат в основную программу, при этом из стека восстанавливаются предыдущие значения регистров. В том случае, если программист до этого сохранял значение регистра Y, его также необходимо восстановить. Для этого используется директива ассемблера POP Y. Чтобы предостеречь выполнение подпрограммы обработки прерывания от срабатывания другого прерывания, в регистре признака результата автоматически устанавливается 5-ый бит (флаг I). Некоторые периферийные узлы МК автоматически снимают его (устанавливают в 0) после окончания работы процедуры. В этом случае никаких особых действий выполнять не надо. Другие же модули (например, таймер) не снимают флаг I даже после завершения процедуры обработки. Поэтому его обязательно необходимо сбрасывать вручную в теле подпрограммы обработки прерывания до ключевого слова IRET, в противном случае она будет вызвана повторно (войдет в бесконечный цикл) и основная программа будет заблокирована. Еще один случай, когда может понадобиться ручной сброс флага прерывания I – это необходимость приостановки текущего выполнения обработчика (например, время его работы достаточно большое). Однако прибегать к подобным процедурам желательно только при необходимости, т.к. размер стека ограничен. Последним разделом в структуре главного файла проекта идет область объявления векторов прерывания. Основным назначением инициализации векторов прерывания является необходимость указания микропроцессорному ядру адреса кода, который должен выполняться при возникновении того или иного внешнего события (формировании запроса). Вектора прерывания представляют собой таблицу 16-битовых слов в памяти программ, которые содержат начальный адрес различных подпрограмм обработки прерывания. В зависимости от источника прерывания (ввод/вывод, таймер и т.д.) ядро выбирает из заранее определенной области адрес подпрограммы обработки прерывания. Вектора всегда размещаются в конце адресного пространства микроконтроллера. Для каждого источника прерывания существует один вектор, плюс еще один для события RESET. Когда происходит прерывание или наступает событие RESET, выбирается необходимый вектор для выполнения подпрограммы обработки прерываний или запуска основной программы. Лабораторные работы Ввод программы пользователя осуществляется на персональной ЭВМ при помощи специального программного обеспечения. После компиляции программа загружается через программатор во флэш-память лабораторного стенда. В дальнейшем, программа может быть запущена на выполнение. Лабораторная работа №1 Изучение кросс-средств для программирования микроконтроллера ST7LITE2 Задание: ознакомится с принципами функционирования средств разработки программ для микроконтроллеров ST7. Теоретические сведения Для разработки и отладки проектов под микроконтроллеры ST7 необходимо наличие программной среды. Фирма STM предлагает интегрированный пакет (Toolset), который включает в себя два средства: ST7 Visual Developer (STVD7) с возможностью внутрисхемной отладки проектных решений и ST7 Visual Programmer (STVP7) – средство для программирования МК. Работа с отладочным комплектом ST7 требует следующих программных компонент: кросс-ассемблер (asm); компоновщик (lyn); средства форматирования (obsend); библиотека (lib). ST7 Visual Developer IDE представляет собой среду разработки проектов под микроконтроллеры фирмы STM (рис. 14).
Рис. 14. Общий вид среды разработки STVD7 IDE Близкие по назначению проекты могут объединяться в наборы проектов – рабочую среду (Workspace). В начале разработки программы необходимо создать рабочую среду, после чего добавить проект. Для создания проекта необходимо запустить ST7 Visual Developer IDE на выполнение (рис. 15).
Рис. 15. Запуск среды STVD7 на выполнение Для этого в меню Пуск->Программы->SofTecMicrosystems->inDART-STX->ST7 выбрать ярлык «STVD7 for inDART-STX» как показано на рис. 15, после чего на экране появится основное окно рабочей среды (рис. 16).
Рис. 16. Интегрированная среда разработки STVD7 IDE Для создания новой рабочей среды (проекта) в меню “File” необходимо выбрать “New Workspace...” (рис. 17). В появившемся диалоговом окне New Workspace (рис. 17) существуют следующие варианты выбора: - создать рабочую среду вмести с новым проектом (Create workspace and project); - создать пустую рабочую среду (Create empty Workspace); - создать из проекта (Create from Project); - создать обертку для исполняемого файла (Wrap Executable);- создать обертку для сборочного файла проекта (Wrap Makefile).
Рис. 17. Диалоговое окно создания рабочей среды Выбираем первый пункт “Create workspace and project”. В появившемся диалоговом окне (рис. 18) необходимо ввести имя рабочей среды (Workspace filename) и путь к каталогу, где будут размещаться файлы среды (Workspace location).
Рис. 18. Диалоговое окно создания рабочей среды После создания рабочей среды необходимо указать имя проекта, полный путь к папке проекта, а также требуемый компоновщик (в нашем случае ST7 Assembler Linker) (рис. 19).
Рис. 19. Диалоговое окно создания проекта Последним этапом при создании проекта является выбор семейства микроконтроллера, под который будет разрабатываться проект (рис. 20).
Рис. 20. Диалоговое окно выбора типа микроконтроллера Среда разработки STVD7 поддерживает механизм внутрисхемной отладки проектных решений (рис. 21).
Рис. 21. Отладка в среде STVD7 Основным преимуществами использования STVD7 является возможность получения расширенных результатов работы приложения (значения регистров периферийных модулей, значения внутренних регистров ядра, стека, регистра признака, состояние переменных в памяти ROM, RAM и т.д.) в реальной масштабе времени с использованием режима внутрисхемной отладки. Меню File (Файл) предоставляет стандартные команды для управления рабочими областями и текстовыми файлами, включает следующие пункты: New, Open, Close, Close All, Save, Save as, Save All, Print и Recent (рис. 22). Команды для работы с рабочими областями New Workspace и Open Workspace достаточно важны, поскольку перед созданием проектов, разработкой и отладкой ваших приложений вы должны создать (или открыть существующую) рабочую область. Меню Edit (Правка) включает команды редактирования файла и поиска текста. Эти команды доступны, когда открыто окно редактора в режимах создания и отладки. Дополнительно это меню предоставляет команды точек останова и доступ к окну Quick Watch, которое используется при отладке. Undo/Redo – данная команда отменяет последнюю команду редактора или возвращает последнюю отмененную команду.
Рис. 22. Меню «Файл» Cut, Copy, Paste – стандартные операции с буфером обмена: вырезать, копировать, вставить. Find…, Find Next и Replace – данные команды предназначены для поиска и/или замены строки в редактируемом тексте. Команда Find также доступна в контекстном меню. Go to – позволяет осуществить переход к указанной строке, адресу или функции. Find in Files – находит строку в любом из файлов в заданной директории. Breakpoints – позволяет добавить точки останова в текст программы в активном окне редактора, после чего программа будет выполняться с учетом этих точек. Bookmarks – вставка/удаление закладок, а также навигация по ним в пределах текущего файла. Quick Watch – данная команда открывает окно Quick Watch, предназначенное для быстрого доступа к функциям просмотра значений переменных. Refresh – регенерирует все окна. Match Brace – с помощью данной команды можно перейти к скобке, которая соответствует скобке, подсвеченной в окне редактора. Complete Word – данная команда выводит список возможных завершений введенного слова. Parameter Info – открывает информацию о синтаксисе вводимой инструкции ассемблера ST7. Команды меню View (Вид) позволяют открывать такие окна, как Workspace, Output и Instruction Breakpoint в режиме создания или отладки. В режиме отладки это меню также позволяет открывать различные окна для просмотра исходного кода программы, состояния регистров, памяти, стека и переменных (рис. 23).
Рис. 23. Меню «Вид» Меню Project (Проект) предоставляет доступ к настройкам проекта, просмотру зависимостей и т.п. (рис. 24).
Рис. 24. Меню «Проект» Set Active Project – позволяет выбрать проект, который вы хотите сделать активным для изменения или конфигурирования. Insert Files into Project – Открывает окно, в котором существующий файл можно вставить в активный проект. Dependencies... – позволяет устанавливать зависимости среди проектов в рамках текущей рабочей области. Settings... – открывает окно настроек проекта. Export Makefile... – генерирует makefile-скрипт, который может быть запущен на выполнение с помощью утилиты gmake вне среды STVD7. Insert Project into Workspace – открывает окно, в котором можно указать путь к существующему проекту и добавить его в текущую рабочую область. Add New Project to Workspace – позволяет создать новый проект и добавить его в текущую рабочую область. Remove Project from Workspace – удаляет активный проект из рабочей области. Меню Build (Сборка) содержит команды, которые позволяют конфигурировать, запускать и останавливать создание вашего приложения. Эти команды, за исключением Compile и Batch Build, обращаются к активному проекту в текущей рабочей области. Compile применяется к файлу программы, который Вы выбрали в окне рабочей области. Batch Build применяется к проектам, которые выделены в окне Batch Build. Следует отметить, что доступа к командам в этом меню нет до тех пор, пока не будут созданы рабочая область с проектом (рис. 25).
Рис. 25. Меню «Сборка» Меню Debug (Отладка) предоставляет доступ к командам запуска и останова загруженной программы (Run, Restart, Continue, Run to Cursor и Stop), пошагового запуска (Step Into, Step Over, Step Out) и командам Go To PC и Set PC (рис. 26). Эти команды предназначены для работы с программой при отладке.
Рис. 26. Меню «Отладка» Меню Debug instrument (Средства отладки) предоставляет доступ к опциям, которые предназначены для отладки аппаратных средств. Содержание меню меняется в зависимости от выбранных инструментов отладки. Прежде чем будет выбран инструмент отладки, данное меню представит следующие команды:
Рис. 27. Меню «Средства отладки» Target Settings – открывает окно настроек, позволяющее выбрать инструмент отладки и конфигурировать подключение через USB или Ethernet. Меню Tools (Инструменты) позволяет настроить внешний вид и расположение окон среды STVD7 и установить различные пользовательские опции (рис. 28).
Рис. 28. Меню «Инструменты» Customize – позволяет выбрать функции для добавления в меню Tools. Options – позволяет настроить различные пользовательские опции, включая: панели инструментов, команды, опции редактирования/отладки, рабочие области. Programmer – открывает интерфейс программирования, предназначенный для загрузки программы в микроконтроллер. Меню Windows (Окна) предоставляет доступ к командам упорядочивания открытых окон редактора и навигации по ним (рис. 29).
Рис. 29. Меню «Окна» Next/Previous – с помощью данной команды можно переходить по очереди к открытым окнам редактора. Cascade/Tile – упорядочивает все открытые окна в пределах главной области приложения согласно выбранной опции. На независимые и связанные окна действие команды не распространяется. Arrange Icons – упорядочивает пиктограммы всех свернутых окон. Status Bar – управляет представлением строки состояния. List of opened files – создает список всех файлов в главном окне. Активное окно помечено специальной отметкой. Если щелкнуть левой кнопкой мыши на любом окне в списке, то это окно становится активным. Двойной щелчок на имени файла открывает его для просмотра. Меню Help (Помощь) предоставляет пользователю доступ к командам справки (рис. 30).
Рис. 30. Меню «Помощь» Search – осуществляет поиск в online-справке. Help Home Page – открывает домашнюю страницу online-справки. About... – выводит информацию об STVD7 и инструменте отладки. Help On Instruction... – открывает список команд ST7. ST7 Instruction Set Contents... – открывает оглавление системы команд ST7. Generate Support File – позволяет сгенерировать log-файлы, которые Вы можете отправлять службе поддержки для получения справки. Лабораторная работа №2 Ознакомление с лабораторным стендом, анализ тактовых диаграмм с помощью осциллографа Задание: Ознакомится с микроконтроллерным стендом, исследовать работу стенда с записанной в него программой с помощью осциллографа. Используя цифровой осциллограф (см. приложение 3) провести наблюдение тактовых диаграмм, возникающих на выводах микроконтроллера в процессе выполнения программы. Теоретические сведения Лабораторный стенд состоит из следующих частей (см. рис. 31): отладочной платы с установленным микроконтроллером ST7FLITE29, программатора/отладчика inDART STX, блока питания. Питание платы микроконтроллера (5В постоянного напряжения) осуществляется подключением блока питания через разъем питания. Программатор необходим для загрузки программы во флэш-память микроконтроллера и, при необходимости, ее отладки. Плата программатора подключается к персональному компьютеру через USB порт, а программирование контроллера осуществляется через шлейф, присоединяемый к разъему ISP платы (JP1). Внимание: переключатель выбора микроконтроллера (S3) всегда должен находится в положение ST7.
Рис. 31. Общий вид лабораторного стенда Восемь переключателей блока S6 позволяют подключать/отключать 8 светодиодов (LED1 – LED8) к портам ввода/вывода микроконтроллера. Переключатель W3 позволяет подключать/отключать DC/DC двигатель к микроконтроллеру. Переключатель W4 осуществляет подключение пьезоэлектрического спикера. Контакты W5, W7 подключают/отключают кнопки S4 и S5. Переключатель W6 позволяют подключать/отключать потенциометр R20 к аналоговому входу микроконтроллера. Кнопка S1 осуществляет сброс микроконтроллера. Таблица 15. Подключение внешних устройств к выводам ST7 Наименование вывода Подключаемое устройство Вывод ST7
PA0/LTIC Светодиод LED1 13
PA1/ATIC Светодиод LED2 12
PA2/ATPWM0 Двигатель 11
PA2/ATPWM1 Светодиод LED3 10
PA2/ATPWM2 Светодиод LED4 9
PA2/ATPWM3/ICCDATA Зарезервировано для ISP 8
PA6/MCO/ICCCLK/BREAK Зарезервировано для ISP 7
PA7 Светодиод LED5 6
PB0/SS/AIN0 Потенциометр/кнопка S5/вход 1 19
PB1/SCK/AIN1 Сигнал управления индикатором с помощью SPI: CK SPI 20
PB2/MISO/AIN2 Сигнал управления индикатором – загрузка данных в Max7219 1
PB3/MOSI/AIN3 Сигнал управления индикатором с помощью SPI: MOSI 2
PB4/CLKIN/AIN4 Светодиод LED6 3
PB5/AIN5 Светодиод LED7 4
PB6/AIN6 Светодиод LED8 5
RESET Кнопка сброса S1 18
Лабораторная работа №3 Порты ввода/вывода микроконтроллера ST7FLITE29 Задание: Инициализировать порты микроконтроллера ST7FLITE29 и реализовать один из алгоритмов управления светодиодами, приведенных в таблице 5. В качестве времени задержки выбрать Т = 0.5 с. Порядок работы с отладочным комплектом: Замкнуть все перемычки в блоке S6; Если в работе используется звуковой сигнал, то отключить светодиод №3 в блоке S6 и замкнуть перемычку W4; Если в работе используется электрический двигатель, то замкнуть перемычку W3; Все остальные перемычки должны быть разомкнуты; Все задания на лабораторную работу определены в виде числовых цепочек, числа в которой соответствуют номерам светодиодов на плате (рис. 32). Группа из 8 чисел представляет собой состояние линий портов, к которым подключены светодиоды в какой-то момент времени. Последовательность групп чисел является временной последовательностью, которую и необходимо реализовать. При этом цифра, выделенная жирным шрифтом, соответствует «горящему» светодиоду.
Рис. 32. Обозначение светодиодов на плате Таблица 16. Задание на лабораторную работу Вариант Задание
Теоретические сведения Порты ввода/вывода. Микроконтроллер ST7FLITE29 имеет 15 линий ввода/вывода – 8 линий на порту A и 7 линий на порту B. Каждый из портов может быть запрограммирован как для ввода данных, так и для вывода. Также некоторые из портов могут выполнять альтернативные функции, то есть, например, являться входом для источника внешних прерываний, АЦП, выходом ШИМ или периферийных модулей типа UART, SPI, USB. Управление состоянием линий портов осуществляется с помощью 6 регистров (по 3 регистра на каждый порт): PADR, PBDR, PADDR, PBDDR, PAOR, PBOR (табл. 17). Таблица 17. Предназначение регистров управления портами Порт Обозначение регистров Назначение
A PADR Port A Data Register PADDR Port A Data Direction Register PAOR Port A Option Register Регистр данных порта A Регистр направления передачи данных порта A Регистр опций порта A
B PBDR Port B Data Register PBDDR Port B Data Direction Register PBOR Port B Option Register Регистр данных порта B Регистр направления передачи данных порта B Регистр опций порта B
Установка бита с номером n в 0 в регистре PXDDR приводит к тому, что n-я линия порта (n-й пин) будет работать на вход. Соответственно, установка бита с номером n в 1 приводит к тому, что n-я линия порта будет работать на выход. В зависимости от состояния битов в регистре PXOR возможны следующие конфигурации (табл. 18): Таблица 18. Режимы конфигурации портов Режим конфигурации DDR OR
* – значение по умолчанию (после сброса МК). При использовании линий в качестве входа внешних прерываний требуется запрограммировать их в режим ввода и установить соответствующие биты в PXOR равными 1, т.е. PXDDR:PXOR = 0:1. При использовании линий в качестве аналогового входа АЦП требуется запрограммировать их в режим ввода и установить соответствующие биты в PXOR равными 0, т.е. PXDDR:PXOR = 0:0. Базовый листинг Задание: Обеспечить следующий алгоритм управления светодиодами: 12345678>12345678> Листинг 1: st7/ TITLE "GPIO.ASM" MOTOROLA #INCLUDE "ST7FLITE29.INC" BYTES segment byte at 0080-00FF 'ram' LED_OUT ds.b 1 WORDS segment byte at E000-FFDF 'rom' .MAIN CALL INIT_PORT ;Инициализация портов ввода/вывода loop: LD A, #$55 LD LED_OUT, A CALL FIRE_LED ;”Зажигаем” нечетные светодиоды CALL DELAY ;Организуем задержку в полсекунды LD A, #$AA LD LED_OUT, A CALL FIRE_LED ;”Зажигаем” нечетные светодиоды CALL DELAY JP loop
.INIT_PORT LD A, #$9B LD PADDR, A ;PA7, PA4, PA3, PA1, PA0 на выход LD PAOR, A ;PA7, PA4, PA3, PA1, PA0 push-pull выход LD A, #$70 LD PBDDR, A ;PB4, PB5, PB6 на выход LD PBOR, A ;PB4, PB5, PB6 push-pull выход RET .DELAY ;Организация задержки 0,5 с PUSH X PUSH Y LD X, #$FF dec_2:LD Y, #$FF dec_1:DEC Y JRNE dec_1 DEC X JRNE dec_2 POP Y POP X RET .FIRE_LED ;Побитовый вывод числа LED_OUT на светодиоды LD A, #$00 BTJF LED_OUT, #0, skip0 OR A, #$40 skip0:BTJF LED_OUT, #1, skip1 OR A, #$20 skip1:BTJF LED_OUT, #2, skip2 OR A, #$10 skip2:LD PBDR, A LD A, #$00 BTJF LED_OUT, #3, skip3 OR A, #$80 skip3:BTJF LED_OUT, #4, skip4 OR A, #$10 skip4:BTJF LED_OUT, #5, skip5 OR A, #$08 skip5:BTJF LED_OUT, #6, skip6 OR A, #$02 skip6:BTJF LED_OUT, #7, skip7 OR A, #$01 skip7:LD PADR, A RET segment byte at FFE0-FFFF 'vectit' UNUSED1 DC.W 0 ; FFE0-FFE1h SPI DC.W 0 ; FFE2-FFE3h LTMR_RTC1 DC.W 0 ; FFE4-FFE5h LTMR_CAP DC.W 0 ; FFE6-FFE7h ATMR_OVF DC.W 0 ; FFE8-FFE9h ATMR_CMP DC.W 0 ; FFEA-FFEBh AVD DC.W 0 ; FFEC-FFEDh UNUSED2 DC.W 0 ; FFEE-FFEFh LTIMER DC.W 0 ; FFF0-FFF1h EXT3 DC.W 0 ; FFF2-FFF3h EXT2 DC.W 0 ; FFF4-FFF5h EXT1 DC.W 0 ; FFF6-FFF7h EXT0 DC.W 0 ; FFF8-FFF9h AWU DC.W 0 ; FFFA-FFFBh SOFTWARE DC.W 0 ; FFFC-FFFDh RESET DC.W MAIN ; FFFE-FFFFh END
Лабораторная работа №4 Система прерываний микроконтроллера ST7FLITE29 Задание: Написать программу управления светодиодом с помощью кнопок S4 и S5 согласно заданному варианту. Для этого настроить соответствующие порты микроконтроллера для реакции на внешний источник прерываний. Порядок работы с отладочным набором: Замкнуть все перемычки в блоке B1/S6, кроме 3 (PA3); Замкнуть перемычки W5 и W7; Разомкнуть перемычки W3, W4 и W6; Таблица 19. Способы управления светодиодом Вариант Задание
Теоретические сведения Прерывания. Микроконтроллер ST7FLITE29 имеет два типа прерываний: маскированные и немаскированные. Немаскированные прерывания генерируются командой TRAP и выполняются независимо от состояния бита I в регистре кода условий. Типы прерываний и начальные адреса подпрограмм их обработки перечислены в таблице 20. Таблица 20. Источники прерываний № Прерывание Описание Приоритет Адрес подпрограммы (вектор)
1 RESET Сброс Высокий Низкий FFFE – FFFF
2 TRAP Программное прерывание
FFFC – FFFD
3 AWU
FFFA – FFFB
4 EI0 Внешнее прерывание 0
FFF8 – FFF9
5 EI1 Внешнее прерывание 1
FFF6 – FFF7
6 EI2 Внешнее прерывание 2
FFF4 – FFF5
7 EI3 Внешнее прерывание 3
FFF2 – FFF3
8 LITE TIMER По переполнению
FFF0 – FFF1
9
Не используется
FFEE – FFEF
10 SI AVD прерывание
FFEC – FFED
11 AT TIMER Захват, Равенство
FFEA – FFEB
12
По переполнению
FFE8 – FFE9
13 LITE TIMER Захват входного прерывания
FFE6 – FFE7
14
По переполнению
FFE4 – FFE5
15 SPI Транзакции на SPI шине
FFE2 – FFE3
16
FFE0 – FFE1
Перед выполнением программного кода обработки прерывания в стек помещается содержимое следующих регистров: PC, X, A, CC. Код обработки прерывания должен заканчиваться инструкцией IRET. После выполнения этой команды регистры PC, X, A, CC восстанавливают свои значения из стека. Как видно из таблицы 20 микроконтроллер может обрабатывать 4 внешних прерывания. Настройка модуля обработки прерываний осуществляется с помощью двух регистров: EICR и EISR. Соответственно первый их них определяет чувствительность к сигналу, а второй подключает соответствующий порт микроконтроллера к внутренней логике обработки внешних прерываний. Чувствительность к сигналу настраивается с помощью регистра EICR (EXTERNAL INTERRUPT CONTROL REGISTER). Формат регистра EICR приведен в таблице 21. Таблица 21. Формат регистра EICR EICR Название Описание
7:6 IS31:0 00 задает чувствительность по срезу и низкому уровню 01 задает чувствительность только по фронту 10 задает чувствительность только по срезу 11 задает чувствительность по срезу и по фронту
5:4 IS21:0
3:2 IS11:0
1:0 IS01:0
Таблица 22. Формат регистра EISR EISR Название Описание
7:6 EI31:0 Выбор входа внешних прерываний для портов PB0 - PB2 00 задает в качестве входа внешних прерываний линию PB0 01 задает в качестве входа внешних прерываний линию PB1 10 задает в качестве входа внешних прерываний линию PB2
5:4 EI21:0 Выбор входа внешних прерываний для портов PB3 - PB6 00 задает в качестве входа внешних прерываний линию PB3 01 задает в качестве входа внешних прерываний линию PB4 10 задает в качестве входа внешних прерываний линию PB5 11 задает в качестве входа внешних прерываний линию PB6
3:2 EI11:0 Выбор входа внешних прерываний для портов PA4 - PA7 00 задает в качестве входа внешних прерываний линию PA4 01 задает в качестве входа внешних прерываний линию PA5 10 задает в качестве входа внешних прерываний линию PA6 11 задает в качестве входа внешних прерываний линию PA7
1:0 EI01:0 Выбор входа внешних прерываний для портов PA0 - PA3 00 задает в качестве входа внешних прерываний линию PA0 01 задает в качестве входа внешних прерываний линию PA1 10 задает в качестве входа внешних прерываний линию PA2 11 задает в качестве входа внешних прерываний линию PA3
Чтобы подключить линию внешнего прерывания к соответствующему входу микроконтроллера необходимо установить соответствующие биты в регистры EISR (EXTERNAL INTERRUPT SELECT REGISTER). Формат регистра EISR приведен в таблице 22. Базовый листинг Задание: Обеспечить следующий алгоритм управления светодиодами: 12345678>S4>12345678>S4> Листинг 2: … .MAIN RSP CLR MCCSR ;Нормальный режим работы ядра CALL INIT_PORT ;Инициализация портов ввода/вывода CALL INIT_EXT_INT ;Инициализация модуля внешних прерываний RIM ;Разрешение прерываний LD A, #$00 LD LED_OUT, A loop: CALL FIRE_LED JP loop
.INIT_PORT LD A, #$93 ;Конфигурируем линии PA0, PA1, PA4, PA7 как LD PADDR, A ;push-pull выходы, а линию PA3 как floating LD A, #$9B ;вход (под внешнее прерывание). LD PAOR, A
LD A, #$70 ;Конфигурируем линии PB4, PB5, PB6 как LD PBDDR, A ;push-pull выходы. LD PBOR, A RET .INIT_EXT_INT PUSH A LD A, #%00000010 ;Чувствительность по срезу LD EICR,A LD A, #%00000011 ;PA3 - вход внешних прерываний LD EISR,A POP A RET .DELAY ;Программная задержка порядка 0.5 с PUSH X PUSH Y LD X, #$FF dec_2:LD Y, #$FF dec_1:DEC Y JRNE dec_1 DEC X JRNE dec_2 POP Y POP X RET .EXT_Handler0 ;Код обработки внешнего прерывания (нажатия LD A, LED_OUT ;кнопки S4) XOR A, #$0F AND A, #$0F LD LED_OUT, A IRET
segment byte at FFE0-FFFF 'vectit' … EXT0 DC.W EXT_Handler0 ;FFF8-FFF9h … END
Лабораторная работа №5 Интерфейс SPI микроконтроллеров ST7 Задание: Инициализировать интерфейс SPI микроконтроллера, используя для этого соответствующие порты: PB1 для сигнала SCK, PB2 для сигнала MISO, PB3 для сигнала MOSI. Порядок работы с отладочной платой: Выставить перемычки B1/S6 в верхнее положение. Замкнуть перемычки W4, W6. Разомкнуть перемычки W3, W5, W7. Теоретические сведения Интерфейс порта SPI (Serial Port Interface) предназначен для высокоскоростного обмена между микроконтроллерами ST7 и периферийными микросхемами, такими как АЦП, ЦАП, FLASH-память, различные датчики, часы реального времени. Данный интерфейс может быть также использован для обмена между двумя микроконтроллерами, расположенными на небольшом расстоянии. Достоинством синхронной последовательной приемо-передачи с использованием протокола SPI является полный дуплексный обмен данными, что в случае необходимости позволяет реализовать экономичную потенциальную развязку между приемником и передатчиком. Интерфейс основан на сдвиговом регистре, который предназначен для выполнения преобразования последовательного интерфейса в параллельный, а также для обратного преобразования. Интерфейс трехпроводный, состоит из двух каналов данных и одного канала синхронизации (рис. 33).
Рис. 33. Схема подключения двух устройство по шине SPI Временная диаграмма обмена данными по интерфейсу SPI для различных режимов работы приведена на рис. 34.
Рис. 34. Диаграмма обмена данными по интерфейсу SPI Настройка интерфейса SPI осуществляется с помощью регистра SPICR (SPI Control Register), описание битов данного регистра приведено в табл. 21. Таблица 21. Регистр SPICR SPICR Название Описание
2 CPHA Используемый фронт тактового генератора (рис. 34)
1:0 SPR1:0 Выбор рабочей частоты (табл. 22).
Таблица 22. Выбор рабочей частоты Частота SPR2 SPR1 SPR0
FCPU/4 1 0 0
FCPU/8 0 0 0
FCPU/16 0 0 1
FCPU/32 1 1 0
FCPU/64 0 1 0
FCPU/128 0 1 1
Для просмотра статуса интерфейса SPI предназначен 8-битный регистр SPISR (SPI Status Register), описание битов данного регистра приведено ниже. Таблица 23. Регистр SPISR SPISR Название Описание
7 SPIF Флаг передачи данных 0 – передача данных не завершена 1 – передача данных завершена
6 WCOL Статус коллизии записи
5 OVR Ошибка переполнения SPI
4 MODF Флаг ошибки режима
3 -
2 SOD запрещение выхода SPI 0 – выход SPI запрещен 1 – выход SPI разрешен
1:0 -
Пример инициализации порта SPI показан в листинге ниже. В аккумулятор загружается константа, содержащая требуемые настройки порта, затем содержимое аккумулятора записывается в регистр управления портом SPICR. Базовый листинг Задание: Вывести на знакосинтезирующий индикатор число 1984, используя подключаемую библиотеку для работы с MAX7219 (LED Display Driver). Листинг 3: … #include "MAX7219.INC" ;Прототипы импортируемых переменных и ;процедур для MAX7219 … main: rsp ;Сбрасываем указатель стэка sim ;Маскируем прерывания clr MCCSR ;Нормальный режим работы ГТИ call init ;Инициализируем порты МК call init_SPI ;Инициализируем SPI call MAX7219_INIT ;Инициализируем MAX7219 call MAX7219_CLEAR ;Очищаем MAX7219 loop: ;Выводим число 1 на 1-й ЗСИ ld A, #$01 ;Загружаем в аккумулятор номер ЗСИ ld LED_N, A ;Помещаем номер ЗСИ в переменную LED_N ld A, #$01 ;Загружаем в аккумулятор отображаемое число ld LED_S, A ;Помещаем число в переменную LED_S call MAX7219_DISPLAY ;Вызываем функцию отображения ;Выводим число 9 на 2-й ЗСИ ld A, #$02 ld LED_N, A ld A, #$09 ld LED_S, A call MAX7219_DISPLAY ;Выводим число 8 на 3-й ЗСИ ld A, #$03 ld LED_N, A ld A, #$08 ld LED_S, A call MAX7219_DISPLAY ;Выводим число 4 на 4-й ЗСИ ld A, #$04 ld LED_N, A ld A, #$04 ld LED_S, A call MAX7219_DISPLAY jp loop ;Зацикливаем вывод числа init: ld A, #%00000000 ld PADDR, A ;PA0-PA7 на вход ld A, #%00001110 ld PBDDR, A ;PB1, PB2, PB3 на выход ld A, #%00001110 ld PBOR,A ;PB1, PB2, PB3 как push-pull выходы ret .init_SPI ld A, #%00000011 ld SPISR, A ;Включаем режим MASTER для SPI ld A, #%01011100 ld SPICR, A ;CPHA = 1 – активен фронт импульса ;CPOL = 1 – активен высокий уровень ;MSTR = 1 – SCK ведущий генератор ;SPE = 1 – включаем SPI ret … end
Лабораторная работа №6 Таймер ART микроконтроллера ST7FLITE29 Задание: Инициализировать регистры управления таймером и запрограммировать секундомер, используя в качестве индикации семисегментные индикаторы. Обеспечить счет секунд от 0 до 59, а также сброс в начальное состояние по нажатию кнопки S4 и запуск/останов таймера по нажатию кнопки S5. Теоретические сведения Таймер ART представляет собой 12-битный таймер с автоперезагрузкой. Предназначен для: Реализация временных задержек; Генерация прерывания при переполнении; Таймер основан на автономном (несинхронизированном) 12-битном счетчике с входным автоперезагружаемым регистром и 4-мя выходными PWM-каналами. Имеет 6 внешних выводов: 4 выхода ШИМ; Вход ATIC (AT Input Capture) для функции захвата; Вход BREAK для ШИМ (для прекращения сигнала на PWM выходах); Основные характеристики ART-таймера: Частота счета 2 кГц – 4 МГц при fCPU = 8 МГц; Управление полярностью сигналов; Генерация прерываний при переполнении таймера Реализация временных задержек. При переполнении 12-битного счетчика CNTR устанавливается флаг переполнения OVF в регистре управления/статуса ATCSR, что свидетельствует об окончании временного интервала. Длительность интервала можно задавать записью соответствующего кода в регистр ATR. Режим захвата (Input Capture). После фронта/среза импульса на выходе ATIC микроконтроллера содержимое 12-битного счетчика CNTR запоминается в регистр ATICR, при этом выставляется флаг ICF в регистре ATCSR и, если прерывание разрешено, то оно генерируется. Бит ICF сбрасывается при чтении регистра ATICR. Регистр ATICR доступен лишь для чтения и содержит значение счетчика, соответствующее последнему захвату данных. Пока бит ICF выставлен, дальнейший захват данных невозможен. Режим сравнения (Output Compare Mode). Чтобы реализовать этот режим необходимо загрузить 12-битное значение в регистровую пару DCRxH и DCRxL. Если счетчик (CNTR) достигнет значения, записанного в DCRxH и DCRxL, то в регистре PWMxCSR бит CMPF устанавливается в 1 и генерируется прерывание, если установлен бит CMPIE в регистре ATCSR. Генерация ШИМ-сигналов. PWM режим позволяет сгенерировать до 4-х ШИМ сигналов. PWMx выход может быть разрешен или запрещен битом OEx в регистре PWMCR. Четыре PWM сигнала имеют одинаковую частоту (fPWM), которая задается частотой счетчика и значением регистра ATR: fPWM = fCOUNTER/(4096 - ATR) Из формулы 4.1. можно сделать следующие выводы: Если fCOUNTER = 32 МГц, то максимальное значение fPWM = 8 МГц (значение регистра ATR = 4092), минимальное значение – 8 КГц (значение регистра ATR = 0); Если fCOUNTER = 4 МГц, то максимальное значение fPWM = 2 МГц (значение регистра ATR = 4094), минимальное значение – 1 КГц (значение регистра ATR = 0); Функция BREAK. Активируется внешним сигналом BREAK на одноимённом входе (активный уровень 0) (рис. 35). Для использования функции BREAK необходимо установить бит BPEN в регистре BREAKCR. При появлении низкого уровня на входе BREAK устанавливается бит BA в регистре BREAKCR, при этом выходы ШИМ прекращают генерировать импульсы, а регистры ARR, PWMCR, DCRx сбрасываются в исходное состояние.
Рис. 35. Влияние сигнала BREAK на ШИМ Описание регистров таймера. Регистр управления/статуса таймера ATCSR (Autoreload Timer Control Status Register). Регистр допускает операции чтения и записи. Значение по умолчанию 0x00. Формат регистра ATCSR представлен в таблице 24: Таблица 24. Формат регистра ATCSR ATCSR Название Описание
7 0
6 ICF Input capture Flag Флаг захвата. Этот бит устанавливается аппаратно и сбрасывается программно при чтении регистра ATICR. Запись в этот бит не меняет его содержимого. Если ICF = 1, то захват был осуществлен.
5 ICIE IC Interrupt Enable Разрешает IC прерывания. Этот бит устанавливается и сбрасывается программно. 0 – запрещает IC прерывание 1 - разрешает IC прерывание
Таблица 24 (продолжение). ATCSR Название Описание
4:3 CK1:0 Counter Clock Selection Выбор генератора для счетчика. Эти биты устанавливаются и сбрасываются программно, а также сбрасываются по сигналу RESET. Эти биты определяют частоту генератора. Изменения вступают в силу после переполнения. 00 – Off 01 – fLTIMER(период 1 мс при fCPU = 8 МГц) 10 – fCPU 11 – 32 МГц
2 OVF Overflow Flag Флаг переполнения. Этот бит устанавливается аппаратно и сбрасывается программно при чтении регистра TCSR.
Регистр CNTR. Регистр состоит из старшей части CNTRH и младшей части CNTRL. Эти оба регистры доступны только для чтения. Биты CNTR[11..0] (Counter Value) значения счетчика. Счетчик инкрементируется с каждым тактовым импульсом генератора, выбранного битам CK[1:0]. При считывании значения счетчика используются 2 последовательные операции чтения. При переполнении счетчика в него заносится значение ATR регистра. Формат старшей и младшей части регистра CNTR приведен в табл. 25 – 26. Таблица 25. Формат регистра CNTRH CNTRH Название Описание
7:4 0
3:0 CNTR11:8 Counter Value Старшие 4 бита регистра CNTR.
Таблица 26. Формат регистра CNTRL CNTRL Название Описание
7:0 CNTR7:0 Counter Value Младшие 8 бит регистра CNTR.
Регистр автоперезагрузки ATR (AutoReload Register). Регистр состоит из старшей части ATRH и младшей части ATRL. Эти оба регистры доступны для чтения и записи. Биты ATR[11..0] – значение автоперезагружаемого регистра. Значение ATR автоматически загружается в счетчик CNTR при его переполнении. В режиме ШИМ значение регистра ATR используется для задания частоты выходного сигнала ШИМ. Формат старшей и младшей части регистра ATR приведен в табл. 27 – 28. Таблица 27. Формат регистра ATRH ATRH Название Описание
Регистр управления выводом PWM PWMCR (PWM Control Register). Регистр допускает чтения и запись. Формат регистра приведен в табл. 29. Таблица 29. Формат регистра PWMCR PWMCR Название Описание
7 0
6 OE3 PWM3 output enable Подключают PWM3 к соответствующему выходу МК. Устанавливаются и сбрасываются программно. 0 – PWM3 отключен от выхода МК 1 – PWM3 подключен к выходу МК
5 0
4 OE2 PWM2 output enable Подключают PWM2 к соответствующему выходу МК. Устанавливаются и сбрасываются программно. 0 – PWM2 отключен от выхода МК 1 – PWM2 подключен к выходу МК
3 0
2 OE1 PWM1 output enable Подключают PWM1 к соответствующему выходу МК. Устанавливаются и сбрасываются программно. 0 – PWM1 отключен от выхода МК 1 – PWM1 подключен к выходу МК
Таблица 29 (продолжение). PWMCR Название Описание
1 0
0 OE0 PWM0 output enable Подключают PWM0 к соответствующему выходу МК. Устанавливаются и сбрасываются программно. 0 – PWM0 отключен от выхода МК 1 – PWM0 подключен к выходу МК
PWMxCSR (PWMx Control Status Register). Регистр допускает операцию чтения записи. Формат регистра PWMxCSR приведен в табл. 30. Таблица 30. Формат регистра PWMxCSR Название Описание
7:2 0
1 OPx PWMx Output Polarity Определяет полярность выходного сигнала
0 CMPFx PWMx Compare Flag Этот бит устанавливается аппаратно и сбрасывается программно при чтении регистра PWMxCSR. 0 - значение счетчика не совпадает со значением в регистре DCRx 1 - значение счетчика совпадает с значением в регистре DCRx
Регистр управления остановкой BREAKCR (BREAK Control Register). Допускает операцию чтения и записи. Формат регистра BREAKCR приведен в табл. 31. Таблица 31. Формат регистра BREAKCR BREAKCR Название Описание
7:6 0
5 BA Break Active Остановка разрешена. Этот бит устанавливается/сбрасывается программно. Также он устанавливается аппаратно при появлении низкого уровня на входе BREAK.
4 BPEN Break Pin Enable Подключает линию BREAK к соответствующему входу МК 0 – отключен 1 – подключен
3:0 PWM3:0 Break Pattern Определяю те линии ШИМ, на которые влияет сигнал BREAK, если функция BREAK активна.
Регистр DCRx. Поддерживает операцию чтения и записи. Биты DCR[11..0] (PWMx Duty Cycle Value) задают значение для конкретного режима работы. Если OEx = 1 в регистре PWMCR, то DCR[11..0] определяют скважность выходного сигнала ШИМ. В режиме сравнения они определяют значение, которое сравнивается со значением счетчика. Формирование ШИМ импульсов пояснено на рис. 36. Формат младшей и старшей частей данного регистра приведены в табл. 32. и 33. Таблица 32. Формат регистра DCRxH DCRxH Название Описание
7:4 0
3:0 DCR11:8 Старшие 4 бита регистра DCRx
Таблица 33. Формат регистра DCRxL DCRxL Название Описание
7:0 DCR7:0 Младшие 8 бит регистра DCRx
Рис. 36. Формирование ШИМ-сигнала Регистр ATICR допускает только чтение. Биты ICR[11..0] (Input Capture Data) – данные захвата. Регистр ATICR хранит значение 12-битного регистра CNTR на момент появления фронта/среза импульса на выводе ATIC. Захват данных возможен в том случае, когда бит ICF сброшен. Формат младшей и старшей частей данного регистра приведены в табл. 34 и 35. Таблица 34. Формат регистра ATICRH ATICRH Название Описание
7:4 0
3:0 ICR11:8 Старшие 4 бита регистра ATICR
Таблица 35. Формат регистра ATICRL ATICRL Название Описание
7:0 ICR7:0 Младшие 8 бит регистра ATICR
Регистр управления передачей TRANCR (TRANSFER CONTROL REGISTER). Поддерживает операцию чтения и записи. Формат регистра приведен в табл. 36. Таблица 36. Формат регистра TRANCR ATICRL Название Описание
7:1 0 Младшие 8 бит регистра ATICR
0 TRAN Transfer Enable Разрешает перезапись DCRx в теневой регистр после переполнения. Устанавливается/сбрасывается программно
Базовый листинг Задание: Реализовать простой счетчик секунд, используя таймер для организации секундных интервалов и интерфейс SPI для вывода цифр на семисегментные индикаторы. Листинг 4: … #INCLUDE "MAX7219.INC" … BYTES segment byte at 0080-00FF 'ram'
DELAYH ds.b 1 DELAYL ds.b 1 SECONDS ds.b 1 WORDS segment byte at E000-FFDF 'rom' .MAIN RSP ;Сбрасываем указатель стэка SIM ;Запрещаем прерывания CLR MCCSR ;Нормальный режим работы ядра LD A, #$7E LD RCCR, A ;Калибруем тактовый генератор CALL INIT_PORT ;Инициализируем порты МК CALL INIT_TIMER ;Инициализируем таймер CALL INIT_SPI ;Инициализируем SPI CALL MAX7219_INIT ;Инициализируем и очищаем MAX7219 CALL MAX7219_CLEAR LD A, #$03 ;Инициализируем счетчик срабатываний LD DELAYH, A ;таймера LD A, #$E8 LD DELAYL, A CLR SECONDS RIM loop: JP loop ;Зацикливаем программу
.INIT_PORT … ;Инициализируем порты RET .INIT_TIMER LD A, #%00010010 ;В качестве f тактовых импульсов LD ATCSR, A ;выбираем частоту ядра. Разрешаем ;прерывания по переполнению LD A, #$00 ;Инициализируем регистр ATR числом LD ATRH, A ;96 = 0x60. Таким образом частота ;срабатывания таймера устанавливается LD A, #$60 ;как fcpu/4000 LD ATRL, A RET .INIT_SPI … ;Инициализируем SPI RET .TIMER_Handler LD A, ATCSR ;Сбрасываем флаг OVF
DEC DELAYL ;Уменьшаем частоту срабатывания JRNE thend ;таймера до 1 Гц LD A, #$FF LD DELAYL, A DEC DELAYH JRPL thend LD A, #$03 LD DELAYH, A LD A, #$E8 LD DELAYL, A
INC SECONDS CALL HEX_TO_DEC ;Осуществляем операцию ДД-коррекции CALL DISPLAY_Seconds ;выводим секунды на индикатор thend: IRET .HEX_TO_DEC LD A, SECONDS ;Двоично-десятичная коррекция AND A, #$0F SUB A, #$0A JRNE htd LD A, SECONDS ADD A, #$06 LD SECONDS, A
LD A, SECONDS SUB A, #$60 JRNE htd CLR SECONDS htd: RET .DISPLAY_Seconds LD A, #$4 ;Вывод секунд на индикатор LD LED_N, A LD A, SECONDS AND A, #$0F LD LED_S, A CALL MAX7219_DISPLAY
LD A, #$3 LD LED_N, A LD A, SECONDS SWAP A AND A, #$0F LD LED_S, A CALL MAX7219_DISPLAY RET segment byte at FFE0-FFFF 'vectit' … ATMR_OVF DC.W TIMER_Handler RESET DC.W MAIN … END
Лабораторная работа №7 Управление работой линейного двигателя с помощью микроконтроллера ST7 Задание: Написать программу, осуществляющую управление линейным двигателем, с возможностью изменения режима работы (вращение по часовой стрелке, вращение против часовой стрелки, остановка двигателя) при помощи клавиш лабораторного стенда. Порядок работы с отладочным комплектом: Замкнуть перемычку W3; Теоретические сведения Следует организовать программное подавление дребезга клавиатуры (обычно при нажатии на клавишу на входе МК фиксируется несколько кратковременных импульсов). Наиболее простой способ подавления дребезга – организация периодического считывания содержимого порта и сравнение текущего его состояния с результатом предыдущего считывания. Если в обоих случаях из разряда порта считывается «1», то делается вывод о том, что клавиша была нажата. Если считываются две «0», то клавиша отпущена. Время между двумя последовательными считываниями состояния клавиатуры должно составлять 10–20 мс. Для организации временной задержки можно воспользоваться встроенным в МК таймером. Одновременно можно вывести на индикаторы стенда информацию о текущем режиме работы двигателя вида. Лабораторная работа №8 АЦП микроконтроллера ST7FLITE29 Задание: Инициализировать модуль АЦП микроконтроллера и осуществить съем данных с потенциометра R20. Обеспечить вывод данных в шестнадцатеричном формате на 3 семисегментных индикатора с помощью соответствующих функций, объявленных в MAX7219.INC. Порядок работы с отладочным комплектом: Замкнуть все перемычки в блоке S6; Разомкнуть перемычки W4 и W7; Замкнуть перемычки W3, W5 и W4; Теоретические сведения Аналого-цифровой преобразователь. Представляет собой 10-битный АЦП последовательного приближения. Структурная схема представлена на рис. 36. Как видно из рисунка периферийный модуль содержит: аналого-цифровой преобразователь, входной усилитель с регулируемым коэффициентом усиления (x1 – x8), регистр данных ADCDR, регистр управления/статуса ADCCSR.
3 SLOW Используется вместе с битом SPEED регистра ADCCSR для настройки частоты преобразования АЦП (табл. 5.4.).
4 AMPCAL Используется для калибровки АЦП, когда AMPSEL = 1. Установка этого бита подсоединяет вход АЦП к 0 В. Это необходимо для того, чтобы исключить ошибку смещения уровня.
7..0 - 0
Таблица 39. Регистр управления/статуса ADCCSR ADCCSR Название Описание
6 SPEED Используется вместе с битом SLOW регистра ADCDRН для настройки частоты преобразования АЦП (табл. 5.4.).
7 EOC End Of Conversion Устанавливается в 1, после окончания преобразования (оцифровывания)
Таблица 40. Выбор частоты преобразования АЦП fADC SLOW SPEED
fCPU/2 0 0
fCPU 0 1
fCPU/4 1 x
Базовый листинг Задание: Вывести содержимое регистра ADCDRH на светодиодные индикаторы Листинг 5: … .MAIN RSP CLR MCCSR CALL INIT RIM loop: BTJF ADCCSR, #7, loop ;Ждем флага EOC – окончание преобр. LD A, ADCDRH ;Выводим содержимое регистра ADCDRH LD LED_OUT, A ;на светодиодный индикатор CALL FIRE_LED JP loop .INIT LD A, #$9B LD PADDR, A LD PAOR, A LD A, #$70 LD PBDDR, A LD PBOR, A LD A, #$20 LD ADCCSR, A ;Запускаем АЦП RET .FIRE_LED … RET segment byte at FFE0-FFFF 'vectit' … RESET DC.W MAIN END
Список литературы 1. Белов А.В. Конструирование устройств на микроконтроллерах. – СПб.: Наука и Техника, 2005. – 256 с. 2. Предко М. Руководство по микроконтроллерам. Том I. М: Постмаркет, 2001. - 416 с. 3. Предко М. Руководство по микроконтроллерам. Том II. М: Постмаркет, 2001. - 488 с. 4. Проектирование встроенных систем на микроконтроллерах STMicroelectronics / Под ред. Харченко В.С., Орехова А.А. - Министерство образования и науки Украины, Национальный аэрокосмический университет им. Н.Е. Жуковского «ХАИ», 2007. – 197 с. 5. Ридико Л. Микроконтроллеры фирмы STMicroelectronics. Часть 1. // Электронные компоненты, 2002. – №5. – с. 74-78. 6. Ридико Л. Микроконтроллеры фирмы STMicroelectronics. Часть 2. // Электронные компоненты, 2002. – №7. – с. 98-100. 7. www.st.com/mcu – STDV7 – IDE & ST7 in 10 Steps, 2008. 8. www.st.com/mcu – ST7LITE2 User Manual, 2006. 9. www.st.com/mcu – ST7Lite family, 2008. 10. www.st.com/mcu – ST7 family programming manual. 2005. 11. www.st.com/mcu – ST7 8-bit MCU family user guide, 2002. Приложение 1. Система команд микроконтроллера ST7 ADC – сложение с переносом Синтаксис: adc dst, src Пример: adc A, #$15 Операция: dst <= dst + src + C Описание: Исходный байт вместе с флагом переноса добавляются к конечному байту, результат записывается в конечный байт. Исходным байтом является байт памяти, а конечным – аккумулятор. Обзор инструкции: Мнемоника Конечный байт Исходный байт
ADC A Mem
Флаги состояния: H I N Z C
H
N Z C
ADD – сложение Синтаксис: add dst, src Пример: add A, #%11001010 Операция: dst <= dst + src Описание: Исходный байт добавляется к конечному байту, результат записывается в конечный байт. Исходным байтом является байт памяти, а конечным – аккумулятор. Обзор инструкции: Мнемоника Конечный байт Исходный байт
ADD A Mem
Флаги состояния: H I N Z C
H
N Z C
AND – логическая операция И Синтаксис: and dst, src Пример: and A, #%00110101 Операция: dst <= dst AND src Описание: Исходный байт побитно логически сравнивается с конечным байтом, результат сравнения записывается в конечный байт. Исходным байтом является байт памяти, а конечным – аккумулятор. Обзор инструкции: Мнемоника Конечный байт Исходный байт
AND A Mem
Флаги состояния: H I N Z C
N Z
BCP – логическое побитное сравнение Синтаксис: bcp dst, src Пример: bcp A, #%10100101 Операция: {N, Z} <= dst AND src Описание: Исходный байт побитно логически сравнивается с конечным байтом. Результат сравнения не сохраняется, но флаги N и Z обновляются соответствующим образом. Исходным байтом является байт памяти, а конечным – аккумулятор. Данная инструкция может быть использована для проверки битов аккумулятора. Обзор инструкции: Мнемоника Конечный байт Исходный байт
BCP A Mem
Флаги состояния: H I N Z C
N Z
BRES – установка бита в ноль Синтаксис: bres dst, #pos pos = [0..7] Пример: bres PADR, #6 Операция: dst <= dst AND COMPLEMENT (2**pos) Описание: Считывается конечный байт, соответствующий бит устанавливается в ноль, результат записывается в конечный байт. Конечным байтом является байт памяти. Позиция бита – константа. Данная инструкция быстра, компактна и не влияет ни на какие регистры. Используется для манипуляций с булевыми переменными. Обзор инструкции: Мнемоника Конечный байт Позиция бита
BRES Mem #pos
Флаги состояния: H I N Z C
BSET – установка бита в единицу Синтаксис: bset dst, #pos pos = [0..7] Пример: bset PADR, #0 Операция: dst <= dst OR (2**pos) Описание: Считывается конечный байт, соответствующий бит устанавливается в единицу, результат записывается в конечный байт. Конечным байтом является байт памяти. Позиция бита – константа. Данная инструкция быстра, компактна и не влияет ни на какие регистры. Используется для манипуляций с булевыми переменными. Обзор инструкции: Мнемоника Конечный байт Позиция бита
BSET Mem #pos
Флаги состояния: H I N Z C
BTJF – проверка бита и переход если ноль Синтаксис: btjf dst, #pos, rel pos = [0..7], rel – метка условного перехода Пример: btjf PADR, #3, skip Операция: PC = PC + 3; PC = PC + rel IF (dst AND (2**pos)) = 0 Описание: Считывается конечный байт, проверяется соответствующий бит и осуществляется переход на метку rel в том случае, если бит равен нулю, иначе программа продолжается со следующей инструкции. Проверяемый бит сохраняется в флаге C. Конечным байтом является байт памяти. Позиция бита – константа. Метка перехода указывает на адрес в памяти. Обзор инструкции: Мнемоника Конечный байт Позиция бита Метка перехода
BTJF Mem #pos rel
Флаги состояния: H I N Z C
C
BTJT – проверка бита и переход если единица Синтаксис: btjt dst, #pos, rel pos = [0..7], rel – метка условного перехода Пример: btjt PADR, #7, skip Операция: PC = PC + 3; PC = PC + rel IF (dst AND (2**pos)) <> 0 Описание: Считывается конечный байт, проверяется соответствующий бит и осуществляется переход на метку rel в том случае, если бит равен единице, иначе программа продолжается со следующей инструкции. Проверяемый бит сохраняется в флаге C. Конечным байтом является байт памяти. Позиция бита – константа. Метка перехода указывает на адрес в памяти. Обзор инструкции: Мнемоника Конечный байт Позиция бита Метка перехода
BTJT Mem #pos rel
Флаги состояния: H I N Z C
C
CALL – вызов подпрограммы (безусловный) Синтаксис: call dst Пример: call divide32_16 Операция: PC = PC + lgth; (SP--) = LSB(PC); (SP--) = MSB(PC); PC = dst Описание: Текущее значение регистра PC записывается в стек, далее в PC загружается заданный адрес. Данная инструкция должна использоваться вместо CALLR при разработке программ. Обзор инструкции: Мнемоника Конечный байт
CALL Mem
Флаги состояния: H I N Z C
CALLR – вызов подпрограммы (условный) Синтаксис: callr dst Пример: call chk_pol Операция: PC = PC + lgth; (SP--) = LSB(PC); (SP--) = MSB(PC); PC = PC + dst Описание: Текущее значение регистра PC записывается в стек, далее в PC загружается относительный адрес. Данная инструкция используется для отладки программы для уменьшения размера кода. Обзор инструкции: Мнемоника Конечный байт
CALLR Mem
Флаги состояния: H I N Z C
CLR – обнуление байта Синтаксис: clr dst Пример: clr X Операция: dst <= 00 Описание: В конечный байт записывается 00. Конечным байтом является либо байт памяти, либо регистр. Данная инструкция компактна и не влияет ни на один регистр при использовании с переменными в ОЗУ. Обзор инструкции: Мнемоника Конечный байт
CLR Mem
CLR Reg
Флаги состояния: H I N Z C
0 1
0 1
CP – сравнение Синтаксис: cp dst, src Пример: cp A, (tbl, X) Операция: {N, Z, C} = Test (dst - src) Описание: Исходный байт вычитается из конечного байта, результат не сохраняется. Однако, флаги N, Z, C обновляются в соответствии с результатом. Исходным байтом является байт памяти, а конечным – регистр. Эта инструкция обычно используется перед командой условного перехода. Обзор инструкции: Мнемоника Конечный байт Исходный байт
CP Reg Mem
Флаги состояния: H I N Z C
N Z C
CPL – логическая инверсия Синтаксис: cpl dst Пример: cpl (X) Операция: dst <= dst XOR FF, или FF - dst Описание: Конечный байт считывается, каждый его бит логически инвертируется, результат записывается в конечный байт. Конечным байтом является либо байт памяти, либо регистр. Обзор инструкции: Мнемоника Конечный байт
CPL Mem
CPL Reg
Флаги состояния: H I N Z C
N Z 1
N Z 1
DEC – декремент Синтаксис: dec dst Пример: dec Y Операция: dst <= dst - 1 Описание: Конечный байт считывается, из него вычитается единица, результат записывается в конечный байт. Конечным байтом является либо байт памяти, либо регистр. Обзор инструкции: Мнемоника Конечный байт
DEC Mem
DEC Reg
Флаги состояния: H I N Z C
N Z
N Z
HALT – остановка работы программы Синтаксис: halt Операция: I = 0, осциллятор останавливается до тех пор, пока не возникнет прерывание Описание: Маска прерываний обнуляется, таким образом, разрешается обработка прерываний. Далее останавливается осциллятор, прекращая работу процессора и всех внутренних периферийных устройств, уменьшая энергопотребление микроконтроллера до минимального значения. Микроконтроллер продолжит свою работу по получению внешнего прерывания, перезапустив осциллятор. Обзор инструкции: Мнемоника
HALT
Флаги состояния: H I N Z C
0
INC – инкремент Синтаксис: inc dst Пример: inc counter Операция: dst <= dst + 1 Описание: Конечный байт считывается, к нему прибавляется единица, результат записывается в конечный байт. Конечным байтом является либо байт памяти, либо регистр. Обзор инструкции: Мнемоника Конечный байт
INC Mem
INC Reg
Флаги состояния: H I N Z C
N Z
N Z
IRET – возврат из обработки прерывания Синтаксис: iret Операция: CC = (++SP); A = (++SP); X = (++SP); MSB (PC) = (++SP); LSB (PC) = (++SP) Описание: Данная инструкция размещается в конце подпрограммы обработки прерывания и возвращает исходную программу к тому состоянию, которое было до возникновения прерывания. Значения всех регистров сохраненных в стеке восстанавливается. Обзор инструкции: Мнемоника
IRET
Флаги состояния: H I N Z C
H I N Z C
JP – переход (безусловный) Синтаксис: jp dst Пример: jp test Операция: PC <= dst Описание: Команда безусловного перехода заменяет содержимое регистра PC значением конечного байта. Данная инструкция должна использоваться вместо JRA при написании программ. Обзор инструкции: Мнемоника Конечный байт
JP Mem
Флаги состояния: H I N Z C
JRA – относительный безусловный переход Синтаксис: jra dst Пример: jra loop Операция: PC <= PC + dst Описание: Безусловный относительный переход. В регистр PC записывается сумма его предыдущего значения и значения конечного байта. Данная инструкция может быть использована при отладке программы с целью увеличения быстродействия и уменьшения кода. Обзор инструкции: Мнемоника Конечный байт
JRA Mem
Флаги состояния: H I N Z C
JRxx – относительный условный переход Синтаксис: jrxx dst Пример: jrxx loop Операция: PC <= PC + dst if Condition is True Описание: Условный относительный переход. В регистр PC записывается сумма его предыдущего значения и значения конечного байта в случае истинности заданного условия. Программа переходит к строчке, адрес которой записан в PC. В случае невыполнения условия выполнение программы продолжается со следующей строчки. Обзор инструкции: Мнемоника Конечный байт
JRxx Mem
Флаги состояния: H I N Z C
Список возможных инструкций: Мнемоника Описание Условие
JRC Переход если флаг переноса единица C = 1
JREQ Переход в случае равенства Z = 1
JRF Переход если условие ложно Ложь
JRH Перенос если флаг полупереноса единица H = 1
JRIH Переход если уровень линии прерывания высокий -
JRIL Переход если уровень линии прерывания низкий -
JRM Переход если прерывания запрещены I = 1
JRMI Переход если результат отрицательный N = 1
JRNC Переход если флаг переноса ноль C = 0
JRNE Переход в случае неравенства Z = 0
JRNH Перенос если флаг полупереноса ноль H = 0
JRNM Переход если прерывания разрешены I = 0
JRPL Переход если результат положительный N = 0
JRT Переход если условие истинно Истина
JRUGE Переход если больше либо равно C = 0
JRUGT Переход если больше (C или Z) = 0
JRULE Переход если меньше либо равно (C или Z) = 1
JRULT Переход если меньше C = 1
LD – загрузка данных Синтаксис: ld dst, src Пример: ld A, #$15 Операция: dst <= src Описание: Значение исходного байта заносится в конечный байт. Обзор инструкции: Мнемоника Конечный байт Исходный байт
LD Reg Mem
LD Mem Reg
LD Reg Reg
LD S Reg
LD Reg S
Флаги состояния: H I N Z C
N Z
N Z
MUL – умножение (беззнаковое) Синтаксис: mul dst, src Пример: mul X, A Операция: dst:src <= dst x src Описание: Исходный байт умножается на конечный байт. Старшая часть 16 битного результата сохраняется в конечный байт, а младшая часть в исходный байт. Обзор инструкции: Мнемоника Конечный байт Исходный байт
MUL X:A X, A
MUL Y:A Y, A
Флаги состояния: H I N Z C
0
0
0
0
NEG – отрицание Синтаксис: neg dst Пример: neg (X) Операция: dst <= (dst XOR FF) + 1, or 00 - dst Описание: Конечный байт считывается, каждый его бит логически инвертируется, результат увеличивается на единицу и записывается в конечный байт. Конечным байтом является либо байт памяти, либо регистр. Флаг переноса обнуляется, если результат равен нулю. Данная инструкция используется для инверсии знаковых чисел. Обзор инструкции: Мнемоника Конечный байт
NEG Mem
NEG Reg
Флаги состояния: H I N Z C
N Z C
N Z C
NOP – нет команды Синтаксис: nop Описание: Данная инструкция не делает ничего. Она может быть использована либо для отключения команды, либо для организации задержки. Обзор инструкции: Мнемоника
NOP
Флаги состояния: H I N Z C
OR – логическая операция ИЛИ Синтаксис: or dst, src Пример: or A, #%00110101 Операция: dst <= dst OR src Описание: Исходный байт побитно логически сравнивается с конечным байтом, результат сравнения записывается в конечный байт. Исходным байтом является байт памяти, а конечным – аккумулятор. Обзор инструкции: Мнемоника Конечный байт Исходный байт
OR A Mem
Флаги состояния: H I N Z C
N Z
POP – чтение из стека Синтаксис: pop dst Пример: pop CC Операция: dst <= (++SP) Описание: Чтение из стека предварительно занесенного туда байта данных. Результат чтения помещается в конечный байт. Регистр SP увеличивается на единицу. Обзор инструкции: Мнемоника Конечный байт
POP A
POP X
POP Y
POP CC
Флаги состояния: H I N Z C
H I N Z C
PUSH – запись в стек Синтаксис: push dst Пример: push A Операция: (SP--) <= dst Описание: Запись в стек байта данных. Регистр SP уменьшается на единицу. Обзор инструкции: Мнемоника Конечный байт
PUSH A
PUSH X
PUSH Y
PUSH CC
Флаги состояния: H I N Z C
RCF – обнуление флага переноса Синтаксис: rcf Операция: C = 0 Описание: Данная команда устанавливает флаг переноса регистра CC в ноль. Может быть использована для контроля над флагами. Обзор инструкции: Мнемоника
RCF
Флаги состояния: H I N Z C
0
RET – возврат из подпрограммы Синтаксис: ret Операция: MSB (PC) = (++SP); LSB (PC) = (++SP) Описание: Восстанавливает значение PC из стека. Регистр SP инкрементируется дважды. Данная инструкция является последней командой каждой подпрограммы. Обзор инструкции: Мнемоника
RET
Флаги состояния: H I N Z C
RIM – сброс маски прерываний/разрешение прерываний Синтаксис: rim Операция: I = 0 Описание: Команда обнуляет маску прерываний в регистре CC, что разрешает прерывания. Данная инструкция обычно помещается в основном цикле программы, после того, как все необходимые прерывания нужным образом настроены. Обзор инструкции: Мнемоника
RIM
Флаги состояния: H I N Z C
0
RLC – логический сдвиг влево через флаг переноса Синтаксис: rlc dst Пример: rlc (X) Операция:
Описание: Конечным байтом является либо байт памяти, либо регистр. Обзор инструкции: Мнемоника Конечный байт
RLC Mem
RLC Reg
Флаги состояния: H I N Z C
N Z bit7
N Z bit7
RRC – логический сдвиг вправо через флаг переноса Синтаксис: rrc dst Пример: rrc (X) Операция:
Описание: Конечным байтом является либо байт памяти, либо регистр. Обзор инструкции: Мнемоника Конечный байт
RLC Mem
RLC Reg
Флаги состояния: H I N Z C
N Z bit0
N Z bit0
RSP – обнуление регистра SP Синтаксис: rsp Операция: SP = Reset Value Описание: Сброс регистра SP на первоначальное значение. Данная инструкция может быть помещена вначале процедуры сброса контроллера. Обзор инструкции: Мнемоника
RSP
Флаги состояния: H I N Z C
SBC – вычитание с переносом Синтаксис: sbc dst, src Пример: sbc A, #$15 Операция: dst <= dst - src - C Описание: Исходный байт вместе с флагом переноса вычитаются из конечного байта, результат записывается в конечный байт. Исходным байтом является байт памяти, а конечным – аккумулятор. Обзор инструкции: Мнемоника Конечный байт Исходный байт
SBC A Mem
Флаги состояния: H I N Z C
N Z C
SCF – установка флага переноса Синтаксис: scf Операция: C = 1 Описание: Данная команда устанавливает флаг переноса регистра CC в единицу. Может быть использована для контроля над флагами. Обзор инструкции: Мнемоника
SCF
Флаги состояния: H I N Z C
1
SIM – установка маски прерываний/запрет прерываний Синтаксис: sim Операция: I = 1 Описание: Команда устанавливает маску прерываний в регистре CC, что запрещает прерывания. Данная инструкция бесполезна в начале процедуры обработки прерывания. Обзор инструкции: Мнемоника
Описание: Конечным байтом является либо байт памяти, либо регистр. Данная инструкция эквивалентна команде SLL. Обзор инструкции: Мнемоника Конечный байт
Описание: Конечным байтом является либо байт памяти, либо регистр. Данная инструкция удваивает значение байта. Обзор инструкции: Мнемоника Конечный байт
Описание: Конечным байтом является либо байт памяти, либо регистр. Данная инструкция производит деление на два с учетом знака. Бит 7 отвечающий за знак числа не изменяется. Обзор инструкции: Мнемоника Конечный байт
Описание: Конечным байтом является либо байт памяти, либо регистр. Данная инструкция производит беззнаковое деление числа на два. Обзор инструкции: Мнемоника Конечный байт
SRL Mem
SRL Reg
Флаги состояния: H I N Z C
N Z bit0
N Z bit0
SUB – вычитание Синтаксис: sub dst, src Пример: sub A, #%11001010 Операция: dst <= dst - src Описание: Исходный байт вычитается из конечного байта, результат записывается в конечный байт. Исходным байтом является байт памяти, а конечным – аккумулятор. Обзор инструкции: Мнемоника Конечный байт Исходный байт
SUB A Mem
Флаги состояния: H I N Z C
N Z C
SWAP – обмен нибблами Синтаксис: swap dst Пример: swap counter Операция: dst [7..4] <=> dst [3..0] Описание: Старший и младший нибблы конечного байта меняются местами. Конечным байтом является либо байт памяти, либо регистр. Обзор инструкции: Мнемоника Конечный байт
SWAP Mem
SWAP Reg
Флаги состояния: H I N Z C
N Z
N Z
TNZ – проверка на отрицательность или ноль Синтаксис: tnz dst Пример: tnz A Операция: {N, Z} = Test(dst) Описание: Проверяется конечный байт, флаги N и Z обновляются соответствующим образом. Обзор инструкции: Мнемоника Конечный байт
TNZ Mem
TNZ Reg
Флаги состояния: H I N Z C
N Z
N Z
TRAP – программное прерывание Синтаксис: trap Операция: PC = PC + 1; (SP--) = LSB (PC); (SP--) = MSB (PC); (SP--) = X; (SP--) = A; (SP--) = CC; PC = Vector Contents Описание: Данная инструкция приводит к выполнению программного прерывания. Это прерывание не может быть запрещено с помощью маски. Обзор инструкции: Мнемоника
TRAP
Флаги состояния: H I N Z C
1
WFI – ожидание прерывания (режим низкого энергопотребления) Синтаксис: wfi Операция: I = 0; Тактовый генератор останавливается до тех пор, пока не возникнет прерывание. Внутренние периферийные устройства продолжают работать. Описание: Флаг прерывания обнуляется, разрешая работу прерываний. Далее тактовый генератор останавливается, переводя микроконтроллер в режим малого энергопотребления. Программа продолжит работу по внешнему или внутреннему прерыванию. Обзор инструкции: Мнемоника
WFI
Флаги состояния: H I N Z C
0
XOR – логическая операция исключающее ИЛИ Синтаксис: xor dst, src Пример: xor A, #%00110101 Операция: dst <= dst XOR src Описание: Исходный байт побитно логически сравнивается с конечным байтом, результат сравнения записывается в конечный байт. Исходным байтом является байт памяти, а конечным – аккумулятор. Обзор инструкции: Мнемоника Конечный байт Исходный байт
XOR A Mem
Флаги состояния: H I N Z C
N Z
Приложение 2. Директивы препроцессора BYTE Синтаксис: BYTE <выражение или «строка»>, [<выражение или «строка»>...] Операция: определить байт в объектном коде BYTES Синтаксис: BYTES Операция: определение типа метки: тип = байт CEQU Синтаксис: метка CEQU <выражение> Операция: приравнять уже существующую метку к выражению DC.B Синтаксис: DC.B <выражение или «строка»>, [<выражение или «строка»>] Операция: определить байт(ы) в объектном коде DC.W Синтаксис: DC.W <выражние> , [<выражение>...] Операция: определить слово(а) в объектном коде DC.W Синтаксис: DC.W <выражние>, [<выражение>...] Операция: определить слово(а) в объектном коде DC.L Синтаксис: DC.L <выражение>, [<выражение>...] Операция: определить длинные слова в объектном коде #DEFINE Синтаксис: #DEFINE <имя_константы> <значение> Операция: определить именованную константу DS.B Синтаксис: DS.B [опционально количество байт] Операция: определить в объектном коде пространство размером byte DS.W Синтаксис: DS.W [опционально количество слов] Операция: определить в объектном коде пространство размером word DS.L Синтаксис: DS.L [опционально количество длинных слов] Операция: определить в объектном коде пространство размером long END Синтаксис: END Операция: конец исходного кода EQU Синтаксис: метка EQU <выражение> Операция: приравнять метку к выражению EXTERN Синтаксис: EXTERN Операция: определить внешние метки #INCLUDE Синтаксис: #INCLUDE «<имя_файла>» Операция: вставить внешний файл с исходным кодом LONG Синтаксис: LONG <выражение>, [<выражение>...] Операция: определить длинное слово в объектном коде LONGS Синтаксис: LONGS Операция: определить длину новой метки по умолчанию как long WORD Синтаксис: WORD <выражение>, [<выражение>...] Операция: определить слово в объектном коде WORDS Синтаксис: WORDS Операция: определить длину новой метки по умолчанию как word Приложение 3. Описание цифровых осциллографов TDS20ххB Технические параметры осциллографов семейства TDS20ххB Модель Число каналов Полоса пропускания, МГц Частота выборки, млрд. выб/с Экран
TDS2002B 2 60 1 Цветной
TDS2004B 4 60 1 Цветной
TDS2012B 2 100 1 Цветной
TDS2014B 4 100 1 Цветной
TDS2022B 2 200 2 Цветной
TDS2024B 4 200 2 Цветной
Расположение органов управления
Элементы управления отображением по вертикали
Кнопки МЕНЮ (К1-К4). Эти кнопки позволяют вывести на экран значения параметров меню по вертикали и включить или отключить отображение сигнала определенного канала. ВОЛЬТ/ДЕЛ (К1-К4). Выбор масштаба по вертикали. МЕНЮ МАТЕМАТИКА. После нажатия кнопки на экране отображается меню математических операций для сигналов. Кнопка также используется для включения и выключения расчетных осциллограмм. Элементы управления отображением по горизонтали
ПОЛОЖЕНИЕ. С помощью этой ручки регулируется положение по горизонтали осциллограмм во всех каналах и расчетных осциллограмм. Разрешение данного элемента управления изменяется в зависимости от значения масштаба времени. ГОРИЗ МЕНЮ. Вывод на экран меню горизонтали. УСТ НУЛЬ. Если нажать кнопку, устанавливается нулевое положение по горизонтали. СЕК/ДЕЛ. Поворотом этой ручки задается коэффициент масштабирования (время/деление) для основного масштаба времени или масштаба времени окна. Элементы управления синхронизацией
УРОВЕНЬ. Если используется синхронизация по фронту или по длительности импульса, ручка позволяет установить уровень амплитуды, которую должен иметь сигнал, чтобы его можно было зарегистрировать. МЕНЮ СИНХ. При нажатии этой кнопки на экран выводится меню синхронизации. УСТ 50%. Уровень запуска устанавливается по вертикали посередине между пиковыми уровнями сигнала синхронизации. ФОРС ЗАПУСК. При нажатии этой кнопки сбор данных завершается независимо от наличия необходимого сигнала синхронизации. Если регистрация данных уже остановлена, эта кнопка не действует. Кнопки меню и управления
Универсальная ручка. Конкретная функция ручки определяется отображенным на экране мен или выбранной командой меню. Когда ручка активна, рядом с ней загорается индикатор. В таблице указаны функции ручки. АВТОДИАПАЗОН. При нажатии кнопки на экране появляется меню автодиапазона и включается или выключается функция автоматического выбора диапазона. При включенном режиме автоматического выбора диапазона рядом с ручкой загорается индикатор. СОХР/ВЫЗОВ. При нажатии кнопки на экране появляется меню сохранения и загрузки данных для параметров настройки и осциллограмм. ИЗМЕРЕНИЯ. При нажатии данной кнопки на экране отображается меню автоматических измерений. СБОР ДАННЫХ. При нажатии этой кнопки отображается меню сбора данных. REF MENU (Меню опорного сигнала). Вывод на экран меню опорного сигнала, позволяющего быстро отображать и скрывать опорные осциллограммы, хранимые в энергонезависимой памяти осциллографа. СЕРВИС. При нажатии этой кнопки на экран выводится меню сервиса. КУРСОР. Вывод на экран меню курсора. Курсоры отображаются на экране после выхода из меню курсора, но изменить их положение невозможно. ЭКРАН. Отображение меню экрана. СПРАВКА. Вывод на экран меню справки. НАСТРОЙКА ПО УМОЛЧАНИЮ. Восстановление заводской настройки. АВТОУСТ. Автоматическая установка значений параметров управления сигналом, обеспечивающих приемлемое изображение входящих сигналов. ОДИНОЧН ЗАПУСК. Регистрируется одиночный сигнал, после чего сбор данных прекращается. ПУСК/СТОП. Сигналы регистрируются непрерывно или сбор данных приостанавливается. PRINT (Печать). Запуск печати на принтере, совместимом с PictBridge или выполнение функции СОХРАНЕНИЕ на запоминающем устройстве USB. СОХРАНЕНИЕ. Горящий индикатор указывает, что кнопка PRINT (Печать) настроена для сохранения данных в запоминающем устройстве USB. Содержание стр.
Введение……………………………………………………………………... 2
Технические характеристики микроконтроллеров ST7LITE2 …………… 2
Назначение выводов микроконтроллера …………………………………... 5
Организация памяти ………………………………………………………… 7
Центральное процессорное устройство …………………………………… 10
Система команд ……………………………………………………………... 16
Режимы адресации ………………………………………………………….. 19
Обработка прерываний ……………………………………………………... 29
Программное обеспечение лабораторного стенда ………………………... 31
Лабораторные работы 42
Лабораторная работа №1. Изучение кросс-средств для программирования микроконтроллера ST7LITE2 ………………………...
42
Лабораторная работа №2. Ознакомление с лабораторным стендом, анализ работы стенда с помощью осциллографа ………………………….
53
Лабораторная работа №3. Порты ввода/вывода микроконтроллера ST7FLITE29 ………………………………………………………………….
55
Лабораторная работа №4. Система прерываний микроконтроллера ST7FLITE29 ………………………………………………………………….
61
Лабораторная работа №5. Интерфейс SPI микроконтроллеров ST7 …….. 65
Лабораторная работа №6. Таймер ART микроконтроллера ST7FLITE29 . 71
Лабораторная работа №7. Управление работой линейного двигателя с помощью микроконтроллера ST7 …………………………………………..
81
Лабораторная работа №8. АЦП микроконтроллера ST7FLITE29 ……….. 82
Список литературы …………………………………………………………. 86
Приложение 1. Система команд микроконтроллера ST7 ………………… 87