brne funktioniert auf Atmega8 nicht, aber im AVRStudio

OP #970622
Lesenswert?

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.
Angehängte Dateien:
Gast #970872
Lesenswert?

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
OP #970896
Lesenswert?

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
Gast #971108
Lesenswert?

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.
Gast #971138
Lesenswert?

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."

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