Forum: Mikrocontroller und Digitale Elektronik Prog startet nach Reset 30sec verzögert...


von Ulli (Gast)


Angehängte Dateien:

Lesenswert?

Hallo NG,

gebe an Port1 eines 8051er (AT89S8252) ein wechselndes 1 Hz
Bitmuster aus (per Timer 0 Interrupt).
Nach einem Soft-Reset startet das Prog sofort neu, unterbreche ich
jedoch die Stromversorgung, startet das Prog erst nach ca. 30 sec...

Hat jemand eine Erklärung?
Programm als Anhang anbei!

Gruß Ulli

von Ulli (Gast)


Lesenswert?

..im beigefügten Assemblerprogramm trifft der Kommentar nur bedingt zu,
da Programm schon etwas verändert!
Ulli

von buz11 (Gast)


Angehängte Dateien:

Lesenswert?

besser so ?

von Ulli (Gast)


Lesenswert?

..leider nein!

die END-Anweisung bewirkt ja das gleiche..

von buz11 (Gast)


Lesenswert?

dann ist es ein hardwareproblem ... ?

von Benedikt (Gast)


Lesenswert?

Wie hast du Reset beschaltet ?

von Ulli (Gast)


Angehängte Dateien:

Lesenswert?

siehe reset.gif

von Ulli (Gast)


Lesenswert?

..am Board kann's eigentlich nicht liegen.

Wenn ich ein Bitmuster mov P1, 01010101b statisch
an Port 1 lege, ist das sofort nach einem Power On Reset da!
Ich vermute eher einen Zusammenhang mit dem Timer..

von Benedikt (Gast)


Lesenswert?

Sie Software ist OK, also muss es an der Hardware liegen.
Wird die Spannung vielleicht zu langsam angeschaltet ?

von Peter Zimmer (Gast)


Lesenswert?

Hallo,
Vieleicht könntest du mal probieren den 1k Widerstandt und den
Kondensator raus machen und dann mal Probieren.
Gruß
Peter

von Jörg Wunsch (Gast)


Lesenswert?

Quarze können je nach Beschaltung manchmal sehr lange zum Anschwingen
brauchen.  30 s wäre aber wirklich ungewöhnlich lange.  Für einen im
Glasröhrchen (unter Vakuum) verbauten 100 kHz Biegeschwinger habe ich
(bei offensichtlich sehr sparsam -> quarzschonend) rückgekoppeltem
Oszillator so 5...7 Sekunden, das ist eigentlich das Längste, was ich
bisher erlebt habe (das ist die Referenz in meinem allerersten
Zählfrequenzmesser).

von Ulli (Gast)


Lesenswert?

also am Reset kanns nicht liegen..

Hab das Prog so modifiziert, daß am Ende der Initialisierungsphase
schon mal Port1.0 auf Low gesetzt wird, da hängt eine LED dran.
Nach einem "PowerOnReset" leuchtet die LED auch SOFORT, das
Blinkprogramm innerhalb der Timerroutine beginnt dann nach genau 20 sec
zu arbeiten...also muss es was mit dem Timer/Int zu tun haben.

Erstmal Danke für die Tipps, wenn ich das Prob gelöst habe poste ich
es!
Gruß Ulli

von Benedikt (Gast)


Lesenswert?

Brauchste nicht, ich habe den Fehler !
Du inititaliiserst r7 nicht ! Ist r7 am Anfang 0, benötigt der uC 16,77
Sekunden bis r7 wieder 0 ist. Beim Software Reset ist r7 irgenwo
zwischen 1 und 8...


Initialisierung:
orl TMOD, #01h  ;Timer 0 als 16-Bit Timer
setb TR0      ;Timer 0 Start
setb ET0      ;Timer 0 Interrupt freigeben
setb EA        ;globale Interruptfreigabe

mov a, #10101010b  ; Bitmuster nach Accu
end

von crazy horse (Gast)


Lesenswert?

wie wärs denn, wenn du r7 initialisierst? Kann nach reset auf einem
beliebigen Wert stehen, dementsprechend kann es entsprechend viele
Timer0-Ints benötigen, bevor die Portroutine überhaupt dran kommt (djnz
r7).

von Ulli (Gast)


Lesenswert?

Hi Benedikt, Crazy Horse,

das ist die Lösung!!

r7 steht auf einem unbestimmten Anfangswert, und der scheint immer nach
einem POReset hoch zu sein.
Am Ende der Initialisierung steht jetzt noch:
..
mov r7, #8
end

Danke Euch!!
Ulli

von Benedikt (Gast)


Lesenswert?

Oder r7 ist Null, denn djnz verringert erst ->255 und prüft dann
(255<>0). 0 ist also identisch mit 256.
Und bei Speichern ist es oft so, dass sie entweder den Wert 0 oder 255
annehmen, wenn die Spannung abgeschaltet wird. Aber das ist bei jedem
IC und sogar bei jeder Speicherstelle unterschiedlich !

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.