- Messaggi: 1222
- Ringraziamenti ricevuti 104
Controllo TMR0 PIC18f2550
11 Anni 7 Mesi fa #1
da Alex68
Controllo TMR0 PIC18f2550 è stato creato da Alex68
Ciao
ho impostato il Timer0 a 16 bit con T0CONbits.T08BIT = 0 e ho la necessità si sospendere un cilco while(1) prima che il Timer0 vada in overflow e mi generi un interrupt.
Per essere più chiari ho un ciclo infinito while(1) al cui interno leggo dei caratteri da seriale e, per non perdere nessun carattere devo interrompere la ricezione prima che il Timer0 mi generi un interrupt e che venga eseguita la ISR. Ho bisogno di una cosa del tipo
while(1)
{
leggo dati da seriale;
if (TMR0==65000) {break;}
}
Ho effettuato varie prove del tipo
if ((TMR0H +TMR0L)==65000) {break;}
oppure
if ((TMR0)==65000) {break;}
ma il compilatore mi da sempre errore di sintassi.
Qualcuno ha qualche idea???
grazie
ho impostato il Timer0 a 16 bit con T0CONbits.T08BIT = 0 e ho la necessità si sospendere un cilco while(1) prima che il Timer0 vada in overflow e mi generi un interrupt.
Per essere più chiari ho un ciclo infinito while(1) al cui interno leggo dei caratteri da seriale e, per non perdere nessun carattere devo interrompere la ricezione prima che il Timer0 mi generi un interrupt e che venga eseguita la ISR. Ho bisogno di una cosa del tipo
while(1)
{
leggo dati da seriale;
if (TMR0==65000) {break;}
}
Ho effettuato varie prove del tipo
if ((TMR0H +TMR0L)==65000) {break;}
oppure
if ((TMR0)==65000) {break;}
ma il compilatore mi da sempre errore di sintassi.
Qualcuno ha qualche idea???
grazie
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Alex68
- Autore della discussione
- Visitatori
11 Anni 7 Mesi fa #2
da StefA
..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]
Risposta da StefA al topic Controllo TMR0 PIC18f2550
i registri TMR0H e TMR0L sono a 8 bit, se fai la somma non ottieni un qualcosa a 16 bit ma sempre a 8 bit e il confronto con 65000 ti da errore.
Prova ad abbassare quel valore, così vedi se è l'unico errore che ti da..mettilo ad esempio 150.
Per avere un valore di 16bit, dovresti prendere ad esempio un int, ci copi dentro il valore di TMR0H, lo shifti di 8 posizioni e poi ci copi dentro anche TMR0L, sempre che la lettura dei due registri non debba essere fatta in un certo modo (ad esempio per scriverli, bisogna scrivere prima TMR0H).
Ste
Prova ad abbassare quel valore, così vedi se è l'unico errore che ti da..mettilo ad esempio 150.
Per avere un valore di 16bit, dovresti prendere ad esempio un int, ci copi dentro il valore di TMR0H, lo shifti di 8 posizioni e poi ci copi dentro anche TMR0L, sempre che la lettura dei due registri non debba essere fatta in un certo modo (ad esempio per scriverli, bisogna scrivere prima TMR0H).
Ste
..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]
Si prega Accedi o Crea un account a partecipare alla conversazione.
- StefA
- Moderator
Riduci
Di più
11 Anni 7 Mesi fa #3
da Alex68
Risposta da Alex68 al topic Controllo TMR0 PIC18f2550
Ciao StafA
ho risolto così:
unsigned char TimerL,TimerH;
unsigned int Timer;
TimerL=TMR0L;
TimerH=TMR0H;
Timer=TimerH;
Timer=((int)Timer<<+TimerL;
proprio come suggerito da te.
Ho letto che il TMR0 a 16 bit funziona così:
il TMR0H non è un registro , ma un buffer che non può essere indirizzato nè in lettura nè in scrittura.
In lettura, tale TMR0H può essere letto solo dopo aver letto TMR0L mentre in scrittura il TMR0H viene scritt solo dopo aver scritto TMR0L
in pratica per leggere il timer a 16 bit bisogna leggere prima TMR0L e poi TMR0H, mentre in scrittura bisogna scriver prima TMR0H e poi TMR0L.
ciao e grazie
ho risolto così:
unsigned char TimerL,TimerH;
unsigned int Timer;
TimerL=TMR0L;
TimerH=TMR0H;
Timer=TimerH;
Timer=((int)Timer<<+TimerL;
proprio come suggerito da te.
Ho letto che il TMR0 a 16 bit funziona così:
il TMR0H non è un registro , ma un buffer che non può essere indirizzato nè in lettura nè in scrittura.
In lettura, tale TMR0H può essere letto solo dopo aver letto TMR0L mentre in scrittura il TMR0H viene scritt solo dopo aver scritto TMR0L
in pratica per leggere il timer a 16 bit bisogna leggere prima TMR0L e poi TMR0H, mentre in scrittura bisogna scriver prima TMR0H e poi TMR0L.
ciao e grazie
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Alex68
- Autore della discussione
- Visitatori
11 Anni 7 Mesi fa #4
da StefA
..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]
Risposta da StefA al topic Controllo TMR0 PIC18f2550
bene..
quindi funziona così:
Ste
quindi funziona così:
per leggere il timer a 16 bit bisogna leggere prima TMR0L e poi TMR0H, mentre in scrittura bisogna scriver prima TMR0H e poi TMR0L
Ste
..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]
Si prega Accedi o Crea un account a partecipare alla conversazione.
- StefA
- Moderator
Riduci
Di più
- Messaggi: 1222
- Ringraziamenti ricevuti 104
Moderatori: Mauro Laurenti, Pinna, StefA, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.