PolizeiBlinklichtSirene.asm


1
; Blinklicht PB3/4   -> GND
2
; Taste PB1 -> GND
3
; Ton PB0 -> Kondensator -> Widerstand -> (evt.Transistor) -> Lautsprecher
4
5
6
;   Attiny13   4.8Mhz / 8 (CKDIV8)  =600Khz
7
8
; gruss herrmueller
9
10
11
.include "tn13def.inc"
12
.device AtTiny13
13
14
    rjmp RESET 
15
rjmp TastINT0;reti ; Int0-Interrupt
16
    reti ; PcInt0-Interrupt
17
    reti ; Timer/Counter 0 Overflow
18
    reti ; EEprom ready
19
    reti ; Analog Commarator
20
    reti ; Timer/Counter Compare Match A
21
    reti ; Timer/Counter Compare Match B
22
    reti ;rjmp Wdir ;  reti ; Watchdog Timeout
23
    reti ; ADC Conversion complete
24
    reti
25
26
27
.def temp = R16
28
.def Zaehl= R17
29
30
31
Reset:   
32
    ldi temp,low(Ramend)
33
    out SPL,temp
34
    ldi temp,0b00011001    ; PB3/4 Led PB0 Ton -> Ausgang
35
    out DDRB,temp      ; PB1 Taste -> Eingang
36
    ldi temp,0b00000110    ; Pullup
37
        out PortB,temp
38
        sei
39
40
Ausschalten:
41
        ldi temp, (1<<INT0)
42
        out GIMSK,temp      ; INT0 Taste freischalten
43
44
        ldi temp, (1<<SE)+(1<<SM1)+(0<<ISC01) 
45
        out MCUCR,temp      ; Sleep und INT0 low level
46
        sleep       ; 
47
48
;-----hier gehts nach Erwachen weiter. INT0 Taste Interr.Routine
49
50
HauptWach:  
51
        sbis PinB,1         ; Taste nicht gedr ->
52
        rjmp HauptWach      ; warte bis Taste los
53
        rjmp BlinkStart      ; Taste nicht gedr. ->
54
55
;----------Tasteninterrupt zum Einschalten nach sleep --------
56
TastINT0:
57
;       in Statusreg , Sreg
58
            ldi temp,0      ; interrupt ausschalten
59
            out GIMSK,temp
60
;       out SREG, Statusreg
61
    reti
62
63
;-------------------------------------------------
64
65
Blinkstart:
66
67
; Timer0 einstellen für Ton
68
  ldi temp, (1<<WGM01)|(1<<COM0A0) ; Toggle OC0A (PB0) on Compare Match (CTC Mode)
69
  out TCCR0A, temp    
70
  ldi temp, (1<<CS01)|(0<<CS00) ; Takt 0,6MHz / Vorteiler 8 
71
  out TCCR0B, temp
72
73
74
    ldi Zaehl,20    ; 20 mal
75
Blinken:
76
  ldi temp, 151         ; c spielen an PB0
77
  out OCR0A, temp
78
79
        sbi PortB,3         ; 3 an
80
            rcall delay50ms
81
        cbi PortB,3         ; 3 aus
82
            rcall delay50ms
83
        sbi PortB,3         ; 3 an
84
            rcall delay50ms
85
        cbi PortB,3         ; 3 aus
86
            rcall delay50ms
87
88
        rcall delay50ms
89
        rcall delay50ms
90
        rcall delay50ms
91
        rcall delay50ms
92
93
  ldi temp, 114         ; f spielen an PB0
94
  out OCR0A, temp
95
        sbi PortB,4         ; 4 an
96
            rcall delay50ms
97
        cbi PortB,4         ; 4 aus
98
            rcall delay50ms
99
        sbi PortB,4         ; 4 an
100
            rcall delay50ms
101
        cbi PortB,4         ; 4 aus
102
            rcall delay50ms
103
104
        rcall delay50ms
105
        rcall delay50ms
106
        rcall delay50ms
107
        rcall delay50ms
108
109
    dec Zaehl
110
    brne Blinken
111
112
    clr temp
113
     out TCCR0B, temp   ; Timer (Töne) ausschalten
114
    rjmp Ausschalten
115
116
;--------------------------------------
117
118
Delay50ms:
119
            push R25
120
            push R30
121
            push R31
122
          ldi  R25, 1   ;
123
WGLOOP9:  ldi  R30, $63    ; 50ms
124
WGLOOPa:  ldi  R31, $64
125
WGLOOPb:  dec  R31
126
          brne WGLOOPb
127
          dec  R30
128
          brne WGLOOPa
129
          dec  R25
130
          brne WGLOOP9
131
            pop R31
132
            pop R30
133
            pop R25
134
         ret
135
136
.exit