Open Library - открытая библиотека учебной информации

Открытая библиотека для школьников и студентов. Лекции, конспекты и учебные материалы по всем научным направлениям.

Категории

Высокие технологии ИНТЕРФЕЙСЫ ВВОДА – ВЫВОДА. ПРОГРАММИРОВАНИЕ МИКРОПРОЦЕССОРА НА ЯЗЫКЕ АССЕМБЛЕРА
просмотров - 355

Языки программирования

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

Рассмотрим, в чем состоят последние трудности. Пусть исправление некоторого участка программы привело к тому, что после коррекции данный участок занимает меньшее число ячеек в ОП. Τᴀᴋᴎᴍ ᴏϬᴩᴀᴈᴏᴍ, в последовательности адресов ячеек, занимаемых программой, возникает разрыв (на рис.— адреса освободившихся ячеек памяти). Такие разрывы недопустимы. Это связано с тем, что счетчик команд микропроцессора после выборки очередной команды формиру­ет адрес следующей команды путем увеличения своего содержимого на единицу. Следовательно, после выполнения последней команды участка программы перед разрывом счетчик в качестве адреса очередной ко­манды укажет адрес ячейки Ак+1. Для устранения образовавшихся разрывов можно воспользоваться следующими приемами. В случае если, то в первые три ячейки разрыва следует поместитьтрехбайтовую коман- безусловного перехода к ячейке первой после разрыва. Бели число ячеек в разрыве меньше трех, в эти ячейки помещается однобайтовая команда отсутствие операции, имеющая кодовую ком­бинацию 0000 0000.

Рассмотрим другой случай, когда в результате коррекции некоторо­го участка программы выясняется, что исправленный участок програм­мы не помещается в той группе ячеек, которая ранее отводилась под данный участок. В этом случае в указанную группу ячеек помещают на­чальную часть скорректированного участка, заканчивая ее трехбайто­вой командой безусловного перехода к некоторой свободной ячейке, к примеру следующей за ячейкой, которую занимает последняя команда программы (рис.). Начиная с этой ячейки, производится размеще­ние команд конечной части скорректированного участка программы. Завершить эту часть участка программы крайне важно командой безус­ловного перехода.

Следует иметь в виду, что подобные приемы приводят к появлению в программе дополнительных команд, за счет чего возрастают расходуе­мая емкость оперативной памяти и время исполнения программы. При большом числе исправляемых участков программы, по-видимому, целœе­сообразно составить программу заново, не пользуясь описанными выше приемами.

Наряду с указанными недостатками язык кодовых комбинаций имеет и достоинства. Программа на этом языке оказывается наиболее эффективной, она занимает минимальный объем памяти и быстрее ис­полняется. Уменьшение памяти (часто выполняемой в виде ПЗУ) сни­жает затраты на данный наиболее дорогостоящий узел микропроцессорной системы, а уменьшение времени позволяет решать более сложные зада­чи. Вместе с тем, записанная на бумаге программа после ее набивки на перфоленту может быть непосредственно введена в память микропро­цессорной системы.

Трудности программирования уменьшаются при использовании языка ассемблера. В этом языке вместо кодовых комбинаций применя­ется мнемоническая форма записи операций, выполняемых в микропро­цессоре. Такой мнемонической записью (в виде сочетания букв, взятых из соответствующих английских слов) представляют вид выполняемой операции, операнды и адреса. Каждой команде на языке ассемблера соответствует команда на языке кодовых комбинаций.

Язык ассемблера упрощает запись команд, облегчает поиск в ней ошибок, обеспечивает лучший обзор программы и простоту внесения исправлений в программу (без специальных приемов, подобных тем, которые описывались выше для исправления написанных на языке ко­довых комбинаций программ).

Перед исполнением программа должна быть переведена с языка ассемблера на язык кодовых комбинаций и в таком виде помещена в память микропроцессорной системы. Этот перевод осуществляется на ЭВМ с помощью программы трансляции, называемой ассемблером. Языком ассемблера можно пользоваться для программирования и в тех случаях, когда отсутствует программа для трансляции (отсутствует ас­семблер).

Выполнение трансляции в этом случае производится вручную (такая трансляция принято называть ручным ассемблированием).

Язык ассемблера (аналогично тому, как и язык кодовых комбинаций) индиви­дуален для каждого микропроцессорного комплекта͵ т. е. каждый мик­ропроцессорный комплект имеет свой язык ассемблера, отличный от языков ассемблера других комплектов.

Следующий уровень языка программирования — язык макроассем­блера. В нем предусматривается возможность присвоения имени неко­торой последовательности команд, и в любых местах программы, в которых должна быть использована эта последовательность, указыва­ется лишь имя последовательности. Применение языка макроассембле­ра сокращает запись программы (в среднем на 5...20 %) и тем самым улучшает ее обозримость. Каждая серия МПК имеет свой индивидуаль­ный язык макроассемблера (как и язык ассемблера), т. е. программа, составленная на этом языке для МПК одной серии, непригодна для использования в микропроцессорах, построенных на комплектах дру­гих серий.

