Forum: Mikrocontroller und Digitale Elektronik Problem mit cp bei atmega8


von Max (Gast)


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
;--------------------------------------------------------------

von Hansi (Gast)


Lesenswert?

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

von Läubi .. (laeubi) Benutzerseite


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.

von Max (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.