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

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

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

bit0 RBIF - флаг прерывания по изменению состояния на входах RB7-RB4

 1 = на одном из выводов RB7-RB4 произошло изменение уровня (следует сбросить программно!)

 0 = не происходило прерывание по изменению уровня

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

Программный счетчик.

Программный счетчик микроконтроллера (PC) содержит 13 разрядов. Младший байт счетчика является полностью доступным для чтения и записи регистром PCL (адрес 02h, 82h). Старшие пять байтов счетчика непосредственно не доступны для чтения и записи. Обращение к ним происходит через регистр PCLATCH (адрес 0Ah, 8Ah), являющийся буфером-защелкой для старших битов счетчика. Содержимое PCLATCH переносится в старшие биты PC, когда происходит запись нового значения в программный счетчик. Это случается, когда выполняются команды CALL, GOTO или регистр PCL является регистром назначения для результата арифметической операции.

Стек

Микроконтроллеры PIC16F84 имеют 8-уровневый 13-битный аппаратный стек. Стек не является частью памяти данных или программ и указатель стека не доступен для чтения или записи.

Косвенная адресация: регистры INDF и FSR

Регистр INDF не является физическим регистром. При обращении к этому регистру на самом деле адресуется регистр, адрес которого указан в регистре FSR (т.е. FSR является указателем). Такая адресация является косвенной.

Порты ввода-вывода

Контроллеры PIC16F84 имеют два порта ввода-вывода, PORTA и PORTB. Каждый вывод порта может быть запрограммирован на ввод или на вывод установкой соответствующего бита в регистрах TRISA и TRISB. Выводимые значения фиксируются в регистрах-защелках PORTA и PORTB. Направление ввода-вывода может быть изменено в произвольный момент времени.

Двунаправленный порт А, регистры PORTA и TRISA

Регистр PORTA представляет собой 5-битную защелку. Линия RA4 имеет триггер Шмитта на входе в режиме ввода и открытый сток в режиме вывода. Остальные линии порта А по входу работают со стандартными уровнями TTL, выходы подключаются к комплементарным выходным CMOS драйверам. Линия RA4 используется также как вход внешних тактовых импульсов для таймера TMR0.

Направление передачи данных для каждой линии программируется отдельно, установкой или сбросом битов bit0...bit4 регистра TRISA. Установка бита в 1 настраивает соответствующую линию на ввод. Выходной драйвер при этом переходит в высокоимпедансное состояние. Установка бита в 0 настраивает линию порта на вывод и выводит на нее содержимое соответствующего бита защелки PORTA. По умолчанию при включении питания все линии настроены на ввод. При чтении порта А всегда считываются действительные логические уровни на выводах, независимо от того, запрограммированы отдельные разряды как входы или как выходы.



Рисунок 3.3 - Блок-схема порта А, линии RA4 (а) и RA0-RA3 (b)


Двунаправленный порт В, регистры PORTB и TRISB

Порт В представляет собой 8-битный двунаправленный порт. Выходные значения записываются в регистр-защелку PORTB. Направление ввода-вывода определяется установкой или сбросом битов регистра TRISB. Установка бита в 1 настраивает соответствующую линию на ввод, переводя выходной драйвер в высокоимпедансное состояние, а-0 - на вывод. При включении питания все линии по умолчанию настроены на ввод. Как и для порта А, чтение порта В всегда возвращает действительные значения на выводах, независимо от направления передачи данных для каждого вывода.

Все выводы порта В имеют встроенную отключаемую нагрузку в виде резисторов, подключенных к шине питания (подтягивающие резисторы). Нагрузка включается и отключается одновременно для всех выводов при помощи бита 7 RBPU регистра OPTION_REG. При включении питания RBPU= 1 и нагрузка отключена. Программное обнуление бита RBPU подключает нагрузку, но для линий, настроенных на вывод нагрузка автоматически отключается.

Линии RB4...RB7 могут использоваться как входы прерывания по изменению уровня. В этом качестве используются только линии, настроенные на ввод. В каждом командном цикле происходит сравнение текущих значений на выводах с предыдущими, зафиксированными в специальной защелке. Если хотя бы на одном из этих выводов произошло изменение уровня, формируется прерывание. Длительность импульса, который распознается как изменение уровня, должна быть не менее 4-х периодов тактовой частоты. Программно распознать, по какой из линий RB4...RB7 произошло прерывание, невозможно.

Это прерывание выводит контроллер из состояния SLEEP.


Рисунок 3.4 - Блок-схема порта В, линии RB7-RB4 (а) и RB3-RB0 (b)


Модуль TIMER0 и регистр TMR0

TIMER0 является программируемым модулем таймера/счетчика. Он имеет в своем составе:

-8-битный таймер/счетчик TMR0, доступный для чтения и записи как регистр,

-программируемый предварительный делитель (предделитель) мультиплексор входного сигнала

-генератор прерывания по переполнению регистра TMR0 с FFh в 00h.

Предделитель

Предделитель является 8-битным счетчиком, который также может быть использован, как выходной делитель (постделитель) сторожевого таймера. Если предделитель подключен к модулю TIMER0, то он не может использоваться со сторожевым таймером, и наоборот. Когда предделитель подключен к таймеру/счетчику, все команды, использующие запись в регистр TMR0, обнуляют предделитель. Если предделитель подключен к сторожевому таймеру, они обнуляются совместно, командой CLRWDT. Предделитель недоступен для прямой записи или чтения.

Страницы: 1, 2, 3, 4, 5



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.