Следующий уровень языка программирования—язык вьи:окого уровня. Языки высокого уровня близки к обычному математическому языку, описывающему процесс решения задачи, в связи с этим они легко усваивают­ся. Вместе с тем, они обеспечивают большую компактность программы (сложные вычислительные процессы представляются короткими запи­сями), что улучшает обзор программы и выявление в ней ошибок.

Различают машинно-независимые и машинно-зависимые языки высо­кого уровня. Первые позволяют вести запись программы независимо от серии микропроцессорного комплекта͵ используемого для построения микропроцессорного устройства (к таким языкам относятся Бейсик, Фортран, Паскаль и др.). Вторые пригодны для определœенных серий МПК. Для программирования устройств, построенных с использовани­ем комплекта серии КР580, разработан язык высокого уровня PLM-80, относящийся к классу машинно-зависимых языков высокого уровня.

Языки высокого уровня требуют более сложных трансляторов для перевода программы на язык кодовых комбинаций (для машинно-неза- висимых языков они сложнее, чем для машинно-зависимых); кроме того, полученная после трансляции программа занимает больший объем памяти (на 10... 100 %) и медленнее исполняется, чем в том случае, когда эта программа составляется непосредственно в кодовых комбина­циях. При этом эффективность программ, для составления которых используются машинно-независимые языки, обычно ниже, чем в случае использования машинно-зависимых языков программирования.

Для относительно несложных программ (к примеру, объемом до одной тысячи команд) целœесообразно использовать языки низкого уровня: язык кодовых комбинаций, язык ассемблера или язык макро­ассемблера.

Программа на языке ассемблера представляется в виде последова­тельности предложений; каждое из которых занимает отдельную стро­ку. В табл. показана запись на языке ассемблера той же программы, которая на языке кодовых комбинаций приведена в табл. .

Каждое предложение языка ассемблера содержит четыре фиксиро­ванных поля: поле метки, поле кода, поле операнда и поле комментария.

Поле метки. В случае если предложение снабжается именем, то оно записыва­ется в поле метки и после имени ставится двоеточие. Имя строится в виде произвольно выбранной последовательное ги заглавных букв латинско­го алфавита и цифр, причем первым символом в имени должна быть буква. В приведенной в табл. программе использованы имена М1 и М2. Обычно именами снабжаются предложения, на которые произво­дится условный либо безусловный переход. Одно и то же имя не может встречаться в поле метки более одного раза. В противном случае возни­кает неясность, к какому предложению должен производиться переход по соответствующим командам условного и безусловного переходов. Поле кода. В этом поле записывается мнемоническое обозначение кода операции, приводимое в системе команд микропроцессора.

Поле операнда. В поле операнда приводятся участвующие в операции числа (непосредственные данные), указания об источниках и приемни­ках данных, участвующих в операции; в предложениях условных и без­ условных переходов в этом поле указывается имя (метка) предложения на ĸᴏᴛᴏᴩᴏᴇ осуществляется переход. Числовые данные могут представ­ляться в различных системах счисления. Для указания выбранной для представления числа системы счисления после шестнадцатиричного числа ставится символ Н (а если число начинается с букв A,...,F, то перед числом ставится цифра 0), после десятичного числа можно ставить символ D (либо не записывать никакого символа), восьмеричное число заканчивается символом Q, двоичное символом В.

Система сбора данных.

Рассмотрим пример, в котором микропроцессор используется для выполнения логических действий. Пусть уст­ройство должно выполнять следующие функ­ции: поступающие по восьми каналам аналоговые сигналы последовательно подклю­чаются к АЦП и после преобразования в циф­ровую форму запоминаются в оперативной памяти.

Работа устройства, структурная схема кото­рого представлена на рис., происходит в следующей последовательности. Адрес очеред­ного канала указывается в трех младших разря­дах данных, выдаваемых из микропроцессора на шину данных. С шины данных адрес прини­мается устройством вывода УВ1, откуда он по­ступает на адресные входы коммутатора. Сигнал выбранного канала передается на вход АЦП. После окончания преобразования АЦП выдает сигнал готовности Г = 1, который уст­ройством ввода УВв2 передается на шину дан­ных, откуда принимается микропроцессором

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

После выдачи номера очередного канала микропроцессор принимаете аккумулятор А сигнал из УВв2. Путем сдвига вправо со­держимого аккумулятора принятое значе­ние передается в триггер Тс. В случае если при этом (Тс) = 0 (это означает, что АЦП не закончил преобразование принятого аналогового сиг­нала), то микропроцессор повторяет лрием из УВв2, и так до тех пор, пока не будет принято значение Г = 1.

После этого производится прием данных из УВв1. Принятый байт данных запоминается в памяти. Затем прибавлением единицы к содер­жимому пары регистров HL в них формирует­ся адрес ячейки, в которую будут переданы данные, полученные в результате преобразо­вания сигнала следующего канала.

