Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Глава 14

.pdf
Скачиваний:
26
Добавлен:
18.02.2016
Размер:
1.11 Mб
Скачать

 

Конфигурирование контактов SPI интерфейса контроллера и настройка пара-

 

метров формируемых сигналов в соответствие с требованиями slave-устройства

 

Передача в РПЗУ команды WREN для разрешения записи

 

Передача в РПЗУ команды WRSR для задания разрешенных для записи облас-

 

 

 

 

тей памяти РПЗУ

 

Формирование задержки TW для осуществления физического цикла записи

 

Передача в РПЗУ команды WREN для разрешения записи (запрет записи вклю-

 

чается автоматически после выполнения предыдущей команды WRSR)

 

Передача в РПЗУ команды WRITE (команда, адрес, данные) для записи бай-

 

 

та данных по установленному адресу в РПЗУ

 

Передача в РПЗУ команды RDSR для чтения бита WIP в регистре статуса РПЗУ

 

нет

 

 

Запись окончена (WIP = 0)

 

 

 

 

 

 

 

 

да

 

Передача в РПЗУ команды READ (команда, адрес) для чтения байта дан-

 

 

 

ных по установленному адресу в РПЗУ

 

 

 

Прием данных, полученных из РПЗУ

Рис. 154 Блок-схема ПО для организации циклического записи/чтения од-

 

ного байта данных для микросхемы РПЗУ типа 25С04

 

#include <p16f877.inc>

; подключение заголовочного файла

 

 

 

errorlevel

-302

 

; установка уровня вывода сообщений об ошибках

 

 

 

w

equ 0

 

 

; директивы присваиваний, для удобства указания регистра со-

 

 

хранения результата выполнения команды

f

equ 1

 

 

 

 

 

rxdata

equ 20h

 

 

; объявление вспомогательного регистра для хранения принятого

 

 

в SSPBUF байта данных от микросхемы памяти

 

 

 

 

addr

equ 22h

loops

equ 23h

outbyte

equ 24h

temp1

equ 25h

temp2

equ 26h

CS

equ 0х02

 

org 0x000

 

clrf STATUS

 

movlw 0x00

 

movwf PCLATH

 

goto Begin

Begin

 

 

 

bcf STATUS, RP0

 

bcf STATUS, RP1

 

movlw b'00001111'

 

movwf OPTION_REG

start

 

 

 

bsf

STATUS, RP0

 

movlw 0x10

 

movwf TRISC

 

movlw 0x11

 

movwf TRISB

 

bcf

STATUS, RP0

 

bsf

PORTB, CS

 

clrf

SSPCON

movlw 0x31

movwf SSPCON bsf STATUS, RP0 clrf SSPSTAT movlw 0x80

movwf SSPSTAT bcf STATUS, RP0 movlw 0x55 movwf addr

bcf PORTB, CS

;объявление вспомогательного РОН для хранения адреса (в примере равного 0х55) ячейки ПЗУ, в который осуществляется запись и из которого происходит чтение данных в данном примере

;объявление вспомогательного РОН для хранения числа 0х10 в процедуре wait (см. ниже)

;объявление вспомогательного РОН для хранения байта, передаваемого мастер-контроллером по выходу SDO

;объявление вспомогательных регистров для хранения констант, определяющих суммарное время задержки в процедуре delay

;директива присваивания, для удобства указания номера контакта порта В (RB2), управляющего выбором микросхемы памяти по входу CS

(см. обязательную структуру ASM-файла для компиляции и исполнения в составе контроллера TTF 5.0 в «Методические указания к лаб. работам по курсу ПЦУ»)

(см. обязательную структуру ASM-файла для компиляции и исполнения в составе контроллера TTF 5.0 в «Методические указания к лаб. работам по курсу ПЦУ»)

;метка начала основной программы работы с микросхемой памяти

;выбор 1-го банка памяти для конфигурирования TRISC

;конфигурирование контактов RC3, RC5 как выходов, а RC4 – вход

