Программирование таймеров/счетчиков

36690
знаков
28
таблиц
0
изображений

В составе любого микроконтроллера содержится хотя бы один таймер/счетчик. В микроконтроллерах они используются для задания интервалов времени и для подсчета внешних событий. Многие таймеры могут работать в режиме широтно-импульсного модулятора. Эти действия можно осуществить и программным путем, но в этом случае замедляется выполнение других действий, а в некоторых случаях делает их невозможным. Использование для выполнения каких-то действий дополнительных устройств увеличивает быстродействие программы и расширяет возможности микроконтроллера. Взаимодействие основной программы с дополнительными устройствами наиболее рационально строить с использованием системы прерываний.

Микроконтроллер АТ90S8535 содержат три таймера/счетчика: Т0, Т1, Т2 общего назначения и один сторожевой таймер. Все таймеры/счетчики суммирующие.

Таймер/счетчик Т0 8-разрядный. Входной сигнал может поступать с внешнего вывода – порта РВ0 (Т0) или от внутреннего тактового генератора микроконтроллера.

При использовании внутреннего тактового генератора переключающим перепадом является перепад тактовой частоты с низкого уровня на высокий (с 0 на 1).

В состав таймера/счетчика Т0 входит предварительный делитель, позволяющий делить тактовую частоту ступенчато в 8, 64, 256 или 1024 раз. Максимальный коэффициент деления тактовой частоты при использовании предварительного делителя - 262144.

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

Перечень векторов прерывания, используемых таймером/счетчиком Т0, представлен в таблице 8.1.

 

Таблица 8.1. Векторы прерывания таймера/счетчика Т0

Номе вектора

Адрес

Источник прерывания

Вид прерывания

10

$009

TIMER0 OVF

Переполнение таймера/счетчика T0

 

Счет таймера/счетчика Т0 осуществляется в регистре TCNT0.

Регистр таймера/счетчика – TCNT0 ($32 ($52))

7

6

5

4

3

2

1

0

 

 

 

 

 

 

 

 

 

Регистр содержит текущее состояние таймера/счетчика Т0.

Считать данные из регистра или записать новые данные в регистр можно программным путем в любой момент. При записи некоторого значения в регистр программным путем счет продолжается с этого значения.

Исходное состояние битов 7…0 после включения питания – 0.

Режим работы таймера/счетчика Т0 определяет регистр TCCR0

Регистр управления таймером/счетчиком Т0 - TCCR0 ($33 ($53))

 

7

6

5

4

3

2

1

0

0

0

0

0

0

CS02

CS01

CS00

 

Биты 2,1,0 - CS02, CS01, CS00 биты выбора режима работы таймера/счетчика Т0.

Режимы работы, задаваемые этими битами, представлены в таблице 8.2.

 

Таблица 8.2. Режимы работы таймера/счетчика Т0

CS02

CS01

CS00

Режим работы

0

0

0

Таймер/счетчик Т0 остановлен

0

0

1

Коэффициент деления предварительного делителя - 1

0

1

0

Коэффициент деления предварительного делителя - 8

0

1

1

Коэффициент деления предварительного делителя - 64

1

0

0

Коэффициент деления предварительного делителя - 256

1

0

1

Коэффициент деления предварительного делителя - 1024

1

1

0

Внешний вывод РВ0, переключающий перепад с низкого уровня на высокий

1

1

1

Внешний вывод РВ0, переключающий перепад с высокого уровня на низкий

 

При комбинации битов CS02… CS00 – 000 счет таймера/счетчика Т0 остановлен, при остальных комбинациях разрешен. При комбинациях 001…101 таймер/счетчик Т0 подключен к внутреннему тактовому генератору через предварительный делитель. При комбинациях 110…111 таймер/счетчик Т0 подключен к внешнему выводу РВ0.

Исходное состояние битов 7…0 после включения питания – 0.

 

Регистры SREG, TIMSKи TIFR отвечают за прерывания от таймера/счетчика Т0.

Регистр состояния SREG ($3F ($5F))

 

7

6

5

4

3

2

1

0

I

T

H

S

V

N

Z

C

 

Бит 7 – I разрешение всех прерываний.

Для разрешения всех прерываний этот бит должен быть установлен в 1. Аппаратно очищается после возникновения прерывания и устанавливается автоматически командой RETI.

Исходное состояние бита 7 после включения питания – 0.

Регистр состояния масок прерываний по таймерам/счетчикам TIMSK

($39 ($59))

 

7

6

5

4

3

2

1

0

OCIE2

TOIE2

TICIE1

OCIE1A

OCIE1B

TOIE1

0

TOIE0

 

Бит 0 – TOIE0, разрешение прерывания при переполнении таймера/счетчика Т0.

При установленном в 1 бите TOIE0 и установленном в 1 бите I регистра статуса SREG прерывание разрешается.

Исходное состояние бита 0 после включения питания – 0.

Регистр флагов прерываний по таймерам/счетчикам TIFR ($38 ($58))

 

7

6

5

4

3

