Счётчик команд указывает адес ячейки в памяти программ, в которой хранится исполняемая в следующий цикл команда.
Код: Выделить всё
Принцип понятен, а это главное:) Только вот не пойму всётаки как работает счётчик команд. Я так понимаю ( из его названия) он что то считает.
Код:
metka1 MOVLW .1 ; записываем в аккумулятор единицу
ADDWF KLON,F ; увеличиваем (складываем) на единицу
GOTO metka1 ; переход на метку1
Тут я понимаю при каждом круге значение KLON будет увеличиваться на 1. Но как это можно сопоставить с словосочетанием "счётчик команд" Ведь никакие команды он не считает!! где можно применить етот сегмент? и ещё!
Именно счётчик команд и считает номер исполняемой команды!!! Приведённый код (см. выше) и является командами. KLON в данном случае является регистром (ячейкой памяти) в памяти данных и при работе происходит изменение его содержимого. Никакого прямого отношения к изменению значения счётчика команд здесь нет.
Цикл выполнения команды состоит из 4-х тактов. Выборка команды из памяти программ и её исполнение совмещены по времени таким образом, что выборка команды занимает один цикл, а выполнение - следующий цикл. Эффективное время выпонения команды составляет один цикл. Т.е. в одном и том же цикле совмещены две операции: выборка следующей исполняемой команды из памяти программ и исполнение команды, выбранной на предыдущем цикле работы. Команды, которые производят изменение счётчика команд (CALL, GOTO, BTFSC, BTFSS и др.) выполняются за два цикла.
Теперь по тактам:
в 1-м такте происходит увеличение значения счётчика команд на 1 при исполнении операции выборки команды; в цикле выпонения осуществляется пересылка команды из памяти программ в регистр команд.
во 2-м такте осуществляется чтение операндов из памяти данных.
в 3-м такте - исполнение команды.
в 4-м - запись результатов в память данных или аккумулятор (он же рабочий регистр, W, WREG).
Память микроконтроллера состоит из памяти программ и памяти данных. Т.е. он построен по гарвардской архитектуре. В свою очередь, память данных состоит из регистров общего назначения и регистров специального назначения. Регистры специального назначения служат для управления режимами работы внутренних блоков микроконтроллера. Регистры общего назначения предназначены для хранения переменных пользователя.
Для PIC16F628 память программ имеет объём 2048 команд разрядностью 14 бит. Т.е. одна команда имеет длину 14 бит. Команды подразделяются на байт-ориентированные, бит-ориентированные, команды управления и операций с константами. Команда состоит из одного 14-и разрядного слова и имеет следующие поля: код операции (OPCODE), один или несколько операндов.
Код: Выделить всё
Что даст нам эта строка?
Код:
TABLE addwf PC,F ; Содержимое счетчика команд PC = PC + W
Сначение PC будет увеличиватся на какоето число с каждім кругом программы, но для чего???
В данном примере приведён кусок кода с вычисляемым переходом. Такой код используется для осуществления табличной выборки. Работает контроллер в этом случае следующим образом. В начале в аккумулятор заносится кокое-либо значение. Затем осуществляется вызов подпрограммы табличной выбоки (CALL TABLE по примеру). Команда addwf
PCL,F осуществляет сложение числа, находящегося в аккумуляторе, с
младшим байтом счётчика команд и сохранение результата в PCL. Данная команда будет исполнена не за один, а за два цикла, т.к. осуществляется изменение РС. В следующем цикле будет исполнена та команда, на которую указывает счётчик команд. Например, если в аккумуляторе было 0, то следующей выпоняемой командой будет команда с номером ячейки памяти программ номер РС. Если в аакумулятор поместить число 5, то в результате следующей выполняемой командой будет РС+5.
P.S. Думаю, что понятие о работе счётчика команд теперь более менее есть.
Не бывает безвыходных ситуаций. Есть только ситуации, выход из которых Вас не устраивает...