Меню
Главная
Авторизация/Регистрация
 
Главная arrow Техника arrow Автоматизация технологических процессов

Программирование микропроцессорной системы управления в машинном коде

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

Программная модель МПСУ

Рис. 4.5. Программная модель МПСУ

Программная модель микропроцессорной системы включает 6 РОН (регистров общего назначения), которые обозначаются буквами английского алфавита от В до L. РОН служит для хранения чисел и адресов. Они могут быть объединены в пары, что позволяет работать с 16-разрядными адресами и данными. Имеются также два специальных регистра A, F. Регистр А — аккумулятор связи с арифметическим логическим устройством (АЛУ) процессора, в нем сохраняется результат выполненной операции. Регистр F также связан с АЛУ. В нем хранится информация о том, с каким результатом закончилось выполнение последней команды.

Формат данных и команд. Данные (обрабатываемая информация и результаты обработки) хранятся в оперативной памяти и в процессоре в виде 8-разрядных двоичных чисел. Таким образом, слово данных имеет следующий формат:

Для команд используются одно-, двух-, трехбайтовые форматы. Однобайтовый формат команды:

PSW (код операции)

Большинство команд являются однобайтовыми. Двухбайтовый формат команды:

(код операции)

(операнд или номер устройства ввода-вывода)

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

Система команд микропроцессора КР580ИК80А. При написании программ для микроЭВМ программисту необходимо знать

61

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

Код операции любой команды (для однобайтовой команды — это просто код команды) в ЗУ микроЭВМ представляется двоичным 8-разрядным числом. Например, код команды пересылки из регистра С в регистр А будет иметь вид 01111001. Код операции непосредственной записи 8-разрядного операнда в память записывается так: 00110110, а код команды загрузки аккумулятора с непосредственной адресацией — 00111010.

Всего двоичным кодом можно представить 28 = 256 различных комбинаций. Почти столько же команд имеет и микропроцессор (некоторые комбинации двоичных чисел не используются и поэтому команд меньше, чем 256).

Естественно, что запомнить 200 кодовых комбинаций, представленных в виде двоичных 8-разрядпых чисел, почти невозможно. Поэтому каждому коду команды соответствует мнемоническое название — сокращение английских слов, описывающих ее действие и позволяющих легче запомнить называемые функции. После мнемоники для двухбайтовых команд записывают 8-разрядный операнд, обозначаемый при описании системы команд через D8, а для трехбайтовых команд — 16-разрядный адрес, или операнд, обозначаемый соответственно через ADR и D16.

Буквой М обозначается ячейка памяти, адресуемая в соответствии с описанием команды. Так, первая из упомянутых выше команд в мнемоническом коде будет иметь вид: MOV А, С (move register — переслать из регистра в регистр); вторая — MVI М, D8 (move to memory immediate — переслать непосредственно); третья — LDA ADR (load direct — загрузить аккумулятор содержимым ячейки памяти). Название регистровых пар в мнемонике команд дается в сокращенном виде с помощью первых букв их названия. Так, вместо ВС, DE, HL записывают В, D и Н. Например, команда увеличения на 1 содержания регистровой пары HL записывается как INX Н.

Все команды МПКР580ИК80А представлены в табличном виде, что позволяет легко и быстро сопоставить мнемонику команды с ее кодом операции. Для наглядности и упрощения записи все

62

двоичные коды представляют в шестнадцатеричном виде. Для этого двоичный код числа делят па группы по четыре разряда. Для 8-разрядного кода операции или операнда будет 2 такие группы, а для 16-разрядного адреса или операнда — 4. Четырехразрядным двоичным кодом можно представить любое десятичное число от О до 15. Обозначив эти величины цифрами от 0 до 9 и далее буквами латинского алфавита от А до F, мы получим шестнадцатеричные цифры. В табл. 4.1 приведено соответствие между десятеричным, двоичным и шестнадцатеричным значением величии.

Таблица 4.1

Представление команд микропроцессора КР580ИК80А в кодах

Десятеричное

значение

Двоичное

значение

Шестнадцатеричное

значение

Десятеричное

значение

Двоичное

значение

Шестнадцатеричное

значение

0

0000

0

8

1000

8

1

0001

1

9

1001

9

2

0010

2

10

1010

А

3

ООП

3

11

1011

В

4

0100

4

12

1100

С

5

0101

5

13

1101

D

6

ОНО

6

14

1110

Е

7

0111

7

15

1111

F

В пособии не ставится цель обучить программированию на языке «Ассемблер», поэтому покажем этот процесс фрагментарно, чтобы читатели имели представление о самом процессе.

Пример программирования. Микропроцессорные устройства и микроЭВМ выполняют свои функции в соответствии с программами, составленными и отлаженными разработчиками и записанными затем в микроЭВМ.

