Хочу, что бы 2 светодиода меняли своё состояние с разным периодом. Один, раз в 100 мс, второй - в 500мс. Ошибка в обработчике прерываний. Как её исправить? подскажите, кто знает)
int main( void ) { WDTCTL = WDTPW + WDTHOLD; // Остановка сторожевого таймера, чтобы предотвратить время сброса _DINT(); // Запрещаем прерывания InitializationPortIO (); // Вызов функции инициализации портов ввода/вывода микроконтроллера InitializationTimersMSP430 (); // Вызов функции инициализации внутренних аппаратных таймеров микроконтроллера MSP430F135 _EINT(); // Разрещаем прерывания while (1) { if (Flag_500ms == true) // Если поставлен флаг 500мс { P4OUT = ~(P4OUT & BIT4); // Состояние 3 вывода 4 порта меняется Flag_500ms = false; // Флаг убирается } if (Flag_100ms == true) // Если поставлен флаг 100мс { P4OUT = ~(P4OUT & BIT3); // Состояние 4 вывода 4 порта меняется Flag_100ms = false; // Флаг убирается } } } //******************************************************************************** ********************************************************************************* ****************************** //********************************************************** ОБРАБОТЧИКИ ПРЕРЫВАНИЙ ******************************************************************************** ********************* #pragma vector = TIMERA0_VECTOR // Прерывание от таймера А (срабатывает каждые 10 мс) __interrupt void isr_TACCR0() // прерывание { t ++; y ++; if ( t >= 10 ) { Flag_100ms = true; t = 0; } if ( y >= 50 ) { Flag_500ms = true; y = 0; } }
|