;конфигурирование контакта RВ2 как выход, а остальные в соответствии с описанием контроллера (см. Назначение контактов контроллера TTF 5.0 в «Методические указания к лаб. работам по курсу ПЦУ»)

;установка 0-го банка для последующего обращения к регистрам

PORTB, SSPCON

;выключение микросхемы памяти за счет CS=1

;очистка регистра (выключение модуля SPI, необходимое при повторном переходе на метку start, при зацикливании ПО), для последующего его конфигурирования (рис. 144), при работе в эмуляторе команда не обязательна

;включение модуля SPI, путем установки SSPEN=1, установка требуемого для микросхемы памяти пассивного высокого уровня

CKP=1, установка скорости обмена FOSC /16 = 250 кГц (рис. 141,

144)

;установка 1-го банка для последующего обращения к регистру SSPSTAT и предварительная очистка этого регистра

;установка момента отсчета бита по входу SDI в конце тактового интервала (SMP=1), выбор режима передачи битов на выходе SDO при котором их сдвиг (передача) происходит по переднему фронту синхросигнала (CKE=0) (рис. 141, 143, 144)

;установка 0-го банка для последующего обращения к регистру addr и запись числа 0х55 (адрес будущей ячейки ПЗУ) в этот регистр (через W) для дальнейшего использования

;начало посылки команды WREN (необходимой для последующих операций записи с микросхемой памяти) и включение (активизация) микросхемы РПЗУ по входу CS=0

movlw 0x06 movwf outbyte call output

bsf

PORTB, CS

bcf

PORTB, CS

movlw 0x01 movwf outbyte

call output

movlw 0x00 movwf outbyte call output

bsf

PORTB, CS

call

delay

bcf

PORTB, CS

movlw

0x06

movwf

outbyte

call output

bsf

PORTB, CS

bcf

PORTB, CS

movlw

0x02

movwf

outbyte

call

output

movf addr, W movwf outbyte call output movlw 0xAA movwf outbyte call output

bsf PORTB,CS bcf PORTВ, CS movlw 0x05 movwf outbyte call output movlw 0x1F movwf loops

wait

decfsz loops,f goto wait

;загрузка кода команды WREN (0х06, см. Табл. 11) в регистр outbyte через W для последующей отправки на выход SDO посредством процедуры output

;вызов процедуры output, осуществляющей передачу байта из регистра outbyte на выход SDO контроллера

;выключение микросхемы РПЗУ по ее входу CS=1

;начало посылки команды WRSR (необходимой для задания областей памяти РПЗУ доступных для записи) и включение (активизация) микросхемы РПЗУ по входу CS=0

;загрузка кода команды WRSR (0х01, см. Табл. 11) в регистр outbyte через W для последующей отправки на выход SDO посредством процедуры output

;вызов процедуры output, осуществляющей передачу байта из регистра outbyte на выход SDO контроллера

;загрузка кода байта статуса (0х00, см. Рис. 151, 145 для установки BP0=BP1=0 для разрешения записи во всю область памяти РПЗУ) в регистр outbyte через W для последующей отправки на выход SDO посредством процедуры output и вызов процедуры output, осуществляющей передачу байта из регистра outbyte на выход SDO контроллера

;выключение микросхемы РПЗУ по ее входу CS=1

;вызов процедуры задержки delay формирующий задержку выполнения ПО, а следовательно и сохранение CS=1, в течение ≈ 15

мс, необходимый для времени цикла записи TWC (см. описание команды WRSR)

;передача команды WREN (см. выше) для «открытия замка защиты от записи» автоматически закрывшегося после выполнения предыдущей операции записи байта в регистр статуса РПЗУ

WRSR

;начало режима записи WRITE, активизация РПЗУ

;загрузка кода команды WRITE (0х02, см. Табл. 11) в регистр outbyte через W для последующей отправки на выход SDO посредством процедуры output и вызов процедуры output, осуществляющей передачу байта из регистра outbyte на выход SDO контроллера

