- Messaggi: 9
- Ringraziamenti ricevuti 0
modulo ccp
10 Anni 10 Mesi fa #1
da _seven
modulo ccp è stato creato da _seven
Salve a tutti e buon anno nuovo.Stavo leggendo questoquesto articolo sul sito...e sono incappato in questo codice:
qualcuno potrebbe spiegare(commentare) il significato di "CCPR1L = (unsigned char) (duty_cycle >> 2);" e dei due if.
grazie 1000
Attenzione: Spoiler!
void set_duty_cycle (int duty_cycle) {
//Imposto il byte più significativo
CCPR1L = (unsigned char) (duty_cycle >> 2);
//Imposto il bit B0
if (duty_cycle & 0x0001)
CCP1CONbits.DC1B0 = 0x0001;
else
CCP1CONbits.DC1B0 = 0x0000;
//Imposto il bit B1
if (duty_cycle & 0x0002)
CCP1CONbits.DC1B1 = 0x0001;
else
CCP1CONbits.DC1B1 = 0x0000;
}
//Imposto il byte più significativo
CCPR1L = (unsigned char) (duty_cycle >> 2);
//Imposto il bit B0
if (duty_cycle & 0x0001)
CCP1CONbits.DC1B0 = 0x0001;
else
CCP1CONbits.DC1B0 = 0x0000;
//Imposto il bit B1
if (duty_cycle & 0x0002)
CCP1CONbits.DC1B1 = 0x0001;
else
CCP1CONbits.DC1B1 = 0x0000;
}
qualcuno potrebbe spiegare(commentare) il significato di "CCPR1L = (unsigned char) (duty_cycle >> 2);" e dei due if.
grazie 1000
Si prega Accedi o Crea un account a partecipare alla conversazione.
- _seven
- Autore della discussione
- New Member
Riduci
Di più
10 Anni 10 Mesi fa #2
da shinshi
Risposta da shinshi al topic modulo ccp
L'operatore >> è lo shift a destra. duty_cycle è un valore a 10 bit e dobbiamo mettere gli 8 bit "più significativi" nel registro ad 8 bit CCPR1L. Lo shift di 2 posizioni sposta verso destra i bit e i 2 più a destra vengono scartati. (unsigned char) viene messo per fare un casting dell'operazione su una variabile int e inserire invece nel registro solo gli 8 bit necessari.
Saluti
Luca
Saluti
Luca
Si prega Accedi o Crea un account a partecipare alla conversazione.
- shinshi
- Elite Member
Riduci
Di più
- Messaggi: 293
- Ringraziamenti ricevuti 29
10 Anni 10 Mesi fa #3
da _seven
Risposta da _seven al topic modulo ccp
grazie Luca.
mentre gli argomenti degli if?
grazie
mentre gli argomenti degli if?
grazie
Si prega Accedi o Crea un account a partecipare alla conversazione.
- _seven
- Autore della discussione
- New Member
Riduci
Di più
- Messaggi: 9
- Ringraziamenti ricevuti 0
10 Anni 10 Mesi fa #4
da shinshi
Risposta da shinshi al topic modulo ccp
Il carattere & è l'AND logico, nei 2 if viene testato se il primo e secondo bit di duty_cycle sono settati e nel caso vengono settati i relativi bits di CCP1CON.
Ti consiglio di dare una letta a pag 108 del libro di Mauro Laurenti C18 Step by Step per approfondire l'argomento sugli operatori logici.
Saluti
Luca
Ti consiglio di dare una letta a pag 108 del libro di Mauro Laurenti C18 Step by Step per approfondire l'argomento sugli operatori logici.
Saluti
Luca
Ringraziano per il messaggio: _seven
Si prega Accedi o Crea un account a partecipare alla conversazione.
- shinshi
- Elite Member
Riduci
Di più
- Messaggi: 293
- Ringraziamenti ricevuti 29
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.