Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

tempo routine

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] tempo routine

Messaggioda Foto Utentekbdj » 3 mar 2010, 15:16

salve a tutti.
vorrei sapere quanto tempo impiega il microcontrollore PIC16F84A a svolgere la seguente routine, usando un quarzo da 4 MHz.

Codice: Seleziona tutto
                          movlw    d'200'
                          movwf    a1
loop1                 movlw     d'100'
                          movwf    a2
loop2                 movlw     d'50'
                          movwf    a3
loop3                 decfsz     a3,1
                          goto       loop3
                          decfsz    a2,1
                          goto       loop2
                          decfsz    a1,1
                          goto       loop1
                          return


potete allegare anche una piccola spiegazione sul calcolo del tempo di svolgimenti di routine ?

grazie in anticipo. ciao
Avatar utente
Foto Utentekbdj
-12 1 2 5
Stabilizzato
Stabilizzato
 
Messaggi: 406
Iscritto il: 19 set 2009, 9:42

1
voti

[2] Re: tempo routine

Messaggioda Foto UtentePaolino » 3 mar 2010, 16:04

I PIC sono macchine RISC con architettura Harvard (modificata). L'esecuzione di ciascuna istruzione avviene ogni 4 colpi di clock cioè alla frequenza Fcy = Fosc/4, dove Fosc è la frequenza dell'oscillatore principale. Fanno eccezione le istruzioni di salto (branch) per le quali per la loro esecuzione va considerato un tempo pari a 2Tcy, dove Tcy = 1/Fcy.
Ci sono poi altre eccezioni, quelle (che non riguardano il tuo caso) della risposta all'interrupt dove il tempo di latenza all'interrupt "prende qualche Tcy".

Ora, se leggi il datasheet è mostrato per ciascuna istruzione il valore del numero dei cicli macchina che vengono impiegati. Nel tuo caso si tratta di tre cicli annidati. Il modo migliore per verificare la durata di una routine è quella di simularla. Con MPLAB puoi abilitare MPSIM e verificare quanto dura. Un conto spannometrico mi fa risultare oltre 9 milioni di cicli macchima... Verificalo con MPSIM.

Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,0k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4187
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

1
voti

[3] Re: tempo routine

Messaggioda Foto UtentePaolino » 3 mar 2010, 16:16

Anzi, visto che ho provato a simulare, ho visto che ho commesso un errore nel conteggio.
Il risultato della simulazione è il seguente:
Simulazione_kbdj.jpg
Simulazione_kbdj.jpg (15.47 KiB) Osservato 3051 volte


Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,0k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4187
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[4] Re: tempo routine

Messaggioda Foto Utentekbdj » 3 mar 2010, 18:06

aspetta, quindi il PIC ci impiegherebbe 3 secondi per effettuare questa ruotine???

se volessi realizzare una routine (con lo stesso metodo del decremento di una variabile) che si svolge in circa 250 mS, che numeri dovrei assegnare alle variabili ???
Avatar utente
Foto Utentekbdj
-12 1 2 5
Stabilizzato
Stabilizzato
 
Messaggi: 406
Iscritto il: 19 set 2009, 9:42

0
voti

[5] Re: tempo routine

Messaggioda Foto Utentec1b8 » 4 mar 2010, 1:15

Nell'ipotesi di voler ottenere un ritardo di 250 ms con un PIC ed un quarzo a 4 MHz, utilizzando una routine con decremento di registri, si potrebbe realizzare la seguente routine:
Codice: Seleziona tutto
Delay250ms:
         goto   $+1
         goto   $+1
         goto   $+1
         goto   $+1
         goto   $+1
         nop
         movlw   d'252'
         movwf   a1
Delay250ms_1:
         movlw   d'247'
         movwf   a2
Delay250ms_2:
         nop
         decfsz   a2, F
         goto     Delay250ms_2
         decfsz   a1, F
         goto     Delay250ms_1
         return

la routine prevede di essere richiamata mediante l'istruzione
Codice: Seleziona tutto
            call      Delay250ms

e dalla call alla return comprese passano esattamente 250ms
Fabio
Avatar utente
Foto Utentec1b8
3.595 3 8 13
G.Master EY
G.Master EY
 
Messaggi: 1770
Iscritto il: 15 gen 2009, 15:23

0
voti

[6] Re: tempo routine

Messaggioda Foto Utentekbdj » 4 mar 2010, 15:23

scusa, mi puoi spiegare questa parte di programma:

goto $+1
goto $+1
goto $+1
goto $+1
goto $+1
nop

non riesco a capire a cosa serve, anche perché se metto dei salti, e poi non metto delle label di destinazione salto, il programma mi da errore.
Avatar utente
Foto Utentekbdj
-12 1 2 5
Stabilizzato
Stabilizzato
 
Messaggi: 406
Iscritto il: 19 set 2009, 9:42

1
voti

[7] Re: tempo routine

Messaggioda Foto UtentePaolino » 4 mar 2010, 15:40

Il simbolo $ si riferisce all'indirizzo attuale al quale punta il Program Counter. Mettendo $+1 si dichiara che il salto va alla istruzione successiva.

Ciao.

Paolo
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,0k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4187
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[8] Re: tempo routine

Messaggioda Foto Utentekbdj » 4 mar 2010, 15:50

woooooow , non lo sapevo. quindi se metto:

goto $+1

non devo mettere una label di destinazione salto.
Avatar utente
Foto Utentekbdj
-12 1 2 5
Stabilizzato
Stabilizzato
 
Messaggi: 406
Iscritto il: 19 set 2009, 9:42

0
voti

[9] Re: tempo routine

Messaggioda Foto Utentekbdj » 5 mar 2010, 20:27

colgo l'occasione per fare un'altra domanda.

-se invece vorrei realizzare un ritardo di 1 secondo, come posso fare con il metodo del decremento delle variabili ??
-è possibile fare questo ritardo utilizzando il registro TMR0 ??? se si come ???

P.S. si utilizza sempre un quarzo da 4 MHz
Avatar utente
Foto Utentekbdj
-12 1 2 5
Stabilizzato
Stabilizzato
 
Messaggi: 406
Iscritto il: 19 set 2009, 9:42

1
voti

[10] Re: tempo routine

Messaggioda Foto UtentePaolino » 19 mar 2010, 10:31

kbdj ha scritto:-è possibile fare questo ritardo utilizzando il registro TMR0 ??? se si come ???

Prova a guardare questo articolo. ovrebbe aiutarti a realizzare quanto chiedi.

Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,0k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4187
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti