MC_PIC (1031647), страница 5
Текст из файла (страница 5)
5.12. TIMER0 является программируемым модулем и содержитследующие компоненты:− 8-разрядный таймер/счетчик TMR0 с возможностью чтения и записи как регистр;− 8-разрядный программно управляемый предварительный делитель (пределитель);− мультиплексор входного сигнала для выбора внутреннего или внешнего тактовогосигнала;− схему выбора фронта внешнего тактового сигнала;− формирователь запроса прерывания по переполнению регистра TMR0 с FFh до 00h.Режим таймера выбирается путем сбрасывания в ноль бита T0CS регистра OPTION<5>.
В режиме таймераTMR0 инкрементируется каждый командный цикл (безпределителя). После записи информации в TMR0 инкрементирование его начнется последвух командных циклов. Это происходит со всеми командами, которые производят записьили чтение-модификацию-запись TMR0 (например, MOVF TMR0, CLRF TMR0).
Избежатьэтого можно при помощи записи в TMR0 скорректированного значения. Если TMR0 нужнопроверить на равенство нулю без останова счета, следует использовать инструкцию MOVFTMR0,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).UUU-R/W-0EEIFR/W-xWRERRR/W-0WRENR/S-0WRR/S-xRD--Бит 7Бит 6Бит 5Бит 4Бит 3Бит 2Бит 1Бит 0Биты 7:5 не используются (читаются как ‘0’)Бит 4: EEIF: бит запроса прерывания по записи в EEPROM0 = операция записи не завершена или не начиналась1 = операция записи завершена (должен быть сброшен программно)Бит 3: WRERR: бит признака ошибки записи в EEPROM0 = операция записи завершена1 = операция записи прервана преждевременно (сбросом по /MCLR или сбросом от WDT)Бит 2: WREN: бит разрешения записи в EEPROM0 = запрещена запись в EEPROM1 = разрешены циклы записиБит 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 55hmovwf EECON2movlw AAhmovwf EECON2bsf 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 при сбросе обнуляется.