;SIRENE_1 10.10.07 ;Piezo an PB3 ;PB2 für angeschlossenes Display mit 3xCMOS4033 ;Einschalt-Reset kann ohne Display entfallen ;Sirenen-Oszillator als Timer_OVF-ITR .include "tn13def.inc" ;------------------------ ;| Variablen für SIRENE | ;------------------------ .def ii = r16 ;allgem. Hilfsregister für ITR .def Sicher_ITR = r17 ;SREG im ITR sichern .def jj = r0 ;aktuelle Tonfrequenz .def kk = r1 ;Speed für Tonänderung .def Down = r2 ;Status Frequenz hoch/runter ;------------------------ .def Sicher = r18 ;für Subroutinen .def i = r19 ;allgem. Hilfsregister .def j = r20 ;allgem. Hilfsregister rjmp BEGINN .org 0003 rjmp TIM0_OVF ;erster Interrupt-Vektor ;für U-Prg. PIEPSEN BEGINN: sbi ddrb,2 ;PB2: Display-RESET sbi ddrb,3 ;PB3: Piezo-Ausgang sbi portb,4 ;PB4: für Taster mit PullUp ;-------------------- ldi ii,150 ;Startwerte für ansteigenden mov jj,ii ;Beginn der Sirene clr kk ; (Bei abfallendem Beginn: inc kk ; alles clr, kk <- 1) clr Down inc Down ;-------------------- ;----- ldi i,255 ;Einschalt-Reset mit LOOP_i: ;vorheriger Warteschleife ldi j,255 LOOP_j: dec j brne LOOP_j dec i ;(Vermutlich notwendig wegen brne LOOP_j ; Einschaltverzögerung der 4033s) sbi portb,2 ;Reset-Impuls high nop cbi portb,2 ;Reset-Impuls low ;----- ldi i,1 out TCCR0B,i ;Vorteiler /x ldi i,2 out TIMSK0,i ;Timer Interrupt freigeben sei ;Globaler Interrupt frei SCHLEIFE: sbic pinb,4 ;wenn cleared: Taster gedrückt! rjmp ITR_aus rjmp ITR_ein ITR_aus: cli rjmp SCHLEIFE ITR_ein: sei rjmp SCHLEIFE rjmp SCHLEIFE ;---------------------------------------------------------- TIM0_OVF: ;Oszillator an PB3 in Sicher_ITR,SREG ;SREG sichern DEC_kk: ldi ii,1 dec kk cp kk,ii brsh OSZILLIEREN ldi ii,10 mov kk,ii ldi ii,1 cp Down,ii ;momentan hoch/runtergezählt ? breq RUNTER HOCH: ldi ii,150 cp jj,ii ;ganz oben auf 150 ? brsh WIEDER_RUNTER inc jj rjmp OSZILLIEREN WIEDER_RUNTER: ldi ii,1 mov Down,ii rjmp OSZILLIEREN RUNTER: ldi ii,20 cp jj,ii ;ganz unten auf 20 ? brlo WIEDER_HOCH dec jj rjmp OSZILLIEREN WIEDER_HOCH: ldi ii,0 mov Down,ii rjmp OSZILLIEREN OSZILLIEREN: mov ii,jj WAIT_ITR: nop dec ii brne WAIT_ITR sbic portb,3 rjmp PIEP_AUS PIEP_EIN: sbi portb,3 rjmp ENDE_ITR PIEP_AUS: cbi portb,3 ENDE_ITR: out SREG,Sicher_ITR ;SREG zurück reti ;----------------------------------------------------------