2

1

0

OCF2

TOV2

ICF1

OCF1A

OCF1B

TOV1

0

TOV0

 

Бит 0 - TOV0, флаг переполнения таймера/счетчика Т0.

Бит TOV0 устанавливается при переполнении таймера/счетчика Т0. Он аппаратно очищается при обработке соответствующего вектора прерывания. Возможна очистка бита записью во флаг логической 1. При установленном бите I в регистре SREG, установленных битах TOIE0 и TOV0 выполняется прерывание при переполнении таймера/счетчика Т0.

Программно установить флаг таймера счетчика невозможно.

Исходное состояние бита 0 после включения питания – 0.

 

Таймер/счетчик Т1 16-разрядный. Входной сигнал может поступать с внешнего вывода – порта РВ1 (Т1) или от внутреннего тактового генератора микроконтроллера. Возможна работа в качестве широтно-импульсного модулятора.

Таймер/счетчик Т1 имеет выходы PD4 (ОС1В) и PD5 (ОС1А). 

При использовании внутреннего тактового генератора переключающим перепадом является перепад тактовой частоты с низкого уровня на высокий (с 0 на 1).

В состав таймера/счетчика Т1 входит предварительный делитель, позволяющий делить тактовую частоту ступенчато в 8, 64, 256 или 1024 раз. Максимальный коэффициент деления тактовой частоты при использовании предварительного делителя - 67108864.

В состав таймера/счетчика Т1 входит компаратор, содержащий регистры сравнения А и В, с которыми сравнивается состояние счетчика.

При использовании таймером/счетчиком Т1 внешнего сигнала этот сигнал синхронизируется с тактовой частотой микроконтроллера. Для обеспечения правильной синхронизации внешнего сигнала необходимо, чтобы минимальное время между двумя входящими тактовыми циклами было не менее одного периода внутреннего тактового сигнала микроконтроллера. Переключающий перепад от внешнего сигнала можно задавать программно. Максимальный модуль счета (коэффициент деления внешней входной частоты) – 65536.

При работе в режиме широтно-импульсного модулятора (ШИМ) таймер/счетчик Т1 и регистры сравнения выхода A и B образуют сдвоенный 8, 9 или 10-разрядный автономный генератор ШИМ с правильным чередованием фаз, отсутствием ложных выбросов и выходами с выводов PD5(OC1A) и PD4(OC1B). В данной лабораторной работе режим ШИМ не используется, и поэтому особенности его не рассматривается.

Перечень векторов прерывания, используемых таймером/счетчиком Т1, представлен в таблице 8.2.

 

Таблица 8.2. Векторы прерывания таймера/счетчика Т1

Номер вектора

Адрес

Источник прерывания

Вид прерывания

6

$005

TIMER1 CAPT

Захват таймера/счетчика Т1

7

$006

TIMER1 COMPA

Совпадение А и содержимого таймера/счетчика Т1

8

$007

TIMER1 COMPB

Совпадение В и содержимого таймера/счетчика Т1

9

$008

TIMER1 OVF

 Переполнение таймера/счетчика Т1

 

Счет таймера/счетчика Т1 осуществляется в 16-разрядном регистре TCNT1.

 

Регистр таймера/счетчика – TCNT1

 

15

14

13

12

11

10

9

8

 

$2D ($4D)

 

 

 

 

 

 

 

 

TCNT1H

$2C ($4C)

 

 

 

 

 

 

 

 

TCNT1L

 

7

6

5

4

3

2

1

0

 

Регистр содержит текущее состояние таймера/счетчика Т1.

С тем, чтобы CPU могло считывать/записывать и старший и младший байты этого регистра одновременно, обращение реализовано посредством         8-разрядного регистра временного хранения (TEMP). Если основная программа и подпрограммы обработки прерываний используют обращение к регистрам посредством TEMP, то прерывания должны быть запрещены на время обращения из основной программы (и из прерывающей подпрограммы, когда прерывания разрешаются изнутри прерывающей подпрограммы).

Запись в таймер/счетчик Т1 (TCNT1). Когда CPU производит запись в старший байт (TCNT1H), записываемые данные размещаются в регистре TEMP. Затем, когда CPU производит запись в младший байт (TCNT1L) данные младшего байта объединяются с байтом данных регистра TEMP и все 16 битов одновременно переписываются в регистр таймера/счетчика TCNT1. Следовательно, при 16-разрядных операциях обращение к старшему байту (TCNT1H) должно выполняться первым.

Чтение таймера/счетчика Т1 (TCNT1). Когда CPU считывает младший байт (TCNT1L), то содержимое TCNT1L направляется непосредственно, содержимое старшего байта (TCNT1H) размещается в регистре TEMP и при считывании старшего байта (TCNT1H) его содержимое CPU принимает из регистра TEMP. Следовательно, при 16-разрядных операциях первым должно выполняться обращение к младшему байту (TCNT1L).

Считать данные из регистра или записать новые данные в регистр можно программным путем в любой момент. При записи некоторого значения в регистр TCNT1 программным путем счет продолжается с этого значения.

