1 | .include "m8def.inc" ;ACHTUNG in FUSES Frequenz auf 1MHZ stellen!
|
2 |
|
3 | ldi r16, 0xFF ;Port B sind Ausgänge
|
4 | out DDRB, r16 ;Port B Ausgänge
|
5 |
|
6 | ldi r16, 0x00 ;Port D sind Eingänge
|
7 | out DDRD, r16 ;Port D Eingänge
|
8 |
|
9 | .cseg
|
10 | rjmp Power
|
11 |
|
12 | .org OVF0addr
|
13 | rjmp timer0_overflow ; Timer Overflow Handler
|
14 |
|
15 | Power: sbic PinD, 1
|
16 | sbi PortB, 2
|
17 | ldi r28, 1
|
18 | rjmp Ausw
|
19 | Power1: ldi r28,0
|
20 |
|
21 | ldi r27, 1
|
22 | rjmp timer
|
23 | test: ldi r27, 0
|
24 | cbi PortB, 2
|
25 | rjmp Start ; Überspringen der TimerOVV
|
26 |
|
27 | wait: rjmp Timer
|
28 |
|
29 |
|
30 | Start: sbis PinD, 1 ; PinD1 (Aus) unbetätigt
|
31 | rjmp Ausw ; Wenn Aus betätigt springe zu Aus
|
32 | sbis PinD, 5 ; PinD5 (Störung) unbetätigt
|
33 | rjmp stoerung ; Wenn Störung betätigt springe zu stoerung
|
34 | sbic PinD, 0 ; Ein betätigt
|
35 | rjmp Start ; Wenn ein betätigt dann gehts Weiter
|
36 |
|
37 | Motor_AN:sbis PinD, 1 ; PinD1 (Aus) unbetätigt
|
38 | rjmp Ausw ; Wenn Aus betätigt springe zu Aus
|
39 | sbis PinD, 5 ; PinD5 (Störung) unbetätigt
|
40 | rjmp stoerung ; Wenn Störung betätigt springe zu stoerung
|
41 | sbic PinD, 0 ; Ein betätigt
|
42 | rjmp Start ; Wenn ein betätigt dann gehts Weiter
|
43 |
|
44 | cbi PortB, 2 ; Störung löschen
|
45 | sbi PortB, 0 ; Setze PortB 0 (Motor geht an)
|
46 |
|
47 | ldi r25, 4 ; Lade r25 mit 4
|
48 | ldi r26, 1 ; Lade r26 mit 1
|
49 | rjmp Timer ; Springe zu Wait
|
50 |
|
51 | Flanke: tst r25 ; Prüfe r25 auf null
|
52 | brne wait
|
53 | ldi r25, 0 ; Lade R25 mit 0
|
54 | ldi r26, 0 ; Lade R26 mit 0
|
55 | sbis PinD, 0 ; Ein losgelassen
|
56 | rjmp Flanke ; Solange wie Ein gedrückt, Warten
|
57 |
|
58 | Wahl: ldi r23, 0 ; Lade r23 mit 0
|
59 | ldi r23, 77 ; Lade r23 mit 77
|
60 | Wahl1: cbi PortB, 1 ; Ventil Aus
|
61 | ldi r18,0 ; Lade r18 mit 0
|
62 | ldi r19,0 ; Lade r19 mit 0
|
63 | ldi r20,0 ; Lade r20 mit 0
|
64 | ldi r21,0 ; Lade r21 mit 0
|
65 | ldi r22,0 ; Lade r22 mit 0
|
66 | sbis PinD, 1 ; PinD1 (Aus) unbetätigt
|
67 | rjmp Aus ; Wenn Aus betätigt springe zu Aus
|
68 | sbis PinD, 5 ; PinD5 (Störung) unbetätigt
|
69 | rjmp Aus ; Wenn Aus betätigt springe zu Aus
|
70 | sbis PinD, 0 ; Ein betätigt
|
71 | rjmp Man ; Wenn ein betätigt dann gehts Weiter
|
72 | sbis PinD, 2 ; Auto betätigt
|
73 | rjmp Auto1 ; Springe zu Auto 1
|
74 | tst r23 ; r23 auf null testen
|
75 | breq Aus5
|
76 | rjmp Timer ; Springe zu Timer
|
77 |
|
78 |
|
79 | Man: sbis PinD, 1 ; PinD1 (Aus) unbetätigt
|
80 | rjmp Aus ; Wenn Aus betätigt springe zu Aus
|
81 | sbis PinD, 5 ; PinD5 (Störung) unbetätigt
|
82 | rjmp Aus ; Wenn Aus betätigt springe zu Aus
|
83 | sbic PinD, 0 ; Ein betätigt
|
84 | rjmp Wahl ; Wenn ein betätigt dann gehts Weiter
|
85 |
|
86 | sbi PortB, 1 ; Setze PortB 1 (Ventil zieht an)
|
87 |
|
88 | Man2: sbis PinD, 1 ; PinD1 (Aus) unbetätigt
|
89 | rjmp Aus ; Wenn Aus betätigt springe zu Aus
|
90 | sbis PinD, 5 ; PinD5 (Störung) unbetätigt
|
91 | rjmp Aus ; Wenn Aus betätigt springe zu Aus
|
92 | sbis PinD, 0 ; Ein betätigt
|
93 | rjmp Man2 ; Wenn ein unbetätigt dann gehts Weiter
|
94 |
|
95 | cbi PortB, 1 ; Lösche PortB 1 (Ventil fällt ab)
|
96 |
|
97 | rjmp Wahl ; Springe wieder zur Wahl
|
98 |
|
99 | Auto1: sbis PinD, 1 ; PinD1 (Aus) unbetätigt
|
100 | rjmp Aus ; Wenn Aus betätigt springe zu Aus
|
101 | sbis PinD, 5 ; PinD5 (Störung) unbetätigt
|
102 | rjmp Aus ; Wenn Aus betätigt springe zu Aus
|
103 | sbic PinD, 2 ; Auto betätigt
|
104 | rjmp Wahl ; Wenn nicht dann zu Wahl
|
105 |
|
106 | sbi PortB, 1 ; Setze PortB 1 (Ventil zieht an)
|
107 |
|
108 | Auto2: sbis PinD, 1 ; PinD1 (Aus) unbetätigt
|
109 | rjmp Aus ; Wenn Aus betätigt springe zu Aus
|
110 | sbis PinD, 5 ; PinD5 (Störung) unbetätigt
|
111 | rjmp Aus ; Wenn Aus betätigt springe zu Aus
|
112 | sbic PinD, 2 ; Auto betätigt
|
113 | rjmp Wahl ; Wenn nicht dann zu Wahl
|
114 | ldi r18,1 ; Setze r18 auf 1
|
115 | ldi r19,4 ; Lader r19 mit 4
|
116 | rjmp Timer ; Springe zum Timer
|
117 |
|
118 | Weiter2: sbis PinD, 1 ; PinD1 (Aus) unbetätigt
|
119 | rjmp Aus ; Wenn Aus betätigt springe zu Aus
|
120 | sbis PinD, 5 ; PinD5 (Störung) unbetätigt
|
121 | rjmp Aus ; Wenn Aus betätigt springe zu Aus
|
122 | sbic PinD, 2 ; Auto betätigt
|
123 | rjmp Wahl ; Wenn nicht dann zu Wahl
|
124 | tst r19 ; Teste r19 auf Null
|
125 | brne Timer ; Springe bei r19 ungleich 0
|
126 | sbic PinD, 3 ; 3bar erreicht?
|
127 | rjmp Weiter2 ; Warten bis 3bar
|
128 | dec r18 ; r18 - 1
|
129 |
|
130 | cbi PortB, 1 ; Lösche PortB 1 (Ventill fällt ab)
|
131 |
|
132 | rjmp Auto3
|
133 | Aus5: rjmp Aus
|
134 | rjmp Auto3
|
135 | Power2: rjmp Power1
|
136 |
|
137 | Auto3: sbis PinD, 1 ; PinD1 (Aus) unbetätigt
|
138 | rjmp Aus ; Wenn Aus betätigt springe zu Aus
|
139 | sbis PinD, 5 ; PinD5 (Störung) unbetätigt
|
140 | rjmp Aus ; Wenn Aus betätigt springe zu Aus
|
141 | sbic PinD, 2 ; Auto betätigt
|
142 | rjmp Wahl ; Wenn nicht dann zu Wahl
|
143 | ldi r20,1 ; Setze r20 auf 1
|
144 | ldi r19,4 ; Lader r19 mit 4
|
145 | rjmp Timer ; Springe zum Timer
|
146 |
|
147 | Weiter3: sbis PinD, 1 ; PinD1 (Aus) unbetätigt
|
148 | rjmp Aus ; Wenn Aus betätigt springe zu Aus
|
149 | sbis PinD, 5 ; PinD5 (Störung) unbetätigt
|
150 | rjmp Aus ; Wenn Aus betätigt springe zu Aus
|
151 | sbic PinD, 2 ; Auto betätigt
|
152 | rjmp Wahl ; Wenn nicht dann zu Wahl
|
153 | tst r19 ; Teste r19 auf Null
|
154 | brne Timer ; Springe bei r19 ungleich 0
|
155 | sbic PinD, 4 ; 90bar erreicht
|
156 | rjmp Weiter3 ; wenn nicht dann warte
|
157 | dec r20 ; r20 -1
|
158 |
|
159 | sbi PortB, 1 ; Setze PortB 1 (Ventil zieht an)
|
160 |
|
161 | rjmp Auto1 ; Wieder von vorne beginnen
|
162 |
|
163 | Aus: cbi PortB, 0 ; Lösche PortB 0 (Motor aus)
|
164 | cbi PortB, 1 ; Lösche PortB 1 (Ventil fällt ab)
|
165 | Ausw: ldi r21, 1 ; Lade r21 mit 1
|
166 | ldi r19,4 ; Lade r19 mit 4
|
167 |
|
168 | rjmp Timer
|
169 |
|
170 | Kurz: tst r19 ; Teste r19 auf Null
|
171 | brne Timer ; Springe bei r19 ungleich 0
|
172 | dec r21 ; r21-1
|
173 | sbi PortB, 1 ; Setze PortB 1 (Ventil zieht an)
|
174 | ldi r22,1 ; Lade r22 mit 1
|
175 | ldi r19,4 ; Lade r19 mit 4
|
176 |
|
177 | rjmp Timer
|
178 |
|
179 | Kurz1: tst r19 ; Teste r19 auf Null
|
180 | brne Timer ; Springe bei r19 ungleich 0
|
181 | dec r22 ; r22-1
|
182 | cbi PortB, 1 ; Lösche PortB 1 (Ventil fällt ab)
|
183 |
|
184 | sbis PinD, 1 ; Aus noch betätigt?
|
185 | rjmp Kurz1 ; Warte bis losgelassen
|
186 | sbis PinD, 5 ; Störung noch betätigt?
|
187 | rjmp stoerung
|
188 | tst r28
|
189 | brne Power2
|
190 |
|
191 | rjmp Start
|
192 |
|
193 | Timer: ldi r17, HIGH(RAMEND) ; Stackpointer initialisieren
|
194 | out SPH, r17
|
195 | ldi r17, LOW(RAMEND)
|
196 | out SPL, r17
|
197 |
|
198 | ldi r17, (1<<CS02) | (1<<CS00) ; Teiler 1024
|
199 |
|
200 | out TCCR0, r17
|
201 |
|
202 | ldi r17, (1<<TOIE0) ; TOIE0: Interrupt bei Timer Overflow
|
203 | out TIMSK, r17
|
204 |
|
205 | sei
|
206 |
|
207 | loop: rjmp loop
|
208 |
|
209 | timer0_overflow: ; Timer 0 Overflow Handler
|
210 |
|
211 | nop
|
212 | dec r19 ; r19 - 1
|
213 | dec r23 ; r23 - 1
|
214 | dec r25 ; r25 - 1
|
215 |
|
216 | zum1: tst r27 ; r27 auf null testen
|
217 | breq zum2 ; Wenn Null dann zu nächstem
|
218 | rjmp test ; Springe zu Weiter 2
|
219 |
|
220 | zum2: tst r20 ; r20 auf null testen
|
221 | breq zum3 ; Wenn Null zum nächsten
|
222 | rjmp Weiter3 ; WSpringe zu Weiter 3
|
223 |
|
224 | zum3: tst r21 ; r21 auf null testen
|
225 | breq zum4 ; Wenn null dann zum nächsten
|
226 | rjmp Kurz ; Springe zu Kurz
|
227 |
|
228 | zum4: tst r22 ; r22 auf null testen
|
229 | breq zum5 ; Wenn null dann zu nächsten
|
230 | rjmp Kurz1 ; Springe zu Kurz 1
|
231 |
|
232 | zum5: tst r26 ; r26 auf null testen
|
233 | breq zum6 ; Wenn null dann zum nächsten
|
234 | rjmp Flanke ; Springe zu Flanke
|
235 |
|
236 | zum6: tst r18
|
237 | breq zum7
|
238 | rjmp Weiter2
|
239 |
|
240 | zum7: rjmp Wahl1 ; Springe zu Wahl 1
|
241 |
|
242 | stoerung:sbi PortB, 2 ; Störungs LED an
|
243 | sbis PinD, 5 ; Störung noch betätigt
|
244 | rjmp stoerung ; LED bleibt an
|
245 | cbi PortB, 2 ; LED aus
|
246 | rjmp Start ; Springe zu Start
|
247 |
|
248 | ende: rjmp ende
|