PIC16F84 относится к семейству КМОП микроконтроллеров. Отличается тем, что имеет внутреннее 1K x 14 бит EEPROM для программ, 8-битовые данные и 64байт EEPROM памяти данных. При этом отличаются низкой стоимостью и высокой производительностью. Пользователи, которые знакомы с семейством PIC16F5X могут посмотреть подробный список отличий нового от производимых ранее контроллеров. Все команды состоят из одного слова (14 бит шириной) и исполняются за один цикл (400 нс при 10 МГц), кроме команд перехода, которые выполняются за два цикла (800 нс). PIC16F84 имеет прерывание, срабатывающее от четырех источников, и восьмиуровневый аппаратный стек. Периферия включает в себя 8-битный таймер/счетчик с 8-битным программируемым предварительным делителем
(фактически 16 - битный таймер) и 13 линий двунаправленного ввода/вывода. Высокая нагрузочная способность (25 мА макс. втекающий ток, 20 мА макс. вытекающий ток) линий ввода/вывода упрощают внешние драйверы и, тем самым, уменьшается общая стоимость системы. Разработки на базе контроллеров PIC16F84 поддерживается ассемблером, программным симулятором, внутрисхемным эмулятором (только фирмы Microchiр) и программатором.
Серия PIC16F84 подходит для широкого спектра приложений от схем высокоскоростного управления автомобильными и электрическими двигателями до экономичных удаленных приемопередатчиков, показывающих приборов и связных процессоров. Наличие ПЗУ позволяет подстраивать параметры в прикладных программах (коды передатчика, скорости двигателя, частоты приемника и т.д.).
Малые размеры корпусов, как для обычного, так и для поверхностного монтажа, делает эту серию микроконтроллеров пригодной для портативных приложений. Низкая цена, экономичность, быстродействие, простота использования и гибкость ввода/вывода делает PIC16F84 привлекательным даже в тех областях, где ранее не применялись микроконтроллеры. Например, таймеры, замена жесткой логики в больших системах, сопроцессоры.
Cледует добавить, что встроенный автомат программирования EEPROM кристалла PIC16F84 позволяет легко подстраивать программу и данные под конкретные требования даже после завершения ассемблирования и тестирования. Эта возможность может быть использована как для тиражирования, так и для занесения калибровочных данных уже после окончательного тестирования.
и только 35 простых команд;
и все команды выполняются за один цикл(400ns), кроме команд перехода, выполняющихся за два цикла;
и рабочая частота 0 Гц ... 10 МГц (min 400 нс цикл команды);
и 14- битовые команды;
и 8- битовые данные;
и 1024 х 14 электрически перепрограммируемой программной памяти на кристалле (EEPROM);
и 36х 8 регистров общего использования;
и 64 x 8 электрически перепрограммируемой EEPROM памяти для данных;
и восьмиуровневый аппаратный стек;
и прямая, косвенная и относительная адресация данных и команд;
и четыре источника прерывания:
╖ внешний вход INT,
╖ переполнение таймера RTCC,
╖ прерывание при изменении сигналов на линиях порта B,
╖ по завершению записи данных в память EEPROM.
и 13 линий ввода-вывода с индивидуальной настройкой;
и втекающий/вытекающий ток для управления светодиодами.
╖ макс. вытекающий ток - 20 мА. ,
╖ макс. втекающий ток - 25 мА.,
и TMR0: 8 - битный таймер/счетчик RTCC с 8-битным программируемым предварительным делителем.
и автоматический сброс при включении;
и таймер включения при сбросе;
и таймер запуска генератора;
и Watchdog таймер WDT с собственным встроенным генератором, обеспечивающим повышенную надежность;
и EEPROM бит секретности для защиты кода;
и экономичный режим SLEEP;
и выбираемые пользователем биты для установки режима возбуждения встроенного генератора:
╖ RC генератор : RC;
╖ обычный кварцевый резонатор : XT;
╖ высокочастотный кварцевый резонатор : HS;
╖ экономичный низкочастотный кристалл : LP;
и встроенное устройство программирования EEPROM памяти программ и данных; используются только две ножки.
и экономичная высокоскоростная КМОП EPROM технология;
и статический принцип в архитектуре;
и широкий диапазон напряжений питания и температур:
╖ коммерческий: 2.0 ... 6.0 В, 0...+70С,
╖ промышленный: 2.0 ... 6.0 В, -40...+70С,
╖ автомобильный: 2.0 ... 6.0 В, 40...+125С;
и низкое потребление:
╖ 2 мА типично для 5В, 4МГц,
╖ 15 мкА типично для 2В, 32КГц,
╖ 1 мкА типично для SLEEP режима при 2В.
Обозначения корпусов для кристаллов PIC16F84. Тип корпуса указывается в Маркировке при заказе микросхем. Корпуса бывают только с 18 Выводами.
PDIP - Обычный пластмассовый двухрядный корпус
SOIC - Малогабаритный DIP корпус для монтажа на поверхность
Обозначение микросхем складывается из следующих полей:
Фирм.номер/Частота генератора/Темпер.диапазон/Корпус/Примеч
Фирм.номер : PIC16F84 Vdd range 4...6 V,
PIC16LC84 Vdd range 2...6 V;
Частота генератора: 04 ---> 4 mHz (большинство 4 МГц. приборов работает до 10 МГц.!),
10 ---> 10mHz;
Температурный диапазон бывает:
- от 0С до +70С,
I от-40С до +85С,
E от-40С до +125С;
Корпус обозначается:
P - обычный пластмассовый DIP,
SO -300 mil SOIC.
Рисунок - Структурная схема PIC16F84
Архитектура основана на концепции раздельных шин и областей памяти для данных и для команд (Гарвардская архитектура). Шина данных и память данных (ОЗУ) - имеют ширину 8 бит, а программная шина и программная память (ПЗУ) имеют ширину 14 бит. Такая концепция обеспечивает простую, но мощную систему команд, разработанную так, что битовые,
байтовые и регистровые операции работают с высокой скоростью и с перекрытием по времени выборок команд и циклов выполнения. 14- битовая ширина программной памяти обеспечивает выборку 14-битовой команды в один цикл. Двухступенчатый конвейер обеспечивает одновременную выборку и исполнение команды. Все команды выполняются за один цикл, исключая команды переходов. В PIC16F84 программная память объемом 1К х 14 расположена внутри кристалла. Исполняемая программа может находиться только во встроенном ПЗУ.
Функциональное назначение выводов см.ФОбозначения ВыводовФ или Структурную Схему. Типы корпусов PDIP и др. см. УКорпусаФ.
Рисунок Ц Обозначение ножек
Назначение ножек
Обозначения ножек и их функциональное назначение
Обозначение |
Нормальный режим |
Режим записи EEPROM |
RA0 - RA3 |
Двунаправленные линии ввода/вывода. Входные уровни ТТЛ |
|
RA4/RTCC |
Вход через триггер Шмитта. Ножка порта ввода/вывода с открытым стоком или вход частоты для таймера/счетчика RTCC |
|
RB0/INT |
Двунаправленная линия порта ввода/ вывода или внешний вход прерывания Уровни ТТЛ |
|
RB1 - RB5 |
Двунаправленные линии ввода/ вывода. Уровни ТТЛ |
|
RB6 |
Двунаправленные линии ввода/ вывода. Уровни ТТЛ. |
Вход тактовой частоты для EEPROM |
RB7 |
Двунаправленные линии ввода/ вывода. Уровни ТТЛ. |
Вход/выход EEPROM данных. |
MCLR/Vрр |
Низкий уровень на этом входе генерирует сигнал сброса для контроллера. Активный низкий. |
Сброс контроллера Для режима EEPROM- подать Vрр. |
OSC1/CLKIN |
Для подключения кварца, RC или вход внешней тактовой частоты |
|
OSC2/CLKOUT |
Генератор, выход тактовой частоты в режиме RC генератора, в остальных случаях - для подкл.кварц |
|
Vdd |
Напряжение питания |
Напряжение питания |
Vss |
Общий(земля) |
Общий |
Область ОЗУ организована как 128 х 8. К ячейкам ОЗУ можно адресоваться прямо или косвенно, через регистр указатель FSR (04h). Это также относится и к EEPROM памяти данных-констант.
|
Page 0 |
Page 1 |
|
00 |
Indirect add. |
80 |
|
01 |
RTCC |
OPTION |
81 |
02 |
PCL |
82 |
|
03 |
STATUS |
83 |
|
04 |
FSR |
84 |
|
05 |
PORT A |
TRISA |
85 |
06 |
PORT B |
TRISB |
86 |
07 |
|
|
87 |
08 |
EEDATA |
EECON1 |
88 |
09 |
EEADR |
EECON2 |
89 |
0A |
PCLATH |
8A |
|
0B |
INTCON |
8B |
|
0C 2F |
36 регистров общего назначения |
тоже |
8C AF |
30 7F |
не существует
|
B0 FF |
В регистре статуса (03h) есть биты выбора страниц, которые позволяют обращаться к четырем страницам будущих модификаций этого кристалла. Однако для PIC16F84 память данных существует только до адреса 02Fh. Первые 12 адресов используются для размещения регистров специального назначения. Регистры с адресами 0Ch-2Fh могут быть использованы, как регистры общего назначения, которые представляют собой статическое ОЗУ. Некоторые регистры специального назначения продублированы на обеих страницах, а некоторые расположены на странице 1 отдельно. Когда установлена страница 1, то обращение к адресам 8Ch-AFh фактически адресует страницу 0. К регистрам можно адресоваться прямо или косвенно. В обоих случаях можно адресовать до 512 регистров.
Когда производится прямая 9-битная адресация, младшие 7 бит берутся как прямой адрес из кода операции, а два бита указателя страниц (RP1,RP0) из регистра статуса (03h).
f4 - Указатель косв.адресации
Любая команда, которая использует f0 (адрес 00) в качестве регистра фактически обращается к указателю, который хранится в FSR (04h). Чтение косвенным образом самого регистра f0 даст результат 00h. Запись в регистр f0 косвенным образом будет выглядеть как Noр, но биты статуса могут быть изменены. Необходимый 9 - битный адрес формируется объединением содержимого 8 - битного FSR регистра и бита IRP из регистра статуса.
Долговременная Память данных EEPROM.
Память данных EEPROM позволяет прочитать и записать байт информации. При записи байта автоматически стирается предыдущее значение и записываются новые данные (стирание перед записью). Все эти операции производит встроенный автомат записи EEPROM. Содержимое ячеек этой памяти сохраняется при выключении питания. Кристалл PIC16F84 имеет память данных 64х8 EEPROM бит, которая позволяет запись и чтение во время нормальной работы (во всем диапазоне питающих напряжений).
Эта память не принадлежит области регистров ОЗУ. Доступ к ней осуществляется через два регистра: EEDATA <08h>, который содержит в себе восьмибитовые данные для чтения/записи и EEADR <09h>, который содержит в себе адрес ячейки к которой идет обращение. Дополнительно имеется два управляющих регистра: EECON1 <88h> и EECON2 <89h>.
При считывании данных из памяти EEPROM необходимо записать требуемый адрес в EEADR регистр и затем установить бит RD EECON1<0> в единицу. Данные появятся в следующем командном цикле в регистре EEDATA и могут быть прочитаны. Данные в регистре EEDATA защелкиваются.
При записи в память EEPROM, необходимо сначала записать требуемый адрес в EEADR регистр и данные в EEDATA регистр. Затем выполнить специальную последовательность команд, производящую непосредственную запись:
movlv 55h
movwf EECON2
movlv AAh
movwf EECON2
bsf EECON1,WR ;установить WR бит, начать запись
Во время выполнения этого участка программы, все прерывания должны быть запрещены для точного выполнения временной диаграммы. Время записи - примерно 10мс. Фактическое время записи будет изменяться в зависимости от напряжения, температуры и индивидуальных свойств кристалла. В конце записи бит WR автоматически обнуляется, а флаг завершения записи EEIF, он же запрос на прерывание, устанавливается. Для предотвращения случайных записей в память данных предусмотрен специальный бит WREN в регистре EECON1. Рекомендуется держать бит WREN выключенным, кроме тех случаев, когда нужно обновить память данных. Более того, кодовые сегменты, которые устанавливают бит WREN и те, которые выполняют запись должны храниться на различных адресах, чтобы избежать случайного выполнения их обоих при сбое программы.
Управление EEPROM
Управляющие регистры для EEPROM
Название |
Функция |
Адрес |
Значение после включения |
EEDATA |
EEPROM регистр данных |
08h |
XXXX XXXX |
EEADR |
EEPROM регистр адреса |
09h |
XXXX XXXX |
EECON1 |
EEPROM 1 управляющий регистр |
88h |
0000 X000 |
EECON2 |
EEPROM 2 управляющий регистр |
89h |
- |
Регистры EECON1 и EECON2.
Регистр EECON1 (адрес 88h) - это управляющий регистр шириной пять бит. Младшие пять бит физически существуют, а старшие три бита читаются всегда как У0Ф
Регистр EECON1 Адрес 88h Сброс при включении 0000X000
- |
- |
- |
EEIF |
WRERR |
WREN |
WR |
RD |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Управляющие биты RD и WR запускают соответственно чтение и запись. Они могут быть установлены только программно. Сбрасываются- аппаратно по завершения операций чтения/записи. Запрет программного сброса бита WR предотвращает преждевременное окончание записи.
RD - Бит чтения.
RD =1 : Запускает чтение памяти данных EEPROM. Чтение занимает
один цикл. Устанавливается программно. Обнуляется аппаратно.
WR - Бит записи.
WR =1 : Запускает запись в память данных EEPROM.
Устанавливается программно. Обнуляется аппаратно.
WREN - Бит разрешения записи в память данных EEPROM.
WREN = 1: Разрешена запись.
WREN = 0: Запрещена запись.
После включения питания WREN обнуляется.
Флаг ошибки WRERR устанавливается, когда процесс записи прерывается сигналом сброса /MCLR или сигналом сброса от WDT таймера. Рекомендуем проверять этот флаг WRERR и при необходимости производить перезапись данных, данные и адрес которых сохраняются в регистрах EEDATA и EEADR.
WRERR - Флаг ошибки записи.
WRERR = 1: Флаг устанавливается, когда операция записи
преждевременно прерывается сигналом сброса /MCLR (во время
обычного режима или режима SLEEP) или сигналом сброса WDT во
время обычного режима.
EEIF - Флаг завершения записи.
EEIF = 1: Флаг устанавливается, когда завершена запись.
Соответствующий бит разрешения прерывания - EEIE в
регистре INTCON.
Прерывания в PIC16F84 могут быть от четырех источников:
внешнее прерывание с ножки RB0/INT,
прерывание от переполнения счетчика/таймера RTCC,
прерывание по окончании записи данных в EEPROM,
прерывание от изменения сигналов на ножках порта RB<7:4>.
Все прерывания имеют один и тот же вектор/адрес - 0004h. Однако, в управляющем регистре прерываний INTCON записывается:- от какого именно источника поступил запрос прерывания. Записывается соответствующим битом-флагом. Такое прерывание может быть замаскировано
индивидуально или общим битом. Единственным исключением является прерывание по концу записи в EEPROM. Этот флаг находится в другом регистре EECON1. Бит общего разрешения/запрещения прерывания GIE (INTCON <7>) разрешает (если=1) все индивидуально незамаскированные прерывания или запрещает (если=0) их. Каждое прерывание в отдельности может быть дополнительно разрешено/запрещено установкой/сбросом соответствующего бита в регистре INTCON.
Бит GIE обнуляется при сбросе. Когда начинает обрабатываться прерывание, бит GIE обнуляется, чтобы запретить дальнейшие прерывания, адрес возврата посылается в стек, а в программный счетчик загружается адрес 0004h. Время реакции на прерывание для внешних событий, таких как прерывание от ножки INT или порта B, составляет приблизительно пять циклов. Это на один цикл меньше, чем для внутренних событий, таких как прерывание по переполнению от таймера RTCC. Время реакции всегда одинаковое. В подпрограмме обработки прерывания источник прерывания может быть определен по соответствующему биту в регистре флагов. Этот флаг-бит должен быть программно сброшен внутри подпрограммы. Флаги запросов прерываний не зависят от соответствующих маскирующих битов и бита общего маскирования GIE.
Команда возврата из прерывания RETFIE завершает прерывающую подпрограмму и устанавливает бит GIE, чтобы опять разрешить прерывания.
Адрес: 0Bh Значение при сбросе - 0000 0000
GIE |
EEIE |
RTIE |
INIE |
RBIE |
RTIF |
INTF |
RBIF |
RBIF -Флаг прерывания от изменения на порту RB.
Флаг устанавливается, когда сигнал на входе RB<7:4> изменяется.
Флаг сбрасывается программным способом.
NTF - Флаг прерывания INT.
Флаг устанавливается, когда на ножке INT появляется сигнал от
внешнего источника прерывания. Сбрасывается программным способом.
RTIF - Флаг прерывания от переполнения RTCC.
Флаг устанавливается, когда RTCC переполняется.
Флаг сбрасывается программным способом.
RBIE - Бит разрешения/запрещения RBIF прерывания.
RBIE = 0 : запрещает RBIE прерывание.
RBIE = 1 : разрешает RBIE прерывание.
INTE - Бит разрешения/запрещения INT прерывания.
INTE = 0 : запрещает INT прерывание.
INTE = 1 : разрешает INT прерывание.
RTIE Бит разрешения/запрещения RTIF прерывания.
RTIE = 0 : запрещает RTIE прерывание.
RTIE = 1 : разрешает RTIE прерывание.
EEIE - Бит разрешения/запрещения прерывания EEPROM записи.
EEIE = 0 : запрещает EEIF прерывание.
EEIE = 1 : разрешает EEIF прерывание.
GIE Бит разрешения/запрещения всех прерываний.
GIE = 0 : запрещает прерывания
GIE = 1 : разрешает прерывания
Он сбрасывается автоматически при следующих обстоятельствах:
по включению питания,
по внешнему сигналу /MCLR при нормальной работе,
по внешнему сигналу /MCLR в режиме SLEEP,
по окончанию задержки таймера WDT при нормальной работе,
по окончанию задержки таймера WDT в режиме SLEEP.
Внешнее прерывание на ножке RB0/INT осуществляется по фронту: либо
по нарастающему (если бит INTEDG=1 в регистре OPTION), либо по спадающему фронту (если INTEDG=0). Когда фронт обнаруживается на ножке INT, то бит запроса INTF устанавливается (INTCON <1>). Это прерывание может быть замаскировано установкой управляющего бита INTE в ноль (INTCON <4>). Бит запроса INTF должен быть очищен прерывающей программой перед тем, как опять разрешить это прерывание. Прерывание INT может вывести процессор из режима SLEEP, если перед входом в этот режимбит INTE был установлен в единицу. Состояние бита GIE также определяет: будет ли процессор переходить на подпрограмму прерывания после просыпания из режима SLEEP.
Переполнение счетчика RTCC (FFh->00h) установит бит запроса RTIF (INTCON<2>). Это прерывание может быть разрешено/запрещено установкой/сбросом бита маски RTIE (INTCON<5>).
Сброс запроса RTIF - дело программы обработки.
Любое изменение сигналов на четырех входах порта RB<7:4> установит бит RBIF (INTCON<0>). Это прерывание может быть разрешено/запрещено установкой/сбросом бита маски RBIE (INTCON<3>). Сброс запроса RBIF - дело программы обработки.
Флаг запроса прерывания по окончании записи в EEPROM, EEIF (EECON1<4>) устанавливается по окончании автоматической записи данных в EEPROM. Это прерывание может быть замаскировано сбросом бита EEIE (INTCON<6>).
Сброс запроса EEIF - дело программы обработки.