Задача. Требуется составить программу работы специализированного микропроцессорного устройства. Пусть в таком устройстве имеются два порта — один порт ввода 1 и один порт вывода 2. К порту ввода 1 по линии, связанной с его младшим разрядом, подключена кнопка SB1, а к порту вывода 2 по линии, связанной с его двумя младшими разрядами, подключены два светодиода. Функциональная схема части этого устройства приведена на рис. 4.6.

Схема МП-устройства

Рис. 4.6. Схема МП-устройства

В исходном состоянии, пока кнопка SB1 нс нажата, светодиод VD1 должен светиться, а светодиод VD2 — нет. Если кратковременно нажать кнопку, то светодиод VD1 должен на 0,25 с погаснуть, а светодиод VD2 загореться. После этого в течение 0,5 с устройство нс должно реагировать на нажатие кнопки.

Решение. Итак, наша программа должна начинаться с записи в порт 2 комбинации битов 0000, 0001. Именно при этом условии VD1 горит, a VD2 погашен. Затем по команде ввода содержимое порта 1 пересылается в аккумулятор и анализируется, нс появился ли ноль в младшем разряде, что может быть только при нажатии кнопки. Если кнопка нс нажата, то операция повторяется. В противном случае в порт 2 посылается комбинация 0000, 0010 (светодиод VD2 горит, VD1 погашен). После этого микропроцессор в течение 0,25 с нс должен производить никаких операций с портами.

64

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

Занесем все перечисленные действия в таблицу и пронумеруем каждый шаг. В табл. 4.2 приведен алгоритм решения поставленной задачи. Представление алгоритма в виде таблицы не очень удобно. Более наглядны блок-схемы. В дальнейшем мы и будем их использовать. Блок-схемы алгоритмов могут состоять всего из четырех основных элементов. Они приведены на рис. 4.7.

Таблица 4.2

Алгоритм решения задачи

Шаг

Выполняемые действия

1

Записать в аккумулятор код 0000001 и переслать его в порт 2

2

Выполнить программу, реализующую задержку в 0,5 с

3

Переслать содержимое порта ввода 1 в аккумулятор

4

Проверить состояние разряда А(0) аккумулятора

5

Если А(0) равно 0, то перейти к шагу 3, в противном случае перейти к шагу 6

6

Записать в аккумулятор код 00000010 и переслать его в порт 2

7

Выполнить программу, реализующую задержку в 0,25 с

8

Перейти к шагу 1

Элементы блок-схем алгоритма

Рис. 4.7. Элементы блок-схем алгоритма: а — элементы, показывающие начало или конец выполнения алгоритма; б — действия, не требующие проверки выполнения каких-либо условий; в — проверка выполнения условия и выбор одного из двух возможных действий в зависимости от ее результатов; г — ввод информации от внешних устройств или вывод во внешние устройства

65

Структурная схема нашего алгоритма приведена на рис. 4.8. Сплошными линиями со стрелками показан ход его выполнения. Справа от структурной схемы мы поместим программу, под управлением которой микропроцессор выполняет алгоритм. Штриховые

Структурная схема алгоритма

Рис. 4.8. Структурная схема алгоритма

66

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

