Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Прерывание от таймера




PORTB

PORTA

 

Регистр ввода/вывода PORTA имеет разрядность 5 бит. Старшие 3 бита физически отсутствуют и считываются как «0». Разряд RA4 имеет вход с триггером Шмитта и выход с открытым стоком. Все остальные разряды PORTA имеют ТТЛ-входные уровни и КМОП-выходы. Разряд RA4 объединен с входом таймера TMR0. Описание выводов регистра PORTA приведено в таблице 5.

Ниже приведем пример программы инициализации (настройки) PORTA.

 

CLRF PORTA ; Очистка (сброс в «0») выходных защелок
    ; PORTA.
BSF STATUS,RP0 ; Выбор банка 1.
MOVLW 0x 0F ; Значение константы для выбора режимов
    ; работы разрядов.
MOVWF TRISA ; Установить RA<3:0> как входы и RA4 как
    ; выход.
BCF STATUS,RP0 ; Выбор банка 0.

 

 

Регистр ввода/вывода PORTB 8-разрядный. Все разряды PORTB имеют внутренние подтягивающие резисторы, которые могут быть включены установкой в «0» бита RBPU (OPTION). Подтягивающие резисторы автоматически отключаются, если соответствующий разряд программируется как выход. По включении питания подтягивающие резисторы отключаются.

Имеется возможность прерывания по изменению состояния четырех разрядов PORTB (выводы RB7…RB4). Прерывание может возникнуть только от тех разрядов PORTB<7:4>, которые запрограммированы как входы, выходы не включаются в процедуру сравнения. Текущее состояние разрядов PORTB<7:4>, запрограммированных как входы, сравнивается с состоянием, защелкнутым в регистр PORTB при последнем считывании. При несовпадении возникает прерывание по изменению состояния. Это прерывание может вывести микроконтроллер из режима пониженного энергопотребления SLEEP. Для сброса прерывания в подпрограмме обработки необходимо выполнить следующие действия:

1 считать PORTB (это сбросит условие несовпадения);

2 сбросить флаг RBIF.

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

Ниже приведем пример инициализации (настройки) PORTB.

 

CLRF PORTB ; Обнуление выходных регистров PORTB.
BSF STATUS,RP0 ; Выбор банка 1.
MOVLW 0x CF ; Значение для задания направления.
MOVWF TRISB ; Установить RB<3:0> как входы, RB<5:4>
    ; как выходы и RB<7:6> как входы.

 

Особенности программирования портов

 

Некоторые команды выполняются в режиме «чтение-модификация-запись». Например, команды BCF и BSF считывают содержимое порта целиком, модифицируют один бит и выводят результат обратно. При использовании этих команд с портами, в которых некоторые разряды запрограммированы как входы, а некоторые как выходы, необходима осторожность. Например, команда BSF для пятого бита регистра PORTB сначала считывает все восемь бит, затем выполняется установка пятого бита, и новое значение байта целиком записывается в выходную защелку. Если другой бит регистра PORTB используется в качестве двунаправленного входа/выхода (скажем, бит 0) и в данный момент он определен как вход, входной сигнал на этом выводе будет считан и записан обратно в выходную защелку этого же вывода, затирая ее предыдущее состояние. До тех пор пока этот вывод остается в режиме входа, никаких проблем не возникает. Однако, если позднее линия 0 переключится в режим выхода, ее состояние будет неопределенным. Команда считывания порта считывает состояние вывода, а не выходных регистров. Например, если разряд порта запрограммирован как выход и установлен в «1», но внешняя схема поддерживает низкий уровень на выводе, порт будет считываться как «0». На вывод, работающий в режиме выхода, не должны подключаться внешние нагрузки по схеме «монтажное И» либо «монтажное ИЛИ». Возникающие при этом большие токи могут повредить кристалл.

 

Модуль таймера

 

Модуль таймера имеет следующие особенности:

– 8-разрядный таймер/счетчик, доступен по чтению и записи;

– 8-разрядный программируемый предварительный делитель;

– внутреннее или внешнее тактирование;

– прерывание по переполнению счетчика (переход от 0FFh к 00h);

– выбор фронта тактирующего импульса при внешнем тактировании.

Упрощенная структурная схема модуля таймера приведена на рисунке 7.

Режим таймера выбирается установкой в «0» бита T0CS (OPTION<5>). В режиме таймера TMR0 увеличивается в каждом командном цикле (в отсутствии предварительного делителя). Если происходит запись в TMR0, то увеличение счетчика задерживается на два последующих цикла выполнения команды. Запись в TMR0 должна вестись с учетом этой задержки. При необходимости проверки регистра TMR0 на ноль без влияния на процесс счета рекомендуется пользоваться командой MOVF TMR0,W.

 

Примечания

1 Биты T0CS,T0SE, PSA, PS2, PS1 и PS0 находятся в регистре OPTION.

2 Предварительный делитель используется совместно со сторожевым таймером.

 

Рисунок 7 – Структурная схема таймера

 

Режим счетчика выбирается установкой в «1» бита T0CS (OPTION<5>). В этом режиме TMR0 увеличивается по каждому перепаду 1/0 или 0/1 на выводе T0CKI. Перепад, увеличивающий значение TMR0, выбирается битом выбора фронта переключения T0SE (OPTION<4>). Установка этого бита в «0» вызывает увеличение TMR0 по перепаду 0/1.

Предварительный делитель может использоваться модулем сторожевого таймера WDT или модулем таймера. Подключение предварительного делителя задается битом PSA (OPTION<3>). Установка бита PSA в «1» подключает предварительный делитель к модулю WDT и устанавливает коэффициент деления для TMR0 1:1. Установка бита PSA в «0» подключает предварительный делитель к модулю таймера. Коэффициент деления предварительного делителя может быть установлен битами PS0-PS2 регистра OPTION (см. таблицу 3). Сам предварительный делитель недоступен для чтения и записи.

 


 

Прерывание от TMR0 вырабатывается при переполнении счетчика (переходе от 0FFh к 00h). При переполнении устанавливается в «1» бит T0IF (INTCON<2>). Прерывание может быть замаскировано установкой в «0» бита T0IE (INTCON<5>). Бит T0IF должен быть сброшен в «0» в процедуре обработки прерывания от TMR0 до того, как прерывания снова будут разрешены. Прерывание от TMR0 не может вывести микроконтроллер из режима пониженного энергопотребления SLEEP, поскольку в режиме SLEEP таймер TMR0 выключен.

 




Поделиться с друзьями:


Дата добавления: 2015-03-29; Просмотров: 446; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.015 сек.