;загрузка в регистр outbyte (через W) адреса ячейки РПЗУ в которую будет производиться запись. Адрес (0х55) хранился в РОН – addr. Вызов процедуры output для передачи байта адреса

;передача числа 0хАА в РПЗУ, которое запишется в ячейку с адресом 0х55. Выключение микросхемы памяти путем CS=1. В этот момент в РПЗУ начинается физический процесс записи числа 0хАА в ячейку с адресом 0х55, он будет длиться до тех пор пока бит WIP в регистре статуса РПЗУ не станет равным 0

;ожидание окончания процесса записи, путем чтения состояния 0-го бита регистра статуса командой RDSR (это единственная команда на которую реагирует РПЗУ во время цикла записи). Для этого активизируется РПЗУ, подается команда RDSR стандартным образом через процедуру output

;запись числа 31 в регистр loops

;дополнительное время ожидания (32х(8+8) тактов) для установления WIP=0, осуществляется через уменьшение содержимого регистра loops на 1 в каждом цикле с проверкой loops=0 для выхода из процедуры wait. Строго говоря, данная процедура не явл. обязательной, но MicroChip в [14] ее рекомендует исполнять

polling

bcf

PORTB, CS

call

output

call

output

bsf

PORTB, CS

btfsc

rxdata,0

goto

polling

bcf

PORTВ, CS

movlw 0x03 movwf outbyte call output movf addr, W movwf outbyte call output

call output

bsf PORTC,CS goto start

output

……………………

delay

movlw 0x32 movwf temp1

dec1

movlw 0xFA movwf temp2

dec2

decfsz temp2,1 goto dec2 decfsz temp1,1 goto dec1 retlw 0

END

;метка опроса бита WIP

;включение РПЗУ, осуществляемое в силу того, что в теле процедуры polling после чтения содержимого регистра статуса микросхему РПЗУ выключают в соответствие с форматом команды RDSR и при повторном вызове процедуры ее надо включить снова (строго говоря, первый раз эта процедура явл. «лишней»)

;передача команды RDSR, чтобы «заставить» микросхему памяти «ответить» о своем статусе. При первом выполнении метки polling эта команда не нужна, т.к. ранее она уже была послана, но при зацикливании ПО на метку polling команда RDSR нужна чтобы продолжать читать ее статус

;прием байта текущего статуса РПЗУ (хотя и осуществляемый вместе с ненужной теперь командой RDSR) и помещение его в регистр rxdata

;выключение РПЗУ

;проверка равен ли 0 нулевой бит содержимого регистра rxdata, а это бит WIP, если еще нет, то ждем, если да – то выходим из цикла: процедура записи корректно завершена.

;продолжение ожидания окончания цикла записи WIP=0 (интересно отметить, что эта процедура фактически дублирует процедуру delay, выдерживая требуемое время цикла, которое в процедуре delay строго берется по верхнему пределу 5 мс)

;активизация РПЗУ для начала режима чтения содержимого ячейки с адресом 0х55

;посылка по SPI интерфейсу команды READ (0x03, см. Табл. 11)

;посылка по SPI интерфейсу адреса читаемой ячейки, берущемуся из регистра addr

;чтение содержимого ячейки с адресом 0х55, хотя, строго говоря, при этом повторно передается адрес, микросхема РПЗУ в соответствие с форматом команды READ на этот байт «не обращает внимания»

;выключение микросхемы памяти

;зацикливание основной программы

;тело процедуры (см. выше)

;тело процедуры задержки ≈ 250 х 50 х 1 мкс = 12,5 мс для выдержки времени цикла записи.

;Работа процедуры delay аналогична процедуре Big_delay, описание которой приведено в «Методические указания к лаб. работам по курсу ПЦУ»

14.4Модули таймеров

14.4.1Структура модулей таймеров и особенности их работы с учетом архи-

 

 

тектуры контроллера TTF 5.0

 

