; Die Anschüsse: ; PA0 = ; PA1 = ; PA2 = ; PA3 = ; PA4 = ; PA5 = ; PA6 = ; PA7 = ; PB0 = Taster "Alarm" ; PB1 = ; PB2 = ; PB3 = ; PB4 = ; PB5 = ; PB6 = ; PB7 = ; PC0 = K1 - PC komplett Eingang ; PC1 = K2 ; PC2 = K3 ; PC3 = K4 ; PC5 = K5 ; PC6 = K6 ; PC7 = K7 ; PD0 = S1 PD komplett Ausgang ; PD1 = S2 ; PD2 = S3 ; PD3 = S4 ; PD4 = S5 ; PD5 = W1 ; PD6 = W2 ; PD7 = W3 .include "8515def.inc" .def CntLoop1 = r17 .def CntLoop2 = r18 .def CntLoop3 = r19 .def Hugo = r20 ldi Hugo, LOW(RAMEND) ; LOW-Byte der obersten RAM-Adresse out SPL, Hugo ldi Hugo, HIGH(RAMEND) ; HIGH-Byte der obersten RAM-Adresse out SPH, Hugo ; Festlegen der Ein- und Ausgänge: ldi r16, 0b11111111 out DDRA, r16 ldi r16, 0b11111110 ; PB1 auf Eingang, der Rest auf Ausgang out DDRB, r16 ldi r16, 0b00000000 ; Alle PC auf Eingang out DDRC, r16 ldi r16, 0b11111111 ; Alle PD auf Ausgang out DDRD, r16 ; Alle Ausgänge ausschalten ldi r16, 0b11111111 out PortD, r16 ; Interne Pull Up´s ldi r16, 0b11111111 out PortA, r16 ldi r16, 0b11111110 out PortB, r16 ldi r16, 0b00000000 out PortC, r16 Alarm: ; Nun beginnt das Hauptprogramm sbic PINB, 0 ; Wird Taster "Alarm" betätigt, überspringe nächsten Befehl rjmp Alarm cbi PortD, 0 ; Stopstelle S1 ein - Fahrzeug bleibt stehen cbi PortD, 1 ; Stopstelle S2 ein - Fahrzeug bleibt stehen rcall Pause ; Rufe Unterporgramm "Pause" auf cbi PortD, 2 ; Parkplatz 1 ein - Fahrzeug fährt los Abfrage1: sbic PINC, 5 ; Wird Reedkontakt K6 betätigt, überspringe nächsten Befehl rjmp Abfrage1 sbi PortD, 2 ; Parkplatz 1 aus - Fahrzeug bleibt stehen cbi PortD, 3 ; Parkplatz 2 ein - Fahrzeug fährt los Abfrage2: sbic PINC, 6 ; Wird Reedkontakt K7 betätigt, überspringe nächsten Befehl rjmp Abfrage2 sbi PortD, 3 ; Parkplatz 2 aus - Fahrzeug bleibt stehen cbi PortD, 4 ; Parkplatz 3 ein - Fahrzeug fährt los Abfrage3: sbic PINC, 7 ; Wird Reedkontakt K8 betätigt, überspringe nächsten Befehl rjmp Abfrage3 sbi PortD, 4 ; Parkplatz 3 aus - Fahrzeug bleibt stehen rcall Pause ; Rufe Unterprogramm "Pause" auf sbi PortD, 0 ; Stopstelle S1 aus - Fahrzeug fährt wieder sbi PortD, 1 ; Stopstelle S2 aus - Fahrzeuge fährt wieder ; Nun kehren die Fahrzeuge vom Einsatz zurück rcall weiche Abfrageweiche1: sbic PINC, 4 ; Ist Reedkontakt K5 betätigt, überspringe nächsten Befehl rjmp Abfrageweiche1 cbi PortD, 5 ; Weiche 1 auf Abzweig rcall Weiche Abfrageweiche2: sbic PINC, 3 ; Ist Reedkontakt K4 betätigt, überspringe nächsten Befehl rjmp Abfrageweiche2 sbi PortD, 5 ; Weiche 1 auf Gerade cbi PortD, 6 ; Weiche 2 auf Abzweig rcall Weiche Abfrageweiche3: sbic PINC, 2 ; Ist Reedkontakt K3 betätigt, überspringe nächsten Befehl rjmp Abfrageweiche3 sbi PortD, 6 ; Weiche 2 auf Gerade rjmp Alarm ; Unterprogramme Pause: Loop1: inc CntLoop1 cpi CntLoop1, 255 brcc Loop2 rjmp Pause Loop2: inc CntLoop2 cpi CntLoop2, 255 brcc Loop3 rjmp Loop1 Loop3: inc CntLoop3 cpi CntLoop3, 20 brcc EndLoop clr CntLoop1 rjmp Pause EndLoop: clr CntLoop1 clr CntLoop2 clr CntLoop3 ret ; Unterprogramm Weiche Weiche: sbic PINC, 0 rjmp Weiche cbi PortD, 7 ; Weiche auf Abzweigstellen weichenpause: sbic PINC, 1 rjmp weichenpause sbi PortD, 7 ; Weiche auf Gerade stellen ret