Problem mit cp bei atmega8

Gast #2050310
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
1
;----------------------------------------------------------------
2
; r30,r31 Adresse
3
comp_alarm:  
4
      push  r16             ; h    register sichern
5
      push  r17             ; m
6
      push  r18             ; s
7
      push  r21             ; s
8
      push  r22             ; m
9
      push  r23             ; h
10
      push  r24
11
      push  r25
12
      rcall  getTime1       ; lädt aktuelle Uhrzeit in r23,r22,r21 in BCD
13
      lpm    r24, Z+        ; Adresse EEPROM laden
14
      lpm    r25, Z
15
      rcall  EERead         ; Vergleichswert für Stunden aus EEPROM lesen
16
      mov    r16, r18       ; Wert in r16 verschieben
17
      adiw  r24, 1          ; Adress um 1 erhöhen
18
      rcall  EERead         ; Vergleichswert für Minuten laden
19
      mov    r17, r18       ; min = r17
20
      adiw  r24, 1          ; 1 erhöhen
21
      rcall  EERead         ; Wert für Sekunden laden
22
      cp    r23, r16        ; Stunden vergleichen
23
      brne  comp_alarm_end  ; wenn nicht gleich -> ende
24
      cp    r22, r17        ; wenn gleich -> min vergleichen
25
      brne  comp_alarm_end  ; -> ende
26
      cp    r21, r18        ; wenn gleich -> s vergleichen
27
      brne  comp_alarm_end  ; -> ende
28
      rcall  alarm          ; wenn gleich ( alle 3 gleich) Alarm auslösen
29
comp_alarm_end:
30
      pop    r25            ; register wiederherstellen
31
      pop    r24
32
      pop    r23
33
      pop    r22
34
      pop    r21
35
      pop    r18
36
      pop    r17
37
      pop    r16
38
      ret
39
;---------------------------------------------------------------
40
alarm:
41
      push  r16               ; Register sichern
42
      ldi    r16, 0b00000011  ; Wert für Timer in register laden
43
      out    TCCR0, r16       ; Wert schreiben
44
      pop    r16              ; Register wiederherstellen
45
      ret
46
;--------------------------------------------------------------
Gast #2050381
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

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