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
..im beigefügten Assemblerprogramm trifft der Kommentar nur bedingt zu, da Programm schon etwas verändert! Ulli
..leider nein! die END-Anweisung bewirkt ja das gleiche..
..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..
Sie Software ist OK, also muss es an der Hardware liegen. Wird die Spannung vielleicht zu langsam angeschaltet ?
Hallo, Vieleicht könntest du mal probieren den 1k Widerstandt und den Kondensator raus machen und dann mal Probieren. Gruß Peter
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).
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
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
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).
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.