Исходное состояние битов 15…0 после включения питания – 0.

 

Регистры сравнения A выхода таймера/счетчика Т1 – OCR1A

 

 

15

14

13

12

11

10

9

8

 

$2B ($4B)

ст.

 

 

 

 

 

 

 

OCR1AH

$2A ($4A)

 

 

 

 

 

 

 

мл.

OCR1AL

 

7

6

5

4

3

2

1

0

 

 

Регистры сравнения B выхода таймера/счетчика Т1 – OCR1B

 

15

14

13

12

11

10

9

8

 

$29 ($49)

ст.

 

 

 

 

 

 

 

OCR1BH

$28 ($48)

 

 

 

 

 

 

 

мл.

OCR1BL

 

7

6

5

4

3

2

1

0

 

 

16-разрядные регистры сравнения выхода обеспечивают возможность и чтения и записи.

Значение регистров сравнения выхода таймера/счетчика Т1 постоянно сравнивается с состоянием таймера/счетчика Т1. При достижении их равенства устанавливается флаг прерывания по совпадению в тактовом цикле CPU, следующем за самим совпадением.

Действие, запускаемое при совпадении, определяется регистрами управления TCCR1А и TCCR1В. Если в регистры TCNT1 и OCR1A или OCR1B программно будут записаны одинаковые значения, то совпадение при сравнении сформировано не будет.

Поскольку регистры сравнения выхода OCR1A и OCR1B являются 16-разрядными, то для обеспечения одновременного занесения старшего и младшего байтов данных в регистры OCR1A/B используется регистр временного хранения TEMP. Когда CPU записывает старший байт, то данные временно сохраняются в регистре TEMP. Когда же CPU записывает младший байт OCR1AL или OCR1BL, то одновременно содержимое регистра TEMP переписывается в OCR1AH или OCR1BH. Следовательно, при 16-разрядных операциях старшие байты регистров OCR1A/B должны записываться первыми.

Если основная программа и подпрограммы обработки прерываний используют обращение к регистрам посредством TEMP, то прерывания должны быть запрещены на время этого обращения,

Исходное состояние битов 15…0 после включения питания – 0.

 

Режим работы таймера/счетчика Т1 определяют регистры TCCR1А и TCCR1В.

Регистр управления А таймером/счетчиком Т1 – TCCR1А ($2F ($4F))

 

7

6

5

4

3

2

1

0

COM1A1

COM1A0

COM1B1

COM1B0

0

0

PWM11

PWM10

 

Биты 7,6 - COM1A1, COM1A0 определяют характер сигнала выхода на выводе PD5 (OC1A) в случае совпадения текущего состояния таймера/счетчика Т1 (регистр TCNT1) и регистра OCR1A сравнения A выхода таймера/счетчика Т1. Режимы работы выхода PD5 (OC1A) при совпадении представлены в таблице 8.3.

 

Таблица 8.3. Режимы работы выхода PD5 (OC1A) при совпадении

COM1А1

COM1А0

Режимы работы выхода PD5 (OC1A)

0

0

Таймер/счетчик Т1 отключен от выхода PD5 (OC1A)

0

1

Изменение сигнала выхода PD5 (OC1A) на противоположное (инверсия выхода)

1

0

Установка на выходе PD5 (OC1A) низкого уровня (0)

1

1

Установка на выходе PD5 (OC1A) высокого уровня (1)

 

Биты 5,4 - COM1В1, COM1В0 определяют характер сигнала выхода на выводе PD4 (OC1В) в случае совпадения текущего состояния таймера/счетчика Т1 (регистр TCNT1) и регистра OCR1В сравнения В выхода таймера/счетчика Т1. Режимы работы выхода PD4 (OC1В) при совпадении представлены в таблице 8.4.

 

Таблица 8.4. Режимы работы выхода PD4 (OC1В) при совпадении

COM1В1

COM1В0

Режимы работы выхода PD4 (OC1В)

0

0

Таймер/счетчик Т1 отключен от выхода PD4 (OC1В)

0

1

Изменение сигнала выхода PD4 (OC1В) на противоположное (инверсия выхода)

1

0

Установка на выходе PD4 (OC1В) низкого уровня (0)

1

1

Установка на выходе PD4 (OC1В) высокого уровня (1)

 

В ШИМ режиме функции этих битов отличаются.

При изменении битов COM1А1, COM1А0 или COM1В1, COM1В0 прерывания TIMER1 COMPA и TIMER1 COMPВ по сравнению выхода таймера/счетчика Т1 должны быть запрещены очисткой битов разрешения прерывания в регистре TIMSK. В противном случае при изменении битов COM1А1, COM1А0 или COM1В1, COM1В0 может произойти прерывание

Биты 1,0 - PWM11, PWM10 биты выбора режима ШИМ. В данной лабораторной работе режим ШИМ не используется и должен быть отключен. Поэтому значение этих битов должно быть нулевым.

Исходное состояние битов 7…0 после включения питания – 0.

 

