Программный счетчик. Программный счетчик PC (Program Counter) используется для указания сле­дующей команды выполняемой программы

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

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

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

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

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

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

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

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  




Подборка статей по вашей теме: