Основы микропроцессорной техники

Раздел 5. Однокристальный микроконтроллер серии PIC


«Структура курса | Глава 1 | Глава 2 | Глава 3 | Глава 4 | Глава 5 | Глава 6 | Раздел 7 | Глава 8 | Дополнения

Раздел 5 - Страницы: « | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | »

5.2.10. Модуль таймера и регистр таймера

Структура модуля таймера / счетчика TIMER0 и его взаимосвязь с регистрами TMR0 и OPTION показаны на Рис. 5.12. TIMER0 является программируемым модулем и содержит следующие компоненты:

  • 8-разрядный таймер / счетчик TMR0 с возможностью чтения и записи как регистр;
  • 8-разрядный программно управляемый предыдущий делитель (предильник.
  • мультиплексор входного сигнала для выбора внутреннего или внешнего тактового сигнала;
  • схему выбора фронта внешнего тактового сигнала;
  • формирователь запроса прерывания по переполнением регистра TMR0 с FFh в 00h.

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

Режим счетчика выбирается путем установки в единицу бита T0CS регистра OPTION <5>. В этом режиме регистр TMR0 будет инкрементуватися или нарастающим или спадающим фронтом на выводе RA4/T0CKI от внешних событий. Направление фронта определяется управляющим битом T0SE в регистре OPTION <4>. При T0SE = 0 будет выбран нарастающий фронт.

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


Рис. 5.12. Структурная схема таймера / счетчика TMR0.

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

При PSA = 1 делитель будет подсоединен к сторожевого таймера как пислядильник (делитель на выходе). Возможные варианты использования предильника показаны на Рис. 5.13.

При использовании предильника вместе с TMR0, все команды, изменяющие содержимое TMR0, обнуляют предильник. Если предильник используется вместе с WDT, команда CLRWDT обнуляет содержимое предильника вместе с WDT.

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

Синхронизация происходит по окончании 2-го и 4-го тактов работы МК, поэтому, если предильник не используется, то для фиксации входного события необходимо, чтобы длительности высокого и низкого состояний сигнала на входе RA4/T0CKI были бы не менее 2 периодов тактовой частоты Tosc плюс некоторая задержка (~ 20 нс).

Если модуль TIMER0 используется вместе с предильником, то частота входного сигнала делится асинхронным счетчиком так, что сигнал на выходе предильника становится симметричным. При этом необходимо, чтобы длительности высокого и низкого уровней сигнала на входе RA4/T0CKI были не менее 10 нс. Синхронизация сигнала происходит на выходе предильника, поэтому существует небольшая задержка между фронтом внешнего сигнала и временем фактического инкремента таймера / счетчика. Эта задержка находится в диапазоне от 3 до 7 периодов колебаний тактового генератора. Таким образом, измерение интервала между событиями будет выполнено с точностью ± 4 · Tosc.


Рис. 5.13 Структура и возможные варианты использования предильника.

5.2.11. Память данных в РПЗП (EEPROM)

Микроконтроллеры подгруппы PIC6F8X имеют энергонезависимую память данных 64х8 EEPROM бит, допускает запись и чтение при нормальной работе (во всем диапазоне напряжений питания. Эта память не принадлежит к области реестровой памяти ОЗУ. Доступ к ней осуществляется с помощью непрямой адресации через регистры специальных функций: EEDATA <08h>, который содержит 8-битные данные для чтения / записи и EEADR <09h>, и включает адрес ячейки, в которой идет обращение. Для управления процессом чтения / записи используются два регистра: EECON1 <88h> и EECON2 <89h>.

При записи байта автоматически стирается предыдущее значение, и записываются новые данные (стирание перед записью). Все эти операции проводит встроенный автомат записи EEPROM. Содержимое ячеек этой памяти при выключении питания сохраняется.

Регистр EEADR может адресовать до 256 байт данных EEPROM. В МК подгруппы PIC6F8X используются только первые 64 байта, которые адресуются шестью младшими битами EEADR <5:0>. Однако старшие два бита также декодируются. Поэтому эти два бита должны быть установлены в '0 ', чтобы адрес попала в доступные 64 бита адресного пространства.

Назначение битов регистра EECON1 приведенное в табл. 5.6.

Табл. 5.6. Назначение битов регистра EECON1
(Адреса 88h.
U U U R/W-0 R / Wx R/W-0 R/S-0 R / Sx
- - - EEIF WRERR WREN WR RD
Бит 7 Бит 6 Бит 5 Бит 4 Бит 3 Бит 2 Бит 1 Бит 0
Биты 7:5 не используются (читаются как '0 ')
Бит 4: EEIF: бит запроса прерывания по записи в EEPROM
0 = операция записи не завершена или не начиналась
1 = операция записи завершена (нужно сбросить программно)
Бит 3: WRERR: бит признаки сбою в EEPROM
0 = операция записи завершена
1 = операция записи прервана преждевременно (сбросом по / MCLR или сбросом от WDT)
Бит 2: WREN: бит разрешения записи в EEPROM
0 = запрещен запись в EEPROM
1 = разрешены циклы записи
Бит 1: WR: бит управления записью
0 = цикл записи данных в EEPROM завершен
1 = инициирует цикл записи (сбрасывается аппаратно после завершения записи.
Бит WR может быть только установлен (но не сброшен) программно)
Бит 0: RD: бит управления чтением
0 = чтение данных EEPROM не инициировано
1 = инициирует чтение данных EEPROM (чтение занимает один цикл. Бит RD сбрасывается аппаратно.
Бит RD может быть только установлен (но не сброшен) программно)

Регистр EECON2 не является физическим регистром. Он используется исключительно при организации записи данных в EEPROM. Чтение регистра EECON2 дает нули.

При считывании данных из памяти EEPROM необходимо записать нужную адрес в EEADR регистр и затем установить бит RD EECON1 <0> в единицу. Данные появятся в следующем командном цикле в регистре EEDATA и могут быть прочитаны. Данные в регистре EEDATA фиксируются.

При записи в память EEPROM необходимо сначала записать адрес в EEADR-регистр и данные в EEDATA-регистр. Затем следует выполнить специальную последовательность команд, проводит непосредственную запись:

movlw 55h
movwf EECON2
movlw AAh
movwf EECON2
bsf EECON1, WR; установить WR бит, начать запись

Во время ыполнения этого участка программы все прерывания должны быть запрещены для точного выполнения временной диаграммы. Время записи - примерно 10 мс. Фактическое время записи может меняться в зависимости от напряжения, температуры и индивидуальных свойств кристалла. В конце записи бит WR автоматически обнуляется, а флаг завершения записи EEIF, он же запрос на прерывание, устанавливается.

Для предотвращения случайных записей в память данных предусмотрен специальный бит WREN в регистре EECON1. Рекомендуется держать бит WREN выключенным, кроме тех случаев, когда нужно обновить память данных. Более того, кодовые сегменты, которые устанавливают бит WREN, и те, которые выполняют запись, следует хранить по разным адресам, чтобы избежать случайного выполнения их обоих при сбое программы.

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

МК подгруппы PIC16F8X имеют четыре источника прерываний:

  • внешнее прерывание по выводу RB0/INT;
  • прерывания от переполнения счетчика / таймера TMR0;
  • прерывание от изменения сигналов на линиях порта RB <7:4>;
  • прерывания по окончании записи данных в EEPROM.

Все прерывания имеют тот же вектор / адрес - 0004h. Однако в управляющем регистре прерываний INTCON соответствующим битом-признаком записывается, от какого именно источника поступил запрос прерывания. Исключение составляет прерывания по завершении записи в EEPROM, признак которого находится в регистре EECON1.

Бит общего разрешения / запрета прерывания GIE (INTCON <7>) разрешает (если = 1) все индивидуально незамасковани прерывания или запрещает их (если = 0). Каждое прерывание в отдельности может быть дополнительно разрешено / запрещено установкой / сбросом соответствующего бита в регистре INTCON.

Бит GIE при сбросе обнуляется. Когда начинает обрабатываться прерывание, бит GIE обнуляется, чтобы запретить дальнейшие прерывания, адрес возврата пересылается в стек, а в программный счетчик загружается адрес 0004h. Время реакции на прерывание для внешних событий, таких как прерывания от ножки INT или порта B, составляет приблизительно пять циклов. Это на один цикл меньше, чем для внутренних событий, таких как прерывание по переполнением от таймера TMR0. Время реакции всегда одинаков.

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

Команда возвращения из прерывания RETFIE завершает прерывая подпрограмму и устанавливает бит GIE, чтобы снова разрешить прерывания.

Логика прерываний контроллера изображена на Рис. 5.14.


Рис.5.14. Логика прерываний микроконтроллера.

Внешнее прерывание на ножке RB0/INT осуществляется по фронту: либо по нарастающему (если в регистре OPTION бит INTEDG = 1), либо по ниспадающем (если INTEDG = 0). Когда фронт оказывается на ножке INT, бит запроса INTF устанавливается в единицу (INTCON <1>). Это прерывание может быть замаскировано сбросом управляющего бита INTE в ноль (INTCON <4>). Бит запроса INTF необходимо очистить прерывая программой перед тем, как вновь разрешить это прерывание. Прерывание INT может вывести процессор из режима SLEEP, если перед вход ом в этот режим бит INTE был установлен в единицу. Состояние бита GIE также определяет, будет ли процессор переходить на подпрограмму прерывания после выхода из режима SLEEP.

Переполнение счетчика TMR0 (FFh-> 00h) устанавливает в единицу бит запроса T0IF (INTCON <2>). Это прерывание может быть разрешено / запрещено установкой / сбросом бита маски T0IE (INTCON <5>). Сброс запроса T0IF - дело программы обработки.

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

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


«Структура курса Раздел 5 - Страницы: « | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | »