Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PIC16F877.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.15 Mб
Скачать

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

TMR0 – таймер/счетчик имеет следующие особенности:

  • 8-разрядный таймер/счетчик;

  • Возможность чтения и записи текущего значения счетчика;

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

  • Внутренний или внешний источник тактового сигнала;

  • Прерывания при переполнении (переход от FFh к 00h).

;================= WR_EEPRPOM ================================

; П/П записи измерений в EEPROM

; Входные параметры: VALUE – данные для записи в EEPROM

; ADRES-адрес записи очередного измерения в EEPROM

;==============================================================

WR_EEPROM:

bcf INTCON,GIE ;ЗАПРЕТ ВСЕХ ПРЕРЫВАНИЙ

bsf STATUS,RP0 ;3-банк

bsf STATUS,RP1

btfsc EECON1,WR ;проверка отсутствия записи или завершения

goto $-1

bcf STATUS,RP0 ;0-банк

bcf STATUS,RP1

movf ADRES,W ;загрузить ADRES в W

bsf STATUS,RP1 ;2-банк

movwf EEADR ;загрузить ADRES(W) в EEADR

bcf STATUS,RP1 ;0-банк

movf VALUE,W ;загрузить данные(VALUE) в W

bsf STATUS,RP1 ;2-банк

movwf EEDATA ;загрузить VALUE (W) в EEDATA

bsf STATUS,RP0 ;3-банк

bcf EECON1,7 ;EEPGD=0(выбор между EEPROM и FLASH)

bsf EECON1,WREN ;разрешить запись

;*****************************************

movlw h'55' ;служебные инструкции

movwf EECON2

movlw h'aa'

movwf EECON2

;*****************************************

bsf EECON1,WR ;запуск процедуры записи

bcf EECON1,WREN ;запрет записи

bcf STATUS,RP0 ;0-банк

bcf STATUS,RP1

bsf INTCON,GIE ;РАЗРЕШЕНИЕ ВСЕХ ПРЕРЫВАНИЙ

return

Рисунок 1.3

Когда бит T0CS сброшен в '0' (OPTION_REG<5>), TMR0 работает от внутреннего сигнала. Приращение счетчика TMR0 происходит в каждом машинном цикле (если предделитель отключен). После записи в TMR0 приращение счетчика запрещено два следующих цикла. Пользователь должен скорректировать эту задержку перед записью нового значения в TMR0.

Когда бит T0CS установлен в '1' (OPTION_REG<5>), TMR0 работает от внешнего источника тактового сигнала с входа RA4/T0CKI. Активный фронт внешнего тактового сигнала выбирается битом T0SE в регистре OPTION_REG<4> (T0SE = 0 – активным является передний фронт сигнала).

Предделитель может быть включен перед WDT или TMR0, в зависимости от состояния бита PSA (OPTION_REG<3>). Нельзя прочитать или записать новое значение в предделитель.

Пример работы с таймером TMR0 смотри в разделе 3.7, Лабораторная работа № 7.

1.10.1 Прерывания от tmr0

Прерывания от TMR0 возникают при переполнении счетчика, т.е. при переходе его значения от FFh к 00h. При возникновении прерывания устанавливается в '1' бит T0IF (INTCON<2>). Само прерывание может быть разрешено/запрещено установкой/сбросом бита T0IE (INTCON<2>) должен быть сброшен в подпрограмме обработки прерываний. В SLEEP режиме микроконтроллера модуль TMR0 выключен и не может генерировать прерывания.

1.10.2 Использование внешнего источника тактового сигнала для tmr0

Если предделитель не используется, внешний тактовый сигнал поступает непосредственно на синхронизатор. В этом случае, рекомендуемая длительность высокого или низкого логического уровня внешнего сигнала должна быть не меньше 2Tosc (плюс небольшая задержка внутренней RC цепи 20нс).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]