; Garagentor.asm ; Labor SMK II Sommersemester 2005 ; Torsten Utsch (636241), Ralph Trimborn (629601) .include "2343def.inc" nop rjmp INIT ;Goto INIT rjmp T_OVERF ;Goto T_OVERF (Timer/Counter Überlauf) INIT: ;---Initialisierung--- ldi r16,28 out ddrb, r16 ldi r16, low(ramend) out spl, r16 sei ldi r16,2 out timsk, r16 ldi r17,$1 ldi r18,$32 clr r19 START: ;---Hauptprogramm--- PIN0: sbis pinb, pinb0 ;wenn Taste gedrückt rjmp TASTE ;Goto Taste PIN1: andi r19,254 sbis pinb,pinb1 ;wenn LEISTE rcall LEISTE ;Goto LEISTE rjmp START ;else Goto START TASTE: ;Prozedur zur Tastenabfrage rcall WAIT ;Warteschleife zum Entprellen rcall WAIT ;Warteschleife zum Entprellen bst r19,0 brts ENDE ori r19,1 sbic pinb, pinb2 rjmp AUF_ENDE sbic pinb,pinb3 rjmp ZU_ENDE sbrs r19,2 rjmp AUF rjmp ZU AUF: ;Prozedur zum Öffnen des Tores sbi portb,pinb2 ldi r16,5 out tccr0,r16 sbi portb,pinb4 ori r19,4 andi r19,253 rjmp ENDE ZU: ;Prozedur zum Schliessen des Tores sbi portb,pinb3 andi r19,251 andi r19,253 rjmp ENDE AUF_ENDE: ;Prozedur zum Beenden des Öffnens des Tores cbi portb,pinb2 rjmp ENDE ZU_ENDE: ;Prozedur zum Beenden des Schliessen des Tores cbi portb,pinb3 rjmp ENDE ENDE: rjmp pin0 LEISTE: sbrc r19,1 rjmp LEI_ENDE rcall WAIT ;Warteschleife zum Entprellen rcall WAIT ;Warteschleife zum Entprellen cbi portb, pinb3 andi r19,254 ori r19,2 LEI_ENDE: ret T_OVERF: ;Prozedur zum Lichtausschalten dec r18 breq T_DEC_HIGH rjmp T_ENDE T_DEC_HIGH: dec r17 brpl T_ENDE cbi portb,pinb4 ldi r16,0 out tccr0, r16 ldi r17,$1 ldi r18,$32 T_ENDE: reti WAIT: ;Warteprozedur ldi r16,255 ;Register 16 mit 255 belegen WAIT_LOOP: ;Warteschleife dec r16 ;Register 16 Decrementieren nop nop nop nop brne WAIT_LOOP ;Wiederhole bis Resister 16 = 0 ret ;Sprung in vorherige Procedur, in der WAIT aufgerufen wurde