Forum: Mikrocontroller und Digitale Elektronik rol ????


von bluemole (Gast)


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

von bluemole (Gast)


Lesenswert?

Ach ja, das Programm läuft auf dem AT90S2313....

von Benedikt (Gast)


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...

von Thorsten (Gast)


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

von thkais (Gast)


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?

von Hagen (Gast)


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

von bluemole (Gast)


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

von thkais (Gast)


Lesenswert?

Arbeitest Du mit den AM-Modulen und Manchester-Kodierung? Da gibt es
eine Möglichkeit, die serielle Schnittstelle zu mißbrauchen -
verringert den Softwareaufwand enorm.

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
Noch kein Account? Hier anmelden.