www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit cp bei atmega8


Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Coden unter funktioniert eigentlich recht gut nur wenn ich den 
Wecker auf z.B 08:12:34 oder 12:18:34 weckt er auch um 09:12:34 bzw. 
12.19:34
An was kann das liegen
;----------------------------------------------------------------
; r30,r31 Adresse
comp_alarm:  
      push  r16             ; h    register sichern
      push  r17             ; m
      push  r18             ; s
      push  r21             ; s
      push  r22             ; m
      push  r23             ; h
      push  r24
      push  r25
      rcall  getTime1       ; lädt aktuelle Uhrzeit in r23,r22,r21 in BCD
      lpm    r24, Z+        ; Adresse EEPROM laden
      lpm    r25, Z
      rcall  EERead         ; Vergleichswert für Stunden aus EEPROM lesen
      mov    r16, r18       ; Wert in r16 verschieben
      adiw  r24, 1          ; Adress um 1 erhöhen
      rcall  EERead         ; Vergleichswert für Minuten laden
      mov    r17, r18       ; min = r17
      adiw  r24, 1          ; 1 erhöhen
      rcall  EERead         ; Wert für Sekunden laden
      cp    r23, r16        ; Stunden vergleichen
      brne  comp_alarm_end  ; wenn nicht gleich -> ende
      cp    r22, r17        ; wenn gleich -> min vergleichen
      brne  comp_alarm_end  ; -> ende
      cp    r21, r18        ; wenn gleich -> s vergleichen
      brne  comp_alarm_end  ; -> ende
      rcall  alarm          ; wenn gleich ( alle 3 gleich) Alarm auslösen
comp_alarm_end:
      pop    r25            ; register wiederherstellen
      pop    r24
      pop    r23
      pop    r22
      pop    r21
      pop    r18
      pop    r17
      pop    r16
      ret
;---------------------------------------------------------------
alarm:
      push  r16               ; Register sichern
      ldi    r16, 0b00000011  ; Wert für Timer in register laden
      out    TCCR0, r16       ; Wert schreiben
      pop    r16              ; Register wiederherstellen
      ret
;--------------------------------------------------------------



Autor: Hansi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du verwendest den Befehl adiw r24,1. Dadurch wird das Registerpaar 
r24:r25 um 1 erhöht. Ist das Richtig?

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Max schrieb:
> An was kann das liegen
Einfach mal im Simulator laufen lassen und schauen was passiert.
Ansonstenschau dir mal cpc an, damit kann man Vergleiche verknüpfen und 
am Ende einmal prüfen ob es den bei allen gepasst hat.

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hansi schrieb:
> Du verwendest den Befehl adiw r24,1. Dadurch wird das Registerpaar
> r24:r25 um 1 erhöht. Ist das Richtig?

Ja, ich verwende den Atmega8 der hat 512Byte EEPROM, da brauch zwei 
Register für die Adresse.

@Läubi
werde ich versuchen

Danke für die Antworten

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.