Forum: Mikrocontroller und Digitale Elektronik Register nach Reset nicht leer?


von PoWl (Gast)


Lesenswert?

Hi..

Mein Programmchen hat mich grade zur verzweiflung gebracht, im Simulator 
funktionierte es wunderbar doch auf meine ATmega8 machte es was es 
möchte..

Habe dann in meinem code u.A. soetwas drin:

sbrc  R4, 7
reti

D.h. der rücksprungbefehl aus dem interrupt wird ausgeführt wenn das 7. 
Bit in R4 gesetzt ist.

wenn ich nun dieses bit setze und die versorgungsspannung komplett 
wegnehme und dann wieder anschließe, passiert es dass in R4 doch wohl 
noch irgendetwas drin ist und der rücksprungbefehl ausgeführt wird 
obwohl er das an dieser stelle noch auf keinen Fall soll...

werden die register beim reset nicht zurückgesetzt? d.h. muss ich alle 
register die ich mal benutzen werde mit 0x00 vorbelegen?

mfg Paul H.

von Uhu U. (uhu)


Lesenswert?

Man sollte sich generell nicht darauf verlassen, daß beim Start irgendwo 
im Speicher, oder in Registern etwas sinnvolles steht - es sei denn, es 
ist ausdrücklich in den Datenblättern spezifiziert.

von Benedikt K. (benedikt)


Lesenswert?

PoWl wrote:

> muss ich alle register die ich mal benutzen werde mit 0x00 vorbelegen?

Ja, musst du. Ebenso den RAM. Nur die Peripherie Register werden auf 
einen festen Wert gesetzt.


von PoWl (Gast)


Lesenswert?

Danke, das hat der Funktionalität meines Programmes schon sehr 
weitergeholfen, leider funktionieren nun andere dinge so überhaupt nicht 
aber ich versuch mich weiterhin..
1
cpr        R28, R2
2
cpr        R29, R3
3
brne       timer1

Ich möchte zwei 16-bit zahlen vergleichen und wenn sie ungleich sind zu 
timer1 springen. Das müsste doch so gehen oder?

mfg Paul H.

von Stefan Salewski (Gast)


Lesenswert?

Wohl eher so:

cpr        R28, R2
brne       timer1
cpr        R29, R3
brne       timer1

von Benedikt K. (benedikt)


Lesenswert?

cpr ? Was ist denn das für ein µC ? Sieht nach AVR aus, aber der kennt 
kein cpr...

von Simon K. (simon) Benutzerseite


Lesenswert?

CPR? In meiner AVR-Studio Hilfe gibts kein CPR...

Das könnte aber gehen:
1
cp R28, R2
2
cpc R29, R3
3
brne timer1

von PoWl (Gast)


Lesenswert?

sry, war ein schreibfehler, weiß auch nich wie ich das nun wieder 
hingekrigt hab. Ja genau cp und dann cpc.. so hab ichs gemacht.. mag 
trotzdem irgendwie nicht funktionieren..

von Stefan Salewski (Gast)


Lesenswert?

Was ist denn timer1, ein Label, eine Function oder was anderes?

von Paul H. (powl)


Lesenswert?

timer1 ist ein normales label. Inzwischen funktioniert immer mehr, ist 
halt dumm wenn man vergisst eine wichtige 16bit variable hochzählen zu 
lassen -.-"

von Stefan Salewski (Gast)


Lesenswert?

>timer1 ist ein normales label.
OK, dann ist es gut.
Für mich klingt "timer1" etwas nach ISR oder ähnlichem, deshalb war ich 
etwas skeptisch.

Simon Küppers schrieb:

>cp R28, R2
>cpc R29, R3
>brne timer1

Danke für den Hinweis, mein AVR-Assembler ist momentan doch stark 
eingerostet. Ich wollte auch nur darauf hinweisen, dass zwei identische 
"compare" nicht sinnvoll sind.

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.