Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы_по_Семисалову[1].DOC
Скачиваний:
32
Добавлен:
25.09.2019
Размер:
7.69 Mб
Скачать
  1. Модуль таймера tmr1.

Таймер TMR1 имеет 16 – разрядный счетчик, выполненный на двух регистрах (TMR1H, TMR1L), доступных для записи и чтения. Модуль может работать в двух режимах:

- режим таймера,

- режим счетчика.

В режиме таймера инкрементируется содержимое 16-ти разрядного счетчика и при переполнении его устанавливается флаг прерывания TMR1IF в региcтре PIR1 <0>.

В режиме счетчика происходит приращение 16-ти разрядного счетчика, содержимое которого может быть прочитано в любой момент времени. При достижении значения FFh, счет начинается заново со значения 00h. Структурная схема модуля показана на рис 9.

Настройка модуля на различные режимы производится установкой соответствующих бит регистра T1CON (адрес 10h), значения которых приведены в таблице 17.

Таблица 17.

Номер разряда

7

6

5

4

3

2

1

0

Обозначение сигнала

-

-

T1CKPS1

T1CKPS0

T1OSCEN

-T1SYNC

TMR1CS

TMR1ON

Где:

T1CKPS1:T1CKPS0 – выбор коэффициента деления предделителя:

11 = 1:8

10 = 1:4

01 = 1:2

00 = 1:1

T1OSCEN – включение тактового генератора модуля TMR1:

  1. - генератор включен,

  1. - генератор выключен (инвертор и обратная связь отключены для уменьшения потребления тока),

-T1SYNC – синхронизация внешнего тактового сигнала (при TMR1CS = 1):

1 – не синхронизировать внешний тактовый сигнал,

0 – синхронизировать внешний тактовый сигнал.

TMR1CS - выбор источника тактового сигнала:

  1. – внешний источник тактового сигнала со входа RC0 (активный передний фронт),

  1. - внутренний источник Fosc/4.

TMR1ON - включение модуля TMR1:

  1. - модуль включен,

  1. - модуль выключен.

Пример программирования таймера TMR1.

Исходные данные примем те же, что и в примере программирования таймера TMR0:

1. Требуемая задержка -500 мсек.

2. Тактовый сигнал – внутренняя частота Fosc / 4 = 1 MHz/

3. Режим работы модуля – таймер.

Максимальное время срабатывания самого таймера составляет:

t max = 256*256 * 1 = 65536 мксек (счетчик таймера сдвоенный TMR1H и TMR1L

С включенным предделителем: T max = t max * 8 = 524288 мксек., т.е. максимальное время самого таймера TMR1 больше требуемого. Разность времен 24288 мксек компенсируем за счет уменьшения длительности цикла самого таймера путем записи в регистр таймера (TMR1H и TMR1L) некоторого числа:

mm = (24288 / 8)h = 0CBA

где: 24288 – разность максимального и требуемого времени,

8 – коэффициент деления предделителя таймера TMR1,

Текст программы.

#define XTAL_FREQ 4MHZ //Частота тактового генератора 4 MHZ

#define byte unsigned char

#define word unsigned int

#include <pic.h>

#include <stdio.h>

__CONFIG(HS & WDTDIS & PWRTEN & LVPDIS & DUNPROT & WRTEN);

void main() {

TRISB = 0xff; // порт В на вход

TRISC = 0x00; // порт С на выход

T1CON = 0x30; //настройка таймера TMR1

for(;;) { // цикл всей программы

for (;!RC0 ;) {

RC0 = (RB0&&RB1&&RB2&&RB4) || (RB0&&RB2&&!RB3&&RB4);

} // решение булевых уравнений фрагмента

TMR1IF= 0; // сброс флага TMR1

TMR1H = 0x0C; //начальная установка таймера

TMR1L = 0xBA;

TMR1ON = 1; //пуск таймера TMR1

for (; !TMR1IF ;) { // цикл таймера TMR1

RC0 = 0; // отключение Кп

}

} // конец main

Примечание. Код настройки таймера 30 (00110000) по порядку соответствует:

    1. <7,6> – не программируется,

11 <5,4> – настройка предделителя 1:8

0 <3> - внутренний генератор отключен.

0 <2> - синхронизация входного сигнала отсутствует

0 <1> - внутренний источник входных импульсов

0 <0> - таймер TMR1 пока выключен.