rol ????

Gast #91633
Lesenswert?

Hallo zusammen,

ich stehe auf der Leitung und bitte um Hilfe. Hier ein Stück
Programmlisting

sec
rol tmpLow
rol tmpChk    ;MSB aus tmpLow müßte LSB in tmpChk werden,
               funktioniert aber nicht ???????

Ich setze das carry und shifte es ins tmpLow-Register (r4).
Funktioniert auch wie erwartet. Das MSB aus tmpLow müßte doch nach der
ersten rol Aktion ins carry geschrieben werden.
Also müßte doch das neu Carry dann ins tmpChk geshiftet werden.
Funktioniert aber nicht.

Kann mich da mal bitte jemand aufklären,
danke bluemole
Gast #91635
Lesenswert?

Kenne ich von einem Programm, wurde in nem anderen Forum
durchdiskutiert, war richtig, lief aber nicht:
Bei jedem Tastendruck soll die nächste LED leuchten, tat sie aber
nicht. Grund: rol macht Mist...
Gast #91636
Lesenswert?

Also wo exakt ist das Problem ? Das MSB von tmpLow wird doch ins Carry
geschoben. Wenn du willst, daß eine 1 ins Carry wandert, mußt du auch
dafür sorgen, daß vor "rol tmpLow" auch eine 1 im MSB steht. Oder
habe ich da was falsch verstanden ? Nach dem "rol" wird das Carry
übrigens gelöscht, wenn nicht erneut eine 1 ins Carry geschoben wurde.

Thorsten
Gast #91637
Lesenswert?

Wie hast Du überprüft, daß das nicht funktioniert? Ich halte es für
äußerst unwahrscheinlich, daß da ein Hardware-Bug existiert.
Ich hatte auch schon oftmals die seltsamsten Effekte - irgendwann hat
sich immer alles aufgeklärt.
Wird evtl. ein Interrupt aufgerufen, in dem das SREG nicht gesichert
wurde, oder wird evtl. tmpChk noch irgendwo verwendet und verändert?
Gast #91638
Lesenswert?

Hi

ich vermute du möchtest den 16 Bit Wert in tmpChk:tmpLow rotieren.
Dann musst du aber auch den Überlauf in rol tmpChk in das LSB von
tmpLow einrechnen. Aus

sec
rol tmpLow
rol tmpChk

wird dann

clc
rol tmpLow
rol tmpChk
adc tmpLow, ZeroReg == 0

oder

clc
rol tmpLow
rol tmpChk
brcc @@1
inc tmpLow
@@1:

Im Falle deiner Methode würde man 16 mal den Wert in tmpChk:tmpLow um 1
Bit rotieren und succesive mit 1 auffüllen. Nach 16 Verschiebungen
würde dann immer fortwährend in tmpChk:tmpLow der gleiche Wert stehen,
nämlich 0b1111111111111111. Im Falle das deine LEDs von Vcc nach Pin
geschaltet sind würden somit die 16 LEDs immer dunkel bleiben.

Gruß Hagen
Gast #91639
Lesenswert?

Ne. Ich möchte keinen Round about...

Ich bastle gerade an meinem Funkmodul herum. Ich schiebe einfach die
empfangenen Daten ins in die Register. Wobei tmpChk die Check Bits
sind. In der Simulation funktioniert es ja wunderschön, aber die
Realität läßt mich noch ein wenig im Stich....

Vielleicht sollte ich die Spur von Thorsten noch mal aufnehmen und
überpüfen ob die Test Bits tatsächlich als 1 interpretiert werden und
nicht als 0....
Überprüfen tue ich es mit einer LCD- Ausgabe.

bluemole

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren