Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Микроконтроллеры семейства MCS-51.doc
Скачиваний:
210
Добавлен:
02.05.2014
Размер:
1.05 Mб
Скачать

Тема 2.4. Командные циклы. Программный счетчик. Алу. Командные циклы.

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

Рис. 2.15 - Командный цикл и машинные такты.

Некоторые команды требуют для выполнения более одного командного цикла. Это затрудняет расчет времени выполнения программы. Часто для оп­ределения этого времени приходится обращаться к документации или ис­пользовать симулятор/отладчик.

Программный счетчик.

Программный счетчик PC (Program Counter) используется для указания сле­дующей команды выполняемой программы. Реализация этой функции зна­чительно осложняется, когда необходимо сохранить содержимое PC при вы­зове подпрограмм и обработке запросов прерывания или обеспечить ветвление программы. Рис. 2.16 иллюстрирует выполнение некоторых функций программ­ного счетчика, однако на практике они оказываются существенно более слож­ными.

Рис. 2.16 - Программный счетчик.

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

Параллельная загрузка используется для записи в PC адреса перехода при выполнении команды «jmp» (безусловный переход) или «call» (вызов под­программы). В компьютерах с Принстонской архитектурой этот адрес посту­пает по шине данных. В 8-разрядных микроконтроллерах разрядность PC обычно больше, чем 8 бит (так как при такой разрядности адреса объем доступной памяти программ составляет всего 256 байт). При загрузке в PC нового адре­са, он поступает по шине данных частями по 8 бит, что требует выполнения дополнительных машинных циклов. Чтобы сократить время загрузки PC, некоторые процессоры имеют команды ветвления «branch», при которых загру­жаются только 8 младших разрядов адреса, а старшие разряды остаются без изменения. При выполнении такой команды достаточно передать по шине данных только один байт, тогда как для загрузки полного 16-разрядного ад­реса требуется пересылка двух байт.

Начальное содержимое PC после запуска микроконтроллера может иметь любое значение. Хотя наиболее очевидным представляется использование в качестве начального значения 0000h, некоторые микроконтроллеры начи­нают выполнение программы с других адресов. Аналогичная ситуация имеет место с адресами («векторами») прерываний. При обслуживании прерыва­ний в PC обычно загружают содержимое, которое отличается от адреса, заг­ружаемого при начальном запуске микроконтроллера, однако для реализа­ции прерывания и запуска могут использоваться одни и те же аппаратные средства.

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

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

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