В состав микроконтроллера PIC 16F877 входят три независимых модуля

таймеров-счетчиков (далее - таймеров) TMR0, TMR1, TMR2 (заштрихованы на

рис. 155). Как и в микроконтроллере 16С52 они предназначены для организации

FOSC/4 (= 1 мкс)

 

 

 

 

 

RA4

RC0

RC1

 

 

 

 

 

TMR1

ШИМ1

WDT

TMR0

 

TMR2

 

 

 

 

 

 

 

 

ШИМ2

 

 

TMR1H

TMR1L

 

 

8

 

 

 

8

RESET

 

 

16

 

 

 

 

 

 

 

 

 

шина данных (8 разрядов)

 

 

Рис. 155 Обобщенная структура модулей счетчиков-таймеров

 

 

микроконтроллера PIC16F877

 

подсчета числа внешних или внутренних событий (импульсов) и выдаче этого

числа на шину данных (ШД) микроконтроллера. Архитектура, конфигурирова-

ние и работа этих модулей будут рассмотрены ниже, сейчас приведем лишь ре-

жимы их работы.

 

 

 

 

Модуль TMR0:

 

 

 

 

-представляет собой 8-ми разрядный суммирующий счетчик, состояние которого (через регистр TMR0) доступно на ШД и может работать в режиме подсчета числа внешних импульсов, поступающих на вход RA4, или в режиме

подсчета числа внутренних импульсов FOSC/4, частота которых в контроллере TTF 5.0 составляет 1 МГц;

-управляет периодом сброса сторожевого таймера WDT, определяя моменты перезагрузки (сигнал RESET на рис. 155) процессора при некорректной работе ПО.

К сожалению, из-за влияния внутрисхемного резидентного загрузчика (см. «Методические указания к лаб. работам по курсу ПЦУ») при работе микроконтроллера в составе контроллера TTF 5.0 сторожевой таймер – НЕ ОТКЛЮЧАЕТСЯ. В связи с этим, при работе с этим модулем в составе контроллера TTF

5.0необходимо учитывать следующие особенности:

-необходимость установки максимального периода (в регистре OPTION_REG, который управляет таймером TMR0) срабатывания сторожевого таймера;

-невозможность использования таймера TMR0 как для обработки

внешних сигналов с контакта RA4, так и для ЛЮБЫХ иных целей, т.к. при любых попытках его переконфигурирования или использования возможно срабатывание WDT, нарушающего нормальное функционирование ПО.

Модуль TMR1 - представляет собой 16-ти разрядный суммирующий счетчик, состояние которого в виде двух байт: старшего H и младшего L (через ДВА 8-ми разрядных регистра TMR1H и TMR1L) доступно на ШД. Может работать в режиме подсчета числа внешних импульсов, поступающих на один из входов

RС0 или RC1, или в режиме подсчета числа внутренних импульсов FOSC/4,

частота которых в контроллере TTF 5.0 составляет 1 МГц;

-максимальное число импульсов, которое может подсчитать этот модуль, составляет 219 (из них – 216 сам таймер, а 23 – предварительный делитель, установленный перед ним).

С учетом имеющейся жесткой аппаратной архитектуры периферийных устройств, подключенных к микроконтроллеру на плате контроллера TTF 5.0, функционирование этого модуля в составе контроллера TTF 5.0 имеет сле-

дующую особенность:

-аппаратно НЕВОЗМОЖНО использовать таймер TMR1 для подсчета внешних импульсов с входов RC0, RC1, т.к. указанные контакты микроконтроллера аппаратно должны быть выходными в силу подключения к ним интегратора для организации цифроаналогового преобразования на основе модуля ши- ротно-импульсной модуляции (ШИМ) (рис. 47 в п. 11.2, а также п. 14.3).

Модуль TMR2:

-представляет собой 8-ми разрядный суммирующий счетчик, состояние которого (через регистр TMR2) доступно на ШД и может работать ТОЛЬКО в

