Таймеры Atmega8

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Nixon83
Родился
Сообщения: 16
Зарегистрирован: Пн июн 20, 2011 20:19:48

Таймеры Atmega8

Сообщение Nixon83 »

Доброго времени суток!
Подскажите пожалуйста, как инициализировать таймеры (реализация кода) T0, T1, T2 в OVF и COMP Atmega8.
Реклама
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Re: Таймеры Atmega8

Сообщение GP1 »

поди туда - не знаю куда
на чем программируете-то?
Чем дальше, тем больше становлюсь занудой...
Изображение
Реклама
Nixon83
Родился
Сообщения: 16
Зарегистрирован: Пн июн 20, 2011 20:19:48

Re: Таймеры Atmega8

Сообщение Nixon83 »

Пишу на Cи в оболочке CodeVisionAVR
Аватара пользователя
GRAF
Мудрый кот
Сообщения: 1867
Зарегистрирован: Ср янв 23, 2008 22:11:54
Откуда: Калининград

Re: Таймеры Atmega8

Сообщение GRAF »

Вы даташит читали?
В соответствующий регистр управления таймером (для T/C0 это TCCR0) записываете делитель частоты, в регистре TIMSK ставите в единицу бит TOIE0: Timer/Counter0 Overflow Interrupt Enable, если нужно прерывание по переполнению TCNT0. В SREG разрешаете прерывания.
Обработчик прерывания выглядит так

Код: Выделить всё

TCCR0|=(1<<CS02);//Fпредделителя/256
TIMSK0|=(1<<TOIE0); //tc0_ovf interrupt enable
SREG|=(1<<I);//глобальное разрешение прерывний


interrupt [TIM0_OVF] void TC0_ovf (void)
{
 //put some code here
}
Аналогично для других таймеров, только ещё режимы работы задавать можно. Читайте DATASHEET.
Реклама
Эиком - электронные компоненты и радиодетали
Nixon83
Родился
Сообщения: 16
Зарегистрирован: Пн июн 20, 2011 20:19:48

Re: Таймеры Atmega8

Сообщение Nixon83 »

В чем различие Вашего кода и этого. Обясните пожалуйста.
interrupt [TIM0_OVF] void tmr0_ovf()
{
.......
}
TCCR0=0;
TCNT0=0xfd;
TIMSK=1;
Реклама
Аватара пользователя
GRAF
Мудрый кот
Сообщения: 1867
Зарегистрирован: Ср янв 23, 2008 22:11:54
Откуда: Калининград

Re: Таймеры Atmega8

Сообщение GRAF »

Код: Выделить всё

void main()
{
 TCCR0|=(1<<CS02);//Fпредделителя/256
 TIMSK0|=(1<<TOIE0); //tc0_ovf interrupt enable
 SREG|=(1<<I);//глобальное разрешение прерывний

}


interrupt [TIM0_OVF] void TC0_ovf (void)
{
 //put some code here
}
Так понятнее?
Инициализация происходит в основной программе, а обработчик прерывания- отдельная функция.

UPD
TIMSK, а не TIMSK0, это я с 640 мегой перепутал.
Реклама
Nixon83
Родился
Сообщения: 16
Зарегистрирован: Пн июн 20, 2011 20:19:48

Re: Таймеры Atmega8

Сообщение Nixon83 »

Ага теперь понял спасибо! Буду дерзать!!! :beer:
Аватара пользователя
les1982
Собутыльник Кота
Сообщения: 2981
Зарегистрирован: Ср сен 28, 2011 22:18:14
Откуда: Москва

Re: Таймеры Atmega8

Сообщение les1982 »

только потом прерывания разрешите в тексте

Код: Выделить всё

#asm("sei")
Люди могут жить без мозгов.
Аватара пользователя
les1982
Собутыльник Кота
Сообщения: 2981
Зарегистрирован: Ср сен 28, 2011 22:18:14
Откуда: Москва

Re: Таймеры Atmega8

Сообщение les1982 »

GRAF писал(а):

Код: Выделить всё

 SREG|=(1<<I);//глобальное разрешение прерывний
[/quote]
В CodeVisionAVR это 
#asm("sei") разрешить глобальные прерывания и #asm("cli") запретить
Люди могут жить без мозгов.
Аватара пользователя
GRAF
Мудрый кот
Сообщения: 1867
Зарегистрирован: Ср янв 23, 2008 22:11:54
Откуда: Калининград

Re: Таймеры Atmega8

Сообщение GRAF »

les1982, обе записи верны и делают одно и тоже.
Аватара пользователя
les1982
Собутыльник Кота
Сообщения: 2981
Зарегистрирован: Ср сен 28, 2011 22:18:14
Откуда: Москва

Re: Таймеры Atmega8

Сообщение les1982 »

Согласен.
Просто когда создаешь новый проект по автоматом ставит строку на асме
Люди могут жить без мозгов.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»