Vai al contenuto
PLC Forum


Pic16f84 E Rs232


Gariel

Messaggi consigliati

Ho realizzato il circuito descritto nel tutorial di Tanzilli per comunicare tra PC e pic16f84 tramite rs232.

Ho caricato il programma RS232IO.asm nel pic e tutto funziona perfettamente come descritto dall'autore.

Il problema è che non riesco a capire alcuni passi del programma e precisamente la parte iniziale:

BIT_DELAY equ 23 ;Bit delay a 9600 bps

; MACRO - Delay subroutine with watch dog timer clearing

;

; 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

Questo passo mi è completamente oscuro. Capisco che con questa macro si intende creare un ritardo della durata di un bit, ma non capisco il metodo utilizzato.

Altra cosa, la routine usa il watch dog timer, ma come mai che il programma funziona ugualmente sia che nella configuration word sia settato o no il bit rispettivo? Anche in fase di programmazione ho provato entrambi i casi, a settarlo o no in ICPROG ed il risultato non cambia: il programma funziona lo stesso.

Sarò molto grato a chi vorrà darmi una risposta.

Saluti

Gariel

Link al commento
Condividi su altri siti


Ciao Gabriel,

Questa routine di ritardo non e'altro che un loop legato alla variabile TmpRegister.

In questa variabile viene caricato un valore e nel loop viene decrementato , quando arriva a zero si esce dal loop e si continua il programma .

Il Watch Dog , e' un contatore indipendente che , come dice il nome, controlla il funzionamento del pic.

Quando il WD arriva a 255 esegue un reset del pic, per questo che durante loop o in parti del programma lunghe di deve resettare questo contatore prima che arrivi a 255 usando l'istruzione clrwdt.

Il WD si usa nel caso che per un tuo errore di programma o per un disturbo esterno il programma si blocca in un punto indefinito non passando piu per l'istruzione clrwdt , allora il WD arrivera a 255 resettando il pic .

Quindi ai fini della programmazione abilitato o no , non cambia il funzionamento.

Link al commento
Condividi su altri siti

Mi hai chiarito il dubbio sul watch dog. Il settaggio o no del bit relativo avrà effetto solo in caso di blocco del programma. Per quanto riguarda il resto è la sintassi della macro un po' oscura ma il concetto è chiaro.

Grazie per la spiegazione.

Saluti Gariel

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...