dalv_happy
@dalv_happy

Как остановить выполнение кода в pic16?

Здравствуйте! По нажатию на кнопку (1) срабатывает прерывание INTF (RB0) необходимо вывести надпись и так она должна отображаться до тех пор, пока я не нажму на (2) кнопку и сработает прерывание RB7 которое напечатает другую надпись.
Решено было использовать задержки, но в тот момент пока вызвана задержка, не срабатывает другое прерывание.
Как мне вывести надпись на экран и чтобы она не пропадала, до тех пор пока не будет вызвано другое прерывание?
void interrupt isr(){
    if(INTF){
        INTF = 0; // reset interrupt flag/
        Lcd_Clear();
        Lcd_Set_Cursor(1,1);
        Lcd_Write_String("1.");
        Lcd_Set_Cursor(1,3);
        Lcd_Write_String("Hello");
        __delay_ms(1000);
    }
    if(RBIF){
        if(RB7){
            activeItem++;
            Lcd_Clear();
            Lcd_Set_Cursor(1,1);
            Lcd_Write_String("RB7");
            __delay_ms(1000);
        }
        RBIF = 0;
    }
}

5ac908ecc7bb6411394920.png
  • Вопрос задан
  • 148 просмотров
Пригласить эксперта
Ответы на вопрос 1
В прерываниях нужно взводить флаги, а уже в основной программе их анализировать и делать задержку
В самом простом случае:
uint8_t FlagTextChanged;

void interrupt isr(){
  if(INTF){
        ...
        Lcd_Write_String("Hello");
        FlagTextChanged = 1;
    }
    if(RBIF){
        if(RB7){
            ...
            Lcd_Write_String("RB7");
            FlagTextChanged = 1;
        }
        RBIF = 0;
    }
}

void main(){
  FlagTextChanged = 0;
  while (1){
    ...
    if (FlagTextChanged){
	  FlagTextChanged = 0;
	  __delay_ms(1000);  	
	}
  }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы