Sfera-perm.ru

Сфера Пермь
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Регистры счетчиков команд pic

Территория разработок

Пример программы для микроконтроллера PIC16F676

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

В данной публикации я покажу пример использования микроконтроллера PIC16F676 для замены части логической схемы в зарядном устройстве PRO-8. О подробностях ремонта PRO-8, я писал ранее. Где упоминалось о том, что для восстановления функционала устройства пришлось запрограммировать упомянутый микроконтроллер.

Далее речь пойдет о самой программе. Программа написана для отслеживания и управления медленными процессами по трем датчикам. Причём один канал — в данном варианте имеет два порога срабатывания: нижний порог служит для управления исполнительным устройством, а верхний порог служит для аварийного отключения устройства. В программе заложен таймер наработки устройства, который запоминает время поминутной работы включенного устройства и хранит до востребования это значение в EEPROM памяти. Одновременно сделана подпрограмма, которая может выключить устройство после заданного времени наработки.

Прошивка может работать как с тремя каналами, так и с меньшим числом каналов, в зависимости от потребности. Пороги срабатывания на каналах можно задавать программно. Микросхема с прошивкой применялась в сварочном аппарате для контроля температуры силових элементов, пылевого загрязнения и контроля попадания влаги, образования конденсата. Далее эта же программа без изменений была использована в мощном зарядном устройстве – для контроля окончания заряда. Для разработчиков такая микросхема окажется полезной в устройствах, где требуется поддержка или регулирование нескольких параметров, а также контроль времени наработки устройства с заданием времени отключения устройства.

Текст программы FAZA.asm на ассемблере с комментариями смотри далее, а так же схемы включения микросхемы приведены ниже.

Рис 1. Схема стыковки датчиков с микроконтроллером

Программа представляет собой монитор на 4 датчика по уставкам (термин КИП-а — заданный предел измерения контролируемой величины максимум или минимум). 3 канала работают на выход ALARM общий независимо друг от друга — это ВХ 0,1,2. Также они выдают номер канала. 3Й канал не влияет на общий ALARM, он служит для регулятора по каналу 2. Уставки задаются программно, в виде строковой константы в виде точки и трех десятичных разрядов. Например, .250 СООТВЕТСТВУЕТ 2,5 вольта от соответствующего датчика.

Читайте так же:
Счетчик обращений фонд информационной демократии

Рис 2. Включение микроконтроллера в качестве счетчика наработки

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

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

Рис 3. Контроль времени наработки (вкл и выкл)

Встроен «чёрный ящик» — программный счетчик наработки прибора. Емкость счетчика равна 16777216 мин (hx1000000) или 279620 ЧАСА или 34952 рабочих смен по 8 часов или 95 лет односменной работы. Хранение времени наработки производится в трех ячейках EEPROM с адресами 0,1,2. Отсчет времени ведется каждый раз, когда прибор подключают к сети питания. Показания счетчика можно вывести на внешний прибор (например, на цифровой счетчик с индикаторами). Можно по желанию ограничить время наработки (к примеру, для проведения плановых профилактических мероприятий), установив это значение в программе.

МК PIC16F84. Счетчик инструкций и его программное управление

Счетчик инструкций (или счетчик команд, PC – Program Counter) – 13-разрядный регистр, который указывает адрес выбираемой команды для выполнения.

Младший байт счетчика инструкций PCL доступен для чтения и записи. Старший байт PCH, содержащий биты счетчика инструкций PC, не доступен для чтения и записи. Все операции с регистром PCH происходят через дополнительный регистр PCLATH.

Примечание. При записи значения в регистр PCL, автоматически происходит перезапись 5 младших бит из регистра PCLATH в регистр PCH.

Режимы изменения счетчика инструкций:

автоматический (автоинкремент) при исполнении инструкций. Значение счетчика команд инкрементируется каждый раз при выборке очередной инструкции из памяти программ;
предопределенный при исполнении инструкций CALL, GOTO и т.п. Перед выполнением команды перехода (CALL или GOTO) необходимо запрограммировать биты регистра PCLATH для адресации требуемой страницы. При выполнении инструкций возврата из подпрограммы 13-разрядное значение для счетчика программ PC берется с вершины стека, поэтому манипуляция битами регистра PCLATH не требуется;

