4.10.2. Модули аналогового ввода/вывода
Необходимость приема и формирования аналоговых сигналов требует наличия в МК модулей аналогового ввода/вывода.
Простейшим устройством аналогового ввода в МК является встроенный компаратор напряжения. Компаратор сравнивает входное аналоговое напряжение с опорным потенциалом VREF и устанавливает на выходе логическую «!», если входное напряжение больше опорного. Компараторы удобнее всего использовать для контроля определенного значения входного напряжения, например, в термостатах. В комбинации с внешним генератором линейно изменяющегося напряжения встроенный компаратор позволяет реализовать на МК интегрирующий аналого-цифровой преобразователь (АЦП). Однако более широкие возможности для работы с аналоговыми сигналами дает АЦП, встроенный в МК. Чаще всего он реализуется в виде модуля многоканального АЦП, предназначенного для ввода в МК аналоговых сигналов с датчиков физических величин и преобразования этих сигналов в двоичный код. Структурная схема типового модуля АЦП представлена на рис. 4.12.
Многоканальный аналоговый коммутатор К служит для подключения одного из источников аналоговых сигналов (PTx()...РТх7) ко входу АЦП. Выбор источника сигнала для преобразования осуществляется посредством записи номера канала коммутатора в соответствующие разряды регистра управления АЦП.
Два вывода модуля АЦП используются для задания опорного напряжения Uon: VREFN— верхний предел Uon: VREFL — нижний предел. Разность потенциалов на входах VREFH и VREFL и составляет Uon. Разрешающая способность АЦП составляет Uon /2n, где n — число двоичных разрядов в слове результата. Максимальное значение опорного напряжения, как правило, равно напряжению питания МК. Если измеряемое напряжение Uизм > VREFH то результат преобразования будет равен FF, код 00 соответствует напряжениям Uизм JVREFL. Для достижения максимальной точности измерения следует выбрать максимально допустимое значение Uon. В этом случае напряжение смещения нуля входного буфера и нелинейность передаточной характеристики АЦП будут вносить относительно малые погрешности.
Собственно аналого-цифровой преобразователь выполнен по методу последовательного приближения. Практически во всех моделях 8-разрядных МК разрядность АЦП также составляет 8 разрядов. Соответственно, формат представления результатов измерения АЦП — однобайтовый. Исключение составляют лишь модули АЦП микроконтроллеров для управления преобразователями частоты для электроприводов, разрешающая способность которых равна 10 разрядам. Два младших разряда результата получают с помощью дополнительного емкостного делителя, не связанного с регистром последовательного приближения.
Длительность такта преобразования задает генератор синхронизации: один цикл равен двум периодам частоты генератора tADS. Время преобразования для типовых модулей АЦП микроконтроллеров составляет от единиц до десятков микросекунд.
Источником синхронизации модуля АЦП может служить встроенный RC-генератор (Г) или импульсная последовательность тактирования межмодульных магистралей МК. В первом случае частота синхронизации АЦП обязательно окажется оптимальной, то есть той, которая рекомендуется в техническом описании. Во втором случае выбранная по другим соображениям fBUS может оказаться неподходящей для модуля АЦП. На этот случай в составе некоторых модулей предусмотрен программируемый делитель частоты fBUS.
Момент завершения каждого цикла преобразования отмечается установкой триггера готовности данных. Если прерывания от модуля АЦП разрешены, то генерируется запрос на прерывания. Как правило, чтение регистра результата сбрасывает триггер готовности.
Большинство модулей АЦП имеют только режим программного запуска: установка одного из битов регистра режима запускает очередное измерение. Наиболее универсальные модули АЦП имеют также режим автоматического запуска, при котором после завершения одного цикла преобразования немедленно начинается следующий. Однако данные измерения каждого цикла должны быть считаны программным способом. Цифро-аналоговые преобразователи в составе МК являются большой редкостью. Функция цифро-аналогового преобразователя реализуется средствами модуля программируемого таймера в режиме ШИМ. На одном из выводов МК формируется высокочастотная импульсная последовательность с регулируемой длительностью импульса. Полученный сигнал сглаживается фильтром нижних частот на операционном усилителе. Разрешающая способность такого ЦАП определяется дискретностью регулирования коэффициента заполнения в режиме ШИМ.
Глава 5. Однокристальные микроконтроллеры серии PIC
Лекция 9. Аппаратные средства микроконтроллеров серии PIC
В этой лекции рассказывается об особенностях организации и параметрах популярных PIC-микроконтроллеров фирмы «Microchip», а также более подробно о составе, структуре и возможностях аппаратных средств микроконтроллеров подгруппы PIC16F8X.
Ключевые слова: PIC, структура, цикл команд, регистры, адресация, порты, таймер, прерывания.
5.1. Основные особенности микроконтроллеров серии PIC
5.1.1. Состав и назначение семейств PIC-контроллеров
Микроконтроллеры семейств PIC (Peripheral Interface Controller) компании Microchip объединяют все передовые технологии микроконтроллеров: электрически программируемые пользователем ППЗУ, минимальное энергопотребление, высокую производительность, хорошо развитую RISC-архитектуру, функциональную законченность и минимальные размеры. Широкая номенклатура изделий обеспечивает использование микроконтроллеров в устройствах, предназначенных для разнообразных сфер применения.
Первые микроконтроллеры компании Microchip PIC16C5x появились в конце 1980-х годов и благодаря своей высокой производительности и низкой стоимости составили серьезную конкуренцию производившимся в то время 8-разрядным МК с CISC-архитектурой.
Высокая скорость выполнения команд в PIC-контроллерах достигается за счет использования двухшинной гарвардской архитектуры вместо традиционной одношинной фон-неймановской. Гарвардская архитектура основывается на наборе регистров с разделенными шинами и адресными пространствами для команд и данных. Все ресурсы микроконтроллера, такие как порты ввода/вывода, ячейки памяти и таймер, представляют собой физически реализованные аппаратные регистры.
Микроконтроллеры PIC содержат RISC-процессор с симметричной системой команд, позволяющей выполнять операции с любым регистром, используя произвольный метод адресации. Пользователь может сохранять результат операции в самом регистре-аккумуляторе или во втором регистре, используемом для операции.
В настоящее время компания Microchip выпускает пять основных семейств 8-разрядных RISC-микроконтроллеров, совместимых снизу вверх по программному коду:
• РIС12СХХХ — семейство микроконтроллеров, выпускаемых в миниатюрном 8-выводном исполнении. Эти микроконтроллеры выпускаются как с 12-разрядной (33 команды), так и с 14-разрядной (35 команд) системой команд. Содержат встроенный тактовый генератор, таймер/счетчик, сторожевой таймер, схему управления прерываниями. В составе семейства есть микроконтроллеры со встроенным 8-разрядным четырехканальным АЦП. Способны работать при напряжении питания до 2,5 В;
• PIC16C5X — базовое семейство микроконтроллеров с 12-разрядными командами (33 команды), выпускаемое в 18-, 20- и 28-выводных корпусах. Представляют собой простые недорогие микроконтроллеры с минимальной периферией. Способность работать при малом напряжении питания (до 2 В) делает их удобными для применения в переносных конструкциях. В состав семейства входят микроконтроллеры подгруппы PIC16HVSXX, способные работать непосредственно от батареи в диапазоне питающих напряжений до 15 В;
• РIС16СХХХ — семейство микроконтроллеров среднего уровня с 14 разрядными командами (35 команд). Наиболее многочисленное семейство, объединяющее микроконтроллеры с разнообразными периферийными устройствами, в число которых входят аналоговые компараторы, аналогово-цифровые преобразователи, контроллеры последовательных интерфейсов SPI, USART и 12С, таймеры-счетчики, модули захвата/сравнения, широтно-импульсные модуляторы, сторожевые таймеры, супервизорные схемы и так далее;
• PIC17CXXX — семейство высокопроизводительных микроконтроллеров с расширенной системой команд 16-разрядного формата (58 команд), работающие на частоте до 33 МГц, с объемом памяти программ до 16 Кслов. Кроме обширной периферии, 16-уровневого аппаратного стека и векторной системы прерываний, почти все микроконтроллеры этого семейства имеют встроенный аппаратный умножитель 8х8, выполняющий операцию умножения за один машинный цикл. Являются одними из самых быстродействующих в классе 8-разрядных микроконтроллеров;
• PIC18CXXX — семейство высокопроизводительных микроконтроллеров с расширенной системой команд 16-разрядного формата (75 команд) и встроенным 10-разрядным АЦП, работающие на частоте до 40 МГц. Содержат 31-уровневый аппаратный стек, встроенную память команд до 32 Кслов и способны адресовать до 4 Кбайт памяти данных и до 2 Мбайт внешней памяти программ. Расширенное RISC ядро микроконтроллеров данного семейства оптимизировано под использование нового Си-компилятора.
Большинство PIC-контроллеров выпускаются с однократно программируемой памятью программ (ОТР), с возможностью внутрисхемного программирования или масочным ПЗУ. Для целей отладки предлагаются более дорогие версии с ультрафиолетовым стиранием и Flash-памятью. Полный список выпускаемых модификаций PIC-контроллеров включает порядка пятисот наименований. Поэтому продукция компании перекрывает почти весь диапазон применений 8-разрядных микроконтроллеров.
Из программных средств отладки наиболее известны и доступны различные версии ассемблеров, а также интегрированная программная среда MPLAB. Российские производители программаторов и аппаратных отладочных средств также уделяют внимание PIC-контроллерам. Выпускаются как специализированные программаторы, такие как PICPROG, программирующие почти весь спектр PIC-микроконтроллеров, так и универсальные: UNIPRO и СВЕРХ, поддерживающие наиболее известные версии PIC-контроллеров.
Наиболее распространенными семействами PIC-контроллеров являются PIC16CXXX и PIC17CXXX.
5.1.2. Микроконтроллеры семейств PIC16CXXX и PIC17CXXX
Основным назначением микроконтроллеров семейств PIC16 и PIC17, как следует из аббревиатуры PIC (Peripheral Interface Controller), является выполнение интерфейсных функций. Этим объясняются особенности их архитектуры:
• RISC-система команд, характеризующаяся малым набором одноадресных инструкций (33, 35 или 58), каждая из которых имеет длину в одно слово (12, 14 или 16 бит) и большинство выполняется за один машинный цикл. В системе команд отсутствуют сложные арифметические команды (умножение, деление), предельно сокращен набор условных переходов;
• высокая скорость выполнения команд: при тактовой частоте 20 МГц время машинного цикла составляет 200 нс (быстродействие равно 5 млн. операций/сек);
• наличие мощных драйверов (до 25 мА) на линиях портов ввода/вывода, что позволяет подключать непосредственно к ним довольно мощную нагрузку, например, светодиоды.
• низкая потребляемая мощность;
• ориентация на ценовую нишу предельно низкой стоимости, определяющая использование дешевых корпусов с малым количеством выводов (8, 14, 18, 28), отказ от внешних шин адреса и данных (кроме PIC17C4X), использование упрощенного механизма прерываний и аппаратного (программно недоступного) стека.
5.1.3. Особенности архитектуры микроконтроллеров семейства PIG16CXXX
Микроконтроллеры семейства PIC16CXXX, выполненные по технологии HCMOS представляют собой 8-разрядные микроконтроллеры на основе RISC-процессора, выполненные по гарвардской архитектуре. Имеют встроенное ПЗУ команд объемом от 0,5 до 4 Кслов (разрядность слова команд равна 12 — 14 бит). Память данных PIC-контроллеров организована в виде регистрового файла объемом 32 — 128 байт, в котором от 7 до 16 регистров отведено для управления системой и обмена данными с внешними устройствами.
Одним из основных достоинств этих устройств является очень широкий диапазон напряжений питания (2 — 6 В). Ток потребления на частоте 32768 Гц составляет менее 15 мкА, на частоте 4 МГц — 1 — 2 мА, на частоте 20 МГц 5 — 7 мА и в режиме микропотребления (режим SLEEP) — 1 — 2 мкА. Выпускаются модификации для работы в трех температурных диапазонах: от 0 до +70°С, от -40 до +85°С и от -40 до +125 С.
Каждый из контроллеров содержит универсальные (от 1 до 3) и сторожевой таймеры, а также надежную встроенную систему сброса при включении питания. Частота внутреннего тактового генератора задается либо кварцевым резонатором, либо RC-цепочкой в диапазоне 0 — 25 МГц. PIC контроллеры имеют от 12 до 33 линий цифрового ввода-вывода, причем каждая из них может быть независимо настроена на ввод или вывод.
В устройство PIC16C64 входит широтно-импульсный модулятор, с помощью которого можно реализовать ЦАП с разрешением до 16 разрядов. Здесь есть и последовательный двунаправленный синхронно-асинхронный порт, обеспечивающий возможность организации шины I2С. Приборы PIC16C71 и PIC16C74 содержат встроенный многоканальный 8-разрядный АЦП с устройством выборки-хранения.
Помимо памяти программ в PIC предусмотрено несколько индивидуально прожигаемых перемычек, с помощью которых можно на этапе программирования кристалла выбрать тип тактового генератора, отключить сторожевой таймер или систему сброса, включить защиту памяти программ от копирования, а также записать серийный номер кристалла (16 бит).
С программной точки зрения PIC-контроллер представляет собой 8-разрядный RISC-процессор с гарвардской архитектурой. Число команд небольшое от 33 до 35. Все команды имеют одинаковую длину и, кроме команд ветвления, выполняются за четыре периода тактовой частоты (в отличие, например, от 12 периодов для 187C51). Поддерживаются непосредственный, косвенный и относительный методы адресации, можно эффективно управлять отдельными битами в пределах всего регистрового файла. Стек реализован аппаратно. Его максимальная глубина составляет два или восемь уровней в зависимости от типа контроллера. Почти во всех микросхемах PIC есть система прерываний, источниками которых могут быть таймер и внешние сигналы. Система команд практически симметрична и, как следствие, легка в освоении.
Применение РIС-контроллеров целесообразно в несложных приборах с ограниченным током потребления (автономные устройства, приборы с питанием от телефонной линии и т.п.). Благодаря малому количеству компонентов, используемых при построений таких приборов, их размеры уменьшаются, а надежность увеличивается.
Типичным представителем микроконтроллеров семейства РIС16СХХХ являются микроконтроллеры подгруппы Pl C16F8X.
5.2. Микроконтроллеры подгруппы PIC16F8X
5.2.1. Основные характеристики
Микроконтроллеры подгруппы PIC16F8X относятся к семейству 8-разрядных КМОП микроконтроллеров группы РIС16СХХХ, для которых характерны низкая стоимость, полностью статическая КМОП-технология и высокая производительность.
В состав подгруппы входят МК PIC16F83, PIC16CR83, PIC16F84 и PIC16CR84. Основные характеристики МК подгруппы PIC16F8X приведены в табл. 5.1.
Все микроконтроллеры подгруппы PIC16F8X используют гарвардскую архитектуру с RISC-процессором, обладающую следующими основными особенностями:
• используются только 35 простых команд;
• все команды выполняются за один цикл (400 нс при частоте 10 М Гц), кроме команд перехода, которые требуют 2 циклов;
• рабочая частота 0 Гц ... 10 МГц;
• раздельные шины данных (8 бит) и команд (14 бит);
• 512 х 14 или 1024 х 14 память программ, выполненная на ПЗУ или электрически перепрограммируемой Flash памяти;
• 15 восьмиразрядных регистров специальных функций (SFR);
• восьмиуровневый аппаратный стек;
• прямая, косвенная и относительная адресация данных и команд;
• 36 или 68 восьмиразрядных регистров общего назначения (GPR) или ОЗУ;
• четыре источника прерывания: — внешний вход RBO/INT
— переполнение таймера TMRO;
— изменение сигналов на линиях порта В;
— завершение записи данных в память EEPROM;
• 64 х 8 электрически перепрограммируемая EEPROM память данных с возможностью выполнения 1000000 циклов стирания/записи;
• сохранение данных в EEPROM в течение как минимум 40 лет.
Микроконтроллеры подгруппы PIC16F8X обладают развитыми возможностями ввода/вывода:
• 13 линий ввода-вывода с индивидуальной установкой направления обмена;
• высокий втекающий/вытекающий Мок, достаточный для управления светодиодами:
• максимальный втекающий ток — 25 мА;
• максимальный вытекающий ток — 20 мА;
• 8-битный таймер/счетчик TMRO с 8-битным программируемым предварительным делителем.
Специализированные микроконтроллерные функции включают следующие возможности:
• автоматический сброс при включении (Power-on-Reset);
• таймер включения при сбросе (Power-up Timer);
• таймер запуска генератора (Oscillator Start-up Timer);
• сторожевой (Watchdog) таймер WDT с собственным встроенным генератором, обеспечивающим повышенную надежность;
• EEPROM бит секретности для защиты кода;
• экономичный режим SLEEP;
• выбираемые пользователем биты для установки режима возбуждения встроенного генератора;
• последовательное встроенное устройство программирования Flash/ EEPROM памяти программ и данных с использованием только двух выводов.
КМОП технология обеспечивает МК подгруппы PIC16F8X дополнительные преимущества:
• статический принцип работы;
• широкий диапазон напряжений питания: 2,0 ... 6,0 В;
• низкое энергопотребление:
• менее 2 мА при 5В и 4МГц;
• порядка 15 мкА при 2В и 32КГц;
• менее 1 мкА для SLEEP-режима при 2В.
Микроконтроллеры подгруппы PIC16F8X различаются между собой только объемом ОЗУ данных, а также объемом и типом памяти программ. Наличие в составе подгруппы МК с Flash-памятью программ облегчает создание и отладку прототипов промышленных образцов изделий.
5.2.2. Особенности архитектуры
Упрощенная структурная схема МК подгруппы PIC16F8X приведена на рис. 5.1.
Архитектура основана на концепции раздельных шин и областей памяти для данных и для команд (гарвардская архитектура). Шина данных и память данных (ОЗУ) — имеют ширину 8 бит, а программная шина и программная память (ПЗУ) имеют ширину 14 бит. Такая концепция обеспечивает простую, но мощную систему команд, разработанную так, что битовые, байтовые и регистровые операции работают с высокой скоростью и с перекрытием по времени выборок команд и циклов выполнения. 14 битовая ширина программной памяти обеспечивает выборку 14-битовой команды в один цикл. Двухступенчатый конвейер обеспечивает одновременную выборку и исполнение команды. Все команды выполняются за один цикл, исключая команды переходов.
Микроконтроллеры PIC16F83 и PIC16CR83 адресуют 512х14 памяти программ, а PIC16F84 и PIC16CR84 — 1Кх14 памяти программ. Вся память программ является внутренней.
Микроконтроллер может прямо или косвенно обращаться к регистрам или памяти данных. Все регистры специальных функций, включая счетчик команд, отображаются на память данных. Ортогональная (симметричная) система команд позволяет выполнять любую команду над любым регистром с использованием произвольного метода адресации. Ортогональная архитектура и отсутствие специальных исключений делает программирование МК группы PIC16F8X простым и эффективным.
Назначение выводов МК под группы PIC16F8X приведено в табл. 5.2.
Этот буфер имеет вход триггера Шмитта, когда конфигурируется в качестве входа внешнего прерывания.
Этот буфер имеет вход триггера Шмитта, когда используется в режиме последовательного программирования.
Этот буфер имеет вход триггера Шмитта, когда конфигурируется в режиме RC-генератора и КМОП-вход в остальных случаях.
Табл. 5.2. Назначение выводов МК подгруппы PIC16F8X (продолжение).
Микроконтроллер содержит 8-разрядное АЛУ и рабочий регистр W. АЛУ является арифметическим модулем общего назначения и выполняет арифметические и логические функции над содержимым рабочего регистра и любого из регистров контроллера. АЛУ может выполнять операции сложения, вычитания, сдвига и логические операции. Если не указано иное, то В арифметические операции выполняются в дополнительном двоичном коде.
В зависимости от результата операции, АЛУ может изменять значения бит регистра STATUS: С (Carry), DC (Digit carry) и Z (Zero).
5.2.3. Схема тактирования и цикл выполнения команды
Входная тактовая частота, поступающая с вывода OSCI/CLKIN, делится внутри на четыре, и из нее формируются четыре циклические не перекрывающиеся тактовые последовательности Q1, Q2, Q3 и Q4. Счетчик команд увеличивается в такте Q1, команда считывается из памяти программы и защелкивается в регистре команд в такте Q4. Команда декодируется и выполняется в течение последующего цикла в тактах Q1 Q4. Схема тактирования и выполнения команды изображена на рис. 5.2.
Цикл выполнения команды состоит из четырех тактов: Q1...Q4. Выборка команды и ее выполнение совмещены по времени таким образом, что выборка команды занимает один цикл, а выполнение — следующий цикл. Эффективное время выполнения команды составляет один цикл.
Если команда изменяет счетчик команд (например, команда GOTO), то для ее выполнения потребуется два цикла, как показано на рис. 5.3.
Цикл выборки начинается с увеличения счетчика команд в такте Q1. В цикле выполнения команды выбранная команда защелкивается в регистр команд в такте Q1. В течение тактов Q2, Q3 и Q4 происходит декодирование и выполнение команды. В такте Q2 считывается память данных (чтение операнда), а запись происходит в такте Q4.
5.2.4. Организация памяти программ и стека
Счетчик команд в МК PIC16F8X имеет ширину 13 бит и способен адресовать 8Кх14бит объема программной памяти. Однако физически на кристаллах PIC16F83 и PIC16CR83 имеется только 512х14 памяти (адреса 000011-01FFh), а в МК PIC16F84 и PIC16CR84 — 1Кх14 памяти (адреса 0000h-03FFh). Обращение к адресам выше 1FF11 (3FFh) фактически есть адресация в те же первые 512 адресов (первые 1К адресов).
Организация памяти программ и стека приведена на рис. 5.4. В памяти программ есть выделенные адреса. Вектор сброса находится по адресу 0000h, вектор прерывания — по адресу 0004h. Обычно по адресу 0004h располагается подпрограмма идентификации и обработки прерываний, а по адресу 0000h — команда перехода на метку, расположенную за подпрограммой обработки прерываний.
5.2.5. Организация памяти данных
Память данных МК разбита на две области. Первые 12 адресов — это область регистров специальных функций (SFR), а вторая — область регистров общего назначения (GPR). Область SFR управляет работой прибора.
Обе области разбиты в свою очередь на банки 0 и 1. Банк 0 выбирается обнулением бита RPO регистра статуса (STATUS). Установка бита RPO в единицу выбирает банк 1. Каждый банк имеет протяженность 128 байт. Однако для PIC16F83 и PIC16CR83 память данных существует только до адреса 02Fh, а для PIC16F84 и PIC16CR84 — до адреса 04Fh.
Некоторые регистры специального назначения продублированы в обоих банках, а некоторые расположены в банке 1 отдельно.
Регистры с адресами OCh-4Fh могут использоваться как регистры общего назначения, которые представляют собой статическое ОЗУ. Адреса регистров общего назначения банка отображаются на банк 0. Следовательно, когда установлен банк 1, то обращение к адресам 8С11-CFh фактически адресует банк 0.
В регистре статуса помимо бита RPO есть еще бит RB1, что позволяет обращаться к четырем страницам (банкам) будущих модификаций этого кристалла.
К ячейкам ОЗУ можно адресоваться прямо, используя абсолютный адрес каждого регистра, или косвенно, через регистр указатель FSR. Косвенная адресация использует текущее значение разрядов RP1:RPO для доступа к банкам. Это относится и к EEPROM памяти данных. В обоих случаях можно адресовать до 512 регистров.
5.2.6. Регистры специального назначения
Регистр статуса (STATUS) содержит признаки операции (арифметические флаги) АЛУ, состояние контроллера при сбросе и биты выбора страниц для памяти данных. Назначение бит регистра приведено в табл. 5.3.
Здесь и далее: R — читаемый бит; W — записываемый бит; S — устанавливаемый бит; U — неиспользуемый бит (читается как «0»); -n = 0 или 1— значение бита после сброса.
Регистр статуса доступен для любой команды так же, как любой другой регистр. Однако если регистр STATUS является регистром назначения для команды, влияющей на биты Z, DC или С, то запись в эти три бита запрещается. Кроме того, биты /ТО и /PD устанавливаются аппаратно и не могут быть записаны в статус программно. Это следует иметь в виду при выполнении команды с использованием регистра статуса. Например, команда CLRF STATUS обнулит все биты, кроме битов /ТО и /PD, а затем установит бит Z=1. После выполнения этой команды регистр статуса может и не иметь нулевого значения (из-за битов /ТО и /PD) STATUS=000uuluu, где u — неизменяемое состояние. Поэтому рекомендуется для изменения регистра статуса использовать только команды битовой установки ВСЕ, BSF, MOVWF, которые не изменяют остальные биты статуса. Воздействие всех команд на биты статуса рассматривается в разделе «Описание системы команд».
Регистр конфигурации (OPTION) является доступным по чтению и записи регистром, который содержит управляющие биты для конфигурации предварительного делителя (определителя), внешних прерываний, таймера, а также резисторов «pull-up» на выводах PORTB. Назначение бит регистра приведено в табл. 5.4.
В том случае, когда определитель обслуживает сторожевой таймер WDT, таймеру TMRO назначается коэффициент предварительного деления 1:1.
Регистр условий прерывания (INTCON) является доступным по чтению и записи регистром, который содержит биты доступа для всех источников прерываний. Назначение бит регистра приведено в табл. 5.5.
Бит разрешения всех прерываний GIE сбрасывается автоматически при следующих обстоятельствах:
• по включению питания;
• по внешнему сигналу /MCLR при нормальной работе;
• по внешнему сигналу /MCLR в режиме Я.ЕЕР;
• по окончанию задержки таймера WDT при нормальной работе;
• по окончанию задержки таймера WDT в режиме SLEEP. Прерывание INT может вывести процессор из режима SLEEP, если перед входом в этот режим бит INTE был установлен в единицу. Состояние бита GIE также определяет: будет ли процессор переходить на подпрограмму прерывания после выхода из режима SLEEP.
Сброс битов — запросов прерываний — должен осуществляться соответствующей программой обработки.
Счетчик команд РС1 и PCLATH имеет разрядность 13 бит. Младший байт счетчика (PCL) доступен для чтения и записи и находится в регистре 0211. Старший байт счетчика команд не может быть напрямую записан или считан и берется из регистра PCLATH (PC latch high), адрес которого OAh. Содержимое PCLATH передается в старший байт счетчика команд, когда он загружается новым значением.
В зависимости от того, загружается ли в счетчик команд новое значение во время выполнения команд CALL, СОТО, или в младший байт счетчика команд (PCL) производится запись, — старшие биты счетчика команд загружаются из PCLATH разными способами, как показано на рис. 5.6.
Команды CALL и СОТО оперируют 11-разрядным адресным диапазоном, достаточным для смещения в пределах страницы программной памяти объемом 2К слов. Для МК подгруппы PIC16FSX этого хватает. С целью обеспечения возможности расширения памяти команд для будущих моделей МК предусмотрена загрузка двух старших бит счетчика команд из регистра PCLATH<4:3>. При использовании команд CALL и СОТО пользователь должен убедиться в том, что эти страничные биты запрограммированы для выхода на нужную страницу. При выполнении команды CALL или выполнении прерывания весь 13-битный счетчик команд помещается в стек, поэтому для возвращения из подпрограммы не нужны манипуляции с разрядами PCLATH<4:3>.
Микроконтроллеры подгруппы PIC16F8X игнорируют значения бит PCLATH<4:3>, которые используются для обращения к страницам 1, 2 и 3 программной памяти. Однако применять биты PCLATH<4:3> в качестве ячеек памяти общего назначения не рекомендуется, так как это может повлиять на совместимость с будущими поколениями изделий.
Возможность выполнять арифметические операции непосредственно над счетчиком команд позволяет очень быстро и эффективно осуществлять табличные преобразования в PIC-контроллерах.
Микроконтроллеры подгруппы PIC16FSX имеют восьмиуровневый аппаратный стек шириной 13 бит (см. рис. 5.4). Область стека не принадлежит ни к программной области, ни к области данных, а указатель стека пользователю недоступен. Текущее значение счетчика команд посылается в стек, когда выполняется команда CALL или производится обработка прерывания. При выполнении процедуры возврата из подпрограммы (команды RETLW, RETFIE или RETURN) содержимое счетчика команд восстанавливается из стека. Регистр PCLATH при операциях со стеком не изменяется.
Стек работает как циклический буфер. Следовательно, после того как стек был загружен 8 раз, девятая загрузка перепишет значение первой. Десятая загрузка перепишет вторую и т.д. Если стек был выгружен 9 раз, счетчик команд становится таким же, как после первой выгрузки.
Признаков положения стека в контроллере не предусмотрено, поэтому пользователь должен самостоятельно следить за уровнем вложения подпрограмм.
5.2.8. Прямая и косвенная адресации
Когда производится прямая 9-битная адресация, младшие 7 бит берутся как прямой адрес из кода операции, а два бита указателя страниц (RP1, RPO) из регистра статуса, как показано на рис. 5.7.
Признаком косвенной адресации является обращение к регистру INDF. Любая команда, которая использует INDF (адрес 0011) в качестве регистра фактически обращается к указателю, который хранится в FSR (адрес 0411). Чтение косвенным образом самого регистра INDF даст результат 00h. Запись в регистр INDF косвенным образом будет выглядеть как NOP, но биты статуса могут быть изменены. Необходимый 9-битный адрес формируется объединением содержимого 8-битного FSR регистра и бита IRP из регистра статуса (см. рис. 5.7).
Обратите внимание, что некоторые регистры специальных функций располагаются в банке 1. Чтобы адресоваться к ним, нужно дополнительно установить в единицу бит RPO в регистре статуса.
Контроллеры подгруппы PIC16F8X имеют два порта: PORTA (5 бит) и PORTB (8 бит) с побитовой индивидуальной настройкой на ввод или на вывод.
Порт А (PORTA) представляет собой 5-битовый фиксатор, соответствующий выводам контроллера RA(4:0). Линия RA4 имеет вход триггера Шмитта и выход с открытым стоком. Все остальные линии порта имеют ТТЛ входные уровни и КЛОП выходные буферы. Адрес регистра порта А — 05h.
Каждой линии порта поставлен в соответствие бит направления передачи данных, который хранится в управляющем регистре TRISA, расположенном по адресу 85h. Если бит управляющего TRISA регистра имеет значение 1, то соответствующая линия будет устанавливаться на ввод. Ноль переключает линию на вывод и одновременно выводит на нее содержимое соответствующего регистра-фиксатора порта. При включении питания все линии порта по умолчанию настроены на ввод.
На рис. 5.8 дана схема линий RA<3:0> порта А.
Операция чтения порта А считывает состояние выводов порта, в то время как запись в него изменяет состояние триггеров порта. Все операции с портом являются операциями типа «чтение-модификация-запись». Поэтому запись в порт предполагает, что состояние выводов порта вначале считывается, затем модифицируется и записывается в триггер-фиксатор.
Вывод RA4 мультиплексирован с тактовым входом таймера TM RO. Схема линии RA4 порта А приведена на рис. 5.9.
Порт В (PORTB) — это двунаправленный 8-битовый порт, соответствующий выводам RB<7:0> контроллера и расположенный по адресу 06h. Относящийся к порту В управляющий регистр TRISB расположен на первой странице регистров по адресу 86h. Если бит управляющего TRISB регистра имеет значение 1, то соответствующая линия будет устанавливаться на ввод. Ноль переключает линию на вывод и одновременно выводит на нее содержимое соответствующего регистра защелки. При включении питания все линии порта по умолчанию настроены на ввод.
У каждой ножки порта В имеется небольшая активная нагрузка (около 100мкА) на линию питания (pull-up). Она автоматически отключается, если эта ножка запрограммирована как вывод. Более того, управляющий бит / RBPU регистра OPTION<7> может отключить (при RBPU= 1) все нагрузки. Сброс при включении питания также отключает все нагрузки.
Четыре линии порта В (RB<7:4>) могут вызвать прерывание при изменении значения сигнала на любой из них. Если эти линии настроены на ввод, то они опрашиваются и защелкиваются в цикле чтения Q1. Новая величина входного сигнала сравнивается со старой в каждом командном цикле. При несовпадении значения сигнала на ножке и в фиксаторе генерируется высокий уровень. Выходы детекторов «несовпадений» RB4, RB5, RB6, RB7 объединяются по ИЛИ и генерируют прерывание RBIF (запоминаемое в регистре INTCON<0>). Любая линия, настроенная как вывод, в этом сравнении не участвует. Прерывание может вывести кристалл из режима SLEEP. В подпрограмме обработки прерывания следует сбросить запрос прерывания одним из следующих способов:
• прочитать (или записать в) порт В. Это завершит состояние сравнения;
• обнулить бит RBI F регистра INTCON<0>.
При этом необходимо иметь в виду, что условие «несовпадения» будет продолжать устанавливать признак RBIF. Только чтение порта В может устранить «несовпадение» и позволит обнулить бит RBIF.
Прерывание по несовпадению и программно устанавливаемые внутренние активные нагрузки на этих четырех линиях могут обеспечить простой интерфейс, например, с клавиатурой, с выходом из режима SLEEP по нажатию клавиш.
Схемы линий порта В приведены на рис. 5.10 и 5.11.
При организации двунаправленных портов необходимо учитывать особенности организации ввода/вывода данных МК. Любая команда, которая осуществляет запись, выполняет ее внутри как «чтение-модификация-запись». Например, команды BCF и BSF считывают порт целиком, модифицируют один бит и выводят результат обратно. Здесь необходима осторожность. В частности, команда BSF PORTB, 5 (установить в единицу бит 5 порта В) сначала считывает все реальные значения сигналов, присутствующие в данный момент на выводах порта. Затем выполняются действия над битом 5, и новое значение байта целиком записывается в выходные фиксаторы. Если другой бит регистра PORTB используется в качестве двунаправленного ввода/вывода (скажем, бит 0), и в данный момент он определен как входной, то входной сигнал на этом выводе будет считан и записан обратно в выходной триггер-фиксатор этого же вывода, стирая предыдущее состояние. До тех пор, пока эта ножка остается в режиме ввода, никаких проблем не возникает. Однако если позднее линия 0 переключится в режим вывода, ее состояние будет неопределенным.
На ножку, работающую в режиме вывода, не должны нагружаться внешние источники токов («монтажное И», «монтажное ИЛИ»). Большие результирующие токи могут повредить кристалл.
Необходимо выдерживать определенную последовательность обращения к портам ввода/вывода. Запись в порт вывода происходит в конце командного цикла. Но при чтении данные должны быть стабильны в начале командного цикла. Будьте внимательны в операциях чтения, следующих сразу за записью в тот же порт. Здесь надо учитывать инерционность установления напряжения на выводах. Может потребоваться программная задержка, чтобы напряжение на ножке (которое зависит от нагрузки) успело стабилизироваться до начала исполнения следующей команды чтения.
5.2.10. Модуль таймера и регистр таймера
Структура модуля таймера/счетчика TIMER0 и его взаимосвязь с регистрами TMR0 и OPTION показаны на рис. 5.12. TIMER0 является программируемым модулем и содержит следующие компоненты:
• 8-разрядный таймер/счетчик TMR0 с возможностью чтения и записи как регистр;
• 8-разрядный программно управляемый предварительный делитель (пределитель);
• мультиплексор входного сигнала для выбора внутреннего или внешнего тактового сигнала;
• схему выбора фронта внешнего тактового сигнала;
• формирователь запроса прерывания по переполнению регистра TMR0 c FFh до 0011.
Режим таймера выбирается путем сбрасывания в ноль бита Т0СS регистра OPTION <5>. В режиме таймера TMR0 инкрементируется каждый командный цикл (без пределителя). После записи информации в TMR0 инкрементирование его начнется после двух командных циклов. Это происходит со всеми командами, которые производят запись или чтение-модификацию-запись TMR0 (например, MOVF TMR0, CLRF TMR0). Избежать этого можно при помощи записи в TMR0 скорректированного значения. Если TMR0 нужно проверить на равенство нулю без останова счета, следует использовать инструкцию MOVF TMR0,W.
Режим счетчика выбирается путем установки в единицу бита Т0СS регистра OPTION<5>. В этом режиме регистр TMR0 будет инкрементироваться либо нарастающим, либо спадающим фронтом на выводе RA4/ TOCKI от внешних событий. Направление фронта определяется управляющим битом Т0SЕ в регистре OPTION<4>. При T0SE = 0 будет выбран нарастающий фронт.
Пределитель может использоваться или совместно с TMR0, или со сторожевым (Watchdog) таймером. Вариант подключения делителя контролируется битом PSA регистра OPTION<3>. При РSА=0 делитель будет подсоединен к TMR0. Содержимое делителя программе недоступно. Коэффициент деления пределителя программируется битами PS2...PSO регистра OPTION<2:0>.
Прерывание по TMR0 вырабатывается тогда, когда происходит переполнение регистра таймера/счетчика при переходе от FFh к 00h. Тогда устанавливается бит запроса T0IF в регистре INTCON<2>. Данное прерывание можно замаскировать битом T0IE в регистре INTCON<5>. Бит запроса T0IF должен быть сброшен программно при обработке прерывания. Прерывание по TMR0 не может вывести процессор из режима SLEEP потому, что таймер в этом режиме не функционирует.
При PSA=1 делитель будет подсоединен к сторожевому таймеру как постделитель (делитель на выходе). Возможные варианты использования пределителя показаны на рис. 5.13.
При использовании пределителя совместно с TMR0, все команды, изменяющие содержимое TMR0, обнуляют пределитель. Если пределитель используется совместно с WDT, команда CLRWDT обнуляет содержимое пределителя вместе с WDT.
При использовании модуля TIMER0 в режиме счетчика внешних событий необходимо учитывать то, что внешний тактовый сигнал синхронизируется внутренней частотой Fosc. Это приводит к появлению задержки во времени фактического инкрементирования содержимого TMR0.
Синхронизация происходит по окончании 2-го и 4-го тактов работы МК, поэтому, если пределитель не используется, то для фиксации входного события необходимо, чтобы длительности высокого и низкого состояний сигнала на входе RA4/T0CKI были бы не менее 2 периодов тактовой частоты Tosc плюс некоторая задержка ( — 20 нс).
Если модуль TIMER0 используется совместно с пределителем, то частота входного сигнала делится асинхронным счетчиком так, что сигнал на выходе пределителя становится симметричным. При этом необходимо, чтобы длительности высокого и низкого уровней сигнала на входе RA4/ T0CKI были бы не менее 10 нс. Синхронизация сигнала происходит на выходе пределителя, поэтому существует небольшая задержка между фронтом внешнего сигнала и временем фактического инкремента таймера/счетчика. Эта задержка находится в диапазон от 3 до 7 периодов колебаний тактового генератора. Таким образом, измерение интервала между событиями будет выполнено с точностью +4 Tosc.
5.2.11. Память данных в РПЗУ (EEPROM)
Микроконтроллеры подгруппы PIC6F8X имеют энергонезависимую память данных 64х8 EEPROM бит, которая допускает запись и чтение во время нормальной работы (во всем диапазоне питающих напряжений). Эта память не принадлежит области регистровой памяти ОЗУ. Доступ к ней осуществляется посредством косвенной адресации через регистры специальных функций: EEDATA <08h>, который содержит 8-битовые данные для чтения/записи и EEADR <09h>, включающий адрес ячейки, к которой идет обращение. Для управления процессом чтения/записи используются два регистра: EECON1 <88h> и EECON2 <89h>.
При записи байта автоматически стирается предыдущее значение, и записываются новые данные (стирание перед записью). Все эти операции производит встроенный автомат записи EEPROM. Содержимое ячеек этой памяти при выключении питания сохраняется.
Регистр EEADR может адресовать до 256 байт данных EEPROM. В МК подгруппы PIC6F8X используются только первые 64 байта, адресуемые шестью младшими битами EEADR(5:0). Однако старшие два бита также декодируются. Поэтому эти два бита должны быть установлены в '0', чтобы адрес попал в доступные 64 бита адресного пространства.
Назначение бит регистра EECON 1 приведено в табл. 5.6.
Регистр EECON2 не является физическим регистром. Он используется исключительно при организации записи данных в EEPROM. Чтение регистра EECON2 дает нули.
При считывании данных из памяти EEPROM необходимо записать нужный адрес в EEADR регистр и затем установить бит RD EECON I <0> в единицу. Данные появятся в следующем командном цикле в регистре EEDATA и могут быть прочитаны. Данные в регистре EEDATA фиксируются.
При записи в память EEPROM необходимо сначала записать адрес в EEADR регистр и данные в EEDATA-регистр. Затем следует выполнить специальную последовательность команд, производящую непосредственную запись:
movlw 55h
movwf EECON2
movlw AAh
movwf EECON2
bsf EECON1,WR;установить WR бит, начать запись
Во время выполнения этого участка программы все прерывания должны быть запрещены, для точного выполнения временной диаграммы. Время записи — примерно 10 мс. Фактическое время записи может изменяться в зависимости от напряжения, температуры и индивидуальных свойств кристалла. В конце записи бит WR автоматически обнуляется, а флаг завершения записи EEIF, он же запрос на прерывание, устанавливается.
Для предотвращения случайных записей в память данных предусмотрен специальный бит WREN в регистре EECON1. Рекомендуется держать бит WREN выключенным, кроме тех случаев, когда нужно обновить память данных. Более того, кодовые сегменты, которые устанавливают бит WREN, и те, которые выполняют запись, следует хранить на различных адресах, чтобы избежать случайного выполнения их обоих при сбое программы.
5.2.12. Организация прерываний
МК подгруппы PIC16F8X имеют четыре источника прерываний:
• внешнее прерывание с вывода RB0/INT;
• прерывание от переполнения счетчика/таймера TMR0;
• прерывание от изменения сигналов на линиях порта RB<7:4>;
• прерывание по окончании записи данных в EEPROM.
Все прерывания имеют один и тот же вектор/адрес — 0004h. Однако в управляющем регистре прерываний INTCON соответствующим битом признаком записывается, от какого именно источника поступил запрос прерывания. Исключение составляет прерывание по завершении записи в EEPROM, признак которого находится в регистре EECON1.
Бит общего разрешения/запрещения прерывания GIE (INTCON <7>) разрешает (если = 1) все индивидуально незамаскированные прерывания или запрещает их (если = 0). Каждое прерывание в отдельности может быть дополнительно разрешено/запрещено установкой/сбросом соответствующего бита в регистре INTCON.
Бит GIE при сбросе обнуляется. Когда начинает обрабатываться прерывание, бит GIE обнуляется, чтобы запретить дальнейшие прерывания, адрес возврата посылается в стек, а в программный счетчик загружается адрес 000411. Время реакции на прерывание для внешних событий, таких как прерывание от ножки INT или порта В, составляет приблизительно пять циклов. Это на один цикл меньше, чем для внутренних событий, таких как прерывание по переполнению от таймера TM0O. Время реакции всегда одинаковое.
В подпрограмме обработки прерывания источник прерывания может быть определен по соответствующему биту в регистре признаков. Этот флаг-признак должен быть программно сброшен внутри подпрограммы. Признаки запросов прерываний не зависят от соответствующих маскирующих битов и бита общего маскирования GIE.
Команда возврата из прерывания RETFIЕ завершает прерывающую подпрограмму и устанавливает бит GIE, чтобы опять разрешить прерывания.
Логика прерываний контроллера изображена на рис. 5.14.
Внешнее прерывание на ножке RB0/INT осуществляется по фронту: либо по нарастающему (если в регистре OPTION бит INTEDG=1), либо по спадающему (если INTEDG=0). Когда фронт обнаруживается на ножке INT, бит запроса INTF устанавливается в единицу (INTCON <1>). Это прерывание может быть замаскировано сбросом управляющего бита INTE в ноль (INTCON <4>). Бит запроса INTF необходимо очистить прерывающей программой перед тем, как опять разрешить это прерывание. Прерывание INT может вывести процессор из режима SLEEP, если перед входом в этот режим бит INTE был установлен в единицу. Состояние бита GIE также определяет, будет ли процессор переходить на подпрограмму прерывания после выхода из режима SLEEP.
Переполнение счетчика TMRO (FFh->00h) устанавливает в единицу бит запроса TOIF (INTCON<2>). Это прерывание может быть разрешено/запрещено установкой/сбросом бита маски TOIE (INTCON<5>). Сброс запроса T0I F — дело программы обработки.
Любое изменение сигнала на одном из четырех входов порта RB<7:4> устанавливает в единицу бит RBIF (INTCON<0>). Это прерывание может быть разрешено/запрещено установкой/сбросом бита маски RBIE (INTCON<3>). Сброс запроса RBIF — дело программы обработки.
Признак запроса прерывания по завершении записи в EEPROM, EEIF (EECON1<4>) устанавливается в единицу по окончании автоматической записи данных в EEPROM. Это прерывание может быть замаскировано сбросом бита EEIE (INTCON<6>). Сброс запроса EEIF — дело программы обработки.
Лекция 10. Специальные функции и система команд микроконтроллеров серии PIC
В этой лекции рассказывается о специальных функциях, предназначенных для расширения возможностей системы на основе PIC-микро контроллеров и повышения ее надежности, а также рассматриваются особенности системы команд микроконтроллеров подгруппы PIC16F8X.
Ключевые слова: сброс, сторожевой таймер, режимы ожидания и останова, генератор, конфигурация, система команд.
Микроконтроллеры подгруппы PIC16F8X имеют набор специальных функций, предназначенных для расширения возможностей системы, минимизации стоимости, исключения навесных компонентов, обеспечения минимального энергопотребления и защиты кода от считывания. В PIC16F8X реализованы следующие специальные функции:
• сброс;
• сторожевой таймер (WDT);
• режим пониженного энергопотребления (SLEEP);
• выбор типа генератора;
• защита кода от считывания;
• биты идентификации;
• последовательное программирование в составе схемы.
В PIC16F8X существуют различия между вариантами сбросов:
• сброс по включению питания;
• сброс по внешнему сигналу /MCLR при нормальной работе;
• сброс по внешнему сигналу /MCLR в режиме SLEEP;
• сброс по окончании задержки таймера WDT при нормальной работе;
• сброс по окончании задержки таймера WDT в режиме SLEEP.
Для реализации сброса по включению питания в МК подгруппы PIC16F8X предусмотрен встроенный детектор включения питания. Таймер установления питания (PWRT) начинает отсчет времени после того, как напряжение питания пересекает уровень около 1,2...1,8 Вольт. По истечении выдержки около 72мс считается, что напряжение достигло номинала и запускается другой таймер — таймер запуска генератора (OST),
формирующий выдержку на стабилизацию кварцевого генератора. Программируемый бит конфигурации позволяет разрешать или запрещать выдержку от встроенного таймера установления питания. Выдержка запуска меняется в зависимости от экземпляров кристалла, от питания и температуры. Таймер на стабилизацию генератора отсчитывает 1024 импульса от начавшего работу генератора. Считается, что кварцевый генератор за это время выходит на режим. При использовании RC генераторов выдержка на стабилизацию не производится.
Если сигнал /MCLR удерживается в низком состоянии достаточно долго (дольше времени всех задержек), тогда после перехода /MCLR в высокое состояние программа начнет выполняться немедленно. Это необходимо в тех случаях, когда требуется синхронно запустить в работу несколько PIC-контроллеров через общий для всех сигнал /MCLR.
Микроконтроллеры подгруппы PIC16F8X имеют встроенный сторожевой таймер WDT. Для большей надежности он работает от собственного внутреннего RC-генератора и продолжает функционировать, даже если основной генератор остановлен, как это бывает при исполнении команды SLEEP. Таймер вырабатывает сигнал сброса. Выработка таких сбросов может быть запрещена путем записи нуля в специальный бит конфигурации WDTE. Эту операцию производят на этапе прожига микросхем.
Номинальная выдержка WDT составляет 18 мс (без использования делителя). Она зависит от температуры, напряжения питания, особенностей типов микросхем. Если требуются большие задержки, то к WDT может быть подключен встроенный пределитель с коэффициентом деления до 1:128, который программируется битами PS2:PSO в регистре OPTION. В результате могут быть реализованы выдержки до 2,3 секунд.
Команды «CLRWDT» и «SLEEP» обнуляют WDT и пределитель, если он подключен к WDT. Это запускает выдержку времени сначала и предотвращает на некоторое время выработку сигнала сброса. Если сигнал сброса от WDT все же произошел, то одновременно обнуляется бит /ТО в регистре статуса. В приложениях с высоким уровнем помех содержимое регистра OPTION подвержено сбою. Поэтому регистр OPTION должен обновляться через равные промежутки времени.
Состояние регистров МК после сброса представлено в табл. 5.7. Некоторые из специальных регистров при сбросе не инициализируются. Они имеют случайное состояние при включении питания и не изменяются при иных видах сброса. Друга я часть специальных регистров инициализируется в «состояние сброса» при всех видах сброса, кроме сброса по окончанию задержки таймера УУОТ в режиме SLEEP Просто этот сброс рассматривается как временная задержка в нормальной работе. Есть еще несколько исключений. Счетчик команд всегда сбрасывается в ноль (000011). Биты регистра статуса /ТО и /PD устанавливаются или сбрасываются в зависимости от варианта сброса. Эти биты используются программой для определения природы сброса (см. табл. 5.3).
Режим пониженного энергопотребления SLEEP предназначен для обеспечения очень малого тока потребления в ожидании (менее 1 мкА при
выключенном сторожевом таймере). Выход из режима SLEEP возможен по внешнему сигналу сброса или по окончании выдержки сторожевого таймера.
Кристаллы PIC16F8X могут работать с четырьмя типами встроенных генераторов. Пользователь может запрограммировать два конфигурационных бита (FOSC1 и FOSCO) для выбора одного из четырех режимов: RC, LP, ХТ, HS. Здесь ХТ — стандартный кварцевый генератор, HS— высокочастотный кварцевый генератор, LP — низкочастотный генератор для экономичных приложений. Микроконтроллеры PIC16F8X могут тактироваться и от внешних источников.
Генератор, построенный на кварцевых или керамических резонаторах, требует периода стабилизации после включения питания. Для этого встроенный таймер запуска генератора держит устройство в состоянии сброса примерно 18 мс после того, как сигнал на /MCLR ножке кристалла достигнет уровня логической единицы.
Возможность выбора типа генератора позволяет эффективно использовать микроконтроллеры семейства в различных приложениях. Применение RC генератора позволяет уменьшить стоимость системы, а низкочастотный 1.P-генератор сокращает энергопотребление.
Программный код, который записан в кристалл, может быть защищен от считывания при помощи установки бита защиты (CP) в слове конфигурации в ноль. Содержимое программы не может быть прочитано так, чтобы с ним можно было работать. Кроме того, при установленном бите защиты невозможно изменять программу. То же относится и к содержимому памяти данных EEPROM.
Если установлена защита, то бит CP можно стереть только вместе с содержимым кристалла. Сначала будет стерта EEPROM программная память и память данных, и в последнюю очередь — бит защиты кода СР. При считывании защищенного кристалла чтение любого адреса памяти даст результат вида 0000000ХХХХХХХ(двоичный код), где Х — это 0 или 1.
Память данных EEPROM невозможно проверить после установки бита защиты.
Для выбора различных режимов работы используются биты конфигурации. Микроконтроллеры подгруппы PIC16F8X имеют 5 или 6 бит конфигурации, которые хранятся в EEPROM и устанавливаются на этапе программирования кристалла. Эти биты могут быть запрограммированы (читается как «0») или оставлены незапрограммированными (читается «1«) для выбора подходящего варианта конфигурации устройства. Они расположены в EEPROM-памяти по адресу 2007h. Пользователю следует помнить, что этот адрес находится ниже области кодов и недоступен программе.
Назначение бит конфигурации МК PIC16CR83 и PIC16CR84 приведено в табл. 5.8.
Назначение бит конфигурации МК PIC16F83 и PIC16F84 приведено в табл. 5.9.
Четыре слова памяти, расположенные по адресам 2000h-2003h, предназначены для хранения идентификационного кода (ID) пользователя, контрольной суммы или другой информации. Как и слово конфигурации, они могут быть прочитаны или записаны только с помощью программатора. Доступа из программы к ним нет.
Микроконтроллеры подгруппы PIC16F8X могут быть запрограммированы последовательным способом в составе устройства. Для этого используется всего пять линий: две для данных и тактового сигнала и три для земли, напряжения питания и программирующего напряжения. Разработчик может создать и смакетировать устройство с незапрограммированным прибором, а перед использованием ввести в него программу.