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
|
|