servo.asm


1
.include "m8def.inc"            ; Definitionen für Atmel ATmega8
2
3
.def cnt1 = r20      ;count1
4
.def temp = r21
5
6
;#############################################################################;
7
8
.org 0x000
9
   rjmp INIT                  ; Reset Handler
10
11
.org OVF0addr
12
   rjmp Timer0                  ; Timer0 Overflow Handler
13
14
;#############################################################################;
15
16
.equ frequenz  = 4000000  ; Frequenz in Hz
17
.equ start= 206                          
18
19
;#############################################################################;
20
21
INIT:
22
23
   ldi temp, LOW(RAMEND)
24
   out SPL, temp
25
   ldi temp, HIGH(RAMEND)
26
   out SPH, temp
27
28
   ldi temp, 0xFF
29
   out DDRB, temp               ; Port B -> Ausgang
30
   ldi temp, 0x00
31
   out PORTB, temp
32
   
33
   ldi temp, 0b00000001         ; Timer0 Interrupt aktivieren
34
   out TIMSK, temp
35
36
   ldi temp, start              ; Startwert des Timers
37
   out TCNT0, temp
38
39
   ldi temp, 0b00000010         ; Prescaler auf 8
40
   out TCCR0, temp
41
42
   sei                          ; Interrupts aktivieren
43
44
   ldi cnt1, 0
45
   rjmp MAIN
46
47
;#############################################################################;
48
49
MAIN:
50
51
   rjmp MAIN                  
52
53
;#############################################################################;
54
   
55
Timer0:                      
56
   
57
comp1:  ldi temp,0
58
  cpse cnt1,temp   
59
     rjmp comp2
60
     sbi portb,0
61
62
comp2:  ldi temp,10
63
  cpse cnt1,temp  
64
     rjmp comp3
65
     cbi portb,0
66
67
comp3:  ldi temp,210
68
  cpse cnt1,temp   
69
     rjmp restart
70
     ldi cnt1,0
71
72
restart:
73
   ldi temp, start 
74
   out TCNT0, temp   
75
   inc cnt1
76
   reti