Регистр управления В таймером/счетчиком Т1 – TCCR1B ($2Е ($4Е))

 

7

6

5

4

3

2

1

0

ICNC1

ICES1

0

0

CTC1

CS12

CS11

CS10

 

Биты 7,6 - ICNC1, ICES1 управляют режимом захвата. В данной лабораторной работе режим захвата не используется и должен быть отключен. Поэтому значение этих битов должно быть нулевым.

 

Бит 3 - CTC1 очистка (сброс в 0) таймера/счетчика Т1 при совпадении.

При установленном в состояние 1 бите CTC1, таймер/счетчик Т1 сбрасывается в состояние 0 в течение тактового цикла, следующего за совпадением содержимого регистра OCR1A и таймера/счетчика Т1. Если бит CTC1 очищен (0), таймер/счетчик Т1 продолжает счет и не реагирует на совпадение.

Биты 2,1,0 – CS12, CS11, CS10 биты выбора режима работы таймера/счетчика Т1.

Режимы работы, задаваемые этими битами, представлены в таблице 8.5.

 

Таблица 8.5. Режимы работы таймера/счетчика Т1

CS12

CS11

CS10

Режим работы

0

0

0

Таймер/счетчик Т1 остановлен

0

0

1

Коэффициент деления предварительного делителя - 1

0

1

0

Коэффициент деления предварительного делителя - 8

0

1

1

Коэффициент деления предварительного делителя - 64

1

0

0

Коэффициент деления предварительного делителя - 256

1

0

1

Коэффициент деления предварительного делителя - 1024

1

1

0

Внешний вывод РВ1 (Т1), переключающий перепад с низкого уровня на высокий

1

1

1

Внешний вывод РВ1 (Т1), переключающий перепад с высокого уровня на низкий

 

При комбинации битов CS12… CS10 – 000 счет таймера/счетчика Т1 остановлен, при остальных комбинациях разрешен. При комбинациях 001…101 таймер/счетчик Т1 подключен к внутреннему тактовому генератору через предварительный делитель. При комбинациях 110…111 таймер/счетчик Т1 подключен к внешнему выводу РВ1 (Т1).

Исходное состояние битов 7…0 после включения питания – 0.

 

Регистры SREG, TIMSKи TIFR отвечают за прерывания от таймера/счетчика Т1.

Регистр состояния SREG ($3F ($5F))

 

7

6

5

4

3

2

1

0

I

T

H

S

V

N

Z

C

 

Бит 7 – I разрешение всех прерываний.

Для разрешения всех прерываний этот бит должен быть установлен в 1. Аппаратно очищается после возникновения прерывания и устанавливается автоматически командой RETI.

Исходное состояние бита 7 после включения питания – 0.

Регистр масок прерываний по таймерам/счетчикам TIMSK ($39 ($59))

 

7

6

5

4

3

2

1

0

OCIE2

TOIE2

TICIE1

OCIE1A

OCIE1B

TOIE1

0

TOIE0

 

Бит 4 - OCIE1A разрешение прерывания при совпадении регистра OCR1A с таймером/счетчиком Т1.

При установленном бите OCIE1A и установленном бите I регистра статуса SREG прерывание разрешается. Соответствующее прерывание (с вектором $006) выполняется, если произойдет совпадение содержимого регистра OCR1A с состоянием таймера/счетчика Т1. В регистре флагов TIFR устанавливается флаг OCF1A.

Бит 3 - OCIE1B разрешение прерывания при совпадении регистра OCR1B с таймером/счетчиком Т1

При установленном бите OCIE1B и установленном бите I регистра статуса SREG прерывание разрешается. Соответствующее прерывание (с вектором $007) выполняется, если произойдет совпадение содержимого регистра OCR1B с состоянием таймера/счетчика Т1. В регистре флагов TIFR устанавливается флаг OCF1B.

Бит 2 - TOIE1 разрешение прерывания при переполнении таймера/счетчика Т1.

При установленном бите ТOIE1 и установленном бите I регистра статуса SREG прерывание разрешается. Соответствующее прерывание (с вектором $008) выполняется, если произойдет переполнение таймера/счетчика Т1. В регистре флагов TIFR устанавливается флаг TOV1.

Исходное состояние битов 4…2 после включения питания – 0.

Регистр флагов прерываний по таймерам/счетчикам TIFR ($38 ($58))

 

7

6

5

4

3

2

1

0

OCF2

TOV2

ICF1

OCF1A

OCF1B

TOV1

0

TOV0

 

Бит 4 - OCF1A флаг прерывания при совпадении регистра OCR1A с таймером/счетчиком Т1.

Бит OCF1A устанавливается при совпадении состояния таймера/счетчика Т1 и содержимого регистра OCR1A. Бит OCF1A аппаратно очищается при обработке соответствующего вектора прерывания. Возможна очистка бита записью во флаг логической 1.

Бит 3 - OCF1В флаг прерывания при совпадении регистра OCR1В с таймером/счетчиком Т1.