Читайте так же:
Куда нужно обращаться если нужно поставить счетчик

Изменение значения PC при выполнении инструкции GOTO (PCLATH → PCH)

Изменение значения PC при выполнении перехода к подпрограмме CALL (PCLATH → PCH), причем старое значение PC сохраняется в вершине стека


Возвращение из подпрограммы (RETURN, RETFIE или RETLW), счетчик команд загружается значением с вершины стека

Примечание. Регистр PCLATH не изменяется при изменении PCH.

принудительный при изменении PCL и PCLATH.

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

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

PIC-контроллеры фирмы Microchip (стр. 2 )

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14

Обозначение вывода

Тип I/O/P

Двунаправленный порт ввода/вывода PORTD или ведомый параллельный порт для подключения к шине микропроцессора.

Двунаправленный порт ввода/вывода PORTE.

RE0 может использоваться в качестве управляющего входа чтения PSP или аналогового канала 5.

RE1 может использоваться в качестве управляющего входа записи PSP или аналогового канала 6.

RE2 может использоваться в качестве управляющего входа выбора PSP или аналогового канала 7.

Общий вывод для внутренней логики и портов ввода/вывода.

Положительное напряжение питания для внутренней логики и портов ввода/вывода.

Обозначение:

I = вход, О = выход, I/O = вход/выход, Р = питание, – = не используется, TTL = входной буфер ТТЛ, ST = вход с триггером Шмидта.

1. Входной буфер с триггером Шмидта при использовании внешних прерываний.

Читайте так же:
Внешний счетчик для гаража

2. Входной буфер с триггером Шмидта при работе в режиме последовательного программирования.

3. Входной буфер с триггером Шмидта в режиме цифровых портов ввода/вывода. В режиме ведомого параллельного порта подключены входные буферы ТТЛ (для совместимости с шиной микропроцессора).

4. Входной буфер с триггером Шмита в режиме RC генератора и CMOS буфер в других режимах.

1.6 Архитектура микроконтроллера PIC16F877

Высокая производительность обусловлена большим числом архитектурных особенностей, характерных для RISK микроконтроллеров использующих Гарвардскую архитектуру, основанную на концепции раздельных шин и областей памяти для данных команд. Это увеличивает скорость обмена по сравнению с традиционной Принстонской архитектурой, в которой команда и данные передаются по одной и той же шине. На рисунке 1.2 представлена структурная схема микроконтроллера PIC16F877. Разделение шин команд и данных позволяет увеличить разрядность команды по сравнению с разрядностью данных. Шина данных и память данных (ОЗУ) имеют ширину 8 бит, а программная шина и программная память (ППЗУ или ПЗУ) имеет ширину 14 бит.

Рисунок 1.2 Структурная схема микроконтроллера PIC16F877

Такая концепция позволяет использовать простую, но мощную систему однословных команд, разработанную так, что битовые, байтовые и регистровые операции выполняются с высокой скоростью и с перекрытием по времени выборок и исполнение команды. Все команды, кроме передачи управления, выполняются за один цикл (200нс при тактовой частоте 20 МГц).

Регистры разделяются на две функциональные группы: специальные регистры и регистры общего назначения. Специальные регистры включают в себя регистр таймера/счетчика реального времени (TMR), счетчик команд (PC), регистр состояния (STATUS), регистры ввода/вывода (PORT) и регистр косвенной адресации (FSR). Кроме того, специальные регистры управляют конфигурацией портов ввода-вывода и режимом предварительного делителя. Регистры общего назначения используются программой для хранения переменных по усмотрению пользователя. В микроконтроллерах существует прямая и косвенная адресация всех регистров и ячеек памяти. Все специальные регистры и счетчик команд также отображают на память данных. В таблице 1.3 представлена карта памяти данных микроконтроллера PIC16F877.

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

Читайте так же:
Бесплатный счетчик для вашего сайта

