Lirzman писал(а):
- Код: Выделить всё • Развернуть
//****************ИНИЦИАЛИЗАЦИЯ ТАЙМЕРА***************************
void timer1_init(long int time)
{
TCCR1B = 0x00; //stop timer
TCNT1 = time; //записать в регистр таймера число 3686400/1/x
TIMSK SET_B(TOIE1);//Разрешение прерывания по переполнению таймера 1
SREG SET_B(7);//Бит i в регистре SREG включен(разрешить глобальные прерывания)
TCCR1B =0x01; //Старт таймера при делителе = 0
//Биты CS10 CS11 CS12
}
//**************ПРОЦЕДУРА ПЕРЕПОЛНЕНИЯ ТАЙМЕРА***********************
SIGNAL(SIG_OVERFLOW1)
{
PORTB CLR_B(gservo);//В ПРОТЕУСЕ загорелся соответствующий пин!!!!
}
Как видите коэффициент деления равен единице, тоесть таймер работает на частоте ЦП(3.6864MHz)
Попробуй теперь сделать как я писал, чтобы длительность 0 и 1 была разной. В твоем симуляторе есть чтото типа осцилографа, чтобы ты мог видеть какой сигнал формируеться на пине?
Анатолий.
PS: Всетаки используй sei(); вместо SREG SET_B(7); это красивее и понятние всем.