режиме подсчета числа внутренних импульсов FOSC/4, частота которых в контроллере TTF 5.0 составляет 1 МГц;

-формирует временные параметры (период и длительность) выходных сигналов двух модулей ШИМ.

-максимальное число импульсов, которое может подсчитать этот модуль, составляет 216 (из них – 28 сам таймер, 24 – предварительный делитель, установленный перед ним, и 24 – постделитель, установленный после таймера).

Общим для всех модулей является тот факт, что с их помощью организовать подсчет числа внешних по отношению к контроллеру событий – невозможно. Другими словами, в составе этого контроллера модули могут работать только

врежиме таймеров.

При программировании этого модуля в составе контроллера TTF 5.0 необходимо учитывать следующие особенности:

-возможно автономное использование TMR2 для отсчета интервалов времени (а не только для управления модулями ШИМ);

-в связи с тем, что TMR2 одновременно управляет работой обоих модулей ШИМ, период сигналов, генерируемых этими модулями будет всегда одинаков:

ТШИМ1 = ТШИМ2 (отличаться могут только длительности выходных импульсов, см.

п. 14.5).

14.4.2Особенности программирования модуля TMR0

С учетом изложенных выше особенностей и ограничений модулей рассмотрим более подробно архитектуру и программирование модуля TMR0 (0x01 или 0х101). Этот модуль во многом повторяет структуру таймера TMR0 микроконтроллера 16С52 (см. п.п. 6.1, 6.3.1). Отличий три:

 

 

OPTION_REG (0x81 или 0х181)

 

 

7

6

5

4

3

2

1

0

x

x

T0CS

x

PSA

PS2

PS1

PS0

0

0

0

0

1

1

1

1

 

Рис. 156 Обязательные значения бит регистра OPTION_REG

-изменено название управляющего регистра, вместо OPTION используется имя OPTION_REG. Кроме того, в адресном пространстве памяти данных таких регистров – два: в первом банке с адресом 0х81 и в 4-ом с адресом – 0х181. Как уже отмечалось выше, этот таймер используется в контроллере TTF 5.0 для установки максимального времени срабатывания НЕОТКЛЮЧАЕМОГО сторожевого таймера. Это делается путем установки максимального коэффициента деления предделителя с настройкой на подсчет внутренних импульсов CLK. Для этого в разрабатываемое ПО вносятся обязательные дополнения (см. Методические указания к лаб. работам по курсу ПЦУ). Эти изменения позволяют реже использовать команду принудительного сброса сторожевого таймера clrwdt в теле ПО. В связи с этим, ни для каких других целей использовать, а соответственно и пере-

конфигурировать этот таймер – НЕЛЬЗЯ. Поэтому на рис. 156 приведены ОБЯЗАТЕЛЬНЫЕ значения бит регистра OPTION_REG, а для их расшифровки можно воспользоваться рис. 9 и Табл. №2.

-регистров TMR0 в адресном пространстве памяти данных тоже два: в нулевом банке с адресом 0х01 и в 3-ом с адресом – 0х101;

-модуль таймера TMR0 не требует включения, при запуске микроконтроллера он начинает работать автоматически, в соответствие с настройкой битов конфигурации в регистре OPTION_REG.

14.4.3Структурная схема и особенности программирования модулей TMR1

иTMR2 с учетом архитектуры контроллера TTF 5.0

Учитывая, что модули TMR1, TMR2 в составе контроллера TTF 5.0 могут свободно (в отличие от TMR0, обслуживающего не отключаемый сторожевой таймер) использоваться для решения прикладных задач, рассмотрим их работу более подробно.

16-ти разрядный модуль таймера TMR1 (при работе микроконтроллера 16F877 в составе контроллера TTF 5.0) осуществляет подсчет числа тактовых

импульсов CLK, с частотой 1 МГц (= 4 МГц : 4, что составляет 1 мкс), увеличивая свои показания на 1 с приходом каждого из них. Как и в 16С52 тактовые импульсы поступают на таймер не непосредственно, а через программируемый предварительный делитель, коэффициент деления которого может изменяться от