В микроконтроллерах PIC16F877 имеется 10-разрядное арифметико-логическое устройство (АЛУ) и рабочий регистр W. АЛУ выполняет сложение, вычитание, сдвиг, битовые и логические операции. В командах, имеющих два операнда, одним из операндов является рабочий регистр W. Второй операнд может быть константой или содержимым любого регистра ОЗУ, для выполнения всех операций АЛУ используется рабочий регистр W, который не может быть прямо адресован. В зависимости от результата выполнения операции, могут измениться значение битов переноса C, десятичного переноса DC и нуля Z в регистре состояния STATUS. При вычитании биты C и DC работают, как биты заема и десятичного заема, соответственно.

В работе микроконтроллера важную роль играют регистры специального назначения (РСН). С помощью регистров специального назначения выполняется управление функциями ядра и периферийными модулями микроконтроллера. Регистры специального назначения реализованы как статическое ОЗУ. В таблице 1.4 представлены регистры специального назначения микроконтроллера PIC16F877.

Таблица 1.3 Карта памяти данных микроконтроллера PIC 16F877

Регистр процессора

Регистр процессора — поле заданной длины во внутрипроцессорной сверхбыстрой оперативной памяти (СОЗУ). Используется самим процессором, может быть как доступным, так и недоступным программно. Например, при выборке из памяти очередной команды она помещается в регистр команд, обращение к которому программист прописать не может.

Содержание

  • 1 Программно недоступные регистры
  • 2 Программно-доступные регистры
  • 3 Некоторые примеры
    • 3.1 Архитектура x86
    • 3.2 Счётчик команд
      • 3.2.1 IP
      • 3.2.2 EIP
      • 3.2.3 RIP
  • 4 Примечания
  • 5 Ссылки

Программно недоступные регистры [ | ]

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

Программно-доступные регистры [ | ]

Программно-доступные регистры есть регистры, к которым возможно так или иначе обратиться из выполняемой программы. Практически каждый такой регистр обозначается своим именем-идентификатором на уровне языка ассемблера и соответствующим числовым ом-идентификатором на уровне машинного языка. По уровню доступности программно доступные регистры и неодинаковы и практически делятся на две большие подгруппы:

  • системные регистры, — любые регистры, программно доступные только системным программам (например ядру операционной системы), имеющим достаточный для этого уровень системных привилегий/прав. В терминах многих машинных систем такой уровень привилегий часто называется «уровнем/режимом ядра» или «режимом супервизора». Для всех прочих программ, — работающих в «режиме пользователя», — эти регистры недоступны. Примеры таких регистров: управляющие регистры и теневые регистры дескрипторов сегментов.
  • регистры общего назначения (РОН) — регистры, доступные любым программам. В частности регистры, используемые без ограничения в арифметических и логических операциях, но имеющие определённые аппаратные ограничения (например, в строковых РОН). Эти регистры не характерны для эпохи мейнфреймов типа IBM/370[1] и стали популярными в микропроцессорах архитектуры X86 — Intel 8085, Intel 8086 и последующих [2] .
Читайте так же:
Настроить цели для счетчика

Специальные регистры [3] содержат данные, необходимые для работы процессора — смещения базовых таблиц, уровни доступа и т. д.

Часть специальных регистров принадлежит устройству управления, которое управляет процессором путём генерации последовательности микрокоманд.

Доступ к значениям, хранящимся в регистрах, осуществляется непосредственно на тактовой частоте процессора и, как правило, в несколько раз быстрее, чем доступ к полям в оперативной памяти (даже если кеш-память содержит нужные данные), но объём оперативной памяти намного превосходит суммарный объём процессорных регистров, суммарная «ёмкость» регистров общего назначения/данных для x86-процессоров (например Intel 80386 и более новых) 8 регистров по 4 байта = 32 байта (В x86-64-процессорах — 16 по 8 байт = 128 байт и некоторое количество векторных регистров).

Некоторые примеры [ | ]

В таблице показано количество регистров общего назначения в нескольких распространённых архитектурах микропроцессоров. Стоит отметить, что в некоторых архитектурах использование отдельных регистров может быть осложнено. Так, в SPARC и MIPS регистр номер 0 не сохраняет информацию и всегда считывается как 0, а в процессорах x86 с регистром ESP (указатель на стек) могут работать лишь некоторые команды.

256 = 32 глобальных регистров + 224 регистра стека процедур [6]

голоса
Рейтинг статьи
Ссылка на основную публикацию