Смекни!
smekni.com

Види органічних сполук (стр. 5 из 12)

WREN = 0: Запрещена запись.

После включения питания WREN обнуляется.

Флаг ошибки WRERR устанавливается, когда процесс записи прерывается сигналом сброса /MCLR или сигналом сброса от WDT таймера. Рекомендуем проверять этот флаг WRERR и при необходимости производить перезапись данных, данные и адрес которых сохраняются в регистрах EEDATA и EEADR.

WRERR - Флаг ошибки записи.

WRERR = 1: Флаг устанавливается, когда операция записи

преждевременно прерывается сигналом сброса /MCLR (во время

обычного режима или режима SLEEP) или сигналом сброса WDT во

время обычного режима.

EEIF - Флаг завершения записи.

EEIF = 1: Флаг устанавливается, когда завершена запись.

Соответствующий бит разрешения прерывания - EEIE в

регистре INTCON.

Организация прерываний

Прерывания в PIC16C84 могут быть от четырех источников:

внешнее прерывание с ножки 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> изменяется.

Флаг сбрасывается программным способом.

INTF - Флаг прерывания 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

Переполнение счетчика RTCC (FFh->00h) установит бит запроса RTIF (INTCON<2>). Это прерывание может быть разрешено/запрещено установкой/сбросом бита маски RTIE (INTCON<5>).

Сброс запроса RTIF - дело программы обработки.

Прерывание от порта RB

Любое изменение сигналов на четырех входах порта RB<7:4> установит бит RBIF (INTCON<0>). Это прерывание может быть разрешено/запрещено установкой/сбросом бита маски RBIE (INTCON<3>). Сброс запроса RBIF - дело программы обработки.

Прерывание от EEPROM

Флаг запроса прерывания по окончании записи в EEPROM, EEIF (EECON1<4>) устанавливается по окончании автоматической записи данных в EEPROM. Это прерывание может быть замаскировано сбросом бита EEIE (INTCON<6>).

Сброс запроса EEIF - дело программы обработки.

Обзор регистров/портов

Кристалл имеет два порта: 5 бит порт RA и 8 бит порт RB с побитовой индивидуальной настройкой на ввод или на вывод.

Схема линии порта A

Порт А - это порт шириной 5 бит, соответствующие ножки кристалла RA<4:0>. Линии RA<3:0> двунаправленные, а линия RA4 -выход с открытым стоком. Адрес регистра порта А - 05h. Относящийся к порту А управляющий регистр TRISA расположен на первой странице регистров по адресу 85h. TRISA<4:0> - это регистр шириной 5 бит. Если бит управляющего TRISA регистра имеет значение единица, то соответствующая линия будет устанавливаться на ввод. Ноль переключает линию на вывод и одновременно выводит на нее содержимое соответствующего регистра защелки.

Название ножки # Функция ножки Другие функции
PA0 0 Порт ввода/вывода.Входные уровни ТТЛ.
PA1 1 Порт ввода/вывода.Входные уровни ТТЛ.
PA2 2 Порт ввода/вывода.Входные уровни ТТЛ.
PA3 3 Порт ввода/вывода.Входные уровни ТТЛ..
PA4/RT 4 Порт ввода/вывода.Выход-открытый коллектор Вход - триггер Шмитта. Вход внешнего тактового сигнала для RTCC


Ниже дана схема портов RA0..RA3

Все биты портов имеют защитные диоды, подключенный к Vdd и Vss.

Вывод RA4/RTCC имеет несколько другую схему. Она приведена ниже

Схема линии порта B

Порт В - это двунаправленный порт, шириной в восемь бит (адрес регистра 06h). Относящийся к порту В управляющий регистр TRISB расположен на первой странице регистров по адресу 86h. Если бит управляющего TRISB регистра имеет значение единица, то соответствующая линия будет устанавливаться на ввод. Ноль переключает линию на вывод и одновременно выводит на нее содержимое соответствующего регистра защелки. У каждой ножки порта В имеется небольшая активная нагрузка (около 100мкА) на линию питания. Она автоматически отключается, если эта ножка запрограммирована как вывод. Более того, управляющий бит RBPU OPTION<7> может отключить (RBPU=1) все нагрузки. Сброс при включении питания также отключает все нагрузки. Четыре линии порта В (RB<7:4>) имеют способность вызвать прерывание при изменении значения сигнала на любой из них. Если эти линии настроены на ввод, то они опрашиваются и защелкиваются в цикле чтения Q1. Новая величина входного сигнала сравнивается со старой в каждом командном цикле. При несовпадении значения сигнала на ножке и в защелке, генерируется высокий уровень. Выходы детекторов “несовпадений” RB4,RB5,RB6,RB7 объединяются по ИЛИ и генерируют прерывание RBIF (запоминаемое в INTCON<0>). Любая линия, настроенная как вывод, не участвует в этом сравнении. Прерывание может вывести кристалл из режима SLEEP. В подпрограмме обработки прерывания следует сбросить запрос прерывания одним из следующих способов:

1) Запретить прерывания при помощи обнуления бита RBIE INTCON<3>.

2) Прочитать порт В. Это завершит состояние сравнения.

3) Обнулить бит RBIF INTCON<0>.

Прерывание по несовпадению и программно устанавливаемые внутренние активные нагрузки на этих четырех линиях могут обеспечить простой интерфейс например с клавиатурой, с выходом из режима SLEEP по нажатию клавиш.

Ножка RB0 совмещена с входом внешнего прерывания INT.

Название ножки # Функция ножки Другие функции
PB0 0 Порт ввода/вывода.Входные уровни ТТЛ и внутренняя программируемая активная нагрузка. Вход внешнего прерывания
PB1 1 Порт ввода/вывода.Входные уровни ТТЛ. и внутренняя программируемая активная нагрузка.
PB2 2 Порт ввода/вывода.Входные уровни ТТЛ и внутренняя программируемая активная нагрузка.
PB3 3 Порт ввода/вывода.Входные уровни ТТЛ и внутренняя программируемая активная нагрузка.
PB4 4 Порт ввода/вывода.Входные уровни ТТЛ и внутренняя программируемая активная нагрузка. Прерывание при изменении
PB5 5 Порт ввода/вывода.Входные уровни ТТЛ и внутренняя программируемая активная нагрузка. Прерывание при изменении
PB6 6 Порт ввода/вывода.Входные уровни ТТЛ и внутренняя программируемая активная нагрузка. Прерывание при изменении
PB7 7 Порт ввода/вывода.Входные уровни ТТЛ и внутренняя программируемая активная нагрузка. Прерывание при изменении

Проблемы c портами

Проблемы при организации двунаправленных портов

Некоторые команды внутренне выполняются как чтение+запись. Например, команды BCF и BSF считывают порт целиком, модифицируют один бит и выводят результат обратно. Здесь необходима осторожность. Например, команда BSF для бита 5 регистра f6 (порт В) сначала считает все восемь бит. Затем выполняются действия над битом 5 и новое значение байта целиком записывается в выходные защелки. Если другой бит регистра f6 используется в качестве двунаправленного ввода/вывода (скажем бит 0) и в данный момент он определен как входной, входной сигнал на этой ножке будет считан и записан обратно в выходную защелку этой-же ножки, затирая ее предыдущее состояние. До тех пор пока эта ножка остается в режиме ввода, никаких проблем не возникает. Однако, если позднее линия 0 переключится в режим вывода, ее состояние будет неопределенным.