mpeino ha scritto:qualcuno potra dirmi che ci sono funzioni tipo delay_ms()
Si, esistono le classiche funzioni
delay_ms,
delay_us etc..
Il nome è convenzionale in quanto può chiamarsi per esempio
Delay_ms o diversamente dipendendo dalla unità di misura di tempo. Dipende da quale compilatore stai usando e da come è stata dichiarata nella libreria in uso.
Dal codice che hai riportaro sembra tu voglia ottenere un ritardo sfruttando l' overflow ciclico del timer.
Si, il procedimento è sulla strada giusta ma ricorda che il tempo di incremento e decremento del valore di registro del timer dipende dalla frequenza dell' oscillatore di sistema. Ora è tardi se vuoi e se ne hai bisogno, appena ho un po' di tempo te lo spiego o vedo di cercare qualche riferimento approfondito in qualche articolo del forum.
Tornando alle funzioni delay precompilate, se usi una funzione
delay_ms ti devi solo occupare di richiamarla con un argomento valido.
Se per esempio nel tuo firmware usi tale funzione per un ritardo di 1ms scriverai:
- Codice: Seleziona tutto
delay_ms(1);
Per il resto fa tutto lei quindi non devi implementare nessun ciclo, a meno che tu voglia ottenere un ritardo più lungo fuori dalla sua singola portata, in quel caso la si richiama N volte all' interno di un ciclo.
Se vuoi usare il timer, devi assegnare un valore al registro del timer (in questo caso il timer 0 TMR0). Il valore del timer viene poi decrementato o incrementato (dipende dall'architettura del microcontrollore) fino a che va in overflow, momento in cui finisce il ritardo. Qui si ritorna al discorso della frequenza di sistema di cui ti ho accennato in precedenza.
Ad ogni modo è preferibile l'uso dei timer perché in questo modo si riduce notevolmente il numero di istruzioni eseguite e di conseguenza l'impiego della CPU, in quanto non si devono usare istruzioni di incremento o decremento dipendendo dalla frequenza dell' oscillatore di sistema come in una funzione come la delay_xx.
Di nuovo, se hai bisogno di un ritardo o una temporizzazione di un tempo non possibile con un solo overflow del timer, ripeti il tutto dentro ad un ciclo come appunto immagino volevi rappresentare con il codice riportato.
In più, mentre il timer è in funzione si può, eventualmente, fare altro, cosa non normalmente possibile con una funzione delay_xx.
Se in aggiunta spieghi con quale microcontrollore stai lavorando, ovviamente si può dire qualcosa di più preciso.
Se c'è qualcosa che no ti è chiaro chiedi pure.
Ciao.
Simo