Spagnolo Inglese
11356 Users    

PICmicro Cult - Ritardo software

picmicro ritardo software

Ritardo software



Come funziona la macro DELAY usata negli esempi del corso



;**********************************************************************
; Clock frequency related constant (4 MHz)
;**********************************************************************

BIT_DELAY       equ     23      ;Bit delay a 9600 bps

;**********************************************************************
; MACRO - Delay subroutine with watch dog timer clearing
;
; Macro parameters:
;
;   VALUE:      Delay obtained = ((VALUE-1)*4+5)*(1/(Fosc/4))
;
;**********************************************************************

DELAY           MACRO   VALUE
                LOCAL   REDO

                movlw   VALUE
                movwf   TmpRegister
REDO

                clrwdt                  ;Clear watch dog timer

                decfsz  TmpRegister,F
                goto    REDO

                ENDM


La formula è quella indicata nel sorgente della macro DELAY:

Ritardo ottenuto = (VALUE-1)*4+5) * (1/(Fosc/4)

Sostituendo a VALUE il valore di BIT_DELAY e a Fosc la frequenza del quarzo otteniamo

Ritardo ottenuto = (23-1)*4+5) * (1/(4.000.000/4) = 93 microsecondi

La seconda parte della formula (1/(4.000.000/4) serve a calcolare il tempo di esecuzione di una singola istruzione:


  • 4.000.000 è la frequenza del quarzo. In questo caso un 4Mhz

  • 4.000.000 / 4 + la frequenza di clock interna del PICmicro = 1Mhz. Questa e' la frequenza di esecuzione reale delle istruzioni. Essendo i PICmicro basati su una CPU di tipo RISC ogni istruzione viene eseguita in un solo ciclo macchina. La durata di un ciclo macchina si calcola facendo l'inverso della frequenza, in questo caso 1/1.000.000 = 1 microsecondo. In un secondo il PICmicro esegue un milione di istruzioni.

Nel caso venga effettuato un salto da una istruzione all'altra il PICmicro impiega 2 cicli macchina. Le istruzioni che effettuano salti sono ad esempio la GOTO, la CALL e la RETURN.
La DECFSZ invece impiega 1 solo ciclo se la condizione non e' soddisfatta, altrimenti 2 cicli se la condizione è soddisfatta per cui deve essere effettuato lo skip dell'istruzione successiva.

Nella prima parte della formula:

(VALUE-1)*4+5)


  • VALUE è il numero di loop che deve effettuare la macro prima di ridare il controllo al resto del programma.

  • Le costanti rimanenti sono i cicli macchina "consumati" dalle istruzioni presenti nel loop

       movlw   23              ;1 ciclo
       movwf   TmpRegister     ;1 ciclo
REDO
       clrwdt                  ;1 ciclo
       decfsz  TmpRegister,F   ;2 cicli a fine conteggio altrimenti 1 ciclo
       goto    REDO            ;2 cicli 

Se mettiamo VALUE a 1 (un solo ciclo di ritardo) otteniamo questa sequenza di istruzioni:

       movlw   1               ;1 ciclo
       movwf   TmpRegister     ;1 ciclo
       clrwdt                  ;1 ciclo
       decfsz  TmpRegister,F   ;2 cicli

In totale 5 cicli pari a (1-1)*4+5 = 0*4+5 = 0*5 = 5.

Se mettiamo VALUE a 2 (due cicli di ritardo) otteniamo questa sequenza di istruzioni:

       movlw   1               ;1 ciclo
       movwf   TmpRegister     ;1 ciclo
       clrwdt                  ;1 ciclo
       decfsz  TmpRegister,F   ;1 ciclo
goto REDO ;2 cicli
clrwdt ;1 ciclo decfsz TmpRegister,F ;2 ciclo

In totale 9 cicli pari a (2-1)*4+5 =  1*4+5 = 4 + 5 = 9

Con VALUE = 23 otteniamo: (23-1)*4+5 = 22*4+5 = 88+5 = 93 microsecondi di ritardo

Nel sorgente d'esempio http://www.tanzilli.com/articles/00218/rs232io.asm, dove viene utilizzata la macro, questo ritardo serve a generare una pausa di lunghezza pari alla durata di trasmissione in un bit a 9600 bits, pari a:

1/ 9600 = 104 microsecondi circa

Il ritardo inserito è in difetto di 104-93 = 11 microsecondi per compensare il ritardo in più dovuto al tempo di esecuzione delle istruzioni precedenti e successive alla chiamata della macro.

Commenta!Feed Rss

Invia nuovo commento

Il contenuto di questo campo è privato e non verrà mostrato pubblicamente.
  • Linee e paragrafi vanno a capo automaticamente.

Maggiori informazioni sulle opzioni di formattazione.

Articoli di elettronica correlati

  • In questo articolo analizzeremo il funzionamento del Watch Dog Timer il cui scopo è quello di migliorare l'affidabilità dei nostri circuiti basati su PICmicro.

  • Per configurare la linea RA0 in uscita, dobbiamo mettere a 0 il bit 0 del registro TRISA

  • L'interrupt è una particolare caratteristica dei micro che consente di intercettare un evento esterno, interrompere momentaneamente il programma in corso, eseguire una porzione di programma specializzata per la gestione dell'evento verificatosi e riprendere l'esecuzione del programma principale.

  • Vediamo ora come possiamo utilizzare le istruzioni per creare le strutture base di tutti i linguaggi ad alto livello: selezioni e iterazioni.

  • Un semplice timer in linguaggio C.Un buon esercizio per un principiante è scrivere un modulo che simuli un timer.
    Per realizzarlo abbiamo usato le funzioni che già esistono nella libreria del linguaggio C:

Commenti recenti

Nuovi utenti

  • swutz
  • saetta
  • EmanuelOpen
  • alexc85
  • tondini73
  • pmac131
  • peppeplus
  • rolfogianluca

Chi è online

Ci sono attualmente 2 utenti e 61 visitatori collegati.

Utenti online

  • alexc85
  • carlo.elettronica