Visualizza messaggio singolo
Vecchio 01 dicembre 10, 07:55   #103 (permalink)  Top
illez
User
 
L'avatar di illez
 
Data registr.: 06-08-2007
Residenza: Empoli
Messaggi: 1.813
Premessa: non mi ci ritrovo tanto con il Mikroc, sono abituato al ccs.

Se non capisco male, vuoi fare qualcosa su portb se tempo>0.
Forse vuoi far lampeggiare dei led, aspettando mezzo secondo tra una configurazione e l'altra.

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;

        }
Il problema di fondo che io vedo è legato all'uso della variabile tempo.
Questa viene impostata in maniera asincrona dalla funzione che gestisce l'interrupt e controllata all'interno del ciclo while infinito nel main.
Leggi la variabile tempo e in base al suo valore decidi cosa fare.
Perfetto.
Solo che la variabile tempo cambia continuamente di valore perché gli interrupt arrivano uno dietro l'altro.
Per rimediare puoi per esempio fare così:
puoi effettuare la misurazione e, una volta impostata la var tempo, disabilitare gli interrupt. La routine nel main esamina tempo e quando lo trova impostato, esegue qualcosa e riabilita gli interrupt.
Evita di eseguire lungi cicli come
Codice:
if(tempo=0)
   {
       portb.f7=1;
       delay_ms(1000);
       portb.f7=0;
       delay_ms(1000);
    }
In questi 2 secondi sai quanti interrupt arrivano e tu non esamini il valore di tempo?
Per assurdo potresti leggerlo sempre a 0.
Ad esempio: lo leggi una volta, è zero, esegui quanto sopra che dura circa 2 secondi (!) durante i quali chissà quante volte viene impostato tempo. Poi ripeti il controllo e, putacaso, tempo è stato appena azzerato per cui rifai quanto sopra per altri 2 secondi...!

[EDIT]

Badavo alla logica del programma e mi era sfuggito if (tempo=0)!!!

Vado a prendere il caffé, meglio
__________________
.......
illez non è collegato   Rispondi citando