Условная адресация
Приступая к разработке системы управления, программист должен сделать предварительное распределение памяти. Так, например, он может первоначально решить, что основная программа управления технологическим процессом будет вся размещена в ПЗУ, имеющем емкость 128 машинных слов. Если программа будет начинаться в точке с адресом 0000 0000 0000 (000 HEX.), то переменные процесса, которые должны записываться в ОЗУ, могут иметь адреса начиная с 000001000000(040 HEX).
Далее программист должен последовательно по порядку написать все команды программы управления. Программирование в машинных кодах означает, что каждая команда и адреса, по которым все команды и соответствующие им операнды будут загружены в память, должны быть указаны в бинарных кодах с присвоением абсолютных значений в ходе написания программы. Последнее, пожалуй, представляет наибольшую трудность, так как разработчик системы должен не только написать все 1 и 0, но и выполнить весь необходимый учет данных.
В качестве примера программирования с использованием абсолютной адресации рассмотрим процедуру считывания значений одного из параметров технологического процесса. Надо периодически считывать значение параметра, определять, сохранилось ли оно прежним или изменилось и, если изменилось, сообщить об этом в центральное устройство системы управления (рис. 2.11, табл. 2.4). Так как данный пример служит для демонстрации использования абсолютных адресов, то приведено содержание операций на естественном (разговорном) языке. Все адреса даются в шестнадцатеричном коде. По этой программе загружаются в аккумулятор данные, находящиеся во входной цепи, затем .предыдущее значение параметра, сохраненное в ячейке памяти с адресом 040, вычитается из содержимого аккумулятора. Если старое и новое значения одинаковы, то результат вычитания будет равен нулю, поэтому ход программы не изменится и она будет продолжаться в точке 003. Если же результат вычитания в точке 001 не будет равен нулю, т. е. значение параметра изменилось, то произойдет переход на другую ветвь программы и управление будет передано ячейке с адресом 009, где содержится подпрограмма
пересылки нового значения параметра на центральный пульт. Одним из шагов этой подпрограммы должно быть запоминание нового значения параметра в ячейке с адресом 040.
Продолжение программы с точки 003 содержит последовательные команды, образующие цикл выдержки времени. Когда пройдет заданное время, определяемое
Таблица 2.4. Программирование с абсолютными адресами
Номер строки |
Адрес команды |
Операция |
Адрес операнда |
1 |
000 |
Ввести в аккумулятор текущее значение параметра |
|
2 |
001 |
Вычесть предыдущее значение параметра |
040 |
3 |
002 |
Если результат НЕ НОЛЬ ,то переход к подпрограмме пересылки значения параметра |
009 |
4 |
003 |
Ввести в аккумулятор константу К1 |
007 |
5 |
004 |
Вычесть константу К2 |
008 |
6 |
005 |
Если переход НЕ НОЛЬ , то снова вычесть |
004 |
7 |
006 |
Переход (безусловный) в начало программы |
000 |
8 |
007 |
Константа К1=1111 |
- |
9 |
008 |
Константа К2=0001 |
- |
10 |
009 |
Подпрограмма пересылки значения параметра |
- |
на центральный пульт |
|||
11 |
040 |
Текущее значение параметра |
- |
5 |
ПЗУ4 |
ВРЕМЯ |
числом тактов, необходимых для выполнения всех команд цикла, содержимое аккумулятора окажется равным нулю и выполнение передается ячейке 006, которая содержит команду перехода в начальную точку 000 для повторения всего процесса.
Даже в таком простом примере программист сталкивается с большими трудностями: он должен задать начальные точки своей программы в ОЗУ и ПЗУ, не изменяя при этом других данных; он должен помнить, где хранятся константы и все текущие значения переменных величин;
ему нужно знать, сколько времени требует выполнение программы и ее отдельных частей. Наконец, нужно помнить адреса и объем всех подпрограмм, чтобы можно было надлежащим образом разместить их в памяти, не перекрывая отдельные части и не оставляя слишком больших неиспользованных участков.
Машинное кодирование с абсолютной адресацией обычно применяется только для очень простых и коротких программ длиной не более 40—50 машинных . слов. Разработка программы значительно облегчается, если для кодирования всех команд использовать мнемокоды, а для операндов применить условные (символические) адреса. Иными словами, мнемокоды применяются не только для системы команд, но и для адресов. В дальнейшем мнемонические сокращения переводятся в машинные коды, чтобы получить те данные, которые можно вводить в память микропроцессора.
Условные наименования можно присваивать всем величинам в операндной зоне команды. Такое наименование величины, или ее идентификатор, представляет собой произвольную последовательность букв и цифр, которая обязательно должна начинаться с буквы. Присвоение условных наименований находится полностью в руках программиста. Это могут быть нейтральные символы А, В, С или X, Y, Z, но чаще выбирают наименования, указывающие на смысл идентифицируемой величины. Как правило, наименования сокращают до минимального, но все же сохраняющего первоначальный смысл значения, которое облегчает запоминание. Различные идентификаторы могут отличаться одной буквой или цифрой, например ТП1, ТП2, ТОП и т. д.
При трансляции программы в машинный код условные наименования (символические адреса) заменяются абсолютными адресами. При непосредственном использовании абсолютных адресов у программиста всегда возникают трудности, когда необходимо что-то добавить или, наоборот, изъять, так как все команды обычно связаны друг с другом, с текущими данными и константами. При использовании относительной адресации, если нужно что-то изменить, то программист просто добавляет нужные команды с новыми символическими адресами.
Условные обозначения применяются также для отдельных частей программы. Такие обозначения называются метками, они задаются программистом, который в ходе написания программы как бы приклеивает ярлыки с названиями к различным программным модулям. В качестве меток удобно (хотя и не обязательно) использовать символические обозначения, соответствующие данным частям программы, например СТАРТ, ВРЕМЯ, ЗАДЕРЖКА и т. д. Метка ставится перед кодом операции, и после нее принято ставить двоеточие. В процессе трансляции программы (ручном или машинном) каждой метке присваивается текущее значение счетчика команд и тем самым фиксируется определенное место в программе. Поэтому когда в программе встречаются команды переходов или разветвлений, то в зоне операнда можно указывать непосредственно метку: это является символическим адресом, на который передается дальнейшее управление программой. Таким путем можно организовать переход в нужную точку программы, многократное повторение ее отдельных частей и т. д.
В дополнение к языку мнемонических сокращений и условных адресов в программах может использоваться и естественный язык. Он применяется для того, чтобы давать комментарии, поясняющие роль тех или иных команд в данной программе. Комментарии пишутся в той же строке, что и код операции, но отделяются от основной части команды точкой с запятой. Комментарии очень полезны, особенно на этапе внедрения системы, отладки программы и при ее сопровождении.
Та же самая программа, которая была приведена в табл. 2.4, теперь может быть записана с мнемокодами вместо описания операций и с адресами не в абсолютной, а в символической форме и с присвоением каждой величине условных наименований (табл. 2.5). Строки от 1 до 7 при кодировании в символических адресах представляют собой то же самое, что и строки с 1 до 7 в табл. 2.4, но в зоне операндов теперь содержатся последовательности букв, образующие условные наименования. Каждому из них затем будет приписана величина,
Таблица 2.5. Программирование в мнемокодах с относительными адресами
Номер строки |
Относительный адрес |
Метка |
Операция |
Операнд |
Комментарий |
1 |
ПЗУО |
СТАРТ |
ВВД |
Ввод текущего значения |
|
параметра |
|||||
2 |
ПЗУ1 |
ВЫЧ |
ТП |
Вычитание преущего |
|
значения |
|||||
3 |
ПЗУ2 |
ПНЕН |
ВЫХОД |
Вывод нового значения |
|
4 |
ПЗУЗ |
МСТ АП |
К1 |
Ввод константы |
|
5 |
ПЗУ4 |
ВРЕМЯ |
К2 |
Уменьшение константы |
|
на 1 (декремент) |
|||||
6 |
ПЗУ5 |
ПНЕН |
ВРЕМЯ |
Цикл задержки времени |
|
7 |
ПЗУ6 |
ПЕР |
СТАРТ |
Повторение программы |
|
8 |
ПЗУ7 |
К1 |
ПРИР |
OFH |
Константа 1111 |
9 |
ПЗУЗ |
К2 |
ПРИР |
1 |
Константа 0001 |
10 |
ПЗУ9 |
ВЫХОД |
Текст программы вывода нового значения параметра |
||
11 |
ОЗУ1 |
ТП |
ПРИР |
о |
Начальное значение параметра |
соответствующая его позиции в программе. Команды в строках 8, 9 и 11 дают указание зарезервировать в памяти три адреса для хранения данных. Первые два (007 и 008) содержат константы, используемые для образования цепи выдержки времени. Адрес в строке 11 (040) первоначально содержит 0, а затем текущее значение параметра технологического процесса.
После того как все команды данной программы написаны, к ней должна быть добавлена подпрограмма, к которой есть обращение в строке 3 основной программы. Этой подпрограмме дано символическое наименование ВЫХОД. Последней командой такой подпрограммы должно быть БРТ (ОБРАТНО), т. е. возвращение к основной программе.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.