Бит OCF1В устанавливается при совпадении состояния таймера/счетчика Т1 и содержимого регистра OCR1В. Бит OCF1В аппаратно очищается при обработке соответствующего вектора прерывания. Возможна очистка бита записью во флаг логической 1.

 

Бит 2 - TOV1 флаг переполнения таймера/счетчика Т1

Бит TOV1 устанавливается при переполнении таймера/счетчика Т1. Он аппаратно очищается при обработке соответствующего вектора прерывания. Возможна очистка бита записью во флаг логической 1

Программно установить флаг таймера счетчика невозможно.

Исходное состояние битов 4…2 после включения питания – 0.

 

Таймер/счетчик Т2 8-разрядный. Входной сигнал может поступать с внешнего вывода – порта РС6 (TOSC1) или от внутреннего тактового генератора микроконтроллера. Возможна работа в качестве широтно-импульсного модулятора.

Таймер/счетчик Т2 имеет выход PD7 (ОС2). 

Переключающим перепадом от тактового генератора является перепад с низкого уровня на высокий (с 0 на 1).

В состав таймера/счетчика Т2 входит предварительный делитель, позволяющий делить внешнюю входную и тактовую частоту ступенчато в 8, 32, 64, 128, 256 или 1024 раз. Максимальный коэффициент деления таймера/счетчика Т2 при использовании предварительного делителя - 262144.

Таймер/счетчик Т2 содержит компаратор с регистром сравнения, с которыми сравнивается состояние счетчика.

При использовании внешнего сигнала c входа РС6 таймер/счетчик Т2 работает в асинхронном режиме, т. е. вне зависимости тактовой частоты микроконтроллера. Такой режим в данной лабораторной работе не используется, и поэтому особенности его не рассматриваются.

При работе в режиме широтно-импульсного модулятора (ШИМ) таймер/счетчик Т2 и регистр сравнения выхода OCR2 образуют 8-разрядный генератор ШИМ с правильным чередованием фаз, отсутствием ложных выбросов и выходом с выводов PD7 (OC2). В данной лабораторной работе режим ШИМ не используется, и поэтому особенности его не рассматривается.

Перечень векторов прерывания, используемых таймером/счетчиком Т2, представлен в таблице 8.5.

 

Таблица 8.5. Векторы прерывания таймера/счетчика Т2

Номер вектора

Адрес

Источник прерывания

Вид прерывания

4

$003

TIMER2 COMP

Совпадение при сравнении таймера/счетчика Т2

5

$004

TIMER2 OVF

Переполнение таймера/счетчика Т2

 

Счет таймера/счетчика Т2 осуществляется в регистре TCNT2.

Регистр таймера/счетчика – TCNT2 ($24 ($44))

7

6

5

4

3

2

1

0

 

 

 

 

 

 

 

 

Регистр содержит текущее состояние таймера/счетчика Т2.

Считать данные из регистра или записать новые данные в регистр можно программным путем в любой момент. При записи некоторого значения в регистр TCNT2 программным путем счет продолжается с этого значения.

Исходное состояние битов 7…0 после включения питания – 0.

 

Регистры сравнения выхода таймера/счетчика Т2 – OCR2 ($23 ($43))

7

6

5

4

3

2

1

0

 

 

 

 

 

 

 

 

8-разрядный регистр сравнения выхода обеспечивает возможность и чтения и записи.

 

Значение регистра сравнения выхода таймера/счетчика Т2 постоянно сравнивается с состоянием таймера/счетчика Т2. При достижении их равенства устанавливается флаг прерывания по совпадению в тактовом цикле CPU, следующем за самим совпадением. Программная запись одного и того же значения в таймер/счетчик Т2 и в регистр сравнения выхода OCR2 не приведет к формированию совпадения при сравнении.

Исходное состояние битов 7…0 после включения питания – 0.

 

Режим работы таймера/счетчика Т2 определяет регистр TCCR2

Регистр управления таймером/счетчиком Т2 – TCCR2 ($25 ($45))

 

7

6

5

4

3

2

1

0

0

PWM2

COM21

COM20

CTC2

CS22

CS21

CS20

 

Биты 5,4 – COM21, COM20 определяют характер сигнала выхода на выводе PD7 (OC2) в случае совпадения текущего состояния таймера/счетчика Т2 (регистр TCNT2) и регистра OCR2 сравнения выхода таймера/счетчика Т2. Режимы работы выхода PD7 (OC2) при совпадении представлены в таблице 8.6.

 

Таблица 8.6. Режимы работы выхода PD7 (OC2) при совпадении

COM21

COM20

Режимы работы выхода PD7 (OC2)

0

0

Таймер/счетчик Т2 отключен от выхода PD7 (OC2)

0

1

Изменение сигнала выхода PD7 (OC2) на противоположное (инверсия выхода)

1

0

Установка на выходе PD7 (OC2) низкого уровня (0)

1

1

Установка на выходе PD7 (OC2) высокого уровня (1)

 

В ШИМ режиме функции этих битов отличаются.

