Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
начинающим / Экскурсия по электронике.pdf
Источник:
Скачиваний:
211
Добавлен:
06.01.2022
Размер:
31.57 Mб
Скачать

В.Н. Гололобов

Экскурсия по электронике

308

Устройство управления устанавливает счетчик команд в соответствии с командой.

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

Из ячейки, следующей за этой, устройство управления считывает число и записывает его во второй регистр процессора.

Устройство управления дает команду АЛУ процессора – сложить.

Результат запоминается в аккумуляторе процессора.

Счетчик команд изменился на 3.

Адрес, задаваемый на шине адреса, изменился на 3.

Прочитывается следующая команда.

Ориентируясь на такой порядок работы, можно представить структуру микропроцессора в следующем виде:

Рис. 15.7. Простейшая структура микропроцессора

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

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

Что такое программа?

А мы уже говорили об этом. Последовательность команд, которые должен выполнить процессор для реализации программы, записанная в ячейках оперативной памяти, и есть программа. Самая простая структура программы – это линейная. Именно, все команды и данные записаны в ячейках памяти последовательно, одна за другой, и последовательно же прочитываются и выполняются.

С точки зрения процессора вся программа это последовательность двоичных чисел. Нам удобнее видеть эту последовательность, например, в шестнадцатеричном виде – так легче ее

В.Н. Гололобов

Экскурсия по электронике

309

воспринимать. Но еще легче нам воспринимать программу, если каждому числу, обозначающему команду, мы сопоставим некоторое буквенное обозначение. Желательно, чтобы это обозначение было сокращением привычных для нас слов. Вот, если говорить о предыдущем фрагменте работы процессора, как могла бы выглядеть команда записи числа из ячейки памяти в регистр:

Переместить число по адресу A3 в регистр 0.

Мы можем ей сопоставить, укоротив ее, такой вариант ПРМ А3, R0. В основном используется англоязычная аббревиатура, по причине чего команда выглядит так: MOV a3, R0. Здесь MOV – это сокращение от английского move. Согласитесь, такую команду легче запомнить, чем безликую 48 или, того хуже, 1001000.

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

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

Вернемся к программированию. Линейные программы получаются далеко не всегда даже в простых случаях. Практически в каждой программе возникает необходимость проверить некоторое условие, а по результатам проверки выполнить те или иные действия. Возникает необходимость в ветвлении программы. Обычно это во многих языках программирования выполняется операторами If... then... else (Если... то... иначе). Подобные команды высокого уровня разбиваются на ряд машинных команд, но суть остается – есть необходимость и возможность выполнить разные действия в разных ситуациях.

Принято программы записывать в виде алгоритмов – структурных схем программы – перед написанием кода программы. Алгоритм примера приведенного выше выглядел бы похожим на такой:

В.Н. Гололобов

Экскурсия по электронике

310

Рис. 15.8. Алгоритм программы сложения Схема программы с проверкой условий может выглядеть похожей на следующую.

Рис. 15.9. Запись алгоритма при ветвлении программы

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

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

В.Н. Гололобов

Экскурсия по электронике

311

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

Еще более общий смысл вкладывается в повторяющийся набор операций, когда вы объявляете его подпрограммой – частью программы, которая используется многократно. В частности, в любом языке высокого уровня есть такие подпрограммы в виде процедур или функций. В эти подпрограммы можно из основной программы передать некоторые значения, которые процедура или функция возвращает основной программе после выполнения всех предписанных действий.

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

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

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

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

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

Вспомнил я это не только потому, что обещал, но и по другой причине: в микроконтроллере с наблюдениями еще хуже. В этом виновата, однако, их сущность. Так какова она?