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
        sei
35
36
Ausschalten:
37
    ldi temp,0b00000000    ; Alles auf Eingang
38
    out DDRB,temp      ; PB1 Taste -> Eingang
39
    ldi temp,0b00000110    ; Pullup PB2=offen PB1= taste
40
        out PortB,temp          ; PB 0=ton
41
 
42
        ldi temp, (1<<INT0)
43
        out GIMSK,temp      ; INT0 Taste freischalten
44
45
        ldi temp, (1<<SE)+(1<<SM1)+(0<<ISC01) 
46
        out MCUCR,temp      ; Sleep und INT0 low level
47
        sleep       ; 
48
49
;-----hier gehts nach Erwachen weiter. INT0 Taste Interr.Routine
50
    ldi temp,0b00011001    ; PB3/4 Led PB0 Ton -> Ausgang
51
    out DDRB,temp      ; PB1 Taste -> Eingang
52
    ldi temp,0b00000110    ; Pullup
53
        out PortB,temp
54
HauptWach:  
55
        sbis PinB,1         ; Taste nicht gedr ->
56
        rjmp HauptWach      ; warte bis Taste los
57
        rjmp BlinkStart      ; Taste nicht gedr. ->
58
59
;----------Tasteninterrupt zum Einschalten nach sleep --------
60
TastINT0:
61
;       in Statusreg , Sreg
62
            ldi temp,0      ; interrupt ausschalten
63
            out GIMSK,temp
64
;       out SREG, Statusreg
65
    reti
66
67
;-------------------------------------------------
68
69
Blinkstart:
70
71
; Timer0 einstellen für Ton
72
  ldi temp, (1<<WGM01)|(1<<COM0A0) ; Toggle OC0A (PB0) on Compare Match (CTC Mode)
73
  out TCCR0A, temp    
74
  ldi temp, (1<<CS01)|(0<<CS00) ; Takt 0,6MHz / Vorteiler 8 
75
  out TCCR0B, temp
76
77
78
    ldi Zaehl,20    ; 20 mal
79
Blinken:
80
  ldi temp, 151         ; c spielen an PB0
81
  out OCR0A, temp
82
83
        sbi PortB,3         ; 3 an
84
            rcall delay50ms
85
        cbi PortB,3         ; 3 aus
86
            rcall delay50ms
87
        sbi PortB,3         ; 3 an
88
            rcall delay50ms
89
        cbi PortB,3         ; 3 aus
90
            rcall delay50ms
91
92
        rcall delay50ms
93
        rcall delay50ms
94
        rcall delay50ms
95
        rcall delay50ms
96
97
  ldi temp, 114         ; f spielen an PB0
98
  out OCR0A, temp
99
        sbi PortB,4         ; 4 an
100
            rcall delay50ms
101
        cbi PortB,4         ; 4 aus
102
            rcall delay50ms
103
        sbi PortB,4         ; 4 an
104
            rcall delay50ms
105
        cbi PortB,4         ; 4 aus
106
            rcall delay50ms
107
108
        rcall delay50ms
109
        rcall delay50ms
110
        rcall delay50ms
111
        rcall delay50ms
112
113
    dec Zaehl
114
    brne Blinken
115
116
    clr temp
117
     out TCCR0B, temp   ; Timer (Töne) ausschalten
118
    rjmp Ausschalten
119
120
;--------------------------------------
121
122
Delay50ms:
123
            push R25
124
            push R30
125
            push R31
126
          ldi  R25, 1   ;
127
WGLOOP9:  ldi  R30, $63    ; 50ms
128
WGLOOPa:  ldi  R31, $64
129
WGLOOPb:  dec  R31
130
          brne WGLOOPb
131
          dec  R30
132
          brne WGLOOPa
133
          dec  R25
134
          brne WGLOOP9
135
            pop R31
136
            pop R30
137
            pop R25
138
         ret
139
140
.exit