Visualizza messaggio singolo
Vecchio 11 novembre 04, 23:41   #2 (permalink)  Top
MSchiepp
User
 
L'avatar di MSchiepp
 
Data registr.: 21-01-2004
Residenza: Milano
Messaggi: 989
Ho guardato il sorgente riportato sul tuo schema a blocchi; in effetti non è un esempio di chiarezza ed efficacia… se vuoi imparare a programmare i microcontrollori non usarlo come esempio!!!

Provo a darti qualche risposta.

1) La variabile shift in effetti non serve (e non è l’unica cosa inutile…). Le variabili ed i registri sono tutti a otto bit (0-255)
2) movf n,f in effetti serve solo a settare il bit Z se il contenuto della variabile è 0; il flag rimane nello stato in cui si trova fino a quando viene eseguita un istruzione che lo modifica; non tutte le istruzioni modificano i flag dello status register (es. la movwf non ne modifica alcuno). Il numero di cicli sembra essere 34 x 10 (dmcount).
3) La routine di Delay ritarda di 200 cicli: 25 x 4 (prescaler) ripetuta due volte (la variabile count viene inizializzata a 1 e poi decrementata una sola volta). A 3.8 Mhz 200 cicli corrispondono a 210 uS, più i ritardi dovuti alle istruzioni di test (esiste un bit di overflow del timer 0 T0IF molto più semplice da usare)
4) In effetti la variabile count non serve: è sufficiente impostare il timer a 205 per avere 50 cicli di timer che con il prescaler a 4 fa sempre 200!

Da notare anche che il 16F84 è un micro ormai obsoleto; in alternativa il 16F628 ha anche un timer a 16 bit che in questi casi è molto utile!!

Michele
__________________
__________________________________________________
The worst day flying is better than the best day working.
MSchiepp non è collegato   Rispondi citando