Prog startet nach Reset 30sec verzögert...

Gast #99611
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
Angehängte Dateien:
Gast #99618
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..
Gast #99621
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).
Gast #99622
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
Gast #99623
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
Gast #99624
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).
Gast #99625
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
Gast #99626
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 !

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