Если обратиться к табл. 4.2, можно увидеть, что при выполнении алгоритма придется неоднократно возвращаться к шагам 1 и 3. Поэтому эти шаги должны быть особо выделены с помощью меток — произвольно выбираемых имен. Они показаны па рис. 4.8 в прямоугольниках из штриховых линий в соответствующих местах структурной схемы алгоритма. Эти метки обычно содержат знак двоеточия после своего имени. Имена меток выбираются таким образом, чтобы было ясно их назначение (в рассматриваемом примере мы будем использовать метки НАЧАЛО, ВВОД, ВРЕМЯ.

После составления структурной схемы алгоритма переходят к написанию программы.

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

Пользуясь описанием системы команд, нетрудно понять, что привести устройство в начальное состояние можно с помощью последовательности команд: команды загрузки операнда в аккумулятор MV1 А, 00000001 и команды вывода байта данных из аккумулятора в порт 2 — OUT 02. Затем следуют две команды, необходимые для ограничения временной задержки, и далее команда опроса состояния кнопки SB1 (т.е. значения младшего разряда порта 1). С помощью команды ввода LN 01 переписываем содержимое порта в аккумулятор и проверяем состояние его младшего бита А (0). Для этого воспользуемся командой логического умножения содержимого аккумулятора па непосредственный операнд (команда AN1 00000001), содержащей 1 только в младшем разряде. В результате выполнения этой команды в аккумулятор запишется код, семь старших разрядов которого равны 0. Значение пулевого разряда аккумулятора А (0) будет зависеть от значения младшего разряда кода, прочитанного из порта 1, т.е. от того, была ли нажата кнопка в момент действия команды IN 01.

Команда логического умножения воздействует па все биты признаков регистра Е Нас в данном случае интересует состояние бита Z — признака нуля, который устанавливается в 1 при пулевом

67

содержимом аккумулятора, что в данном случае соответствует нажатой кнопке. Таким образом, команда JNZ ВВОД будет передавать управление команде IN 01, помеченной меткой ВВОД, до тех пор, пока признак Z остается равным нулю. Нажатие па кнопку приведет к установке признака Z в 1 и выполнению последующих команд программы.

При написании программы использовались мнемонические обозначения команд микропроцессора и символические имена для меток. Программа в таком виде не может быть непосредственно выполнена на микроЭВМ. Для этого она должна быть переведена на машинный язык — язык двоичных (или объектных) кодов. Этот перевод делают, пользуясь специальным бланком. В табл. 4.3 приведена форма такого бланка, на котором записана паша программа.

Таблица 43

Перевод программы в машинный код

Адрес

Код

Метка

Мнемоника

Операнд

Комментарий

1

2

3

4

5

6

0000

ЗЕ01

НАЧАЛО:

MV1

A,01 H

00000001 - A

0002

D302

OUT

02 H

Зажечь VD1, погасить VD2

0004

01 70 08

LX1

B,

KOHCT1

Задать величину задержки 0,5 с

0007

OD IE 00

CALL

ВРЕМЯ

Вызвать подпрограмму задержки

000А

DB 01

ВВОД:

IN

01 H

Выполнить ввод байта из порта 1

ооос

Е6 01

AN1

01 H

Выполнить маскирование неиспользованных разрядов

000Е

С2 ОА 00

JNZ

ввод

Повторить ввод, если кнопка не нажата

ООП

ЗЕ 02

-

MV1

A,02 H

00000010 - А

0013

D3 02

-

OUT

02 H

Зажечь U2, погасить U1

0015

01 88 65

LX I

B,

KOHCT 2

Задать величину задержки 0,25 с

0016

CD IE 00

CALL

ВРЕМЯ

Вызвать подпрограмму задержки

Окончание табл. 43

1

2

3

4

5

6

001В

СЗ 00 00

JMP

НАЧАЛО

Выполнить возврат на НАЧАЛО: подпрограмма задержки

001Е

ОВ

ВРЕМЯ:

DCX

В

Уменьшить па 1 содержимое ВС

001F

MOV

A, В

Переслать в А содержимое В

0020

В1

-

ORA

С

В и С равны нулю?

0021

С2 IE 00

JNZ

ВРЕМЯ

Если нет, то повторить цикл

0024

С9

RET

Вернуться в основную программу

КОНСТ1 КОНСТ2

  • 1 EQU
  • 2 EQU
  • 520800
  • 260400

Присвоить числовые значения символическим операндам

Имея перед собой таблицу кодов команд микропроцессора КР580ИК80А, мы можем заполнить поля адреса (столбец 1) и кода (столбец 2). Они всегда заполняются числами в шестнадцатеричной форме, и буква Н в конце числа при этом опускается.

Если мы при составлении программы задаем операнды неявно, то в начале или в конце текста программы определяем, чему же эти операнды равны на самом деле. Для этого в поле 3 записываем символическое имя операнда, в поле 4 — сокращенное английское слово QUE (равно), а в поле 5 — действительное значение операнда.

В поле 2 записываем коды и соответствующие операнды команд. При этом символические имена заменяются их действительными значениями. При записи 16-разрядных (двухбайтовых) операндов и адресов в поле 5 слева записываем два старших, а правее — два младших разряда числа. При записи кодов операндов в поле 2 — порядок обратный, что объясняется порядком записи байтов 16-раз- рядных чисел в память микроЭВМ.

При рассмотрении системы команд вы узнали о том, что команды бывают 1-, 2- и 3-байтовые. Это нашло отражение в формате поля 2: оно может содержать 1, 2 или 3 Б.

69

Если теперь коды из поля 2 поместить в память микроЭВМ по адресам, указанным в поле 1, то при пуске микроЭВМ с начального адреса (в данном случае 0000) она начнет выполнять наш алгоритм.

Практически МП выполняет четыре основных типа операций: чтение слова из внешних и внутренних регистров; арифметические операции; логические операции; запись слова во внешние и внутренние регистры. Используя эти операции, можно разрабатывать программы любой сложности.

Для подготовки таких программ требуются программисты высокой квалификации. После составления программ наступает длительный период выявления и устранения оставшихся ошибок. Программисты должны досконально знать особенности языка и организацию ЭВМ.

Естественно, пользователи управляющей микроЭВМ не понимают языка «Ассемблер» и для расшифровки текста программы, написанной в машинных кодах, должна находиться специальная программа-транслятор (от англ, translate — переводить), которая переводит текст исходной программы на язык, понятный пользователю. Одним из таких технологических языков является язык релейных диаграмм. Это программирование, которое ведется с использованием терминов, принятых в практике автоматического управления.

 
Посмотреть оригинал
Если Вы заметили ошибку в тексте выделите слово и нажмите Shift + Enter
< Пред   СОДЕРЖАНИЕ ОРИГИНАЛ   След >
 

Популярные страницы