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

 
 
> 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
Ответов
RabidRabbit
сообщение Jul 5 2015, 15:05
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 3-12-09
Из: Россия, Москва
Пользователь №: 54 040



Используйте режим WGM1 = 1100 (WGM13 = 1, WGM12 = 1, WGM11 = 0, WGM10 = 0) и задайте в ICR1 значение 65535, тогда у Вас будет работать и то и другое прерывание, в которых Вы будете сбрасывать TCNT1 в 0. А в режиме WGM1 = 0100 (который Вы используете) счётчик будет считать только да OCR1A, так что Александр1 Вам всё правильно объяснил, до OCR1B значение TCNT1 просто не доберётся.
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
- - Рэльс   Провеля тут лабораторную работу. В режиме СТС оба ...   Jul 8 2015, 07:53
|- - Александр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 Текстовая версия Сейчас: 22nd June 2025 - 07:07
Рейтинг@Mail.ru


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