Ответ: как то так, но отсюда мало что видно..
Отправлено
Тумблер (62.176.13.156) 07 августа 2018, г. 13:18
В ответ на:
Дык... отправлено
Точка опоры 07 августа 2018, г. 11:05
Инициализация была такая:
Toggle - это то, что удалось добиться по описанию
Auto - способ решения проблемы
....
// инициализаци таймера 1
TCNT1 = 0;
#ifdef T1MODE_TOGGLE
TCCR1A = 0x50;
// спрограммируем моду "toggle", и по прерыванию таймера установим биты.
#endif
#ifdef T1MODE_AUTO
TCCR1A = 0xF0;
#endif
TCCR1B = 0x07;//внешняя серия
#ifdef T1MODE_TOGGLE
OCR1A = 2-1;
OCR1B = 3-1;
#endif
#ifdef T1MODE_AUTO
OCR1A = 3-1;
OCR1B = 4-1;
#endif
#ifdef T1MODE_AUTO
o1st=0;
#endif
// разрешаем прерывание таймеру 1
ITT1_EN
// разрешим все прерывания
EI
...
//---------------------------------------------------------------
// прерывания от таймера 1
//
interrupt [TIMER1_OVF1_vect] void t1_tim (void)
{
#ifdef T1MODE_TOGGLE
//#define T1CLK_EN PORTT1RESET |= T1RESET_BIT;
//#define T1CLK_DIS PORTT1RESET &= ~T1RESET_BIT;
//#define T1CLK_RES T1CLK_DIS T1CLK_EN
T1CLK_RES // запрет внешней серии сбросом внешнего триггера
// устанавливается внешним импульсом
TCNT1 = 0;
//#define OCR1ARES if(PIND & (PD5)) {TCCR1A |= FOC1A;}
//#define OCR1BRES if(PINE & (PE2)) {TCCR1A |= FOC1B;}
OCR1ARES
OCR1BRES
// SCOP1
// SCOP0
#endif
#ifdef T1MODE_AUTO
switch(o1st)
{
case 0:
TCCR1B = 0;
TCCR1A = 0xA0;
OCR1A = 0xFFFE;
OCR1B = 0xFFFE;
TCNT1 = 0xFFFD;
TCCR1B = 0x07;
o1st=1;
break;
case 1:
T1CLK_RES
TCNT1 = 0;
OCR1A = 3-1;
OCR1B = 4-1;
TCCR1A = 0xF0;
o1st=0;
break;
default: o1st=0;break;
}
// SCOP1
// SCOP0
#endif
}
//----------------------------------------------------------------