MC_PIC (1031647), страница 4
Текст из файла (страница 4)
Состояние бита GIE также определяет:будет ли процессор переходить на подпрограмму прерывания после выхода из режимаSLEEP. Сброс битов – запросов прерываний – должен осуществляться соответствующейпрограммой обработки.5.2.7. Счетчик командСчетчик команд PCL и PCLATH имеет разрядность 13 бит. Младший байт счетчика(PCL) доступен для чтения и записи и находится в регистре 02h.
Старший байт счетчикакоманд не может быть напрямую записан или считан и берется из регистра PCLATH (PClatch high), адрес которого 0Ah. Содержимое PCLATH передается в старший байт счетчикакоманд, когда он загружается новым значением.В зависимости от того, загружается ли в счетчик команд новое значение во времявыполнения команд CALL, GOTO, или в младший байт счетчика команд (PCL) производитсязапись, – старшие биты счетчика команд загружаются из PCLATH разными способами, какпоказано на рис. 5.6.Рис. 5.6. Загрузка старших бит счетчика команд.Команды CALL и GOTO оперируют 11-разрядным адресным диапазоном,достаточным для смещения в пределах страницы программной памяти объемом 2К слов.
ДляМК подгруппы PIC16F8X этого хватает. С целью обеспечения возможности расширенияпамяти команд для будущих моделей МК предусмотрена загрузка двух старших битсчетчика команд из регистра PCLATH<4:3>. При использовании команд CALL и GOTOпользователь должен убедиться в том, что эти страничные биты запрограммированы длявыхода на нужную страницу. При выполнении команды CALL или выполнении прерываниявесь 13-битный счетчик команд помещается в стек, поэтому для возвращения изподпрограммы не нужны манипуляции с разрядами PCLATH<4:3>.Микроконтроллеры подгруппы PIC16F8X игнорируют значения бит PCLATH<4:3>,которые используются для обращения к страницам 1, 2 и 3 программной памяти.
Однакоприменять биты PCLATH<4:3> в качестве ячеек памяти общего назначения нерекомендуется, так как это может повлиять на совместимость с будущими поколениямиизделий.Возможность выполнять арифметические операции непосредственно над счетчикомкоманд позволяет очень быстро и эффективно осуществлять табличные преобразования вPIC-контроллерах.Микроконтроллеры подгруппы PIC16F8X имеют восьмиуровневый аппаратный стекшириной 13 бит (см. рис. 5.4).
Область стека не принадлежит ни к программной области, ник области данных, а указатель стека пользователю недоступен. Текущее значение счетчикакоманд посылается в стек, когда выполняется команда CALL или производится обработкапрерывания. При выполнении процедуры возврата из подпрограммы (команды RETLW,RETFIE или RETURN) содержимое счетчика команд восстанавливается из стека. РегистрPCLATH при операциях со стеком не изменяется.Стек работает как циклический буфер.
Следовательно, после того как стек былзагружен 8 раз, девятая загрузка перепишет значение первой. Десятая загрузка перепишетвторую и т.д. Если стек был выгружен 9 раз, счетчик команд становится таким же, как послепервой выгрузки.Признаков положения стека в контроллере не предусмотрено, поэтому пользовательдолжен самостоятельно следить за уровнем вложения подпрограмм.5.2.8. Прямая и косвенная адресацииКогда производится прямая 9-битная адресация, младшие 7 бит берутся как прямойадрес из кода операции, а два бита указателя страниц (RP1, RP0) из регистра статуса, какпоказано на рис. 5.7.Рис. 5.7. Методы адресации данных.Признаком косвенной адресации является обращение к регистру INDF. Любаякоманда, которая использует INDF (адрес 00h) в качестве регистра фактически обращается куказателю, который хранится в FSR (адрес 04h).
Чтение косвенным образом самого регистраINDF даст результат 00h. Запись в регистр INDF косвенным образом будет выглядеть какNOP, но биты статуса могут быть изменены. Необходимый 9-битный адрес формируетсяобъединением содержимого 8-битного FSR регистра и бита IRP из регистра статуса (см.рис. 5.7).Обратите внимание, что некоторые регистры специальных функций располагаются вбанке 1. Чтобы адресоваться к ним, нужно дополнительно установить в единицу бит RP0 врегистре статуса.5.2.9. Порты ввода/выводаКонтроллеры подгруппы PIC16F8X имеют два порта: PORTA (5 бит) и PORTB (8 бит)с побитовой индивидуальной настройкой на ввод или на вывод.ПортA (PORTA) представляет собой 5-битовый фиксатор, соответствующийвыводам контроллера RA<4:0>.
Линия RA4 имеет вход триггера Шмитта и выход соткрытым стоком. Все остальные линии порта имеют ТТЛ входные уровни и КМОПвыходные буферы. Адрес регистра порта А – 05h.Каждой линии порта поставлен в соответствие бит направления передачи данных,который хранится в управляющем регистре TRISA, расположенном по адресу 85h. Если битуправляющего TRISAрегистра имеет значение 1, то соответствующая линия будетустанавливаться на ввод.
Ноль переключает линию на вывод и одновременно выводит на неесодержимое соответствующего регистра-фиксатора порта. При включении питания вселинии порта по умолчанию настроены на ввод.На рис. 5.8 дана схема линий RA<3:0> порта A.Рис. 5.8. Схема линий RA <3:0> порта А. Выводы порта имеют защитные диоды к Vdd иVss.Операция чтения порта А считывает состояние выводов порта, в то время как записьв него изменяет состояние триггеров порта. Все операции с портом являются операциямитипа «чтение-модификация-запись». Поэтому запись в порт предполагает, что состояниевыводов порта вначале считывается, затем модифицируется и записывается в триггерфиксатор. Вывод RA4 мультиплексирован с тактовым входом таймера TMR0. Схема линииRA4 порта А приведена на рис.
5.9.Порт В (PORTB) – это двунаправленный 8-битовый порт, соответствующий выводамRB<7:0> контроллера и расположенный по адресу 06h. Относящийся к порту Вуправляющий регистр TRISB расположен на первой странице регистров по адресу 86h.Если бит управляющего TRISB регистра имеет значение 1, то соответствующая линия будетустанавливаться на ввод. Ноль переключает линию на вывод и одновременно выводит на неесодержимое соответствующего регистра защелки.
При включении питания все линии портапо умолчанию настроены на ввод.Рис. 5.9. Схема линии RA4 порта А. Вывод порта имеет защитный диод только к Vss.У каждой ножки порта В имеется небольшая активная нагрузка (около 100мкА) налинию питания (pull-up). Она автоматически отключается, если эта ножказапрограммирована как вывод. Более того, управляющий бит /RBPU регистра OPTION<7>может отключить (при RBPU=1) все нагрузки.
Сброс при включении питания такжеотключает все нагрузки.Четыре линии порта В (RB<7:4>) могут вызвать прерывание при изменении значениясигнала на любой из них. Если эти линии настроены на ввод, то они опрашиваются изащелкиваются в цикле чтения Q1. Новая величина входного сигнала сравнивается со старойв каждом командном цикле.
При несовпадении значения сигнала на ножке и в фиксаторегенерируется высокий уровень. Выходы детекторов «несовпадений» RB4, RB5, RB6, RB7объединяются по ИЛИ и генерируют прерываниеRBIF (запоминаемое в регистреINTCON<0>). Любая линия, настроенная как вывод, в этом сравнении не участвует.Прерывание может вывести кристалл из режима SLEEP. В подпрограмме обработкипрерывания следует сбросить запрос прерывания одним из следующих способов:− прочитать (или записать в) порт В.
Это завершит состояние сравнения;− обнулить бит RBIF регистра INTCON<0>.При этом необходимо иметь в виду, что условие «несовпадения» будет продолжатьустанавливать признак RBIF. Только чтение порта В может устранить «несовпадение» ипозволит обнулить бит RBIF.Прерывание по несовпадению и программно устанавливаемые внутренние активныенагрузки на этих четырех линиях могут обеспечить простой интерфейс, например, склавиатурой, с выходом из режима SLEEP по нажатию клавиш.Схемы линий порта B приведены на рис.
5.10 и 5.11.Рис. 5.10. Схема линий RB <7:4> порта B. Выводы порта имеют защитные диоды к Vdd иVss.Рис. 5.11. Схема линий RB <3:0> порта B. Выводы порта имеют защитные диоды к Vdd иVss.При организации двунаправленных портов необходимо учитывать особенностиорганизации ввода/вывода данных МК. Любая команда, которая осуществляет запись,выполняет ее внутри как «чтение-модификация-запись».
Например, команды BCF и BSFсчитывают порт целиком, модифицируют один бит и выводят результат обратно. Здесьнеобходима осторожность. В частности, команда BSF PORTB, 5 (установить в единицу бит 5порта B) сначала считывает все реальные значения сигналов, присутствующие в данныймомент на выводах порта. Затем выполняются действия над битом 5, и новое значение байтацеликом записывается в выходные фиксаторы. Если другой бит регистраPORTBиспользуется в качестве двунаправленного ввода/вывода (скажем, бит 0), и в данный моментон определен как входной, то входной сигнал на этом выводе будет считан и записан обратнов выходной триггер-фиксатор этого же вывода, стирая предыдущее состояние.
До тех пор,пока эта ножка остается в режиме ввода, никаких проблем не возникает. Однако еслипозднее линия 0 переключи тся в режим вывода, ее состояние будет неопределенным.На ножку, работающую в режиме вывода, не должны нагружаться внешниеисточники токов («монтажное И», «монтажное ИЛИ»). Большие результирующие токи могутповредить кристалл.Необходимо выдерживать определенную последовательность обращения к портамввода/вывода.
Запись в порт вывода происходит в конце командного цикла. Но при чтенииданные должны быть стабильны в начале командного цикла. Будьте внимательны воперациях чтения, следующих сразу за записью в тот же порт. Здесь надо учитыватьинерционность установления напряжения на выводах. Может потребоваться программнаязадержка, чтобы напряжение на ножке (которое зависит от нагрузки) успелостабилизироваться до начала исполнения следующей команды чтения.5.2.10. Модуль таймера и регистр таймераСтруктура модуля таймера/счетчика TIMER0 и его взаимосвязь с регистрами TMR0и OPTION показаны на рис.