Hallo miteinander ich arbeite schon seit einigen Monaten an meinem Funkwecker. Dieser empfängt, hinterlegt und gibt die uhrzeit, das datum, den wochentag und eine Weckfunktion aus. Diese ganzen Funktionen laufen fast ohne Probleme. Ich sage fast weil mein controller immer wieder abstürzt mal nach 2 stunden mal nach 3 stunden aber auch mal nach 15 min das ist immer unterschiedlich und ich hab so gut wie keine ahung woran das liegen könnte.. ich vermute aber start das es an meinen adressierten speicherzellen lieg welche sehr viele sind (von 08h bis 62h) das musste ich allerdings machen da meine 7 Register mir nicht ausreichend waren. hier könnt ihr mal in mein Programm reinschauen: http://uc.pastebin.com/EREpGpXA unter speicherzellen zuordnung sehr ihr was ich meine... würde mich über hilfe echt freuen danke schonmal fürs lesen gruß matze
Prüfe mal Bitoperationen, deine Variablen erstrecken sich doch über den bitadressierbaren Bereich, oder?
Du solltest Dir vielleicht das Prinzip von Unterfunktionen und lokalen Variablen verinnerlichen. So ein Code- und Variablenmonster ist unverstehbar. Und natürlich mußt Du Kommentare verwenden. Sonst sieht da eh keiner durch und Du nach ein paar Monaten auch nicht mehr. Wozu sind denn die vielen Delayloops drin? Man muß für Delayloops auch nicht jedesmal andere Register verwenden. Register nutzen sich nämlich nicht ab. Peter
Ja du hast recht, meine Variablen erstrecken sich über Bitadressierbaren bereich aber ich verstehe nicht warum ich das nicht machen darf. ich dachte ich habe meine Variablen im Bitadressierbaren bereich als Byte adressiert... oder etwa nicht? Beschäftige mich erst seit wenigen Monaten mit Assembler dacher das bisschen unterständliche ausdrücken. danke deine hilfe gruß matze
hallo Peter Dannegger, also die ganzen schleifen sind da um mein Signal abzufragen d.h. läuft eine zeitschleife einmal inerhalb eines kurzen bits (vom DCF Signal) ab so wird ein eine null ins entsprechende Register geschrieben schafft es die zeitschleife 2 mal inerhalb eines dcf Bits durchzulaufen wars ein langes bit und es wird eine 1 ins entsprechende Register geschrieben. Danke fürs durchschauen gruß Matze
Du solltest über BCD Zahlen nachdenken. Damit sparst Du einiges an RAM für Deine Variablen. Damit kannst Du dann in 3 Bytes die komplette Zeit unterbringen. 08:33:00 Dabei ist das erste Nibble der Std Zehner das 2 der Std einer usw. Das Gute daran: für ne LCd Ausgabe braucht man nur noch 30h dazu addieren. Warteschleifen sind SCH*.. dafür nimmt man Timer mit entsprechenden Flags. Die Flags in der Main abfragen und entsprechend handeln. Erkläre uns doch mal wofür man Minuten 1er, 2er 4er usw benötigt. Das machst du ja mit Stunden, Tagen Monaten usw. Irgendwie denke ich hast Du noch ein grundlegendes Verständnisproblem. Vieles wird sich wohl besser mit Tabellen machen lassen.
Danke ersteinmal für den Tipp ich werde über die BCD Zahlen nachdenken. Das mit den Stunden 1er usw. sind meine einzelnen bits om dcf signal z.b. ist das stunden1 bit das erste bit welches im stunden signal übertragen wird dann kommt das stunden2 bit und hier wird wieder geschrieben ob dieses gesetzt oder nicht gesetzt ist... kann mir denn einer sagen ob es falsch oder gefählich ist mit so vielen variablen zu arbeiten?? habe den bereich für den stackpointer extra frei gelassen. Normalerweiße dürfte dort nichts im Weg sein oder?? gruß matze
Matthias Wenske schrieb: > kann mir denn einer sagen ob es falsch oder gefählich ist mit so vielen > variablen zu arbeiten?? Es ist ineffizient und man verliert den Überblick. > habe den bereich für den stackpointer extra frei gelassen. Ich sehe nirgends, daß Du den Stack initialisierst. Der er aufwärts wächst, setzt man ihn üblicher Weise hinter das letzte Datenbyte. Was machst Du überhaupt mit den Timerinterrupts? Da Du zu Adressen springst, weiß niemand, wo das ist. Adressen zu verwenden ist ganz böse, deshalb gibt es Sprungmarken. Ohne Kommentare ist Dein Code eh nutzlos. Z.B. niemand weiß, wie oft die Interrupts aufgerufen werden. Peter
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.