Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Эрни Каспер Программирование на языке Ассемблер...doc
Скачиваний:
159
Добавлен:
09.11.2019
Размер:
954.88 Кб
Скачать

Глава 7

7.Программирование взаимодействия с внешними устройствами

7.1.Общие вопросы взаимодействия

При программировании алгоритмов решения вычислительных задач необходимо учитывать следующие ресурсы микроконтроллера: систему команд, форматы данных, допустимый расход объемов ОЗУ и ПЗУ. Задача программирования взаимодействия с внешними устройствами требует учета ряда дополнительных ограничений. Часто самым сущест­венным ограничением является время решения задачи управления изде­лием и/или время реакции на внешние сигналы. Для взаимодействия микроконтроллера с внешними устройствами нужно обеспечить выпол­нение некоторых наборов требований, которые в вычислительной техни­ке называются интерфейсами. Часть этих требований относится к конст­рукторской и схемотехнической стороне разработки изделия. Предметом данной главы является обеспечение той части требований, которые относятся к программированию.

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

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

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