реклама на сайте
подробности

 
 
> Timer1 Compare B
Рэльс
сообщение Jul 2 2015, 07:34
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 23-05-12
Пользователь №: 71 976



Здравствуйте! Хочу включить в свою программу прерывание по совпадению Б таймера 1

.include "m168def.inc"
................................

RESET:
........................................

;===========старт таймера 1=============
;
;=======================================
ldi temp, 9
sts OCR1AH, temp
ldi temp, 169
sts OCR1AL, temp ; загрузили регистры сравнения A
ldi temp, 0x1A
sts OCR1BH, temp
ldi temp, 0xDB
sts OCR1BL, temp ; загрузили регистры сравнения B
ldi temp, (1<<WGM12) ; сброс при совпадении, таймер остановлен
sts TCCR1B, temp
................................
lds temp, TIMSK1
cbr temp, 0b00000010 ; запрещаем прерывание "совпадение А"
sbr temp, 0b00000100 ; разрешаем прерывание "совпадение B"
sts TIMSK1, temp
...............................
; ===запускаем таймер===
clr temp ; = =
sts TCNT1H, temp ; =очищаем счетные регистры
sts TCNT1L, temp ; =очищаем счетные регистры
lds temp, TCCR1B ; = =
cbr temp, 0b00000101
sbr temp, 0b00000010 ;запуск таймера 1 16 МГц / 8 = 2 МГц =
sts TCCR1B, temp ; ======================

В программе время от времени разрешаются прерывания по таймеру 1 "совпадение А" и "совпадение Б". Если я правильно понимаю, в зависимости от того, какое прерывание разрешено, счетные регистры TCNT1 сравниваются с регистрами сравнения OCR1A или OCR1B. В симуляторе AVR студии все прекрасно работает, а в железе срабатывает только прерывание "сравнение с А". "Сравнение с Б" не работает вообще, почему?
PS в книге Евстегнеева сказано
"Режим СТС (сброс при совпадении)
В этом режиме счетный регистр тоже функционирует как обычный суммирующий счетчик,...Однако максимально возможное значение счетного регистра и, следовательно, разрешающая способность счетчика определяются либо регистром сравнения блока A OCR1A, либо регистром захвата ICR1..."
тогда зачам вообще нужно прерывание Timer1 Compare B?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Рэльс
сообщение Jul 8 2015, 07:53
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 23-05-12
Пользователь №: 71 976



Провеля тут лабораторную работу.
В режиме СТС оба прерывания работают, но есть нюансы.
Значение OCR1A должно бать больше OCR1B, поскольку, как и сказано в даташите, таймер в этом режиме считает до OCR1A. Поэтому либо до запуска прерывания TIM1_COMPB, либо в обработчике необходимо очистить счетные регистры TCNT1. Иначе после завершения этого прерывания счет начнется не с нуля, а с OCR1B.
Ныанс второй. Разрешено прерывание TIM1_COMPA.
ldi temp, (1<<OCIE1A)
sts TIMSK1, temp
TIM1_COMPB как видно, запрещено. Но в регистрах OCR1B у нас какая-то цифра, и она менньше цифры в OCR1A. Как только таймер досчитает до OCR1B, в регистре TIFR1 установится бит OCF1B (флаг прерывания TIM1_COMPB). Само прерывание не сработает - оно ведь запрещено, и таймер благополучно досчитает до OCR1A и выполнится прерывание TIM1_COMPA. Но как только где-то дальше в программе я разрешу прерывание TIM1_COMPB, оно исполнится мгновенно - ведь его флаг в регистре TIFR1 установлен. Логично в прерывании TIM1_COMPA сбросить этот флаг. Я пытался сделоть это так
clr temp
sts TIFR1, temp
и так
clr temp
out TIFR1, temp
но флаг OCF1B стоит как вкопаный. Как его сбросить?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Рэльс   Timer1 Compare B   Jul 2 2015, 07:34
- - Александр1   Что-то не видно установок для TCCR1A (WGM10, WGM11...   Jul 2 2015, 09:42
|- - Рэльс   Цитата(Александр1 @ Jul 2 2015, 12:42) Чт...   Jul 2 2015, 15:31
- - Александр1   Да, в разделе "15.9.2 Clear Timer on Compare ...   Jul 3 2015, 03:56
|- - Рэльс   Цитата(Александр1 @ Jul 3 2015, 06:56) Да...   Jul 5 2015, 02:57
- - ILYAUL   Есть такое понятие - Free timer. Вот его и использ...   Jul 4 2015, 14:12
- - RabidRabbit   Используйте режим WGM1 = 1100 (WGM13 = 1, WGM12 = ...   Jul 5 2015, 15:05
|- - Александр1   Цитата(Рэльс @ Jul 8 2015, 10:53) ... фла...   Jul 8 2015, 08:52
- - Рэльс   Спасибо Вам и вашему преподавателю! Все теперь...   Jul 8 2015, 13:43
- - avrx   При работе с этим же таймером столкнулся с такой о...   Sep 8 2015, 16:29
- - alexeyv   Сброс бита I - это запрещение всех прерываний внут...   Sep 9 2015, 06:57
|- - demiurg1978   Флаг I в регистре SREG сбрасывается аппаратно при ...   Sep 11 2015, 08:09
- - avrx   Спасибо большое за информацию   Sep 12 2015, 17:16


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th June 2025 - 20:26
Рейтинг@Mail.ru


Страница сгенерированна за 0.01378 секунд с 7
ELECTRONIX ©2004-2016