- •Лабораторная работа № 4 изучение таймеров микроконтроллера 8xc196кс
- •1. Общие сведения
- •1.1. Таймеры
- •1.2. Программирование таймера 2
- •1.2.2. Выбор источника синхронизации
- •1.2.3. Установка направления счета
- •1.2.4. Выбор сброса Таймера 2.
- •1.2.5. Синхронизация сигналов t2rst, t2clk, и t2Capture
- •1.2.5.1. Одновременная установка сигналов t2rst, t2clk, и t2capture
- •1.3. Прерывания по таймеру
- •1.3.1. Прерывание переполнения таймера
- •Input/Output Control Register 1
- •Input/Output Status Register 1
- •1.3.2. Прерывание переполнения Таймера 2
- •1.3.3. Прерывание фиксатора Таймера 2
- •Timer 2 Capture Register
- •1.4. Предосторожности при работе с Таймерами
- •2. Порядок выполнения работы
- •3. Содержание отчета
1.3. Прерывания по таймеру
С Таймером 1 и Таймером 2 связаны три вектора прерывания:
- прерывание переполнения таймера - Timer Overflow Interrupt (INT00,2000H);
- прерывание переполнения Таймера 2 - Timer 2 Overflow Interrupt (INT12,2038H);
- прерывание фиксатора Таймера 2 - Timer 2 Capture Interrupt (INT11,2036H).
Регистр IOS1 содержит флажки, которые указывают какое событие вызвало прерывание. Обращение к битам регистра IOS1 по командам JBC или JBS обнуляет биты 0-5. По этой причине, мы рекомендуем чтобы Вы копировали содержимое регистра IOS1 в промежуточный регистр и затем выполняли команды проверки разрядов типа JBC или JBS на промежуточном регистре.
1.3.1. Прерывание переполнения таймера
И Таймер 1 и Таймер 2 могут вызвать прерывание переполнения Таймера (INT00). Установите INT_MASK.0 ,чтобы разрешить это прерывание. Установите или IOC1.2 ( Таймер 1 ) или IOC1.3 ( Таймер 2 ) чтобы выбрать источник прерывания. Когда происходит переполнение, устанавливается флажок состояния в регистре IOS1. Переполнение Таймера 1 устанавливает IOS1.5, а переполнение Таймера 2 устанавливает IOS1.4.
Input/Output Control Register 1
IOC1
16H
HWindow 0 (Write), HWindow 15 (Read)
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 | ||
|
|
|
|
T2OVF_INT |
T1OVF_INT |
|
|
Input/Output Status Register 1
IOS1
16H
Hwindow 0 (Write), HWindow 15 (Read)
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
T1_OVF |
T2_OVF |
|
|
|
|
1.3.2. Прерывание переполнения Таймера 2
Таймер 2 может генерировать прерывание переполнения Таймера 2 (INT12, адрес вектора - 2038H) вместо стандартного прерывания переполнения Таймера. Это прерывание разрешается установкой INT_MASK1.4. Переполнение Таймера 2 устанавливает IOS1.4. Таймер 2 может генерировать прерывание переполнения Таймера 2 или на границе 7FFFH/8000H или на границе 0FFFFH/0000H. Переполнение может происходить в любом направлении. IOC2.5 выбирает границу переполнения. Когда IOC2.5 установлен, Таймер 2 прерывается на границе 7FFFH/8000H. Иначе, он прерывается на границе 0FFFFH/0000H.
1.3.3. Прерывание фиксатора Таймера 2
Положительный переход на контакте T2CAPTURE (P2.7) заставляет значение Таймера 2 загружаться в регистр T2CAPTURE. Это событие генерирует прерывание фиксатора Таймера 2 (INT11), если установлен INT_MASK1.3 и T2CAPTURE утверждается в течение более двух времен состояний.
Timer 2 Capture Register
T2CAPTURE
0D/0CH
Hwindow 15(Read /Write)
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
T2_VALUE (HI) |
T2_VALUE (LO) |
1.4. Предосторожности при работе с Таймерами
При использовании таймеров как датчиков времени для HSI или HSO, следующие руководящие принципы помогут Вам избежать потенциальных проблем.
Будьте осторожны при записи в регистры таймера TIMER1 и TIMER2:
Изменение значения TIMER1 после инициализизации HSI модуля может разрушить относительные ссылки между HSI событиями. Также, изменение значения соответствующего таймера ( TIMER1 или TIMER2 ), после инициализизации HSO модуля, может заставить HSO пропускать запрограммированные события или выполнять их в неправильном порядке.
Конфигурируйте Таймер 2 для функционирования в нормальном режиме ( не в быстром режиме приращения ):
Так как для полного сканирования CAM, HSO требует восьми времен состояния, Таймер 2, когда он используется как датчик времени для HSO, должен функционировать в нормальном режиме приращения (не в быстром режиме приращения ) .
Очистите бит FAST_T2_ENA(IOC2.0) для выбора нормального режима работы таймера.
Конфигурируйте Таймер 2 для счета только в одном направлении.
Таймер 2 , когда он используется как датчик времени для HSO, должен считать только в одном направлении, поскольку, если Таймер 2 колеблется вокруг отметки времени выполнения команды, блокировка входов может происходить несколько раз.
Очистите бит T2UD_ENA(IOC2.1), чтобы сконфигурировать Таймер 2 как суммирующий счетчик.
Используйте предостережение при сбросе Таймера 2.
Не сбрасывайте Tаймер 2 до того, как его значение достигнет самого наибольшего времени, запрограммированного в CAM. CAM задерживает ожидание события до соответствующего времени . Если запрограммированное значение Таймера 2 никогда не достигается, событие будет оставаться отложенным, пока устройство не сбросится или CAM не очистится.
Когда Таймер 2 сконфигурирован для сброса внешним контактом, события программы должны происходить когда Таймер 2 равен единице, а не нулю:
Когда Таймер 2 сконфигурирован, чтобы сбрасываться внешним контактом сброса ( IOC0.3 =1), программные события не должны происходить, когда Таймер 2 равен нулю. Если HSI.0 или T2RST (P2.3) сбрасывают Таймер 2, событие может не произойти. Внешние контакты сбрасывают Таймер 2 асинхронно, и Таймер 2 может увеличиться до 1 до того, как HSO может сравнить и распознать CAM запись. Программируйте события так, чтобы они происходили, когда Таймер 2 равен 1, это гарантирует,что HSO имеет достаточное время, чтобы распознать команду, записанную в CAM .
ФРАГМЕНТ ПРОГРАММЫ ИЗУЧЕНИЯ ПРОГРАММИРОВАНИЯ ТАЙМЕРОВ
;***********************************************************
;**Исследование пpoгpаммных задеpжек с использованием Timer1*
ldb wsr,#15 ; Пеpеключиться в HWindow 15
ld timer1,#0c000h ; Загpузить значение счетчика
; Timer1
ldb wsr,#0 ; Пеpеключиться в HWindow 0
jbc ios1, 5, $ ; Ожидание пеpеполнения Timer
;***********************************************************