la forma de calcular el temps de

P

poma

Guest
Hola, estic fent un temporitzador de compte enrere en PIC16F877 .....Es pot saber Com puc calcular quant de temps una necessitat d'instrucció ..... com a "nota movwf" Estic fent servir 20MHZ PIC ....
gràcies per la teva ajuda ..

 
Hola,

Vostè pot utilitzar un dels temporitzadors d'interrompre el seu programari cada 1 ms.A continuació, utilitzeu els comptadors de simple per esbrinar el segon, minut, hora, etc.Així, el programa pot executar frely sense que vostè necessiti preocupar happans somehting quant de temps.
Bona sort.

 
Aquí està l'enllaç:
http://ww1.microchip.com/downloads/en/DeviceDoc/31029a.pdf
Inici de la pàgina 8.Preste atenció al nombre de cicles per a cada instrucció.
cicle de la màquina = sysclk / 4
Exemple:
sysclk = 4MHZ => cicle de la màquina = 1US
Espero que això ajudi.Alta després de 14 minuts:Aquí hi ha un de millor:
http://ww1.microchip.com/downloads/en/DeviceDoc/33023a.pdf
Inici de la pàgina 530

 
Especificacions de la instrucció a descriure el període.

 
Hola,
De les fitxes tècniques per ur, que en realitat li indicarà quant temps és un cicle d'instrucció.Generalment per PIC 16 sèries es 200ns ..
Així que si anem a dir o utilitzeu timer1 tenir una interrupció quan el desbordament.
Timer1 té 16 bits de manera, tindrà un càrrec de fins a 65.535
Després, a continuació serà el temps necessari per a cada interrupció.
"200ns X número de compte als costos d'interrupció x prescalar .."
en general per començar, pot provar amb una prescalar de 1:1
llavors ..que es ARD 13.1ms
que 1s interrompre, necessitat o 1s, o necessitat de comptar amb 76 d'aquestes interrupcions per causa de les interrupcions.
All the best.
BTW, això és per al vidre de 20MHZ

 
Hi ...gràcies per el suggeriment de tots els dóna .... però puc provar amb bucles del compte regressiva en lloc d'utilitzar interrompre??perquè alguns dels meus amics em van dir thatinterrupt pot causar algun problema.Hi ha alguna precaució que han de tenir cura en usar interrompre??

 
Sí, necessitat o per assegurar-se que ur rutina d'interrupció del servei ha de ser el més breu possible ..Hmmm ..està bé per fer el bucle en lloc d'interrompre el compte enrere em sento.
De fet, estic treballant en això també ..Suposo U primer encara ha de fer el temporitzador com un comptador de n deixeu que es desbordi.Quan desbordament, l'indicador de desbordament es logic1.així que o pot fer ús d'això per tenir un compte de bucle cap avall .., Etc, cada vegada que l'indicador de desbordament és un un, i després decrement cicle de compte ur ..
HPE ajuda.

 
Hola,

Enllaç Idont utilitzar bucles, ja que el MCU deixa de fer altres coses.Vostè pot comparar a un NO a una multitasca multitasques MCU.Si s'acaba de construir un rellotge, i després a D'acord aquest Routine funcionarà.Però si alguna vegada es basarà somehitng que és més que això, llavors vostè tindrà un problema.
Aquí està el codi que utilitza per a la majoria de les meves aplicacions.es pot veure que la interrupció és molt curt, totes les im resta fent en el propi programa.
Deixa començament:
1.Vostè ha d'establir la veribales mundial.Jo ús globael perquè corren entre algunes funcions i no voldria que el meu rellotge per arribar a tots worng ...
2.Vostè trobarà la interrupció de zel.es pot veure que és molt curt i simple.Vostè rebrà a l'indicador de desbordament del temporitzador, treure la marca i restablir el temporitzador.
3.Has de implament els ajustaments per al desbordament de temporitzador.Com explaind scdoro, escriviu 0xFFFF - el temps que vostè necessita.
Per exemple.10 ms a 4MHZ:
4 MHz / 4 = 1 MHz = 0,000001 Sec
10ms = 0.01sec.
10ms/1MHz = 0.01/0.000001 = 10.000 = 0x2710
PER TMR1 = 0xFFFF - 0x2710 = 0xD8EF
4.Ús d'un bucle while, s'introdueix cada funció en el moment adequat, quan els canvis de pavelló.
Codi:Flag_10mS bit = 0, Flag_100mS = 0, Flag_1Sec = 0, / / Flags temporitzador

Count100mS unsigned char = 0, Count1Sec = 0, Count1Min = 0; / / comptadors de temps/************************************************* **

* Interrompre el servei RUTINA *

************************************************** * /void interrupt isr (void)

(if (TMR1IF & & TMR1IE) / / cas de desbordament Timer1 passat, estableix a 1mSec?

(

Flag_10mS = 1;

TMR1L = 0xEF; byte / / Initialize Timer1 baixa

TMR1H = 0xD8; / / inicialitzar Timer1 1mSec byte alt

TMR1IF = 0; / / Esborrar TMR1 interrupció Localització

Count100mS ; / / comptador per 100ms

if (Count100mS> = 10) / / comptador per 100ms

(

Flag_100mS = 1;

Count100mS = 0; / / Reinicia comptador

Count1Sec ;

)

if (Count1Sec> = 10) / / Comptador de 1 seg

(

Flag_1Sec = 1;

Count1Sec = 0; / / Reinicia comptador

)

)

)

/******************************

* Codi d'inicialització Timer1 *

******************************/Init_Timer1 (void)

(

T1CON = 0x00; / setup registre T1CON

TMR1L = 0xEF; byte / / Initialize Timer1 baixa

TMR1H = 0xD8; / / inicialitzar Timer1 10msec byte alt

TMR1IF = 0; / / Reset Timer1 desbordament d'H / W bandera

TMR1IE = 1 / / Habilita Timer1 desbordament d'interrupció

TMR1ON = 1; / / Start contra Timer1

)/***********************************************

* * Inicialització del sistema

***********************************************/void main (void)

(

Init_Timer1 (); / / Initialize Timer1

PEIE = 1 / / Habilita interrupcions de perifèrics

GIE = 1 / / Habilita interrupcions Globalwhile (1)

(

/ / Funció 10msec ************** *****************

if (Flag_10mS) / / Funcions per executar-se en 10msec

(

Flag_10mS = 0;

....

) / / Fi 10msec/ / Funció 100mSec ************** *****************

if (Flag_100mS) / / Funcions per executar-se en 10msec

(

Flag_100mS = 0;

....

)/ / Funció 1sec ************** *****************

if (Flag_1Sec) / / Funcions per executar-se en 1sec

(

Count1Min ;

Flag_1Sec = 0;

...

) / / Fi 1sec/ / Funció 1min ************** *****************

if (Count1Min> = 60) / / 1 Minut passat)

(

Count1Min = 0;

...

) / / Fi 1 Min

) / / Fi mentre

) / / Fi principal
 
Hola,

Tinc aquest programa (que no sé on puc aconseguir això, i jo mai ho va intentar), però es calcula el retard, descarregar i provar.
Malauradament, cal iniciar una sessió per veure aquest arxiu adjunt

 

Welcome to EDABoard.com

Sponsor

Back
Top