Смекни!
smekni.com

Разработка и описание работы устройства на PIC-контроллере (стр. 2 из 5)

Микроконтроллеры 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

Флаг используется для определения источника прерывания.