Hallo,
ich bins wieder. Und ich habe dummerweise immer noch das gleiche Problem
mit meinem copy-paste-Programm, wenn man es mal so sagt.
Und zwar zeigt mir meine Uhr immer noch zum Beispiel 50:86 an.
Obwohl ich ja die cpi´s und brne drinne habe:
1
loop:
2
3
clr temp
4
clr temp1
5
cpi second, 60
6
brne loop2
7
8
clr second
9
inc minute ; Minute +1
10
cpi minute, 60
11
brne loop2
12
13
clr minute
14
inc hour ; Stunde +1
15
cpi hour, 24
16
brne loop2
17
rjmp clear
18
19
loop2:
20
mov temp, minute
21
mov temp1, hour
22
rcall out_number
23
24
rjmp loop
Ich habe jetzt schon immer wieder rumprobiert, aber rausgekommen ist
einfach nichts.
Das komische ist ja das es in der Simulation perfekt funktioniert, nur
in der Realität nicht, zumindest die Minuten und Stunden. Denn die
Sekunden werden offensichtlich nur bis 60 gezählt, da die Minute immer
nach ca. 59 Sek. (nach richtiger Uhr) hochgezählt.
Ich finde einfach keinen Fehler, ich hoffe mir kann jemand sagen woran
es liegt, denn ich bin nämlich total am verzweifeln :( .
P.S.: Im Anhang habe ich nochmal die ganze datei.
Hat keiner eine Ahnung woran es liegt oder mal ein ähnliches Problem
gehabt?
Könnte mir jemand wenigstens bestätigen, ob der Code funktionieren
müsste oder nicht?
mfg
Hallo,
wenn angeblich der brne nicht geht, wieso probierst Du dann nicht
mal den brlo?
Der brne hat nämlich den Nachteil, dass vordergründig der Code zwar OK
ist, was ist aber, wenn das Programm aus irgendwelchen Gründen die
Register an einer anderen Stelle manipuliert? (Ich hab jetzt den Code
nicht durchgesehen)
Aber bei dem brlo kann man eigentlich davon ausgehen, dass die
nachfolgende Routine bearbeitet wird, wenn die Zeit - so wie es hier ja
scheint - zu groß ist.
Ist nur mal so ein Vorschlag.
Gruß
TK
Danke für den Tip, daran hatte ich jetzt noch nicht gedacht. Ich hatte
es zwar auch schon mit brsh und breq und umprogrammiert das es gehen
müsste, aber es ging trotzdem nicht. Mit dem brlo gehts aber leider auch
nicht.
Hab jetzt den Thread gefunden:
Beitrag "Assembler Befehl BRLO"
Ich habe es so versucht wie es dort ist, das bringt aber auch nichts.
Ich weiß überhaupt nicht mehr was ich noch machen soll. Register
manipulieren ist eigentlich ausgeschlossen, habe jetzt es auch noch mit
anderen Register probiert, die von nichts anderem verwendet werden, das
bringt aber auch nichts.
mfg
Angenommen, Ihre Uhr steht auf hh:mm = 19:38
In der _out_tausend-Schleife betrachten Sie dies als Doppelregister, da
steht also mitnichten 19*100 + 38 = 1938 drin, sondern 19*256 + 38 =
4902; und davon ziehen Sie nun fortgesetzt 1000 ab.
Oder um P. Watzlawick zu zitieren:
Unter einer Straßenlaterne steht ein Betrunkener und sucht und sucht.
Ein Polizist kommt daher, fragt ihn, was er verloren habe, und der Mann
antwortet: "Meinen Schlüssel." Nun suchen beide. Schließlich will der
Polizist wissen, ob der Mann sicher ist, den Schlüssel gerade hier
verloren zu haben, und jener antwortet: "Nein, nicht hier, sondern dort
hinten, aber dort ist es viel zu finster zum Suchen."
Mit "brne" klappt es u. a. nicht, weil die Sekunden im Interrupt
hochgezählt werden....... davon abgesehen: was sollen die 3 ineinander
verschachtelten Schleifen in den Timerinterrupts ?
Otto
Also das Problem ist jetzt gelöst. Mit dem UP kann es nicht
funktionieren, daran hatte ich aber nie gezweifelt. Das Problem ist eben
das die beiden Register einzeln abgehandelt werden müssen und nicht als
16bit.
Vielen Dank für die Hilfen.