Jump to content

NicBenkly

Members
  • Content Count

    1
  • Joined

  • Last visited

Community Reputation

0 Обычный

About NicBenkly

  • Rank
    Новенький

Электроника

  • Стаж в электронике
    Не связан с электроникой
  1. Здравствуйте, столкнулся с такой проблемой: При использовании внешнего прерывания от кнопки INT0 выбирается один из режимов работы контроллера. Каждый режим состоит из длительного цикла (самый короткий 8 мин.). При обработке прерывания изменяется значение глобальной переменной. Состояние переменной проверяется лишь после окончания одного из циклов, что вызывает большую задержку времени до конца исполнения текущего цикла. Проверку переменной в цикл вставить не возможно из-за его и без того высокой нагрузки на систему. Как выход вижу переход при выполнении прерывания к началу программы. Подскажите как можно реализовать такой периход, либо иначе решить задачу. Код в упрощенном виде прилагаю. volatile int reg=0x00; interrupt [EXT_INT0] void ext_int0_isr(void) { reg=reg+1; delay_ms(50); if (reg>0x11) { reg=0x00; } } void regim0 (unsigned int x, y, z) { for (a=0; a<d; a++) { //…………… } } void regim2 (unsigned int x, y, z) { for (a=0; a<d; a++) { //………….. } } //………….. void regim11 (unsigned int x, y, z) { for (a=0; a<d; a++) { //………….. } } void main(void) { while (1) { switch (reg) case 0: regim0(x,y,z); break; case 1: regim1(x,y,z); break; //………….. case 11: regim11(x,y,z); break; } }
×
×
  • Create New...