Сильно в программу не вникал, но у вас похоже ошибка в логике управления периодом ШИМ. Изменять значение длительности импульса ШИМ нужно не по прерыванию от переполнения таймера, а по прерыванию от TACCR0, значением которого задается период импульса ШИМ. Разрешите прерывание от CCR0 и смените вектор прерывания на TIMER1_A0_VECTOR, убрав из него обработку TAIV и запретив прерывание от переполнения. Ну и нужно следить/проверять, чтобы новое значение длительности импульса ШИМ (TAxCCR1) не превышало значение периода ШИМ (TAxCCR0).
|