Citazione:
Originalmente inviato da elicottero78 [...]
la mia domanda è: xchè quando porto lo stic a 0 i 2 led alternati non smettono immediatamente di lampeggiare? |
Non smettono immediatamente cosa vuol dire?
Come ti dicevo, il codice non è strutturato benissimo.
Di sicuro questo pezzo di codice non può essere interrotto (non sto parlando degli interrupt)
Codice:
if(tempo > 80)
{
portb=160;
delay_ms(500);
portb=32;
delay_ms(500);
portb=128;
delay_ms(500);
portb=32;
delay_ms(500);
}else{
portb=0;
} se
tempo>80, le istruzioni dopo l'
if vengono eseguite una dietro l'altra ed eventuali interrupt portano solo ad un cambiamento della variabile
tempo, non uscirai dall'if solo perché l'int ti ha cambiato il valore della variabile.
Mi son spiegato?
Tralasciamo gli interrupt per un attimo: il microprocessore esegue le istruzioni una dopo l'altra; quando arriva all'if sopra citato, controlla il valore della (locazione di memoria associata alla) variabile tempo, lo confronta con 80 e se maggiore esegue il contenuto dell'if, altrimenti salta ad eseguire la parte nell'else. Fatto questo controllo, prosegue con le istruzioni successive, ritornerà ad eseguire questo if solo dopo essere arrivato alla fine del while e ricontrollato la condizione (sempre vera). Per fare questo impiegherà almeno 2 secondi (ci sono 4 delay_ms(500) )durante i quali, in apparenza, non farà altro.
In realtà, durante questi 2 secondi, il microprocessore interrompe la sua normale esecuzione e 'salta' ad eseguire la routine di interrupt ogni volta che si verifica l'evento di cambio di livello su RB0 (fronte di salita o discesa, a seconda di come è stato programmato l'interrupt).
Salta vuol dire che vengono salvati i registri, si interrompe l'esecuzione del flusso normale del programma e si passa ad eseguire la routine dedicata alla gestione degli int. Terminata questa, vengono ripristinati i registri e il microprocessore ritorna ad eseguire il programma nel punto in cui si era interrotto, come se nulla (si fa per dire) fosse accaduto.
Dimenticavo:
Cambia immediatamente quel in
!!!!!!!!!!!!!!!!!!!!!!!!!