Код
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
//========================================
//Инициализация таймера
void Timer1_Init(void)
{
TIMSK |= (1 << TOIE1)|(1<<TICIE1); //разрешение переполнения по захвату и по переполнению
TCCR1B=(1<< ICES1)|(1 << CS21);
TCNT1=60535; // Начинать считать с этого значения
}
//==========================================
//Окончание работы таймера
void Timer1_Stop(void)
{
TCCR1B = 0x00; //Останов. работы
}
//=========================================
//Прерывание по захвату
ISR(TIMER1_CAPT_vect)
{
unsigned int timer;
timer = ICR1;
}
//=========================================
//Программа расчета времени
void Timer1_Inc(void)
{
unsigned int timer;
timer ++;
}
//========================================
//Прерывание по переполнению таймера
ISR(TIMER1_OVF_vect) //Если возникает прерывание по переполнению таймера,
{
Timer1_Inc(); //то перейти к функции Timer1_Inc()
}
//========================================
int main (void)
{
Timer1_Init();
}
Это правильно сделано?
И я не понял как по сохраненым значением счетчика таймера и конечным значением счетчика таймера и счетчиком числа переполнений посчитать временной интервал.
Цитата
можно спад твоего сигнала завести и на ICP.
А как это сделать? Как он отличит, что это спад?
Цитата
Я бы повесил этот сигнал на внешнее прерывание по обоим фронтам. Его обработчик пусть быстренько переписывает в регистр значение таймера, потом определяет задний или передний фронт. Если задний, то вычисляет длительность. Таймер бы я взял самый приоритетный, разрядность бы расширил софтом: в прерывании таймера по переполнению пусть наращивается регистр или хоть два, получится 24-разрядный таймер, 2 секунды на 16 мегагерцах.
Как таймер узнает, что поступает задний фронт?
Сообщение отредактировал dvs85 - Apr 24 2008, 03:03