В моем коде у меня есть два прерывания, одно происходит из-за переполнения TMR0, а другое - при нажатии кнопки.
это код в MikroC:
int compt = 0;
int seconds = 10 ;
int enable = 0;
void interrupt(){
if (INTCON.INTF) {
PORTD = 9;
enable = 1;
seconds = 10;
INTCON.INTF = 0;
}
if (INTCON.TMR0IF) {
compt++;
INTCON.TMR0IF = 0;
TMR0 = 0x06;
}
}
void main() {
TRISB = 0x01;
PORTB = 0;
PORTD = 0;
TRISD = 0x00;
INTCON = 0xB0;
OPTION_REG = 0x44;
TMR0 = 0x06;
while(1){
if (compt == 625){
if (enable) seconds--;
compt = 0;
}
if (seconds > 0 && enable == 1) {
PORTD = seconds;
PORTB.RB1 = 1;
} else {
enable = 0;
PORTB.RB1 = 0;
PORTD = 0;
}
}
}
то, что я пытаюсь достичь с помощью своего кода, показано на следующем рисунке:
Когда я нажимаю одну из кнопок, начинается обратный отсчет, и светодиод загорается, пока не закончится обратный отсчет, а если пользователь нажал кнопку, пока отсчет еще не достиг 0, он начнется снова, пока обратный отсчет не достигнет 0. затем индикатор должен погаснуть.
Здесь я сталкиваюсь с тем, что прерывание от RBIE работает только один раз, при втором нажатии кнопки ничего не происходит.
Я не уверен, имеет ли TMR0F какое-то отношение к этому или нет, пробовал много вещей, но не смог заставить его работать.
Надеюсь, вы могли увидеть то, чего я не заметил, и помочь мне.