[an error occurred while processing this directive]
например так
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено 27 апреля 2006 г. 13:02
В ответ на: OFF: Кто-нибудь может на пальцах объяснить, как в AVR при наличии ограниченного числа таймеров, формировать множество различных временных интервалов? Может есть какая простая методика? отправлено =NIK= 27 апреля 2006 г. 12:55

/* Период таймера для отсчёта таймаутов 1мс */
#define SAS_TIMER_PERIOD 1
__flash word _sastval = (SAS_TIMER_PERIOD * SYS_CLK) / (1024 * 1000UL);
/* Период таймера блокировки автоматов, 1с */
#define SAS_SHUT_TIMER_PERIOD 0.5
/* 12000000Hz / (1024 * 11718) ~ 1Hz = 1.00006s (1000.06ms) */
__flash word _shuttval = (SAS_SHUT_TIMER_PERIOD * SYS_CLK) / 1024;

//extern unsigned char FlagWritelog ;
bool GreenLED = false, RedLED = false, BlueLED = false;


/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* InitSASTimers - инициализация таймеров для использования в SAS
* используется 3-й таймер и регистры B (1 мс) и С (1 с)
* Вход:
* Выход:
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void InitSASTimers(void)
{
/* Остановим таймер, очистим счётчик */
TCCR3A = TCCR3B = TCNT3 = 0;
/* Значения для сравнения */
OCR3B = _sastval;
OCR3C = _shuttval;
/* Запустим таймер clk/1024 */
TCCR3B = (1 << CS32) | (1 << CS30);
ETIMSK |= (1 << OCIE3B) | (1 << OCIE3C);
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* sastout - обработчик прерывания таймера на сравнение с регистром B
* Вход:
* Выход:
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#pragma vector = TIMER3_COMPB_vect
__interrupt void sastout(void)
{
if (_atresptout)
{
--_atresptout;
}

if (_sasresptout)
{
--_sasresptout;
}
if (_saspolltout)
{
--_saspolltout;
}
if (_SASInstallEGMtout)
{
--_SASInstallEGMtout;
}

OCR3B = TCNT3 + _sastval;
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* sastout - обработчик прерывания таймера на сравнение с регистром C
* Вход:
* Выход:
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#pragma vector = TIMER3_COMPC_vect
__interrupt void sasshutt(void)
{
if (_gmsdcheck)
{
--_gmsdcheck;
}
if (_writedt)
{
--_writedt;
}
OCR3C = TCNT3 + _shuttval;
}

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание

E-mail: info@telesys.ru