Микроконтроллеры PIC16F84 могут программироваться непосредственно на плате устройства, что позволяет отлаживать программу либо записывать константы и калибровочные данные. Для программирования на плате необходимо максимум пять проводов: питание +5В, напряжение программирования, последовательные данные, тактирующие импульсы и общий. Память программ только встроенная.
Таблица 3.3 - Электрические параметры
Параметр | Значение | Примечание |
Рабочая температура Та,°С | 0 ... +40-40... +85 | Коммерческое исполнение. Индустриальное исполнение |
Максимальная тактовая частота Fosc, МГц | 410 | PIC16F84-4 PIC16F84-10 |
Напряжение питанияVdd,B | 2,0... 6,04,0... 6,0 | PIC16LF84PIC16F84 |
Потребляемый ток в стандартном режиме Idd, мА | 1,8 ...4,55... 10 | Fosc=4 МГц, Vdd=5.5 В Fosc=10MГц, Vdd=5.5B |
Потребляемый ток в стандартном режиме Idd, мA | 1 ...415... 45 | Fosc=2 МГц, Vdd=5.5 В Fosc=32 кГц, Vdd=2.0 В, WDT отключен |
Потребляемый ток в режиме SLEEP Ipd, мкА для PIC16F84 | 7... 281 ... 161 ... 14 | Vdd=4 В, WDT вкл., инд. Vdd=4 В, WDT выкл., инд. Vdd=4 В, WDT выкл., комм. |
Потребляемый ток в режиме SLEEP Ipd, мкА для PIC16LF84 | 3... 160,4 ...90,4... 7 | Vdd=2 В, WDT вкл., инд. Vdd=2 В, WDT выкл., инд. Vdd=2 В, WDT выкл., инд. |
Максимальный втекающий ток для любого вывода, мА | 25 | Управление светодиодами без дополнительного буфера (но с резистором!) |
Максимальный вытекающий ток для любого вывода, мА | 20 | Управление светодиодами без дополнительного буфера (но с резистором!) |
Количество циклов стирание/запись для флэш-памяти программ, не менее | 1000 | |
Количество циклов стирание/запись для памяти данных EEPROM, не менее | 10.000.000 |
Организация памяти.
В микроконтроллерах PIC16F84 существует два блока памяти - память программ и память данных. Каждый блок имеет собственную шину, таким образом, доступ к блокам может происходить одновременно.
Память данных, в свою очередь, разделена на специальные регистры и регистры общего применения (ОЗУ пользователя). Специальный регистры применяются для хранения битов состояния, определяющих работу портов вода/вывода, таймеров и других периферийных модулей контроллера.
Кроме специальных регистров и ОЗУ, пространство памяти данных содержит ячейки EEPROM. Эта область памяти не может быть адресована непосредственно, и доступ к ней получают через специальный регистр косвенной адресации EEADR, в который записывают порядковый номер ячейки. 64 байта EEPROM имеют номера с 00h по 3Fh. Обычно EEPROM используется для хранения констант, значения которых не должны пропадать при отключении питания, например кодов управления, индивидуальных номеров и т.п. Важным достоинством EEPROM является то, что данные в ней могут быть изменены даже после занесения программы в однократно программируемый кристалл.
Память программ.
Микроконтроллеры PIC16F84 имеют 13-битный программный счетчик, позволяющий адресовать до 8К х 14 памяти программ. В PIC16F84 доступны первые 1024 (0000h-03FFh) ячеек памяти. Обращение к старшим адресам, лежащим за пределами указанного диапазона физически равносильно обращению к соответствующим адресам внутри диапазона, например, адреса 30h, 430h, 830h, C30h, 1030h, 1430h, 1830h и 1C30h равносильны и адресуют одну и ту же команду.
Старт по сбросу происходит с адреса 0000h, вектор прерывания один и расположен по адресу 0004h. Обычно по адресу 0004h располагают подпрограмма распознавания и обработки прерываний, а по адресу 0000h команду перехода на метку, расположенную за подпрограммой обработки прерывания.
Память данных.
В микроконтроллерах PIC16F84 память данных разбита на две части - специальные регистры и регистры общего применения (ОЗУ пользователя). Кроме этого, память данных разделена на два банка.
Таблица 3.4 - Организация памяти данных
Адрес | Адрес | ||
00h | Косвенный адрес | Косвенный адрес | 80h |
0lh | TMR0 | OPTION | 81h |
02h | PCL | PCL | 82h |
03h | STATUS | STATUS | 83h |
04h | FSR | FSR | 84h |
05h | PORTA | TRISA | 85h |
06h | PORTB | TRISB | 86h |
07h | Недоступен | Недоступен | 87h |
08h | EEDATA | EECON1 | 88h |
09h | EEADR | EECON2 | 89h |
0Ah | PCLATH | PCLATH | 8Ah |
0Bh | INTCON | INTCON | 8Bh |
0Ch4Fh | 68 регистров общего применения (SRAM) | Отображается на пространство банка 0 | 8ChCFh |
50h7Fh | D0hFFh | ||
Банк 0 | Банк 1 |
Переключение банков происходит при помощи задания 5-го бита в регистре STATUS. Если бит установлен в 0, адресуется нулевой банк, если в 1, соответственно, первый.
Специальные регистры
Специальные регистры представляют собой статическое ОЗУ.
Регистр STATUS (Адрес 03Н, 81Н)
Регистр STATUS хранит арифметические флаги АЛУ, информацию о сбросе и бит выбора банка памяти данных.
bit7 IRP - регистр выбора банка памяти, применяемый при косвенной адресации. Это бит не применяется в PIC16F84 и должен всегда оставаться сброшенным.
0 = bank 0,1 (00h-FFh)
1 = bank 2,3(100h-1FFh)
bit6-5 RP1, RP0 - регистр выбора банка памяти, применяемый при прямой адресации.
00 = bank 0 (00h-7Fh)
01 = bank 1 (80h-FFh)
bit4 TO - флаг срабатывания сторожевого таймера. Устанавливается в 1 при включении питания и командами CLRWDT и SLEEP. Сбрасывается в 0 по завершении выдержки сторожевого таймера.
bit3 PD - режим хранения данных. Устанавливается в 1 при включении питания или выполнении команды CLRWDT. Сбрасывается в 0 командой SLEEP.
bit2 Z - флаг нулевого результата. Устанавливается в 1, если результат арифметической или логической операции равен нулю. Сохраняет свое значение до следующей операции.
bit1 DC - флаг десятичного переноса. Используется для команд ADDWF, ADDLW, SUBWF и SUBLW. Отслеживает перенос из четвертого разряда результата.
1 = Произошел перенос при сложении
0 = Не произошел перенос при сложении
Вычитание в АЛУ выполняется сложением кода первого операнда с дополнительным кодом второго операнда. Значение бита контекстно зависит от того, какая операция выполнялась. Для операции вычитания значения бита инвертированы.
bit0 С - флаг переноса. Используется для команд ADDWF, ADDLW, SUBWF и SUBLW. Отслеживает перенос из старшего разряда в бит переноса при сложении.
1 = произошел перенос при сложении
0 = не произошел перенос при сложении
Вычитание в АЛУ выполняется сложением кода первого операнда с дополнительным кодом второго операнда. Значение бита контекстно зависит от того, какая операция выполнялась. Для операции вычитания значения бита инвертированы.
Используя флаги ТО и PD можно определить, чем был вызван сброс.
TO | PD | Событие, вызвавшее состояние "сброс" |
1 | 1 | Сброс по включению питания |
0 | 1 | Сработал сторожевой таймер (не в режиме SLEEP) |
1 | 0 | Сброс по входу MCLR в режиме SLEEP или выход из SLEEP по внешнему прерыванию |
0 | 0 | Выход из SLEEP по сигналу сторожевого таймера |
X | X | Сброс по входу MCLR в обычном режиме |
х - состояние битов не изменилось. Сброс по входу MCLR в обычном режиме не меняет текущие значения битов ТО и PD.
Регистр OPTION_REG (АДРЕС 81Н)
Специальный регистр OPTION_REG представляет собой полностью доступный для записи и чтения регистр, в котором находятся биты, управляющие работой предварительного делителя, источниками внешних прерываний, встроенным таймером TMR0 и подтягивающими резисторами для порта В.
bit7 RBPU - включение встроенной нагрузки порта В
1 = нагрузка отключена
0 = нагрузка включена
bit6 INTEDG - выбор фронта прерывающего сигнала
1 = прерывание по нарастанию сигнала на выводе RB0/INT
0 = прерывание по спаду сигнала на выводе RB0/INT
bit5 TOGS - выбор источника тактирования для таймера TMR0
1 = импульсы со входа RA4/T0CKI
0 = внутренняя тактовая частота (CLKOUT)
bit4 T0SE - выбор фронта сигнала для таймера TMR0, если в качестве источника выбран вход RA4/T0CKI (T0CS=l)
1 = инкремент по спаду на выводе RA4/T0CKI
0 = инкремент по нарастанию на выводе RA4/T0CKI
bit3 PSA - бит, управляющий подключением предварительного делителя
1 = предварительный делитель подключен к WDT
0 = предварительный делитель подключен к TMR0
bit2-0 PS2-PS0 - управление коэффициентом деления предварительного делителя в зависимости от подключения
Биты | для TMR0 | для WDT |
000 | 1:2 | 1:1 |
001 | 1:4 | 1:2 |
010 | 1:8 | 1:4 |
011 | 1:16 | 1:8 |
100 | 1:32 | 1:16 |
101 | 1:64 | 1:32 |
110 | 1:128 | 1:64 |
111 | 1:256 | 1:128 |
Регистр INTCON (АДРЕС 0ВН, 8ВН)
Регистр INTCON - это полностью доступный для чтения и записи регистр, в котором хранятся биты, управляющие различными источниками прерываний.
bit7 GIE - бит глобального запрета прерываний
1 = разрешены все немаскируемые прерывания
0 = запрещены все прерывания
bit6 EEIE - разрешение прерывания по окончанию записи в EEPROM
1 = прерывание по окончанию записи разрешено
0 = прерывание по окончанию записи запрещено
bit5 T0IE - разрешение прерывания по переполнению TMR0
1 = прерывание разрешено
0 = прерывание запрещено
bit4 INTE - разрешение прерывания по входу RB0/INT
1 = прерывание разрешено
0 = прерывание запрещено
bit3 RBIE - разрешение прерывания по изменению состояния на входах порта В, линии RB7-RB4
1 = прерывание разрешено
0 = прерывание запрещено
bit2 T0IF - флаг прерывания по переполнению таймера/счетчика TMR0
1 = TMR0 был переполнен (следует сбросить программно!)
0 = TMR0 не был переполнен
Флаг используется для определения источника прерывания,
bit1 INTF - флаг прерывания по входу RB0/INT
1 = произошло прерывание по входу RB0/INT (следует сбросить программно!)
0 = не происходило прерывания по входу RB0/INT
Флаг используется для определения источника прерывания.