elmowww
PA0EJE - www.eje-electronics.nl - e.jongerius[aapje]eje-electronics.nl - EJE Electronics - Elektronica/firmware ontwikkeling
Bestaat er in een PIC een simpel commando om een byte om te draaien?
Dus:
new_bit0 = old_bit7
new_bit1 = old_bit6
new_bit2 = old_bit5
new_bit3 = old_bit4
new_bit4 = old_bit3
new_bit5 = old_bit2
new_bit6 = old_bit1
new_bit7 = old_bit0
elmowww
PA0EJE - www.eje-electronics.nl - e.jongerius[aapje]eje-electronics.nl - EJE Electronics - Elektronica/firmware ontwikkeling
Mmm, assembler of basic. Maakt mij niet uit. Maar IN een pic is in ieder geval assembler (eigk opcode).
[Bericht gewijzigd door elmowww op (40%)]
klein is fijn
Moderator
Alle ASM commando's staan in de datasheet van de desbetreffende PIC. Hetgeen wat er het meeste op lijkt zal iets van SWAPF zijn, alleen is dat volgens mij van toepassing op nibbles.
Ik ben niet thuis in PIC assembler, maar er is (net als bij andere assembly talen) ongetwijfeld een Rotate Left (ROL) of Rotate Right (ROR) commando.
[update]
Ik heb een PIC assembly Language Reference gevonden. ROR en ROL staan er ook in (blz. 13 en verder). Er is niet één commando, meest in de buurt komt SWAP (wissel nibble's) en ROL/ROR (bitniveau). Je kunt iets in een loopje doen met ROL.
De rechttoe rechtaan methode:
RevWReg:
rlf WREG,f
rrf reverse,f
rlf WREG,f
rrf reverse,f
rlf WREG,f
rrf reverse,f
rlf WREG,f
rrf reverse,f
rlf WREG,f
rrf reverse,f
rlf WREG,f
rrf reverse,f
rlf WREG,f
rrf reverse,f
rlf WREG,f
rrf reverse,w
returnKorter maar trager (met een loop)
movlw 8
movwf counter
revloop rrf abuff,R
rlf bbuff,F
decfsz counter,F
goto revloopEn dan nu de slimste methode:
; input X = abcdefgh , Output X = hgfedcba
; Written by Dmitry A. Kiryashov 2000
; 12 clocks/words
reverse8bit:
swapf X,W ;efghabcd
xorwf X,W ;efghabcd
;abcdefgh
andlw 0x66 ;.fg..bc.
;.bc..fg.
xorwf X,F ;afgdebch
;
rrf X,W
rrf X,F ;hafgdebc
;
andlw 0x55 ;.a.g.e.c
addwf X,F ;h.f.d.b.
;a.g.e.c.
rrf X,F ;.h.f.d.b
;.a.g.e.c
addwf X,F ;ahgfedcb
;
rlf X,W
rlf X,F ;hgfedcba
;it can be replaced
;with rlf X,W
;if necessary...Dit alles met dank aan www.piclist.com 
Bart Hiddink
Bart Hiddink is Ideetron; electronics and projects, http://www.ideetron.nl. LoRaWAN Nutcase.
Nee, geen commando.
Wel een loopje om het te doen:
CLRF new
MOVLW 0x08
MOVWF teller
loop
RRF old,1
RRL new,1
DECFSZ teller,1
GOTO loop
Fantomaz
Ik moet hier weer vaker komen... Wat kun je zo'n forum als deze gaan missen. :-)
Als je hetkwijt kunt in PICBasic, kun je het commando REV gebruiken. Die zet de inhoud van de variabele in spiegelbeeld, als dat is wat je bedoeld.
Als je een stukje in picbasic schrijft, compileerd en de ASMcode daar uit haalt, zie je hoe ze het in Assembler hebben gedaan.
[Bericht gewijzigd door Fantomaz op (31%)]
elmowww
PA0EJE - www.eje-electronics.nl - e.jongerius[aapje]eje-electronics.nl - EJE Electronics - Elektronica/firmware ontwikkeling
Frits Kieftenbelt
Ohm sweet Ohm | www.picbasic.nl
Wat Fantomaz schreef, het gebruik van de operator REV in PIC Basic, is toch eenvoudig?
REV draait de laatste bits om, met het getal achter REV geef je aan hoeveel bits omgedraaid moeten worden.
Variabele = %00110101
Variabele = Variabele REV 4
'Variabele' krijgt eerst de waarde 00110101
Na het omdraaien van de laatste 4 bits (de 4 achter REV) is 'Variabele' nu 00111010 (de laatste 4 bits zijn omgedraaid).
----
Om alle bits van een BYTE om te draaien plaats je gewoon een 8 achter REV.
Variabele = %00110101
Variabele = Variabele REV 8
'Variabele' krijgt eerst de waarde 00110101
Na het omdraaien van de 8 bits (de 8 achter REV) draait het hele zakie om.
'Variabele' is nu %10101100.
elmowww
PA0EJE - www.eje-electronics.nl - e.jongerius[aapje]eje-electronics.nl - EJE Electronics - Elektronica/firmware ontwikkeling
Dat snap ik wel, ik bedoelde een efficientere methode om het te doen.
Rev in picbasic zal niet het meest efficient werken 
Op 7 maart 2008 11:46:20 schreef elmowww:
Dat snap ik wel, ik bedoelde een efficientere methode om het te doen.
Volgens mij heb ik de meest efficiente methode (12 cycles) al gepost, als er een snellere is dan hoor ik dat graag.
Nee.
Maar het is leuk om te zien waarom (in ieder geval) niet:
Als b=128-a zou zijn, dan zouden de opeenvolgende b's steeds 1 verschillen, net als a.
Dat zou dus in het minstwaardige bit zijn. Terwijl opeenvolgende b's juist in het meestwaardige bit zouden moeten verschillen. 
/e: Elmowww, ga je FFT's maken?
Fantomaz
Ik moet hier weer vaker komen... Wat kun je zo'n forum als deze gaan missen. :-)
Volgens mij gaat dat niet.
Want als je waarde 192 binair hebt, en je trekt dat af van je 128, kom je negatief uit.
Dat trekt je pic niet.
Fantomaz
Ik moet hier weer vaker komen... Wat kun je zo'n forum als deze gaan missen. :-)
(kuch) Ik probeer het nog eens:
Als b=255-a zou zijn, dan zouden de opeenvolgende b's steeds de waarde 1 verschillen. Dat zou dus in het minstwaardige bit zijn. Terwijl opeenvolgende b's juist in het meestwaardige bit zouden moeten verschillen. 
Frits Kieftenbelt
Ohm sweet Ohm | www.picbasic.nl
-
[Bericht gewijzigd door Frits Kieftenbelt op (100%)]
Frits Kieftenbelt
Ohm sweet Ohm | www.picbasic.nl
Vreemd, Fantomaz's antwoord staat hoger dan de vraag afgebeeld? 23:01 / 23:04
Foutje... zit net een dag verschil in 