Бит 3 - CTC1 очистка (сброс в 0) таймера/счетчика Т2 при совпадении.

При установленном в состояние 1 бите CTC2, таймер/счетчик Т1 сбрасывается в состояние 0 в течение тактового цикла, следующего за совпадением содержимого регистра OCR2 и таймера/счетчика Т2. Если бит CTC2 очищен (0), таймер/счетчик Т2 продолжает счет и не реагирует на совпадение.

Биты 2,1,0 – CS22, CS21, CS20 биты выбора коэффициента деления предварительного делителя таймера/счетчика Т2.

Режимы работы, задаваемые этими битами, представлены в таблице 8.7.

 

Таблица 8.7. Режимы работы таймера/счетчика Т1

CS22

CS21

CS20

Режим работы

0

0

0

Таймер/счетчик Т2 остановлен

0

0

1

Коэффициент деления предварительного делителя - 1

0

1

0

Коэффициент деления предварительного делителя - 8

0

1

1

Коэффициент деления предварительного делителя - 32

1

0

0

Коэффициент деления предварительного делителя - 64

1

0

1

Коэффициент деления предварительного делителя - 128

1

1

0

Коэффициент деления предварительного делителя - 256

1

1

1

Коэффициент деления предварительного делителя - 1024

 

При комбинации битов CS22… CS20 – 000 счет таймера/счетчика Т2 остановлен, при остальных комбинациях разрешен.

Исходное состояние битов 7…0 после включения питания – 0.

 

Регистры SREG, TIMSKи TIFR отвечают за прерывания от таймера/счетчика Т2.

Регистр состояния SREG ($3F ($5F))

 

7

6

5

4

3

2

1

0

I

T

H

S

V

N

Z

C

 

Бит 7 – I разрешение всех прерываний.

Для разрешения всех прерываний этот бит должен быть установлен в 1. Аппаратно очищается после возникновения прерывания и устанавливается автоматически командой RETI.

Исходное состояние бита 7 после включения питания – 0.

Регистр масок прерываний по таймерам/счетчикам TIMSK ($39 ($59))

 

7

6

5

4

3

2

1

0

OCIE2

TOIE2

TICIE1

OCIE1A

OCIE1B

TOIE1

0

TOIE0

 

Бит 7 – OCIE2 разрешение прерывания при совпадении регистра OCR2 с таймером/счетчиком Т2.

При установленном бите OCIE2 и установленном бите I регистра статуса SREG прерывание разрешается. Соответствующее прерывание (с вектором $003) выполняется, если произойдет совпадение содержимого регистра OCR2  с состоянием таймера/счетчика Т2. В регистре флагов TIFR устанавливается флаг OCF2.

Бит 6 – TOIE2 разрешение прерывания при переполнении таймера/счетчика Т2.

При установленном бите ТOIE2 и установленном бите I регистра статуса SREG прерывание разрешается. Соответствующее прерывание (с вектором $004) выполняется, если произойдет переполнение таймера/счетчика Т2. В регистре флагов TIFR устанавливается флаг TOV2.

Исходное состояние битов 7,6 после включения питания – 0.

Регистр флагов прерываний по таймерам/счетчикам TIFR ($38 ($58))

 

7

6

5

4

3

2

1

0

OCF2

TOV2

ICF1

OCF1A

OCF1B

TOV1

0

TOV0

 

Бит 7 – OCF2 флаг прерывания при совпадении регистра OCR2 с таймером/счетчиком Т2.

Бит OCF2 устанавливается при совпадении состояния таймера/счетчика Т2 и содержимого регистра OCR2. Бит OCF2 аппаратно очищается при обработке соответствующего вектора прерывания. Возможна очистка бита записью во флаг логической 1.

Бит 2 – TOV2 флаг переполнения таймера/счетчика Т2.

Бит TOV2 устанавливается при переполнении таймера/счетчика Т2. Он аппаратно очищается при обработке соответствующего вектора прерывания. Возможна очистка бита записью во флаг логической 1

Программно установить флаг таймера счетчика невозможно.

Исходное состояние битов 7,6 после включения питания – 0.

При разработке программ с использованием таймеров/счетчиков по сравнению с предыдущими программами ничего принципиального нового нет. Следует только отметить два момента.

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

Таймеры/счетчики являются аппаратными устройствами и в случае их применения, как правило, рациональнее использовать прерывания.

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

Рассмотрим примеры построения программ с использованием таймера/счетчика.

Пусть требуется, чтобы сразу после подачи питания на микроконтроллер включилась лампочка и горела в течение двух секунд. Следующее включение лампочки возможно только после повторной подачи питания на микроконтроллер. Тактовая частота микроконтроллера 1 МГц. Для задания интервала времени используется внутренний тактовый генератор микроконтроллера.

