
- •Тема 1. 7
- •Тема 2. 22
- •Тема 3. 41
- •Тема 4. 83
- •Основные временные параметры микропроцессора кр580ик80а
- •Программное обеспечение микропроцессора
- •Команды перемещения данных
- •Представлением операнда
- •Команды переходов ( альтернативные команды )
- •Специальные команды
- •Кодирование программы
- •Архитектура последовательного интерфейса кр580ик51
- •Управления от мп
- •Архитектура программируемого таймера кр580ви53
- •И микропроцессором
- •Архитектура бис параллельного интерфейса кр580вв55
- •Сигналами ппи
- •Архитектура контроллера прямого доступа к памяти кр580вт57
- •Архитектура бис программируемого контроллера прерываний кр580вн59
- •Генератор тактовыхимпульсов кр580гф24
- •Системный контроллер и шинный формирователь кр580вк28
- •Буферные регистры кр580ир82 и кр580ир83
- •Шинные формирователи кр580ва86 и кр580ва87
- •Пример подключения микросхемы кр580ви53 к микропроцессорной системе через контроллер прерываний кр580вн59
- •Пример подключения аналого-цифрового преобразователя.
- •Пример совместного использования микросхем комплекта для управления технологическим процессом.
- •Декларирование объектов
- •Структура программы
- •Константы
- •Арифметические операции
- •Преобразование типов операндов арифметических операций
- •Побитовые логические операции, операции над битами
- •Функции вывода информации
- •Стандартные математические функции
- •Условные операторы
- •If (условие ) оператор1;
- •If (условие1) оператор1;
- •Пример использования оператора if
- •Циклические операторы while и do–while
- •Пример использования оператора for
- •Строки, как одномерные массивы символов
- •Указатели и операции над адресами
- •Операция sizeof
- •Указатели на указатели
- •Пример динамического размещения одномерного массива в с
Программное обеспечение микропроцессора
Программным обеспечением принято называть набор различных программ, предназначенных для определенного микропроцессора, как, впрочем, и для любого компьютера или ЭВМ. Программы, разработанные и используемые для специальных целей, например программы управления технологическим оборудованием, сбора информации о ходе производственного процесса, называют прикладными (целевыми, пользовательскими). Разработка таких программ значительно облегчается при наличии в составе системы вспомогательных средств – системного программного обеспечения или операционной системы.
Квалифицированный пользователь может сам разработать системное программное обеспечение для создания и отладки своих программ. Однако большинство пользователей вынуждено ориентироваться только на готовое программное обеспечение, предоставляемое производителями микропроцессоров.
Для создания программы управления технологическими процессами может быть использован один из следующих способов: программирование непосредственно в машинных кодах, символическое кодирование, применение машино–ориентированного формализованного языка, применение проблемно– или процедурно–ориентированных алгоритмических языков высокого уровня.
Эти способы требуют различных по сложности вспомогательных средств для разработки программ.
Первым и единственным безусловно необходимым средством, обеспечивающим программирование микропроцессоров, является система машинных команд. Совокупность машинных команд образует базовый машинный язык данного микропроцессора. Разработчик системы управления может оперировать мнемокодами и символическими адресами, но затем они должны быть переведены в двоичные числа, загружаемые в память микропроцессорной системы . Мнемокоды совместно с директивами, используемыми только при трансляции программ, образуют машинно – ориентированный язык, который называют языком ассемблера или просто ассемблером. Программы, написанные на ассемблере могут непосредственно транслироваться в машинные коды. Трансляция выполняется в ручную или на ЭВМ с системным программным обеспечением. Программа, которая транслирует написанный на ассемблере текст в машинные коды, также называется ассемблером.
Характерной особенностью микропроцессорных систем, связанной с ограниченной емкостью их памяти и небольшим числом устройств ввода – вывода, является отсутствие собственного системного программного обеспечения для машинной разработки прикладных программ. В этом случае для разработки этих программ может использоваться не сама микропроцессорная система, а какая – то большая ЭВМ с обширной памятью и развитым программным обеспечением. Такой подход называют кросс– программным обеспечением.
Команды перемещения данных
Система команд
Все команды по функциональному признаку разделены на группы: перемещение данных; обработка данных; управление программой; ввод – вывод и специальные команды.
Описывая систему команд с использованием мнемоники, необходимо учитывать возможности конкретного языка для образования допустимых сокращений. Конечно, тем, кто впервые сталкивается с микропроцессорами и их программированием, хочется, чтобы все мнемонические сокращения были сделаны на основе их родного языка, а не какого-нибудь иностранного. Но, например, как сократить команды ВВОД и ВЫВОД (аналогично ВХОД и ВЫХОД)? По-английски они будут записаны IN-OUT, т.е. сразу достаточно краткими, и различаются на столько, что могут быть сокращены до одной буквы (I/O). В русском варианте сокращение, к сожалению, совершенно невозможно.
Слову ВЫВОД (ВЫХОД) особенно не повезло, так как в командах арифметических действий и управления программой встречаются сокращения, отличающиеся только одной буквой, например, ВЫЧесть, ВЫПолнить, ВЫЗвать и др. Разница в одной букве для трех- или четырехбуквенных сокращений очень часто приводит к досадным ошибкам и труднообнаруживаемым опечаткам. В этом заключается одна из причин того, почему программисты часто предпочитают использовать в качестве мнемокодов сокращения английских терминов, хотя в начальный период их трудно запомнить.
Но основная причина широкого использования английского языка для мнемонических сокращений машинных команд связана с наличием готового математического обеспечения конкретного микропроцессора, а также возможностью использования математического обеспечения, подготовленного для других систем, в частности мини-ЭВМ.
Проблема применения мнемокодов на английском язык решается проще, чем это кажется с первого взгляда. Для создания программы иностранный язык изучать не надо, достаточно знать лишь несколько терминов одинаково часто встречающихся в командах большинства микропроцессоров и микро-ЭВМ. Описывая в дальнейшем систему команд, будем придерживаться следующего порядка.
Как правило, для восьмиразрядного микропроцессора КР.580ИK80A адреса и коды команд принято давать в шестнадцатеричной системе кодирования; в частности, именно в таком виде выдается листинг (распечатка) программы после машинной трансляции.
В микропроцессоре КР.580ИК80А команды межрегистровых передач являются двухадресными: в них приходится адресовать регистр - источник и регистр – получатель информации.
Регистровая адресация.По однобайтной команде (перемещение данных из одного регистра в другой). В зоне операнда должны быть указаны два адреса: на первом месте - куда помещается информация, т.е. адрес получателя (приемника); на втором месте - откуда берутся данные, т.е. адрес источника, например MOV R2, R1, где R означает регистры A, B, C, D, E, H, L, M. Можно сказать, что в команде указывается место назначения, в которое должны прибыть перемещаемые данные в результате операции.
При операции перемещения данных содержимое источника сохраняется неизменным, а начальное содержимое приемника заменяется результатом операции.
В мнемонике команды указываются условные обозначения РОН, в которых находятся приемник и источник, между собой эти обозначения обязательно разделяются запятой. Например, MOV С, В означает «перенести содержимое регистра В в регистр С»; содержимое регистра В остается без изменения. При трансляции команды в объектный код, условные обозначения регистров заменяются их двоичными номерами. Все регистры общего назначения, память и аккумулятор имеют постоянные номера.
Команда перемещения данных является самой «богатой» по числу различных вариантов. Если перебрать в зоне операнда все возможные комбинации регистров, то в перечне машинных команд будет занято 64 позиции. Правда, хотя все их можно применять, часть их окажется по существу бесполезной. Например, команда MOV А, А предписывает переслать содержимое аккумулятора обратно в аккумулятор.
Косвенно-регистровая адресация. Если данные переме-щаются в регистр из основной памяти или, наоборот, переносятся в память из регистра, то используется косвенно-регистровая адресация.
Например, MOV М, В означает поместить содержимое регистра В в ячейку памяти, адрес которой находится в регистрах Н и L. В восьмеричном коде эта операция представляется как 160, а в машинном - 01110000 (70 HEX). Команда MOV В, М аналогична предыдущей, но перемещение информации происходит в противоположном направлении: из памяти (по адресу в регистрах Н и L) в регистр – приемник В.
Непосредственная адресация. Команды перемещения данных могут иметь непосредственное представление операнда и косвенную адресацию.
Непосредственная адресация по-английски будет читаться как Immediate Addressing, поэтому в мнемонике команд она указывается буквой I, стоящей на последнем месте. Например, MVIA, 02 означает поместить число 02 в регистр А. Эти команды имеют двухбайтный формат, в результате их выполнения содержимое второго слова команды помещается в регистр, номер которого указан в поле операнда первого слова команды.
Очевидно, что при использовании любых команд перемещения все необходимые данные должны быть предварительно помещены в соответствующие регистры. Для этого применяются относящиеся к этой же группе команды передачи содержимого ячейки памяти во внутренние регистры. Обычно такие операции выполняются по командам загрузки. Противоположные действия, т.е. передачу содержимого внутреннего регистра в память, называют командами запоминания, или сохранения данных.
Команды загрузки аккумулятора и запоминания данных. По трехбайтной командеLDA в аккумулятор загружается содержимое ячейки памяти, адресуемой вторым и третьим байтами команды, а по команде запоминанияSTA -обратная противоположная передача. Все команды могут быть выполнены с прямой, непосредственной и косвенной адресацией.
При прямой адресации команды имеют трехбайтный формат и предписывают в случае запоминания поместить содержимое аккумулятора в ячейку памяти, адрес которой указан вторым и третьим байтами, например ,SDA 0502 означает поместить содержимое регистра А в ячейку памяти 0502 (запомнить), а при загрузке, наоборот, поместить в аккумулятор данные из ячейки памяти, адресуемой аналогично: например, LDA 0700 означает поместить содержимое ячейки памяти в регистр А (загрузить).
При непосредственном представлении возможна только загрузка данных.
команды косвенной адресации имеют однобайтный формат LDAXRp, STAXR, разрядный адрес Rp указывается парой регистров. Это может быть не только пара Н и L, но В и С либо D и Е. При загрузке адресация выполняется аналогично, но данные записываются в аккумулятор. по-английски cовместное исполь-зование двух регистров будет читаться как Extended Addressing, поэтому в мнемонические сокращения этих команд добавляется символ Х. Например LDAX Hозначает поместить в регистр А данные из ячейки памяти , адрес которой содержится в регистровой паре HL(загрузить), а STAX Н,наоборот, данные из регистра А поместить в ячейку памяти (запомнить) по адресу который содержится в регистровой паре HL.
Команды загрузки указателей памяти и запоминания данных. Для загрузки начальных значений во внутренние указатели памяти (инициализации) применяют трехбайтную команду с непосредственным представлением операндаLXIrp, где Rр означает регистровые пары ВС, DE, HL или указатель стека SP-Stack Pointer. Например ,LХL H0900 означает поместить в регистр L число 00, а в регистр Н – число 09, следовательно, в регистровую пару загрузить указатель на ячейку памяти 0900.
Для загрузки основного указателя памяти-регистров Н и L- из двух смежных ячеек памяти применяется командаLHLD - Load HL Direct. Запоминание содержимого регистровой пары Н и L в двух следующих друг за другом ячейках памяти осуществляется по команде SHLD - Store HL Direct. Обе эти команды трехбайтные, во втором и третьем байтах указывается полный 16-разрядный адрес ячейки, из которой загружается или в которую заносится содержимое регистра L (младшего байта). Адрес содержимого регистра Н (старшего байта) получают путем прибавления 1 к значению второго и третьего байтов команды.
Команды межрегистрового обмена. Особенностями микропроцессора КР.580ИK80A являются однобайтные команды передачи 16-битных операндов. Имеется специальная командаXCHG (сокращение английского слова Exshange), производящая обмен содержимым регистров DE и HL:
( H ) ↔ ( D ) , ( L ) ↔ ( E ).
В ряде случаев очень удобной оказывается специальная однобайтная команда XTHL (exchange HL):
( L ) ↔ ( [ SP ] ) , ( H ) ↔ ( [ SP + 1 ] ),
она выполняет обмен содержимым регистров HL и двух верхних ячеек стека, т. е. последних, загруженных в стек данных. Содержимое указателя стека при выполнении командыXTHL не изменяется. Кстати сказать, командаXTHL- самая длинная в системе команд микропроцессора КР.580ИK80A, для ее выполнения требуется 18 машинных тактов.
Содержание регистровой пары HL передается в указатель стека командой SPHLили в программный счетчик командойPCHL. Здесь, как и ранее, на первом месте стоит получатель информации (приемник), а на втором - источник данных.
Команды операций со стеком.Для установки указателя стека на начальное значение используют упомянутую ранее команду LXI SP. Благодаря такой установке в качестве стека может быть применена любая область оперативной памяти микропроцессорной системы.
Основными командами работы со стеком являютсяPUSH - занести (буквально «втолкнуть») в стек иPOP (Pull up) - извлечь (вытянуть) из стека. Эти команды всегда оперируют с регистровыми парами, указанными в поле операнда команды. При выполнении командыPUSH в ячейку памяти с адресом (SP)-1 записывается содержимое восьми старших разрядов, а в ячейку с адресом (SP)-2 - восьми младших разрядов регистровой пары. Содержимое указателя стека уменьшится на 2, так как стек «растет вверх», в область меньших адресов. Когда выполняется командаPOP Rр, содержимое верхушки стека передается в младшие разряды регистровой пары, а содержимое следующей ячейки стека - в старшие разряды той же регистровой пары.
Для правильной работы стека командыPUSH и POP обязательно должны быть парными. Соблюдение этого принципа ложиться полностью на программиста, так как процедуры загрузки в стек и извлечение из стека выполняются микропроцессором не автоматически, а только по командам в программе.
Команды обработки данных
Во всех командах, связанных с преобразованием (арифметическим и логическим) данных, в качестве подразумеваемого и потому неадресуемого операнда используется содержимое важнейшего внутреннего регистра микропроцессора-аккумулятора (А - регистра). Результат операции обычно также загружается в аккумулятор. Таким образом, аккумулятор является узловой точкой всех преобразований данных и основным рабочим регистром микропроцессора. Он выполнен как регистр-фиксатор (защелка), вход которого связан с выходом АЛУ, а выход подключается к одному из входов АЛУ.
Арифметические операции. Основная арифметическая операция - это сложение двоичных чисел. Кроме основной операции, имеется ряд команд, позволяющих выполнять вычисления с повышенной точностью. При этом, выполняя сложение, надо учитывать бит переноса, полученный в младших разрядах, а при выполнении вычитания-заём (borrow), сделанный в старших разрядах. Наличие переноса или заема указывается третьей буквой мнемонического сокращения (табл. 2.1) .
Команды сложения с переносомADC Rи вычитания с заемомSBB Rприменяются в тех случаях, когда базовой длины слова микропроцессора недостаточно и приходится вводить многоразрядные числа с последовательной обработкой отдельных байтов. В памяти такие числа хранятся в смежных ячейках и адресуются по младшему байту.
Все команды арифметических операций, включаяADC RиSBB R,выполняются между данными в аккумуляторе и содержимым регистра или ячейки памяти, указанными в операндной зоне команды. Например,ADD rозначает (А)+(r) →(A),содержимое А сложить с содержимым R, результат поместить в А.
Логические операции. Основные функции и их мнемонические сокращения приведены в табл. 2.1. Логические операции являются поразрядными, т.е. выполняются независимо друг от друга для всех восьми бит операндов. Первый неадресуемый операнд находится в аккумуляторе, там же остается результат операции. По результату операции модифицируются все триггеры состояния (флаги) кроме триггера переноса, который никогда не может быть установлен в единицу, поэтому принудительно сбрасывается.
Таблица 2.1. Команды арифметических и логических операций
Функция |
Перевод |
Мнемоника |
Сложить |
Add |
ADD R |
Сложить с учетом переноса |
Add+Carry |
ADC R |
Вычесть |
Subtract |
SUB R |
Вычесть с учетом займа |
Subtract-Borrow |
SBB R |
Логическое И |
AND |
ANA R |
Исключающее.xf.ott ИЛИ |
Exclusive OR |
XRA R |
Логическое ИЛИ |
OR |
ORA R |
Сравнить |
Compare |
CMP R |
При выполнении команды ANA C (А) Λ (C) → А производиться поразрядная конъюнкция операндов (логическое ИЛИ): над содержимым регистра А и регистра С.
Данная команда часто применяется для проверки значения определенного слова в аккумуляторе с помощью другого слова - маски. Если, например, необходимо проверить состояние второго бита, то маска должна иметь вид 00000100. После выполнения команды ANA R по триггеру состояния Z можно судить о состоянии этого бита. Кроме того, с помощью команды ANA R, используя слово-маску, можно сбрасывать в 0 определенные биты слова в аккумуляторе , оставляя другие неизмененными .
Команда ORA r(A) V (r) → A, осуществляет поразрядную дизъюнкцию операндов (логическое ИЛИ) над содержимым регистра А и регистра R.
Эта команда применяется для установки определенных бит слова в аккумуляторе с помощью слова-маски. Она применяется также для сбрасывания одного слова из полей других слов. Например,
0 0 0 0 X3 X2 X1 X0
V
Y7 Y6 Y5 Y4 0 0 0 0
Y7 Y6 Y5 Y4 X3 X2 X1 X0
Такая операция часто называется « упаковкой » данных.
Команда исключающее ИЛИ (XRA R) (A) V (r) → A, производит поразрядное двоичное сложение операндов. Она применяется для инвертирования определенных битов с помощью слова-маски на основе тождества 1V X=X. Другое применение командыXRA Rсвязано с проверкой слова на абсолютное равенство. В единственном случае, при совпадении операндов поразрядно , результат операции содержит нули во всех разрядах (X + Х=0), о чем свидетельствует значение триггера состояния Z = 1 .
Команда сравненияСМР r производит вычитание значения адресуемого операнда из содержимого аккумулятора и модифицирует по результату значения всех триггеров состояния, но при этом не изменяет содержимого аккумулятора.Наличие в системе команд такого неразрушаемого сравнения упрощает, например, поиск в массиве заданного слова. Значение отыскиваемого слова загружается в аккумулятор, базовый адрес массива загружается в регистры HL, а затем с помощью командыСМР М элементы массива сравниваются со словом–эталоном. Факт равенства фиксируется по значению триггера Z = 1 .
К логическим операциям можно отнести также однобайтные команды инвертирования (в английском буквально «дополнения») аккумулятора Complement Accumulator (СМА), иначе, (А)→ А, установки в 1 триггера переноса Set Carry (STC), или CY→ 1, и инвертирования (дополнения) триггера переноса Complement Carry (CMC): (CY)→ CY
Команды с непосредственным представлением операнда. с непосредственным представлением операнда, могут быть как арифметические, так и логические команды, все они имеют двухбайтный формат: вторым байтом является сам операнд. В мнемонике команд добавляется буква I ( табл.2.2) .
Таблица 2.2. Команды с непосредственным