Hallo, wie kann ich es am einfachsten die Bits eines bytes zu tauschen? Ich möchte das aus 01011010 10100101 wird. Das ist für das Invertieren eines Displays. Dort muss ich bite tauschen für das übertragen an das GLCD. Danke.
Holger Gebauer schrieb: > Hallo, > > wie kann ich es am einfachsten die Bits eines bytes zu tauschen? > Ich möchte das aus > 01011010 > 10100101 > wird. > Das ist für das Invertieren eines Displays. > Dort muss ich bite tauschen für das übertragen an das GLCD. > Danke. Das ist für einen Atmel
Du möchstest die Bit nicht tauschen, sondern invertieren: Value = Value XOR 0xFF oder Value = NOT Value
Hi
>Das ist für das Invertieren eines Displays.
com rxy
MfG Spess
Holger Gebauer schrieb: > Hallo, > > wie kann ich es am einfachsten die Bits eines bytes zu tauschen? > Ich möchte das aus > 01011010 > 10100101 > wird. > Das ist für das Invertieren eines Displays. >... > Wahrscheinlich weißt DU es bereits. COM – One’s Complement Description: This instruction performs a One’s Complement of register Rd. Oder ganz einfach, alle Bits werden invertiert, genau was DU brauchst. Geht sogar mit allen Arbeitsregistern ( General Purpose Register 0-31 ) ldi r1, 0b01011010 com r1 Bernd_Stein
Vielleicht hilft dir auch der Link weiter: http://atmel.com/dyn/resources/prod_documents/doc0856.pdf ist ne Liste aller Assemblerbefehle, mir nützt das öfters was Dennis
Super danke.
Ja da habe ich schön öfters gelesen, nur machmal sitz man auf dem
Schlauch.
Jetzt hae ich noch was.
Bin gerade dabei den GLCD Treiber von Bascom in asm umzuwandeln.
Momentan fast 4mal schneler. :-)
Das war z. eine Schleife.
If G_erase = 1 Then
Gl_rstflag = 1
Else
Gl_rstflag = 0
End If
das in ams
LDS R25, {G_erase}
ANDI R25, 1 'alles ausser 1 wegmaskieren
STS {Gl_rstflag} , R25
-----------------------
Jetzt brauche ich das.
Wie mache ich das am kürzesten:
If G_erase = 1 Then
Gl_rstflag = 0
Else
Gl_rstflag = 1
End If
wäre das dann so?
LDS R25, {G_erase}
ANDI R25, 0 'alles ausser 0 wegmaskieren
STS {Gl_rstflag} , R25
Danke.
Hi
>Bin gerade dabei den GLCD Treiber von Bascom in asm umzuwandeln.
Halte ich für schlecht möglich. BASCOM hat nichts mit Assembler zu tun.
Um welches Grafikdisplay geht es?
MfG Spess
Hi,
geht ja alles schon.
Nur bin ich gerade dran das Display zu Invertieren.
Das ist für das
SED1335 und SED13700 in 320*240
Ja man kann in Bascom einfach mitten im Programm mit Assembler
weiterprogrammieren.
z.B.:
'DISP ON
Gl_cmd = Lcd_disp_on
Gosub Send_cmd
Gl_byte = Lcd_on
Gosub Send_dat
'--- Mod 8 'Calculate which bit to set ----
$asm
lds R24, {Gl_x}
Mod8:
subi r24, 80
brcs rest8
subi r24, 80
brpl sub8
Rest8:
subi r24, -80
Sub8:
subi r24, 8
brpl sub8
subi r24, -8
Mod8_exit:
LDI R25, 7
!sub r25, r24
sts {Gl_bit} , R25
$end Asm
'--------------------------------
If Gl_rstflag = 0 Then
Set Gl_read.gl_bit
Else
Reset Gl_read.gl_bit
End If
Gl_pix = Gl_read
Holger Gebauer schrieb: > Da war z. eine Schleife. > If G_erase = 1 Then > Gl_rstflag = 1 > Else > Gl_rstflag = 0 > End If www.if-schleife.de Holger Gebauer schrieb: > If G_erase = 1 Then > Gl_rstflag = 1 > Else > Gl_rstflag = 0 > End If > > das in ams > > LDS R25, {G_erase} > ANDI R25, 1 'alles ausser 1 wegmaskieren > STS {Gl_rstflag} , R25 Was für ein Variablentyp ist G_erase? Was ist Gl_rstflag? Woher kommen die Werte und was wird mit dem Ergebnis gemacht? Ohne diese Information würde ich diese 5 Bascom-Zeilen so abkürzen:
1 | Gl_rstflag = G_erase |
Und damit:
1 | LDS R25, {G_erase}
|
2 | STS {Gl_rstflag},R25
|
Oder, was ohne weitere Information auch geht:
1 | mov Gl_rstflag,G_erase |
Oder gar:
1 | .def Gl_rstflag = r16 |
2 | .def G_erase = r16 |
Kurz: oft ist es einfacher, die Funktion zu verstehen und nachzuprogrammieren, als selber Compiler spielen zu wollen, und Zeile für Zeile nachzuprogrammieren...
Dennis H. schrieb: > Vielleicht hilft dir auch der Link weiter: > > http://atmel.com/dyn/resources/prod_documents/doc0856.pdf > > ist ne Liste aller Assemblerbefehle, mir nützt das öfters was > > Dennis http://www.avr-roboter.de/controller/befehle/uebersicht/uebersicht.html
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.