При тактовой частоте 1 МГц длительность такта составит 1 мкс. Следовательно, для задания интервала времени в 2 секунды необходимо 2 000 000 тактов внутреннего генератора, т.е. модуль счета таймера/счетчика должен 2 000 000. Такой модуль счета в микроконтроллере АТ90S8535 может обеспечить только таймер/счетчик Т1 с использованием предделителя. Коэффициент деления предделителя необходимо выбирать таким, чтобы погрешность от деления общего модуля счета на коэффициент деления предделителя была наименьшая. Максимальная точность обеспечивается, когда общий модуль счета делится на коэффициент деления предделителя без остатка. Если в данном случае взять коэффициент деления предделителя 64, то остатка не будет. Модуль счета непосредственно счетчика/таймера Т1  2000000/64 = 31250.

Для создания счетчика/таймера с заданным модулем счета используются те же два метода построения счетчика с произвольным модулем счета, что и для счетчиков в интегральном исполнении. По первому методу счетчик начинает считать с начальной комбинации (в данном случае с нулевой) и при достижении определенной комбинации сбрасывается в начальное состояние. По второму счетчик досчитывает до последней комбинации, но начинает считать с заранее определенной комбинации.

Рассмотрим реализацию первого метода.

Детектором комбинации сброса в ноль является компаратор. В данной программе применяется компаратор А, т. к. в этом случае есть возможность сброса счетчика/таймера Т1 в 0 без использования прерывания. Как только комбинация в счетчике достигает значения, установленного в компараторе, произойдет сброс в 0. В регистр компаратора записывается число 31250.

В качестве выхода используется собственный выход счетчика/таймера Т1 – порт PD5.

Программа очень простая, не содержит условных переходов и циклов, поэтому блок-схема программы не приводится.

При просмотре работы программы в симуляторе для ускорения работы в регистр OCR1AH следует записать число 00, а в регистр OCR1AL число 0F.

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

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

; Включение лампы сразу после подачи питания и

; свечение в течение 2 секунд. Выход PD5.

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

.include “8535def.inc”     ; файл описанияAT90S8535.

.cseg

.org $00                   ; адрес начала программы в памяти программ.

rjmp nacalo             ; прерывание по сбросу и включению питания.

.org$30                  ; адрес начала основной программы в памяти программ.                                                  

nacalo:                       ;начало основной программы

;******************** программирование портов I/O

LDI    R16,$20               

OUT  PORTD,R16  ; установка исходного состояния лампы: включено                                          

OUT  DDRD,R16    ; программирование 5 линии порта D на выход   

;******************* программирование режима работы таймера Т1

LDI    R17,$7A            ; запись числа 31250 в регистр сравнения

OUT  OCR1AH, R17  ; выхода OCR1A компаратора

LDI    R17,$12        

OUT  OCR1AL, R17  

LDI    R17,$80             ; программирование режима выхода PD5:

OUT  TCCR1A, R17   ; выключить лампу через 2 с.

LDI    R17,$0B            ; установка коэффициента деления предделителя 64,

OUT  TCCR1B, R17   ; разрешения сброса в 0 при совпадении с компаратором и включение таймера Т1.

;******************** основная (фоновая) программа

PROGRAMMA:

RJMP PROGRAMMA ; переход на метку PROGRAMMA

 

Рассмотрим реализацию второго метода.

В качестве выхода используется порт PС0.

Прерывание по переполнению таймера/счетчика Т1 возникает после его переполнения, следовательно, запись комбинации в таймер при использовании подпрограммы прерывания может быть осуществлена только после его переполнения. Потому запись комбинации в таймер/счетчик Т1 надо считать синхронной. Модуль счета двоичного суммирующего счетчика с синхронной записью определяется по формуле М = 2 n– d.  Из этой формулы определяется комбинация, которая должна записываться в счетчик. d  = 34286. В шестнадцатеричном коде d = 86ЕЕ.

В данном примере в качестве выхода таймера/счетчика Т1 используется линия 0 порта С общего назначения.

Подпрограмма обработки прерывания заключается установку порта РС0 в ноль (выключение лампочки). 

Программа очень простая, не содержит условных переходов и циклов, поэтому блок-схема программы не приводится.

При просмотре работы программы в симуляторе для ускорения работы в регистр TCNT1H следует записать число FF, а в регистр TCNT1L число F0.

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

 

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

; Включение лампы сразу после подачи питания и

; свечение в течение 2 секунд. Выход PС0.

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

.include “8535def.inc”     ; файл описанияAT90S8535.

.cseg

.org $00                   ; адрес начала программы в памяти программ.

rjmp nacalo             ; прерывание по сбросу и включению питания.

.org $08                   ; вектор прерывания по переполнению таймера.

rjmp Prer1               ; адрес подпрограммы прерывания при переполнении таймера/счетчика Т1.

.org $30                  ; адрес начала основной программы в памяти программ.            

                                         

nacalo:                       ;начало основной программы

;******************** программирование портов I/O

LDI    R16,$01               

         OUT  PORTC,R16  ; установка исходного состояния лампы: включено.

OUT  DDRC,R16    ; программирование 0 линии порта С на выход.   

;******************* задание стека.

LDI    R16,$00          

OUT  SPL, R16        ; запись  адреса в младший байт указателя стека      

