mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik brne funktioniert auf Atmega8 nicht, aber im AVRStudio


Autor: Martin K. (spyro07)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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:
loop:
  
  clr    temp
  clr    temp1
  cpi    second, 60
  brne  loop2

  clr    second          
  inc   minute          ; Minute +1
  cpi    minute, 60
  brne  loop2

  clr    minute
  inc   hour          ; Stunde +1
  cpi    hour, 24
  brne  loop2
  rjmp  clear

loop2:
  mov    temp, minute
  mov   temp1, hour
   rcall   out_number
 
  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.

Autor: Martin K. (spyro07)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist das das ganze Programm? Weil, damit würde die Zeit ziemlich schnell 
vergehen.

Autor: Martin K. (spyro07)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ganze Programm ist im Anhang. Das ist der Teil der nicht 
funktioniert.

Autor: TK (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Martin K. (spyro07)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Martin K. (spyro07)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Durch die Binär-BCD Routine (UP out_number) werden die Minuten und 
Stunden doch eigentlich nicht beeinträchtigt, oder?

Autor: senex24 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Routine out_number, die Schleifen _out_irgendetwas: ist doch kompletter 
Unfug, oder? Sie vermischen dezimal und dual.

Autor: senex24 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: senex24 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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."

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Martin K. (spyro07)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.