Спасибо за пример, с прерыванием никогда не приходилось работать, может делаю что-то не так. Использую atmega48, поэтому настройки прерывания пришлось додумывать самостоятельно

Настройки таймера у меня уже используются для ШИМ, оставил их пока как есть:
Код: Выделить всё
//Программа инициализации ШИМ
void init_pwm (void)
{
TCCR0A=0xF3; //timer 0 15,625 kHz Fast PWM top=FFh Inverted PWM out A/B
TCCR0B=0x03;
TCCR2A=0xF3;
TCCR2B=0x04; //timer 2 15,625 kHz Fast PWM top=FFh Inverted PWM out A/B
TIMSK0=0x01; //для маски разрешения
B_channel = saveB;
G_channel = saveG;
R_channel = saveR;
P_channel = 0xFF;
}
Далее у atmega48 немного отличается
Код: Выделить всё
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
time_10ms=1;
}
Ну и теперь если я пишу put_scrolltext("Напряжение борт.сети"); в теле interrupt [TIM0_OVF] void timer0_ovf_isr(void) или while(1) то строка не двигается, если писать ее в начале загрузки main(void) как в Вашем примере, тогда строка пробегает один раз влево/вправо и останавливается, ну в общем то оно и понятно, дальше идет бесконечный цикл, МК занят им
P.S. Вывел на дисплей переменную time_10ms, переменная меняется...значит в таймере все ок
P.S.S. Хотел использовать для прерывания таймер1, но что-то с ним ничего не работает, оставлю пока на 0м