spacer.png, 0 kB

Torna indietro   Roboitalia.com - Il primo portale in Italia sulla robotica amatoriale > Robotica di base > Informatica

Rispondi
 
Strumenti discussione Modalità  visualizzazioe
  #1  
Vecchio 28-10-2014, 19.08.42
L'avatar di landyandy
landyandy landyandy non è collegato
Robottaro sostenitore
 
Data registrazione: 07-02-2010
Residenza: Abruzzo - Teramo
Età : 45
Messaggi: 2,330
Potenza reputazione: 336
landyandy La sua reputazione è oltre la sua famalandyandy La sua reputazione è oltre la sua famalandyandy La sua reputazione è oltre la sua famalandyandy La sua reputazione è oltre la sua famalandyandy La sua reputazione è oltre la sua famalandyandy La sua reputazione è oltre la sua famalandyandy La sua reputazione è oltre la sua famalandyandy La sua reputazione è oltre la sua famalandyandy La sua reputazione è oltre la sua fama
Predefinito comando Asm: RRNCF

Stavo cercando di studiarmi un listato per PIC 18F4520 fatto in Basic e ho notato che è stato inserito un'istruzione in Assembler chiamata RRNCF cioè ruota a destra il bit.

http://technology.niagarac.on.ca/sta...Set/RRNCF.html

Codice:
NewPos = PORTB & %11000000 >> 6 
If NewPos != OldPos Then 
Rrncf OldPos ' comando assembler di rotazione a DX del bit
OldPos = OldPos ^ NewPos ' Xor tra due valori
Siccome sto facendo il porting su 16F877A, il compilatore mi dice che nella serie 16 questo comando non è supportato.

che tipo di operatore logico si utilizza per esempio in C se volessi fare la stessa cosa?

Chiedo in C perché so che lo utilizzate maggiormente.



saluti
landyandy
__________________
------------------------------------------------




-----------------------------------------------
Rispondi citando
  #2  
Vecchio 28-10-2014, 19.46.19
L'avatar di astrobeed
astrobeed astrobeed non è collegato
Robottaro sostenitore
 
Data registrazione: 18-03-2004
Residenza: Roma
Messaggi: 3,377
Potenza reputazione: 355
astrobeed La sua reputazione è oltre la sua famaastrobeed La sua reputazione è oltre la sua famaastrobeed La sua reputazione è oltre la sua famaastrobeed La sua reputazione è oltre la sua famaastrobeed La sua reputazione è oltre la sua famaastrobeed La sua reputazione è oltre la sua famaastrobeed La sua reputazione è oltre la sua famaastrobeed La sua reputazione è oltre la sua fama
Predefinito

Citazione:
Orginalmente inviato da landyandy Visualizza messaggio
Chiedo in C perché so che lo utilizzate maggiormente.
In C c'è un operatore dedicato allo shift, ">>" shift a destra, "<<" shift a sinistra.
Esempio pratico b = a >> 2; , in b viene posto il valore di a shiftato di due posizioni verso il basso.
__________________
Bye

Ultima modifica di astrobeed : 29-10-2014 alle ore 06.22.28
Rispondi citando
  #3  
Vecchio 28-10-2014, 21.08.57
L'avatar di landyandy
landyandy landyandy non è collegato
Robottaro sostenitore
 
Data registrazione: 07-02-2010
Residenza: Abruzzo - Teramo
Età : 45
Messaggi: 2,330
Potenza reputazione: 336
landyandy La sua reputazione è oltre la sua famalandyandy La sua reputazione è oltre la sua famalandyandy La sua reputazione è oltre la sua famalandyandy La sua reputazione è oltre la sua famalandyandy La sua reputazione è oltre la sua famalandyandy La sua reputazione è oltre la sua famalandyandy La sua reputazione è oltre la sua famalandyandy La sua reputazione è oltre la sua famalandyandy La sua reputazione è oltre la sua fama
Predefinito

Grazie!!

Quindi RRNCF è un semplice shift a destra?

Scusa la domanda banale ma la spiegazione del link che ho riportato sopra mi ha ingannato.

"Rrncf OldPos" <---- perché non c'è un parametro che indica di quanto si sposta il bit, tipo quello che hai scritto tu ? (b = a >> 2)


Parlo da ignorante eh .....

quindi abbi pazienza



saluti
landyandy
__________________
------------------------------------------------




-----------------------------------------------
Rispondi citando
  #4  
Vecchio 29-10-2014, 10.22.53
L'avatar di astrobeed
astrobeed astrobeed non è collegato
Robottaro sostenitore
 
Data registrazione: 18-03-2004
Residenza: Roma
Messaggi: 3,377
Potenza reputazione: 355
astrobeed La sua reputazione è oltre la sua famaastrobeed La sua reputazione è oltre la sua famaastrobeed La sua reputazione è oltre la sua famaastrobeed La sua reputazione è oltre la sua famaastrobeed La sua reputazione è oltre la sua famaastrobeed La sua reputazione è oltre la sua famaastrobeed La sua reputazione è oltre la sua famaastrobeed La sua reputazione è oltre la sua fama
Predefinito

Citazione:
Orginalmente inviato da landyandy Visualizza messaggio
Grazie!!
Quindi RRNCF è un semplice shift a destra?
In effetti non è un semplice shift a destra, o meglio esegue lo shift a destra del registro f (dei pic) senza influenzare il flag carry (riporto), però fa rientrare il bit shiftato al posto del msb.
In pratica l'istruzione ruota circolarmente il registro verso destra di un bit ogni volta che viene richiamata.
In C non esiste un equivalente diretto, ">>" e "<<" fanno solo lo shift di tot bit nel verso richiesto inserendo uno zero al posto del msb, però agiscono su tutti i tipi dati supportati dal C e non solo su un singolo registro a otto bit.
Esempio pratico, se la variabile A è di tipo unsigned int e contiene, in formato binario, "1111000011110000" ed esegui uno shfit verso destra di quattro bit ottieni "0000111100001111".
In pratica shiftare verso destra è equivalente a dividere il valore per la potenza di due pari al numero di bit, se shifti un bit è come dividere per due, se shifti due bit è come dividere per quattro, etc.
Stessa cosa per lo shift verso sinistra con la differenza che è lsb ad essere sostituito con lo zero ed è equivalente a moltiplicare per una potenza di due.
Usare lo shift al posto di moltiplicazioni/divisioni per potenze di due è molto più efficace, richiede meno cicli macchina, dell'operazione divisione/moltiplicazione, a meno che non siano supportate in hardware da apposita circuiteria.
__________________
Bye
Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione
Modalità  visualizzazioe

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code è Attivato
Le smilies sono Attivato
[IMG] è Attivato
Il codice HTML è Disattivato

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
Comando per servo HS-55. enrub Motori e azionamenti 8 22-06-2012 14.32.43
Comando Motori DC xadoom P. in C, C++ 7 03-05-2006 19.11.37
Tastiera=Comando Rider P. in Visual Basic 6 15-12-2005 17.04.36
Comando COUNT marnic P. in Basic per micro 6 29-10-2004 20.16.27
comando FREQOUT emanuele83 P. in C, C++ 5 17-10-2004 10.47.15


Tutti gli orari sono GMT. Adesso sono le: 12.15.06.


Basato su: vBulletin Versione 3.8.8
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
Realizzazione siti web Cobaltica Foligno
spacer.png, 0 kB