... non capisco alcune istruzioni
- lucatun
- Autore della discussione
- Premium Utente
Less
Di più
12 Anni 1 Mese fa - 12 Anni 1 Mese fa #1
da lucatun
La mia ingnoranza non ha confini
<-]LuT[->
... non capisco alcune istruzioni è stato creato da lucatun
Ciao a tutti,
sono alle prese con un PIC32MX460F512L, in alcune progetti di esempio ho trovato alcune istruzioni che non capisco, l'hardwarea disposizione è il pic con 2 pulsanti e 4 leds, i pulsanti sono sulla porta A pin 6 e 7, mentre i led sulla porta B pin 10, 11, 12, 13
l'esempio riportato è parte della funzione, che è utilizzata per accendere i leds, dove stLeds è una variabile che è passata alla funzione, mi indica il led da accendere, mentre bnLed1 e bnLed2, mi indicano il numero di pin della porta B, quindi bnLed1 = 10, bnLed2 = 11.
Quello che non mi è chiaro è l'operatore "<<", perché io l'ho sempre utilizzato come shit a sinistra di (nel nostro caso) bnLed1, cioè shifta di 10 posizioni l'uno verso sinistra. Non capisco come lavorano queste istruzioni, perché io ragionavo che, se volevo accendere un led, per esempio il primo, nel registro corrispondente, PORTB, e posizione corrispondente 10, mettere 1, oppure 0 per spegnerlo. Percui partendo dall'esempio per accendere il led 1, io avrei fatto prtLed1Set = 1 e per spegnerlo prtLed1Clr = 1, naturalmete con tutto il codice necessario per gestire questi 2 bit. Dopo non so se ho sparato qualche boiata, ma sono i primi esperimenti con sto pic. Gli esempi li ho presi dalla digilent.
Grazie a tutti per le delucidazioni
sono alle prese con un PIC32MX460F512L, in alcune progetti di esempio ho trovato alcune istruzioni che non capisco, l'hardwarea disposizione è il pic con 2 pulsanti e 4 leds, i pulsanti sono sulla porta A pin 6 e 7, mentre i led sulla porta B pin 10, 11, 12, 13
Code:
#define prtLed1Set PORTBSET
#define prtLed1Clr PORTBCLR
#define bnLed1 10
if ( stLeds & ( 1 << 0 ) )
{prtLed1Set = ( 1 << bnLed1 );}
else
{prtLed1Clr = ( 1 << bnLed1 );}
if ( stLeds & ( 1 << 1 ) )
{prtLed2Set = ( 1 << bnLed2 );}
else
{prtLed2Clr = ( 1 << bnLed2 );}
l'esempio riportato è parte della funzione, che è utilizzata per accendere i leds, dove stLeds è una variabile che è passata alla funzione, mi indica il led da accendere, mentre bnLed1 e bnLed2, mi indicano il numero di pin della porta B, quindi bnLed1 = 10, bnLed2 = 11.
Quello che non mi è chiaro è l'operatore "<<", perché io l'ho sempre utilizzato come shit a sinistra di (nel nostro caso) bnLed1, cioè shifta di 10 posizioni l'uno verso sinistra. Non capisco come lavorano queste istruzioni, perché io ragionavo che, se volevo accendere un led, per esempio il primo, nel registro corrispondente, PORTB, e posizione corrispondente 10, mettere 1, oppure 0 per spegnerlo. Percui partendo dall'esempio per accendere il led 1, io avrei fatto prtLed1Set = 1 e per spegnerlo prtLed1Clr = 1, naturalmete con tutto il codice necessario per gestire questi 2 bit. Dopo non so se ho sparato qualche boiata, ma sono i primi esperimenti con sto pic. Gli esempi li ho presi dalla digilent.
Grazie a tutti per le delucidazioni
La mia ingnoranza non ha confini
<-]LuT[->
Ultima Modifica 12 Anni 1 Mese fa da lucatun.
Si prega Accesso o Crea un account a partecipare alla conversazione.
12 Anni 3 Settimane fa #2
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: ... non capisco alcune istruzioni
Ciao,
...vedo che stai facendo il salto ai 32 bit!
Quello che hai imparato sui PIC18 e il C non cambia!
Potresti far uso direttamente del registro PORTx e LATCx.
i PIC32 introducono pero' anche i registri SET, CLR e INV per cui si puo' intervenire sui primi registri che gia' conosci facendo uso di quest'ultimi.
In particolare per PORTB hai PORTBSET e PORTBCLR che permettono di settare e a 1 o a 0 i rispettivi bit.
Solo i bit posti ad 1 settano ad 1 o 0 i rispettivi bit del registro PORTB.
Questi registri hanno il vantaggio di eseguire l'istruzione in maniera atomica (un ciclo di clock).
Nell'esempio sotto (che ritengo infelice per un hello world) l'operatore << e' sempre uno shift.
Per settare il bit 10 di PORTB fa uso del registro PORTBSET (il cui bit 10 deve essere dunque settato).
Per fare questo si fanno 10 shift di 1 che si sposta alla decima posizione, per cui accende il led!
Stesso ragionamento per gli atri LED.
Saluti,
Mauro
...vedo che stai facendo il salto ai 32 bit!
Quello che hai imparato sui PIC18 e il C non cambia!
Potresti far uso direttamente del registro PORTx e LATCx.
i PIC32 introducono pero' anche i registri SET, CLR e INV per cui si puo' intervenire sui primi registri che gia' conosci facendo uso di quest'ultimi.
In particolare per PORTB hai PORTBSET e PORTBCLR che permettono di settare e a 1 o a 0 i rispettivi bit.
Solo i bit posti ad 1 settano ad 1 o 0 i rispettivi bit del registro PORTB.
Questi registri hanno il vantaggio di eseguire l'istruzione in maniera atomica (un ciclo di clock).
Nell'esempio sotto (che ritengo infelice per un hello world) l'operatore << e' sempre uno shift.
Per settare il bit 10 di PORTB fa uso del registro PORTBSET (il cui bit 10 deve essere dunque settato).
Per fare questo si fanno 10 shift di 1 che si sposta alla decima posizione, per cui accende il led!
Stesso ragionamento per gli atri LED.
Saluti,
Mauro
I seguenti utenti hanno detto grazie : lucatun
Si prega Accesso o Crea un account a partecipare alla conversazione.
12 Anni 3 Settimane fa #3
da lucatun
La mia ingnoranza non ha confini
<-]LuT[->
Risposta da lucatun al topic Re: ... non capisco alcune istruzioni
si ho sto tentando il salto ai 32bit, ma il problema principale è il tempo, purtroppo il mio lavoro mi porta sempre in giro per l'Europa, quindi faccio qualcosina quando sono a casa.
Comunque, grazie delle delucidazioni, adesso ci lavoro un po' su
Comunque, grazie delle delucidazioni, adesso ci lavoro un po' su
La mia ingnoranza non ha confini
<-]LuT[->
Si prega Accesso o Crea un account a partecipare alla conversazione.
- Cosimix
- Elit Utente
Less
Di più
- Messaggi: 198
- Ringraziamenti ricevuti 26
11 Anni 4 Mesi fa #4
da Cosimix
Risposta da Cosimix al topic Re: ... non capisco alcune istruzioni
Salve!
Anche i PIC32 necessitano di quattro cicli di clock per poter eseguire un'istruzione?Questi registri hanno il vantaggio di eseguire l'istruzione in maniera atomica (un ciclo di clock).
Si prega Accesso o Crea un account a partecipare alla conversazione.
11 Anni 4 Mesi fa #5
da Mauro Laurenti
Risposta da Mauro Laurenti al topic ... non capisco alcune istruzioni
Ciao,
i PIC18 necessitano 4 cicli di clock per istruzione, come anche gli altri PIC ad 8 bit.
I dsPIC sono 2 cicli di clock per istruzione mentre i PIC32 necessitano di 1 ciclo per istruzione.
Saluti,
Mauro
i PIC18 necessitano 4 cicli di clock per istruzione, come anche gli altri PIC ad 8 bit.
I dsPIC sono 2 cicli di clock per istruzione mentre i PIC32 necessitano di 1 ciclo per istruzione.
Saluti,
Mauro
Si prega Accesso o Crea un account a partecipare alla conversazione.
Moderatori: Mauro Laurenti, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.
Forum - Ultimi messaggi
-
- Freedom III e compilazioni fallite
- da Mauro Laurenti
-
- MODULO GSM SIM900A
- da FABRIZIO
-
- LTerminal - nuove funzioni
- da Mauro Laurenti
-
- Aggiornamento sito completato
- da Mauro Laurenti
-
- registro a scorrimento PIPO in cascata
- da Mauro Laurenti