1 | timer1_compare: ; Timer 1 Output Compare Handler
|
2 |
|
3 | push temp1 ; temp 1 sichern
|
4 | in temp1,sreg ; SREG sichern
|
5 |
|
6 | inc SubCount ; Wenn dies nicht der 10. Interrupt
|
7 | cpi SubCount, 10 ; ist, dann passiert gar nichts
|
8 | brne end_isr
|
9 |
|
10 | ; Überlauf
|
11 | clr SubCount ; SubCount rücksetzen
|
12 |
|
13 | ; Bahn 1
|
14 | inc B1_Split ; plus 1 1/100-Sekunde
|
15 | cpi B1_Split, 100 ; sind 100 1/100-Sekunden vergangen?
|
16 | brne B1_Ausgabe ; wenn nicht kann die Ausgabe schon gemacht werden
|
17 |
|
18 | clr B1_Split ; 1/10-Sekunden wieder auf 0 und dafür
|
19 | inc B1_Second ; plus 1 Sekunde
|
20 | cpi B1_Second, 60 ; sind 60 Sekunden vergangen ?
|
21 | brne B1_Ausgabe ; wenn nicht, -> Ausgabe
|
22 |
|
23 | clr B1_Second ; Sekunden wieder auf 0 und dafür
|
24 | inc B1_Minute ; plus 1 Minute
|
25 | cpi B1_Minute, 60 ; sind 60 Minuten vergangen ?
|
26 | brne B1_Ausgabe ; wenn nicht, -> Ausgabe
|
27 |
|
28 | clr B1_Minute ; Minuten zurücksetzen
|
29 |
|
30 | B1_Ausgabe:
|
31 | ori Status, B_TimerFlag ; Flag setzen, LCD updaten
|
32 |
|
33 | ; Bahn 2
|
34 | inc B2_Split ; plus 1 1/100-Sekunde
|
35 | cpi B2_Split, 100 ; sind 100 1/100-Sekunden vergangen?
|
36 | brne B2_Ausgabe ; wenn nicht kann die Ausgabe schon gemacht werden
|
37 |
|
38 | clr B2_Split ; 1/10-Sekunden wieder auf 0 und dafür
|
39 | inc B2_Second ; plus 1 Sekunde
|
40 | cpi B2_Second, 60 ; sind 60 Sekunden vergangen ?
|
41 | brne B2_Ausgabe ; wenn nicht, -> Ausgabe
|
42 |
|
43 | clr B2_Second ; Sekunden wieder auf 0 und dafür
|
44 | inc B2_Minute ; plus 1 Minute
|
45 | cpi B2_Minute, 60 ; sind 60 Minuten vergangen ?
|
46 | brne B2_Ausgabe ; wenn nicht, -> Ausgabe
|
47 |
|
48 | clr B2_Minute ; Minuten zurücksetzen
|
49 |
|
50 | B2_Ausgabe:
|
51 | ori Status, B_TimerFlag ; Flag setzen, LCD updaten
|
52 |
|
53 | end_isr:
|
54 |
|
55 | out sreg,temp1 ; sreg wieder herstellen
|
56 | pop temp1
|
57 | reti ; das wars. Interrupt ist fertig
|
58 |
|
59 |
|
60 | ;*
|
61 | ;* Interrupt 0 - Bahn 1
|
62 | ;*
|
63 |
|
64 | int0_handler:
|
65 |
|
66 | push temp1 ; temp 1 sichern
|
67 | in temp1,sreg ; SREG sichern
|
68 |
|
69 | ; improvisiertes Entprellen bzw. Sperren für 2 Sekunden
|
70 | cpi B1_Minute, 0 ; nicht mehr in Minute 0?
|
71 | brge int0_ok ; dann weiter
|
72 |
|
73 | cpi B1_Second, 2 ; Sekunde größer od. gleich 2?
|
74 | brge int0_ok ; dann weiter
|
75 |
|
76 | rjmp int0_return ; sonst raus
|
77 |
|
78 | int0_ok:
|
79 | ; aktuelle Zeit im SRAM speichern
|
80 | sts B1_Lap_Split, B1_Split
|
81 | sts B1_Lap_Second, B1_Second
|
82 | sts B1_Lap_Minute, B1_Minute
|
83 |
|
84 | clr B1_Split
|
85 | clr B1_Second
|
86 | clr B1_Minute
|
87 |
|
88 | ; TimerFlag, B1_Lap und B1_LapSet setzen
|
89 | ori Status, B_TimerFlag | B_B1_Lap | B_B1_LapSet
|
90 |
|
91 | inc B1_LapCount
|
92 |
|
93 | int0_return:
|
94 | out sreg,temp1 ; sreg wieder herstellen
|
95 | pop temp1
|
96 | reti
|
97 |
|
98 |
|
99 | ;*
|
100 | ;* Interrupt 1 - Bahn 2
|
101 | ;*
|
102 |
|
103 | int1_handler:
|
104 |
|
105 | push temp1 ; temp 1 sichern
|
106 | in temp1,sreg ; SREG sichern
|
107 |
|
108 | ; improvisiertes Entprellen bzw. Sperren für 2 Sekunden
|
109 | cpi B2_Minute, 0 ; nicht mehr in Minute 0?
|
110 | brge int1_ok ; dann weiter
|
111 |
|
112 | cpi B2_Second, 2 ; Sekunde größer od. gleich 2?
|
113 | brge int1_ok ; dann weiter
|
114 |
|
115 | rjmp int1_return ; sonst raus
|
116 |
|
117 | int1_ok:
|
118 | ; aktuelle Zeit im SRAM speichern
|
119 | sts B2_Lap_Split, B2_Split
|
120 | sts B2_Lap_Second, B2_Second
|
121 | sts B2_Lap_Minute, B2_Minute
|
122 |
|
123 | clr B2_Split
|
124 | clr B2_Second
|
125 | clr B2_Minute
|
126 |
|
127 | ; TimerFlag, B2_Lap und B2_LapSet setzen
|
128 | ori Status, B_TimerFlag | B_B2_Lap | B_B2_LapSet
|
129 |
|
130 | inc B2_LapCount
|
131 |
|
132 | int1_return:
|
133 | out sreg,temp1 ; sreg wieder herstellen
|
134 | pop temp1
|
135 | reti
|