timer watchdog del problema initalization PIC16F84A

M

maha384

Guest
Questo codice non funziona quando mi ENABLE WDT.E NON SO IL PROBLEMA O COME FARE Watchdog Timer LAVORO.# define AC PORTA.F1
# define PORTA.F2 VALVOLA
# define STARTER PORTA.F3
# define INPUT PORTB.F3
# define ALLARME PORTB.F7
# define RESET PORTB.F6
# define ritardo 1.000
# define startup_prd 5
# define wait_prd 10
# define noload_prd 20

void main (void)
(
unsigned char n, x;
TMR0 = 0x00;
OPTION_REG = 0x0F;

TRISA = 0x02;
TRISB = 0x48;
VALVOLA = 0;
STARTER = 0;
ALLARME = 0;

standby:
ASM CLRWDT ();

VALVOLA = 0;
STARTER = 0;
delay_ms (delay);
if (input == 1) (goto standby;)
else (goto avvio;)

avvio:

ALLARME = 0;
delay_ms (delay);
for (n = 0; n <3; n )
(
delay_ms (delay);
if (input == 1) goto standby;
VALVE = 1;
STARTER = 1;
for (x = 0; x <startup_prd; x )
(
Delay_ms (delay);
/ / asm CLRWDT ();
if (input == 1) goto standby;
if (AC == 0) (STARTER = 0; goto normal;)
ASM CLRWDT) ();
VALVOLA = 0;
STARTER = 0;
if (n == 2) (ALLARME = 1; allarme goto;)
delay_ms (delay);
if (input == 1) goto standby;
for (x = 0; x <wait_prd; x )
(
delay_ms (delay);
ASM CLRWDT ();
)
if (input == 1) goto standby;
)

normale:
ASM CLRWDT ();
if (AC == 1) (ALLARME = 1; VALVOLA = 0; allarme goto;)
delay_ms (delay);
if (input == 0) goto normale;
if (input == 1) noload goto;
normale goto;

Allarme:
ASM CLRWDT ();
delay_ms (delay);
if (RESET == 0) (ALLARME = 0; goto attesa;)
goto di allarme;

noload:
for (n = 0; n <noload_prd; n )
(
delay_ms (delay);
asm (CLRWDT;
)

if (input == 0) goto normale;
VALVOLA = 0;
goto attesa;

)

 
Nie tylko politycy muszą uważać na to, co i gdzie mówią. Szpiegostwo korporacyjne jest codziennością dzisiejszego biznesu - uprawia je ponad 70% globalnych przedsiębiorstw. Dlatego firmy powinny zadbać o poufność informacji oraz bezpieczeństwo spotkań i konferencji.

Read more...
 
Salve,
Credo che il problema è quando si inizializzato TRISA e TRISB.
Penso che si dovrebbe avere spostato il corrispondente Banc, voglio dire Banc 1.

 
Che tipo di compilatore C stai usando (in generale, l'interruttore bancario dovrebbe essere fatto dal compilatore stesso)?
Non hai impostato correttamente la PAROLA DI CONFIGURAZIONE (DS35007B-pagina 21).

Proprio come un suggerimento si può evitare di utilizzare l'istruzione goto e utilizzare un interruttore, si può costruire il codice al fine di agire come una FSM (Finite State Machine), ecco un link sul tema:

http://en.wikipedia.org/wiki/Event_driven_finite_state_machine

Salute
FF aka Powermos

 
- Il compilatore che uso è Mickro C.
- E sul ISSU BANCHE NON C'È problema qui non dovrei SWITCH LE BANCHE LA DO IT COMPILATORE STESSA. (E mi Provare a cambiare alla Banca 1 poi di nuovo, dopo che per BANK0 ancora non lavoro)
- LA PAROLA configurazione è:
CP = 0;
WDT = 1;
PWRTE = 0;
XT è l'OSC. (4MHZ)

- Il Codice è stato LAVORO PRIMA DI FARE (WDT = 1;), ma il Watchdog Timer ofcourse NON LAVORO

 
Può essere non vi è un errore di sintassi nel codice postato, scorrere verso il basso fino a questo pezzo di codice:

Codice:noload:

for (n = 0; n <noload_prd; n )

(

delay_ms (delay);

asm (CLRWDT;

)

 
Ho scoperto che il cane da guardia è stato solo più veloce di quanto pensassi in modo da mantenere reimpostare il microcontrollore 2.3S ogni modo credo che il codice non funziona.
così ho aggiungere più CLRWDT e funziona.
GRAZIE per tutti voi

 

Welcome to EDABoard.com

Sponsor

Back
Top