1:1 до 1:8.

Структурная схема таймера TMR1 с управляющим регистром приведена на рис. 157. Работа модуля начинается с его конфигурирования с помощью спе-

 

 

 

 

W

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

PIR1 (0x0C)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

TMR1IF=1

 

FOSC/4

 

 

 

K=1:1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(1 мкс)

предделитель

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

таймер

 

: 1, 2, 4, 8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

вкл/выкл

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

x

T1CKPS1

T1CKPS1

 

х

 

TMR1CS

 

TMR1ON

7

6

5

 

4

3

2

1

0

T1CON (0x10)

TMR1H

(0х0F)

шина данных

 

 

 

 

TMR1L

(0x0E)

 

 

 

Рис. 157 Структурная схема таймера TMR1 микроконтроллера 16F877

циального регистра T1CON (имеющего адрес 0х10). Посредством бит T1CKPS1T1CKPS0 выбирается один из 4-х возможных коэффициентов деления предделителя. Эти операции должны производиться при ВЫКЛЮЧЕННОМ таймере (бит

TMR1ON=0).

Запуск таймера (т.е. разрешение начала подсчета) осуществляется битом TMR1ON в этом же регистре T1CON. В процессе работы таймера, 16-ти разрядный двоичный эквивалент числа импульсов с периодом 1 мкс (FOCS/4 ), автоматически записывается в два регистра – старшие с 15-ого по 8-ой разряды в регистр TMR1H, младшие с 7-го по 0-ой в регистр TMR1L. Учитывая, что максимальный КСЧ таймера равен 216 (без учета предделителя), следующим 65536-ым тактовым импульсом он устанавливается в состояние 0х0000, и в специальном регистре PIR1 (0x0C, на рис. 157 показан лишь один его бит) устанавливается в единицу бит (флаг) TMR1IF=1 (это происходит каждый раз при обнулении таймера TMR1). На практике этим можно пользоваться для индикации окончания подсчета.

В силу доступности регистров TMR1H, TMR1L для записи, на таймере

TMR1 можно организовать счетчик и с любым другим коэффициентом деления. Для этого

 

 

 

 

T1CON (0x10)

 

 

 

 

ПЕРЕД

ЗА-

 

 

 

 

 

 

 

 

 

ПУСКОМ

 

 

 

 

 

 

 

 

 

 

 

 

7

6

5

4

3

2

1

0

 

таймера

не-

 

 

 

 

 

 

 

 

 

 

обходимо

 

в

 

x

x

T1CKPS1

T1CKPS0

 

х

 

TMR1ON

 

 

 

 

 

 

 

регистры

 

 

 

 

 

 

 

 

 

 

 

TMR1H,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

0

 

 

TMR1L запи-

 

 

 

Выбор коэффициента деле-

 

Вкл/выкл

сать число

-

 

 

 

 

 

 

 

 

 

ния предделителя

 

 

 

модуля тай-

N,

начиная

с

 

 

 

00 – 1:1

 

 

 

мера

которого

бу-

 

 

 

01 – 1:2

 

 

 

0 – выключен

дет

считать

 

 

 

10 – 1:4

 

 

 

1 – включен

 

 

 

 

 

 

таймер после

 

 

 

11 – 1:8

 

 

 

 

 

 

 

 

 

 

 

 

 

запуска. В ре-

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 158 Обязательные значения бит регистра T1CON

зультате

это-

 

 

го коэффици-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ент

счета

та-

 

 

 

 

 

 

 

 

 

 

кого «нового» таймера будет (216 – N). Но в этом случае необходимо учитывать две особенности:

- при записи числа из W в TMR1H, TMR1L происходит аппаратный (не зависящий от Вашего ПО) сброс установленного ранее коэффициента деления предделителя до значения 1:1, поэтому в процессе работы счетчика такую запись осуществлять нельзя (таймер надо предварительно остановить). После записи,

