| Autor | Missatge |
|---|
semiconductors
Antiguitat: 04 de abril 2003 Posts: 294 Ajudat: 3 Lloc: França
| 27 abril 2005 18:02 temps d'espera a 89C51/89C52 | | |
|
| Estic assignat un exercici per a un programa d'AT89C51 per al projecte de portes automàtiques.
Estic davant d'un problema: TIMEOUT
si el sensor detecta la gent externa disponible, s'obrirà la porta i esperant el sensor intern detecta les persones disponibles. Després de 20 anys, si no es detecta cap senyal, automàticament es tanqui la porta i tornar al principi del programa (en espera de la senyal de la porta exterior.
amb AT89C51, estic de programació en C, però no sé com dissenyar TIMEOUT algorisme amb AT89C51 (20 segons).
Algú em pot recomanar solucions? |
|
| Tornar al principi | |
 |
IANP
Antiguitat: 05 de octubre 2004 Missatges: 6.490 Ajudat: 1542 Ubicació: Costa Oest
| Abril 28, 2005 1:25 Re: temps d'espera a 89C51/89C52 | | |
|
| Utilitzeu timer1 a MODE1 (comptador de 16 bits) per explicar (Fclock/12): FFFFh. Si la plataforma és 11.0952MHz la interrupció es produirà cada (11095200/12) / 65536 = 14,108 .. vegades per segon. Crear TimeH variable i TimeL. Augmentar TimeHTimeL cada interrupció. Per arribar als 20 segons que serà necessari ≈ 282 interrupcions i que deixarà als TimeHTimeL = 01 1A (h) = 0282 (d). Ara vostè pot restablir 20s comptador (TimeHTimeL) i executar el que s'ha de fer després de 20 anys ..
Bona sort .. |
|
| Tornar al principi | |
 |
Google AdSense

| Abril 28, 2005 1:25 Anuncis | | |
|
|
|
|
| Tornar al principi | |
 |
mrcube_ns
Antiguitat: 10 abril 2002 Missatges: 429 Ajudat: 11 Ubicació: costat fosc de la Lluna
| 28 abril 2005 21:17 Re: temps d'espera a 89C51/89C52 | | |
|
| IANP és completament correcte,
però, recomano utilitzar el cristall de 12MHz, de manera que un cicle es 1us.
A continuació, utilitza timer 1 com temporitzador de 16 bits i 50 ms fet temporitzador (T1H = 0x3C T1L = 0xAF), per la qual cosa té 20 càrrecs en una segona 20seg => als rics que necessita exactament 400 càrrecs.
Salutacions cordials,
Mr.Cube |
|
| Tornar al principi | |
 |
Hero
Antiguitat: 06 de març 2002 Posts: 145 Ajudat: 2
| Abril 29, 2005 3:51 Re: temps d'espera a 89C51/89C52 | | |
|
| Hola,
Per al període de temps que necessita Software lliure.
Ús de maquinari 16 bits per a la lluita contra la generació de intterupt diaris.
A la interrupció del servei de rutina conjunt de variables CNT_FLAG.
CNT_FLAG unsigned char; CNT llarg sense signe; TIMEOUT unsigned char; unsigned char TIMEOUT_ENABLED;
# Define TIMEOUT_THRESHOLD 1.024
interrupt_routine void () ( CNT_FLAG = 1; )
void main () ( init ();
while (1) ( ... cnt_process (); sleep (); / / anar a la manera d'espera ) )
cnt_process void () ( if (CNT_FLAG) ( CNT_FLAG = 0; if (TIMEOUT_ENABLED) ( if (i <TIMEOUT_THRESHOLD) i ; TIMEOUT = (CNT == TIMEOUT_THRESHOLD); ) ) )
En arribar a la CNT TIMEOUT_THRESHOLD TIMEOUT s'establirà.
Una altra solució és la CNT increment en la rutina d'interrupció
interrupt_routine void () ( if (TIMEOUT_ENABLED) ( if (i <TIMEOUT_THRESHOLD) i ; TIMEOUT = (CNT == TIMEOUT_THRESHOLD); ) ) |
|
| Tornar al principi | |
 |