Visualizza messaggio singolo
Vecchio 26 novembre 10, 10:22   #90 (permalink)  Top
claudio476
Rivenditore - B.C.M. Power & Tools
 
L'avatar di claudio476
 
Data registr.: 28-09-2004
Residenza: Veroli (Fr)
Messaggi: 2.722
Citazione:
Originalmente inviato da elicottero78 Visualizza messaggio
ma non mi trovo con il trm0,viene resettato fuori dal l interrupt,ma non capisco in che modo viene attivato e poi riessettato.mi potete dare una dritta x favore?
[/url]


char tempo;
void interrupt(){
if((OPTION_REG.INTEDG == 1) && (INTCON.F1 == 1))
{
segnale appena andato alto
TMR0 = 0;
azzeramento timer
INTCON.GIE=0; //spenti interrupt
OPTION_REG.INTEDG=0; //fronte di discesa
prossimo interrupt quando il segnale va basso
INTCON.F1=0; //reset del flag
INTCON.GIE=1; //riabilitati interrupt
}
if((OPTION_REG.INTEDG == 0) && (INTCON.F1 == 1))
{
sengale ora è basso
tempo=TMR0; //prento il timer
lettura
INTCON.GIE=0; //spenti interrupt
OPTION_REG.INTEDG=1; //imposto controllo sul fronte di salita
prossimo interrupt quando il segnale risale, ovvero ricomincia da sopra
INTCON.F1=0; //reset del flag
INTCON.GIE=1; //riabilitati interrupt
credo il ciclo vada così, giusto? ho vinto qualche cosa?

unica cosa, credo che non sia buono mettere le istruzioni per governare i led nella routine di interrupt, mettili nel main in un ciclo infinito, così le due cose viaggiano separate senza appesantire la sezione di interrupt.
__________________
www.quattrociocchi.it (aeromodellismo,fotografie,energie,varie ed eventuali..)
[Fusione Fredda, come spiegarla a mia nonna]

claudio476 non è collegato   Rispondi citando