Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.10.2010, 16:11   #1
papos
Пользователь
 
Регистрация: 20.09.2010
Сообщений: 37
По умолчанию AVR, режим CTC

Начал разбираться с прерываниями и таймер-счетчиками, необходимо изучить работу режима "Сброс при совпадении" (CTC). По тому материалу (весьма скудному), который есть, никак не могу разобраться. Подскажите пожалуйста толковый источник для новичка, или хотя бы толковый пример, как запустить счетчик, и используя режим CTC, сгенерировать сигнал на выводе. Заранее спасибо.
papos вне форума Ответить с цитированием
Старый 12.10.2010, 16:32   #2
Levsha100
Заблокирован
Старожил
 
Регистрация: 20.07.2008
Сообщений: 4,032
По умолчанию

Все банально - даташит- лучший друг.
+ kazus.ru
Levsha100 вне форума Ответить с цитированием
Старый 12.10.2010, 16:54   #3
papos
Пользователь
 
Регистрация: 20.09.2010
Сообщений: 37
По умолчанию

Спасибо, а конкретного примера по моей тематике нет случайно?)
papos вне форума Ответить с цитированием
Старый 12.10.2010, 23:16   #4
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Выдержка из даташита на AT90S2313.

Цитата:
Timer/Counter1 Control Register B - TCCR1B

• Bit 3 - CTC1: Clear Timer/Counter1 on Compare Match
When the CTC1 control bit is set (one), the Timer/Counter1 is reset to $0000 in the clock cycle after a compareA match. If
the CTC1 control bit is cleared, Timer/Counter1 continues counting and is unaffected by a compare match. Since the compare
match is detected in the CPU clock cycle following the match, this function will behave differently when a prescaling
higher than 1 is used for the timer. When a prescaling of 1 is used, and the compareA register is set to C, the timer will
count as follows i CTC1 is set:
... | C-2 | C-1 | C | 0 | 1 |...
When the prescaler is set to divide by 8, the timer will count like this:
... | C-2, C-2, C-2, C-2, C-2, C-2, C-2, C-2 | C-1, C-1, C-1, C-1, C-1, C-1, C-1, C-1 | C, 0, 0, 0, 0, 0, 0, 0 |...
In PWM mode, this bit has no effect.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 13.10.2010, 00:18   #5
Levsha100
Заблокирован
Старожил
 
Регистрация: 20.07.2008
Сообщений: 4,032
По умолчанию

Ладно, раз уж такие ленивые, то Евстифеев А.В. “Микроконтроллеры AVR”, практически переведенные даташиты.
Levsha100 вне форума Ответить с цитированием
Старый 13.10.2010, 01:12   #6
papos
Пользователь
 
Регистрация: 20.09.2010
Сообщений: 37
По умолчанию

Спасибо, у меня эта книга есть, недавно скачал) Такой вопрос - есть код:
Код:
.include "m128def.inc"

.org $0000	; Директива, указывающая, что следующая команда должна быть  ; записана по заданному адресу
jmp main;		; Переход к основной программе
.org $0012    
jmp TIM2_COMP	; Переход к обработке прерывания по сравнению таймера 2

TIM2_COMP:		; Подпрограмма обработки прерывания по сравнению таймера 2
in r0, sreg		; Помещаем значение регистра статуса в рабочий регистр
push r0		; Сохраняем значение регистра статуса в стеке
ldi r16,0x15
ldi r27, $01
ldi r26, $10
ST x,r16
pop r0;			; Извлекаем из стека значение регистра статуса в					; рабочий регистр
out sreg, r0	; Восстанавливаем регистр статуса
reti			; Возвращаемся из подпрограммы обработки прерывания





main: 
ldi r16, low(RAMEND) 
out	SPL, r16		
ldi	r16, high(RAMEND)	 
out	SPH, r16		

ldi r16, $128		; Загрузим в рабочий регистр необходимое значение
out TIMSK, r16		; Разрешаем прерывание по сравнению таймера 2

ldi r16, $9		; Загрузим в рабочий регистр необходимое значение (режим CTC)
out TCCR2, r16

sei 

a:
jmp a
Почему не вызывается прерывание? Сужу об этом потому, что не изменяется значение в памяти
papos вне форума Ответить с цитированием
Старый 13.10.2010, 02:43   #7
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Потому что $ значит шестнадцатеричное значение. А $128 для восьмибитного регистра значения не имеет.

Код:
ldi r16, $80
out TIMSK, r16
И в OCR2 установите чего-нибудь. А то он так из этого прерывания и не выйдет никогда.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 13.10.2010, 07:19   #8
papos
Пользователь
 
Регистрация: 20.09.2010
Сообщений: 37
По умолчанию

Я это вручную делал во время отладки, забыл указать.
papos вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Цикл в AVR+ASM papos Помощь студентам 6 21.09.2010 18:59
avr usb ацп wanes101 Микроконтроллеры, робототехника, схемотехника, 3D принтеры 5 20.09.2010 10:04
AVR Sparky Микроконтроллеры, робототехника, схемотехника, 3D принтеры 6 31.12.2009 16:53
с/c++ для avr gaka1995 Общие вопросы C/C++ 1 25.10.2009 13:55