|
Timer1 Compare B |
|
|
|
Jul 2 2015, 07:34
|
Участник

Группа: Участник
Сообщений: 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?
|
|
|
|
|
 |
Ответов
|
Jul 8 2015, 07:53
|
Участник

Группа: Участник
Сообщений: 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 стоит как вкопаный. Как его сбросить?
|
|
|
|
Сообщений в этой теме
Рэльс 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|