На рис. приведена схема алгоритма функционирования устройства.

\~

В табл. приведена программа.

В табл. показано размещение програм­мы в ОП.

Буферы

Информация, выдаваемая микропроцессором на шины адреса и дан­ных, может предназначаться большому числу различных устройств, подключенных к этим шинам (ОЗУ, ПЗУ, устройства ввода и вывода). При этом выходы микросхемы КР580ВМ80А допускают потребление подключенными к ним устройствами относительно небольшого тока. Значение тока через эти выходы при высоком уровне напряжения (уров­не лоᴦ.1) вых = 0,1 мА, при низком уровне напряжения (уровне лоᴦ.О) вых < 1,6 мА. При такой нагрузочной способности к выходам микро­процессора может быть подключено не более одного входа микросхемы ТТЛ. Низкая нагрузочная способность выходов микропроцессора свя­зана с тем, что на кристалле, микропроцессора размещено большое число транзисторов и для обеспечения требуемого теплового режима тепло, выделяемое каждым транзистором, должно быть малым. Следо­вательно, малыми должны быть токи через транзисторы. Для увеличе­ния нагрузочной способности выходов потребовалось бы использование на выходах мощных транзисторов, через которые проте­кали бы большие токи, а это привело бы к большому выделœению тепла и недопустимому повышению температуры кристалла.

Так как токи, потребляемые нагрузкой микропроцессора, обычно превышают указанные выше допустимые значения, в шины адреса и данных включаются буферы. Для построения таких буферов в МПК серии КР580 предусмотрены шинные формирователи КР580ВА86 и КР580ВА87.

Шинные формирователи. На рис. показана логическая схема формирователя КР580ВА86, осуществляющего передачу 8-разрядных данных. На рисунке подробно изображена схема лишь нулевого разря­да, схемы остальных разрядов аналогичны. В цепи передачи включены два повторителя, имеющие три состояния. При этом если один из повто­рителœей находится в включенном состоянии, то другой — в выключен­ном (третьем). Так, если повторитель 1 находится в включенном состоянии, то повторитель 2 оказывается в выключенном состоянии и передача (в нулевом разряде) осуществляется через повторитель 1 в направлении от вывода А0 к выводу 2. В случае если переключить повторители в обратное состояние, установив во включенное состояние повторитель 2, повторитель 1 окажется в выключенном состоянии и передача будет происходить через повторитель 2 в направлении от вывода 2 к выводу А0 , т. е. в обратном направлении.

Управление состоянием повторителœей осуществляется элементами ИЛИ-НЕ 1 и 2 с помощью управляющих сигналов БК и Т. В случае если на входе ВК установлен высокий уровень лоᴦ.1, то независимо от значения сиг­нала Т на выходах элементов ИЛИ-НЕ устанавливается низкий уровень лоᴦ.О, во всœех разрядах оба повторителя оказываются в выключенном состоянии и не происходит передачи информации ни в прямом, ни в обратном направлениях. При комбинации сигналов БК = 0 и Т = 1 на выходе элемента ИЛИ-НЕ 1 образуется высокий уровень лоᴦ. I и 1 во всœех разрядах оказываются во включенном состоянии; на выходе элемента ИЛИ-НЕ 2 — низкий уровень лоᴦ.О, устанавливающий повторители 2 в выключенное состояние. Происходит передача 8-раз- рядных данных в направлении от А к В.

При комбинации сигналов ВК = 0 и Т = 0, наоборот, на выходе элемента ИЛИ-НЕ 2 устанавливается напряжение уровня лоᴦ. 7, откры­ваются повторители 2, на выходе элемента ИЛИ-НЕ 1 устанавливается напряжение уровня лоᴦ. О, и повторители 1 оказываются в выключенном состоянии. Происходит передача 8-разрядных данных от стороны В к стороне А. Τᴀᴋᴎᴍ ᴏϬᴩᴀᴈᴏᴍ, шинный формирователь обеспечивает уп­равляемую двунаправленную передачу 8-разрядных данных в соответ­ствии с табл. .

Выходы В (при передаче в направлении от А к В) имеют большую нагрузочную способность, чем выходы А (когда происходит передача в направлении от В к А). К выходам В допускается подключение нагрузки, потребляющей ток 32 мА - 5 мА. Для выходов А эти токи = 10 мА - 1 мА. Очевидно, шинный формирователь должен включаться стороной А к выводам микропроцессора, стороной В — к системным шинам адреса и данных.

0-й разряд

Значения управляющих сигналов Направление передачи информации
ВК т  
От стороны В к стороне А
От стороны А к стороне В
X Передача отсутствует

На рис. приведена схема шинного формирователя КР580ВЛ87. Ее отличие от схемы КР580ВА86 состоит лишь в том, что включенные в разряды повторители имеют инвертирующие выходы и при передаче происходит инвертирование передаваемых данных. В остальном работа этой микросхемы аналогична работе рассмотренной выше микросхемы КР580ВА86.