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