Nabend, also mein Plan: Ich habe im Register r16 diesen Wert: 0b11111110 Dieser Wert wird an PortB übertragen. LED1 = an; Wenn ich jetzt nun auf einen Taster drücke möchte ich dieses Bit eine stelle nach Links bewegen. Also dann auf: 0b11111101 Wenn ich dann auf einen anderen Drücke möchte ich dieses Bit wieder eine stelle zurück setzen. Hat einer einen Plan wie ich das anstellen könnt? Gruss Dennis
Schau Dir mal die Befehle rol und ror an. Du wirst das Carry-Flag vorher setzen müssen, damit eine "1" links bzw. rechts hineingeshiftet wird. Ferner sollten die Tasten entprellt sein - entweder per Soft- oder Hardware. Du mußt sowohl das Drücken als auch das Loslassen der Taste detektieren können.
Hi, hab auch noch was gefunden: lsl (logical shift left) lsr (logical shift right) trotzdem Danke ;)
bei lsl und lsr hast Du das Problem, daß immer eine "0" hineingeshiftet wird. R16 = 11111110 lsl r16 macht aus R16 11111100.
hmm aber deine Version ist doch besser :D so kann ich Sie mit Carry's otieren lassen. hast recht ;)
Wie löst man eigentlich das Problem, das bei ROL/ROR immer das Carry-Flag mitgeshiftet wird, wenn man wie Dennis eigentlich nur die Bits shiften möchte? Eine Möglichkeit wäre natürlich vor jedem Einzelshift das Carry entsprechend zu setzen, aber wenn man um mehrere Bits shiften will wäre das ja vergleichsweise zeitaufwendig...
Huhu Männer also ich glaub ich bekomm es nicht hin :/ könnt ihr mal kurz schauen: http://www.prosoft-design.de/BitShifting.txt Der Quellcode ist auch nicht viel. :) Also wenn ich jetzt auf T1 drücke dann geht nur PortB.0 an und sonst passiert nichts mehr, kann das sein das ich die Variable MasterShift falsch behandle, also nicht Global oder so Danke schonmal
Hmmm, zum einen schaltest Du die internen Pull-Up-Widerstände für den Eingabeport nicht ein (z.b. via "ldi tmp, 0xFF"/"out PORTD, tmp" nachdem Du PortD als Ausgang definiert hast), ich weiss aber natürlich nicht ob das bewusst getan wurde weil Du externe Pull-Ups hast. Habe ich das denn richtig verstanden dass das Programm quasi abstürzt, sobald Du Taster1 drückst? Eine LED zumindest müsste dem Programmcode nach schon von Anfang an leuchten, zumindest wenn Du nicht schon vor dem Einschalten eine Taste drückst. Falls das Programm wirklich abstürzt, da könnte ich mir jetzt momentan keinen richtigen Reim drauf machen. Höchstens dass Du nur SPL und nicht SPH setzt, aber ich denke das ist vermutlich bewusst so (=Du benutzt wahrscheinlich keinen ATmega). Ein anderes "Problem" ist, dass der Shift in dieser Art wahrscheinlich nicht exakt so funktioniert, wie Du Dir das evtl. vorstellst: Bei ROL bzw. ROR wird wie bereits erwähnt immer das Carry-Flag mitrotiert, wenn Du also 0b01111111 einmal ROLst, dann ist das Ergebnis nicht zwingenderweise 0b11111110.
Hi Joachim, als ehrlich gesagt weis ich auch nciht was ich da oben gemacht hatte :) hab jetzt einfach mal ne andere Variante genommen. Wird zwar nicht das schönste sein aber solange es geht :) So hab ich es jetzt: http://www.prosoft-design.de/BitShifting2.txt habs jetzt mit sbic gemacht und klappt gut.
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.