LDI    R17,$02          ; запись  адреса в старший байт указателя стека      

OUT  SPH, R17        ; итоговый физический адрес $0200 (512)

;******************* программирование режима работы таймера Т1

LDI    R17,$86

OUT  TCNT1H, R17   ; запись числа 34286 (86ЕЕ) в таймер Т1

LDI    R17,$EE

OUT  TCNT1L, R17  

LDI    R17,$03            ; установка коэффициента деления предделителя 64,

OUT  TCCR1B, R17   ;  и включение таймера Т1.

LDI    R17,$04            ; разрешение прерывания при переполнении

OUT  TIMSK, R17      ; таймера Т1.

SEI                              ; разрешение всех прерываний

;******************** основная (фоновая) программа

PROGRAMMA:

RJMP PROGRAMMA ; переход на метку PROGRAMMA

;******************* подпрограмма обработки прерывания

Prer1:

CBI PORTC, 0              ; выключение лампы     

RETI                              ; выход из подпрограммы

 

Рассмотрим работу таймера/ счетчика в режиме счета внешних событий. На микроконтроллер поступают импульсы с внешнего устройства. Для подсчета используется  таймер/счетчик Т0. Требуется при поступлении единичного уровня сигнала на линию 0 порта А выводить содержимое счетчика в порт С.

На таймер/счетчик Т0 входной сигнал поступает с внешнего вывода РВ0.

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

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

; Счет внешних импульсов

; Вход В0 . Выход порт С.

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

.include “8535def.inc”     ; файл описания AT90S8535.

.cseg

.org $00                   ; адрес начала программы в памяти программ.

rjmp nacalo             ; прерывание по сбросу и включению питания.

.org$30                  ; адрес начала основной программы в памяти программ.                                                     

nacalo:                       ;начало основной программы

;******************** программирование портов I/O

LDI    R16,$00        

OUT  DDRA, R16  ; программирование линии 0 порта A на вход       

OUT  DDRB, R16  ; программирование линии 0 порта В на вход       

LDI    R16,$FF        

OUT  DDRC, R16    ; программирование порта С на выход             

;******************* программирование режима работы таймера Т1

LDI    R17,$07            ; разрешение работы Т0 от внешнего вывода,

OUT  TCCR0, R17     ; переключающий перепад с 1 на 0.

;******************** основная (фоновая) программа

PROGRAMMA:

SBIC PINA,0

RCALL VYVOD

RJMP PROGRAMMA ; переход наметку PROGRAMMA

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

VYVOD :

IN  R18, TCNT0

OUT  PORTC, R18

RET


Информация о реферате «Программирование таймеров/счетчиков»
Раздел: Информатика, программирование
Количество знаков с пробелами: 36690
Количество таблиц: 28
Количество изображений: 0

Похожие материалы

Скачать
55833
9
13

... под управлением операционных систем: FreeBSD, Linux, Microsoft Windows 2000 и выше. Принимая во внимание вышесказанное, целью данной работы является разработка информационно-обучающей программы. 2. Пограммная модель и принципы работы таймеров/счетчиков микроконтроллеров семейства AVR 2.1 Структура таймера/счетчика 16-разрядный таймер/счетчик может получать тактовый сигнал (CK), CK после ...

Скачать
130405
7
0

... AVR Studio запомнит расположение окон и использует эти установки при следующем запуске проекта. 3.2. Анализ методики реализации разработки программного обеспечения 3.2.1. Классификация вариантов заданий Цель заданий – практическое освоение методики программирования на ассемблере микроконтроллеров ATMEL семейства AVR, отладка программы на симуляторе AVR Studio и программирование кристалла с помощью ...

Скачать
19207
6
0

... выполнить с помощью внешней схемы формирования сигнала RESET (Brown-Out Detector, BOD). Микроконтроллеры семейства AVR могут быть переведены в энергосберегающие режимы работы. У микроконтроллеров всех типов возможны два энергосберегающих режима — режим холостого хода (Idle Mode, IM) и режим пониженного энергопотребления (Power-Down Mode, PDM). Микроконтроллеры, имеющие таймеры-счетчики с режимом ...

Скачать
38997
0
0

... др. Компараторы в таймерах обеспечивают повышение чувствительности их цифровых компонентов от единиц вольт до долей милли­вольта к изменениям входных напряжений. Таким об­разом, основные функции в аналоговых таймерах выполняют циф­ровые узлы, точность же формирования интервала времени определяется в первую очередь компараторами напряжения. 1.1.      Классификация и принципы построения таймеров ...

Скачать
32768
0
9

... обработчиков прерываний; ·  Блок обработки режимов микроконтроллера; ·  Блок служебных подпрограмм. Рассмотрим эти алгоритмы более подробно. Блок начальной инициализации системы содержит операции для программирования таймера, UART-интерфейса и других различных настроек. Инициализация UART заключается в установке скорости его работы в значение 9600 бит/с путём загрузки в регистр UBRR значения ...

0 комментариев


Наверх