необходимо установить требуемый КПРЕДЕДЕЛИТЕЛЯ (битами T1CKPS) и вновь запустить таймер битом TMR1ON;

- для сохранения установленного модуля счета (216 – N), число N необходимо записывать в регистры TMR1H, TMR1L каждый раз после окончания счета, а для этого потребуется останавливать счетчик (и восстанавливать исходное значение коэффициентом деления предделителя).

Примечание: другими словами, при необходимости использования управляемого коэф-

фициента деления таймера, от предделителя целесообразно отказаться, установив КПРЕДЕДЕЛИТЕЛЯ = 1. В противном случае, необходимо делать запись в TMR1L, H и устанавливать КПРЕДЕ-

ДЕЛИТЕЛЯ в «промежутке» между счетными импульсами.

Таймер TMR1 на практике удобно использовать для организации подсчета длительности временных интервалов. В этом случае, например, если был уста-

новлен КПРЕДДЕЛИТЕЛЯ = 4, а счетчик досчитал, скажем, до 27 458, то длительность интервала времени составит: 27 458*4*1 мкс ≈ 110 мс или 0,1 секунды.

Назначение бит регистра T1CON, управляющего работой таймера TMR1 с

учетом аппаратных ограничений контроллера TTF 5.0 приведено на рис. 158.

Как уже отмечалось выше, модуль таймера TMR1 при работе в составе промышленного контроллера TTF 5.0 не может работать в режиме подсчета внешних импульсов с входа RC0, т.к. в составе контроллера этот контакт является выходом и задействован для формирования управляющих сигналов. Поэтому в составе регистра T1CON в этом случае используются НЕ ВСЕ биты (они на рис. 158 отме-

W

 

 

 

 

 

 

 

 

W

 

 

 

 

 

FOSC/4

 

 

 

K=1:1

 

 

 

K=1:1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

предделитель

 

TMR2

 

 

 

постделитель

(1 мкс)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

: 1, 4, 16

 

 

(0x11)

: 1 ---- : 16

КСЧ

PR2 (0x92)

ШД Вкл/Выкл

TMR2IF = 1 (PIR1, 0x0C)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

TOUTPS3

TOUTPS2

TOUTPS1

TOUTPS0

TMR2ON

T2CKPS1

T2CKPS0

 

7

6

 

5

 

4

3

 

2

1

0

 

T2CON (0x12)

Рис. 159 Структурная схема таймера TMR2 микроконтроллера 16F877

чены значком «х» и их значение безразлично в этом режиме), а значения некоторых используемых битов жестко фиксировано на прием только внутренних тактовых импульсов FOSC/4 (на рис. 158 приведены их ОБЯЗАТЕЛЬНЫЕ значения).

Структурная схема таймера TMR2 с управляющим регистром T2CON приведена на рис. 159. Основное отличие этого таймера от двух предыдущих состоит в том, что в нем аппаратно реализована возможность изменять его мо-

дуль счета в процессе его работы без остановки самого таймера. Это связано с тем, что этот таймер является задающим генератором для модулей ШИМ (см. п. 14.3), которые формируют импульсы с переменной скважностью. Для этого в состав модуля был введен специальный регистр периода PR2, доступный по шине данных для записи и чтения, который позволяет устанавливать текущий модуль счета таймера. Число, записанное в этот регистр, является модулем счета таймера, т.е. когда таймер «досчитывает» до этого числа он сбрасывается в 0. Особенность модуля состоит в том, что это число можно перезаписывать в регистр PR2 в процессе работы таймера без нарушения его функционирования. В этом случае таймер «досчитает» до «старого» модуля, сбросится в 0, и начнет новый цикл (период) уже «будучи уверенным», что у него уже «новый», предварительно записанный в PR2, модуль счета.

Работа модуля начинается с конфигурирования таймера с помощью специального регистра T2CON (имеющего адрес 0х12). Конфигурирование заключает-

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