Благодаря наличию 8-канального 10-разрядного АЦП микроконтроллер (МК) PIC16F676 нашел широкое применение в измерительной технике, в лабораторных блоках питания, зарядных устройствах и т.п. Внутренняя структура и назначение выводов PIC16F676 совпадают с PIC16F630. Хотя PIC16F630 дороже PIC16F676 примерно на 20%, он имеет более ограниченные возможности. Программировать эти МК можно даже с помощью очень распространенного программатора PonyProg2000, если его доработать (см. [1]). Русскоязычной литературы по МК PIC16F676 и PIC16F630 практически нет. Надеемся, что настоящая статья в какой-то мере восполнит этот пробел.
Описание микроконтроллеров PIC16F676 и PIC16F630
Микроконтроллеры PIC16F676 и PIC16F630 являются представителями так называемого "среднего семейства" микроконтроллеров (Mid-Range MCU Family) фирмы Microchip Technology Inc.
Ядром МК этого семейства является высокопроизводительный RISC-процессор, ассемблер для которого содержит всего 35 инструкций (команд), что заметно упрощает его освоение. Именно поэтому многие специалисты рекомендуют начинать изучение программирования микроконтроллеров с МК этого семейства.
Все команды состоят из одного бинарного 14-тиразрядного слова и исполняются за один машинный цикл, кроме инструкций перехода, которые выполняются за два машинных цикла. Минимальная длительность машинного цикла равна 200 нс. Каждый машинный цикл выполняется за четыре периода тактового генератора МК, т.е. за четыре такта. Тактовая частота как собственного генератора МК PIC16F676/630, так и внешнего тактового сигнала может быть в пределах от нескольких Гц до 20 МГц.
Программно можно осуществлять выбор одного из шести источников тактового сигнала:
- RC - внешний RC генератор (два режима);
- INTOSC - внутренний генератор 4 МГц (два режима);
- EC - внешний тактовый сигнал;
- XT - стандартный резонатор;
- HS - высокочастотный резонатор;
- LP - низкочастотный резонатор. Диапазон напряжения питания МК PIC16F630 и PIC16F676 составляет 2,0...5,5 В. Микроконтроллеры имеют низкое энергопотребление:
- менее 1,0 мА при напряжении питания 5,5 В и тактовой частоте 4 МГц;
- 400 мкА (типовое) при напряжении питания 2,0 В и тактовой частоте 4 МГц;
- 100 мкА (типовое) при напряжении питания 2,0 В и тактовой частоте 1 МГц;
- 8,5 мкА (типовое) при напряжении питания 2,0 В и тактовой частоте 32 кГц;
- менее 1,0 мкА в режиме энергосбережения (SLEEP);
- типовое значение тока в дежурном (Standby) режиме при напряжении питания 2 В равно 1 нА.
Эти МК содержат два 6-разрядных порта: A (выводы RA0... RA5) и С (выводы RC0... RC5). Большинство выводов портов микроконтроллеров являются многофункциональными. Конкретное назначение каждого из них задается программно.
При работе выводов порта А на вход для каждого вывода программно (с отдельным битом включения) могут быть подключены внутренние подтягивающие резисторы.
МК PIC16F630/676 содержат Flash-память программ объемом 1024 х 14 бинарных слов и память данных EEPROM объемом 64 байта. Flash-память допускает перезапись 100 000 раз, а EEPROM - 1 000 000. Записанная в EEPROM и FLASH-память информация сохраняется более сорока лет.
Эти контроллеры поддерживают прерывание по изменению уровня сигнала, срабатывающее от четырех источников. Для работы с прерываниями и подпрограммами PIC16F630/676 имеют 8-уровневый аппаратный стек. Все это обеспечивает прямой,косвенный и относительный режимы адресации команд и данных.
Периферия PIC16F630/676 включает в себя 8-битный таймер-счетчик (Timer0), 16-битный таймер-счетчик (Timer1), 12 сильноточных портов ввода-вывода, настраиваемых индивидуально, один аналоговый компаратор с интегрированным программируемым источником опорного напряжения и программно мультиплицируемыми входами и выходом.
Кроме того, МК PIC16F676 содержит 10-битный модуль АЦП с 8-ю программируемыми каналами. Сразу заметим, что главное отличие PIC16F676 от PIC16F630 - это возможность программирования 8-ми из 12-ти выводов портов как входов АЦП (AN0...AN7). Кроме того, PIC16F630 не содержит модуль АЦП.
Можно отметить следующие особенности МК PIC16F630/676:
- сброс при включении питания (POR);
- сброс по снижению напряжения питания (BOR);
- наличие таймера включения питания (PWRT), таймера запуска генератора (OST) и сторожевого таймера (WDT) с собственным встроенным RC-генератором (для повышения надежности работы МК);
- режим энергосбережения (SLEEP) с быстрым выходом из этого режима при работе с внутренним генератором 4 МГц.
PIC16F630 и PIC16F676 имеют мультиплицируемый вывод MCLR и программируемую защиту кода. Они могут программироваться прямо на плате изделия через последовательный интерфейс ICSPT с использованием всего двух выводов МК. Отладка этих МК также может производиться прямо на плате через последовательный двухпроводной интерфейс ICD.
Микроконтроллеры PIC16F676 и PIC16F630 изготавливаются в 14-выводных корпусах PDIP, SOIC и TSSOP. Расположение выводов этих МК приведено на рис. 1, а назначение - в таблице 1.
Рис. 1. Расположение выводов МК PIC16F630 и PIC16F676 в корпусах PDIP, SOIC и TSSOP
Таблица 1. Назначение выводов МК PIC16F630 и PIC16F676
№ вывода | Обозначение | Функция | Описание |
13 | RA0/AN0/CIN+/ICSPDAT | RA0 | Двунаправленный вход-выход с программируемым подтягивающим резистором и вход прерываний |
AN0 | Вход канала 0 АЦП | ||
CIN + | Неинвертирующий вход компаратора | ||
ICSPDAT | Вход-выход данных ICSP | ||
12 | RA1/AN1/CIN-/VREF/ICSPCLK | RA1 | Двунаправленный вход-выход с программируемым подтягивающим резистором и вход прерываний по изменению уровня сигнала |
AN1 | Вход канала 1 АЦП | ||
CIN- | Инвертирующий вход компаратора | ||
VREF | Вход внешнего опорного напряжения | ||
ICSPCLK | Вход тактовых импульсов ICSP | ||
11 | RA2/AN2/COUT/T0CKI/INT | RA2 | Двунаправленный вход-выход с программируемым подтягивающим резистором и вход прерываний по изменению уровня сигнала |
AN2 | Вход канала 2 АЦП | ||
COUT | Выход компаратора | ||
T0CKI | Вход тактовых импульсов таймера 0 (Timer0) | ||
INT | Вход внешнего прерывания | ||
4 | RA3/-MCLR/VPP | RA3 | Вход 3 порта А и вход прерываний по изменению уровня сигнала |
-MCLR | Вход сигнала внешнего сброса (Master Clear) | ||
VPP | Вход напряжения программирования | ||
3 | RA4/-T1G/AN3/OSC2/CLKOUT | RA4 | Двунаправленный вход-выход с программируемым подтягивающим резистором и вход прерываний по изменению уровня сигнала |
-T1G | Вход таймера 1 | ||
AN3 | Вход канала 3 АЦП | ||
OSC2 | Выход кварцевого генератора | ||
CLKOUT | Выход тактовых импульсов | ||
2 | RA5/T1CKI/OSC1/CLKIN | RA5 | Двунаправленный вход-выход с программируемым подтягивающим резистором и вход прерываний по изменению уровня сигнала |
T1CKI | Вход тактовых импульсов таймера 1 (Timer1) | ||
OSC1 | Вход кварцевого генератора | ||
CLKIN | Вход внешних тактовых импульсов и подключения времязадающей RC-цепи | ||
10 | RC0/AN4 | RC0 | Двунаправленный вход-выход |
AN4 | Вход канала 4 АЦП | ||
9 | RC1/AN5 | RC1 | Двунаправленный вход-выход |
AN5 | Вход канала 5 АЦП | ||
8 | RC2/AN6 | RC2 | Двунаправленный вход-выход |
AN6 | Вход канала 6 АЦП | ||
7 | RC3/AN7 | RC3 | Двунаправленный вход-выход |
AN7 | Вход канала 7 АЦП | ||
6 | RC4 | RC4 | Двунаправленный вход-выход |
5 | RC5 | RC5 | Двунаправленный вход-выход |
14 | VSS | VSS | Общий |
1 | VDD | VDD | Напряжение питания |
Примечание.Обозначения и комментарии в ячейках на сером фоне относятся только к МК PIC16F676.
Оперативная память микроконтроллеров PIC16F630 и PIC16F676
Кроме энергонезависимой Flash-памяти программ и EEPROM памяти данных PIC16F630 и PIC16F676 содержат оперативную память (ОЗУ), которая имеет регистровую однобайтовую структуру. Крайний справа бит байта - это младший бит (бит 0), его весовой коэффициент равен 1, следующего - 2. Весовые коэффициенты каждого последующего бита удваиваются. Крайний слева - бит 7 (старший бит) имеет весовой коэффициент 128. Вся область ОЗУ этих МК разделена на два банка: Банк 0 (Bank 0) и банк 1 (Bank 1), доступ к которым осуществляется раздельно. Регистры ОЗУ делятся на регистры общего назначения (GPR - General Purpose Registers) и регистры специального назначения (SFR - Special Function Registers). Карта оперативной памяти МК PIC16F630 и PIC16F676 сведена в таблицу 2. Автор увидел эту форму представления ОЗУ различных микроконтроллеров фирмы Microchip в [2]. Она очень удобна при присвоении имен регистрам общего назначения (при написании программ), а также при симуляции программ в среде MPLab.
К ячейкам ОЗУ можно адресоваться прямо или косвенно, через регистр-указатель FSR (04h). Это также относится и к EEPROM памяти данных.
Регистры общего назначения (GPR)
Регистры общего назначения, для обозначения которых очень часто используется русская аббревиатура РОН, выбираются программистом при написании программы и используются самими программами для записи-считывания данных при их исполнении. РОН предназначены, прежде всего, для хранения промежуточных результатов выполнения операций, подпрограмм и вычислений. В нулевом банке (Bank 0) программисту доступны 64 РОН с адресами 20h-5Fh, причем все эти ячейки отображаются и в банке 1 (Bank 1) с адресами A0h-DFh. Это значит, что обращаться к РОН можно как из одного, так и из другого банка.
Регистры специального назначения (SFR)
Регистры специального назначения используются для управления ядром МК и его периферией.
МК PIC16F676 имеет 32 регистра специального назначения, а PIC16F630 на пять меньше - 27. Это связано с тем, что PIC16F630 не имеет АЦП. Часть регистров банка 0 отображаются в банке 1.
В таблице 2 их названия выделены жирным шрифтом.
Таблица 2. Карта оперативной памяти микроконтроллеров PIC16F630 и PIC16F676
Банк 0 (Bank 0) | ||||||||||||||||
00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 0A | 0B | 0C | 0D | 0E | 0F | |
0000 | INDF | TMR0 | PCL | STATUS | FSR | PORTA | PORTC | PCLATH | INTCON | PIR1 | TMR1L | TMR1H | ||||
0010 | T1CON | CMCON | ADRESH* | ADCON0* | ||||||||||||
0020 | ||||||||||||||||
0030 | ||||||||||||||||
0040 | ||||||||||||||||
0050 | ||||||||||||||||
Банк 1 (Bank 1) | ||||||||||||||||
0080 | INDF | OPTION | PCL | STATUS | FSR | TRISA | TRISC | PCLATH | INTCON | PIE1 | PCON | |||||
0090 | OSCCAL | ANSEL* | WPUA | IOCA | VRCON | EEDAT | EEADR | EECON1 | EECON2 | ADRESL* | ADCON1* | |||||
00A0 | ||||||||||||||||
00B0 | ||||||||||||||||
00C0 | ||||||||||||||||
00D0 |
Регистры общего назначения (20h5Fh) БАНКА 0 отображаются в БАНКЕ 1 на область A0hDFh
( * ) - только для PIC16F676
- нет физических регистров
- отсутствующие регистры читаются как 0
Подробное описание регистров специального назначения можно найти в англоязычном техническом описании (даташите) МК PIC16F630/676 [3] и русскоязычном справочнике [4]. Мы ограничимся назначением и кратким описанием этих регистров и, в первую очередь, тем, на что в [3 и 4] обращается недостаточно внимания.
Начнем со счетчика команд РС. Он показывает номер выполняемой команды программы (точнее, номер ячейки памяти команд, в которой размещена эта команда). Поскольку объем памяти команд составляет 1024 слова, то счетчик команд РС должен считать до 1024. Поэтому одного 8-битового регистра для его создания недостаточно. Счетчик команд РС имеет ширину 13 бит и способен адресовать восемь 14-битовых килослов, хотя для рассматриваемых МК достаточно в восемь раз меньше. Счетчик команд состоит из двух регистров - PCL и PCLATH.
PCL - младший регистр программного счетчика с адресом 02h, он содержит восемь младших разрядов счетчика.
PCLATH - старший регистр программного счетчика с адресом 0Аh, в нем расположены остальные 5 разрядов счетчика.
Оба регистра расположены в нулевом банке, но отображаются и в банке 1, где имеют адреса 82h и 8Аh соответственно.
Регистр STATUS - регистр состояний, он расположен в банке 0 и отображается в банке 1 (адреса 03h и 83h соответственно). Два старших бита этого регистра не используются и читаются как 0.
Бит 5 обеспечивает переключение банков ОЗУ. Остальные биты - это флаги, состояние которых говорит о том, произошло или нет то или иное событие (см. [3, 4]). Флаги может использовать программист при написании программ.
OPTION_REG - регистр выборок (установок) расположен в первом банке (адрес 81h). Три младших разряда этого регистра обеспечивают установку коэффициента деления предделителя. Бит 3 - выбор места (способа) включения предделителя. Бит 4 выбирает способ приращения таймера 0 при подаче внешнего тактового импульса. Бит 5 - этот бит выбора источника тактового сигнала. Бит 6 обеспечивает выбор активного перепада сигнала на входе INT, а бит 7 определяет включение-выключение подтягивающих резисторов порта А.
INTCON (Interrupt Control Register) - это регистр управления прерываниями. Обращаться к нему можно из обоих банков (адреса 0Bh и 8Bh). Он содержит три флага прерываний и пять бит разрешения разных прерываний.
PIE1 (Peripheral Interrupt Enable Register 1) - регистр разрешения прерываний периферии 1 с адресом 8Ch. Биты 1, 2, 4 и 5 не задействованы и читаются как 0. Остальные биты используются для разрешения прерываний от периферийных узлов: EEPROM, АЦП (только для PIC16F676), компаратора и при переполнении таймера 1.
PIR1 (Peripheral Interrupt Register 1) - регистр прерываний периферии 1 с адресом 0Ch. Биты 1, 2, 4 и 5 не задействованы и читаются как 0. Остальные биты - это флаги прерываний от периферийных узлов: EEPROM, АЦП (только для PIC16F676), компаратора и при переполнении таймера 1.
PCON (Power Control Register) - регистр управления питанием с адресом 8Eh. Шесть старших бит этого регистра не задействованы и читаются как 0. Бит 1 - это флаг сброса при включении питания (POR), а бит 0 - это флаг сброса по снижению напряжения питания (BOD).
OSCCAL (Internal Oscillator Calibration Register) - это регистр калибровки внутреннего генератора. Адрес 90h. При работе с внутренним генератором 4 МГц используется для хранения заводской калибровочной константы, которая переписывается в этот регистр из последней ячейки Flash-памяти программ 03FF, что обеспечивает калибровку частоты внутреннего генератора. У этого регистра используются шесть старших разрядов, два младших читаются как 0. Минимальной частоте соответствует код 000000, максимальной - 111111, а среднему значению - 100000.
INDF (Indirect Addressing File) - регистр косвенной адресации с адресом 00 или 80. Этот регистр отсутствует физически. При обращении к нему считывается адрес, записанный в регистр FSR.
FSR (File Select Register) - регистр выбора косвенно адресуемого регистра с адресом 04 или 84. Этот регистр правильнее было бы назвать регистром хранения адреса косвенной адресации (см. INDF).
PORTA - регистр 6-битового двунаправленного порта А с адресом 05h. Два старших разряда этого порта не используются и читаются как 0. Кроме того, вывод RA3 этого порта может работать только на вход.
TRISA (PortA Tristate Register) - регистр управления конфигурацией порта А с адресом 85h. Два старших бита этого регистра не используются и читаются как 0, а бит 3, который управляет третьим битом регистра PORTA, всегда читается как 1. Остальные биты регистра обеспечивают включение соответствующих выводов порта А как входов или выходов.
WPUA (Weak Pull-Up Register) - регистр включения резисторов подтяжки порта Ас адресом 95h. Два старших бита и третий бит этого регистра не используются и читаются как 0. Остальные биты используются как биты разрешения подключения внутренних подтягивающих резисторов соответствующих выводов порта А.
IOCA (Interrupt-On-Change PortA Register) - регистр разрешения прерываний при изменении уровня сигнала на выводах порта A с адресом 96h.
ANSEL (Analog Select Register) - регистр выбора назначения выводов портов аналог-цифра с адресом 9Fh. Имеется только в МК PIC16F676. Каждый из восьми бит этого регистра обеспечивает подключение к соответствующему выводу портов А и С определенного канала АЦП.
PORTC - регистр шестибитового двунаправленного порта С с адресом 07h. Два старших разряда этого порта не используются и читаются как 0.
TRISC (Porrc Tristate Register) - регистр управления конфигурацией порта С с адресом 87h. Два старших бита регистра не используются и читаются как 0. Остальные биты этого регистра обеспечивают включение соответствующих выводов порта С как входов или выходов.
T1CON (Timer1 Control Register) - регистр управления таймером 1 с адресом 10h.
Регистр TMR1H (Holding Register for the Most Significant Byte of the 16-bit TMR1 Register) - это регистр временного хранения информации старшего байта 16-битового таймера-счетчика TMR1, а регистр TMR1L (Holding Register for the Least Significant Byte of the 16-bit TMR1 Register) - это регистр временного хранения информации младшего байта 16-битового таймера-счетчика TMR1. Адреса этих регистров 0F и 0E соответственно.
CMCON (Comparator Control Register) - регистр управления компаратором (19h).
VRCON (Voltage Reference Control Register) - регистр управления опорным напряжением (99h).
ADCON0 (A/D Control Register) - регистр управления АЦП (1Fh). Имеется только в МК PIC16F676. Используется для настройки АЦП.
ADCON1 (A/D Control Register) - регистр управления АЦП 1 (9Fh). Имеется только в МК PIC16F676. Используется для выбора входов МК в качестве входов АЦП. Имеется только в МК PIC16F676.
Регистры ADRESH (1E) и ADRESL (9E) - это старшие (8 бит) и младшие разряды (2 бит) 10-битного регистра результата АЦП. Имеются только в МК PIC16F676.
EEDAT (EEPROM data register) - регистр данных EEPROM (9Ah).
EEADR (EEPROM address register) - регистр адреса EEPROM (9Bh).
EECON1 (EEPROM control register 1) - регистр управления EEPROM 1 (9Ch).
EECON2 (EEPROM control register 2) - регистр управления EEPROM 2 (9Dh) отсутствует физически. Все биты этого регистра читаются как 0. Он используется для реализации обязательной последовательности команд при записи данных в EEPROM.
В заключение рассмотрим биты конфигурации МК PIC16F630/676.
Эти биты объединены в слово конфигурации шириной 14 бит Под слово конфигурации отведен регистр в памяти программ по адресу 2007h.
Три младших бита слова конфигурации (2, 1, 0)обеспечивают выбор одного из восьми режимов тактового генератора:
• 111 = - RC-генератор с внешней времязадающей RC-цепью на выводе RA5/OSC1/CLKIN и выход тактовых импульсов CLKOUT (FOSC/4) на вывод RA4/OSC2/CLKOUT;
• 110 = - то же, но вывод RA5/OSC1/CLKIN используется как обычный вход-выход RA5;
• 101 = INTOSC - внутренний генератор 4 МГц с выводом тактовых импульсов CLKOUT (FOSC/4) на вывод RA4/OSC2/CLKOUT. RA5/OSC1/ CLKIN используется как обычный вход-выход RA5;
• 100 = - то же, но вывод RA4/OSC2/CLKOUT также используется как обычный вход-выход (RA4);
• 011 = EC - внешний тактовый сигнал CLKIN поступает на вход RA5/OSC1/CLKIN. Вывод RA4/OSC2/CLKOUT используется как обычный вход-выход (RA4);
• 010 = HS - высокочастотный резонатор между выводами RA4/OSC2/CLKOUT и RA5/OSC1/CLKIN;
• 001 = XT - стандартный резонатор между выводами RA4/OSC2/CLKOUT и RA5/OSC1/CLKIN;
• 000 = LP - низкочастотный резонатор между выводами RA4/OSC2/CLKOUT и RA5/OSC1/CLKIN.
Бит 3 - это бит разрешения-запрета работы сторожевого таймера.
Бит 4 - бит разрешения-запрета работы таймера включения питания (PWRT).
Бит 5 - бит выбора работы вывода -MCLR.
Бит 6 - бит разрешения-запрета сброса по снижению напряжения питания.
Бит 7 - бит защиты FLASH-памяти программ.
Бит 8 - бит защиты EEPROM-памяти данных.
Биты 9, 10 и 11 не задействованы и читаются как 0.
Биты 12 и 13 - это биты калибровки запретной зоны для сбросов при включении питания и по снижению напряжения питания. Эти биты запрограммированы производителем МК и при использовании этих сбросов должны быть сохранены.
Литература и интернет-источники
1. Безверхний И. Доработка PonyProg2000 для программирования PIC-контроллеров PIC16F676хх. Ремонт & сервис. 2010, №5, с. 55-59.
2. http://ikarab.narod.ru/- сайт Корабельникова Е. А.
3. DS40039C. Data Sheet. PIC16F630/676. 14-Pin FLASH-Based 8-Bit CMOS Microcontrollers. Microchip Technology Inc. 2003. Режим доступа: http://ww1.microchip.com/down-loads/en/devicedoc/40039e.pdf
4. Справочник по среднему семейству микроконтроллеров PICmicroTM (перевод DS33023А). ООО "Микро-Чип". Москва - 2002. - Режим доступа: http://www.microchip.ru/files/d-sheets-rus/pic16_5.pdf
Автор: Игорь Безверхний (г. Киев)
Источник: Ремонт и сервис