servo
20.01.2007, 22:00
Wünsche einen guten Abend!
Bin Anfänger I/O setzen, warteschleifen und einfache Programmabläufe gehen
langsam immer besser. ( vorkentnisse: 7 Jahre Maschinenbau als Energie-Anlagenelektroniker )
Ich versuche mich mit Assembler bekannt zu machen weil ich mir gedacht hab
wenn schon Strauss dann Johann Strauss!
Hab folgendes Porblem:
Da ich mich jetzt auf das ansteuern von Servos stürzen will hab ich im Internet Progamme gesucht um das Gesamtbild besser vertehen zu können.
Mir ist nicht klar wir im nachfolgendem Programm Register 22 mit TCNT0
verbunden ist, bzw. es wird r22 incrementiert und TCNT0 erhöht seinen wert. Hab schon sämtliche Bücher und Datenblätter durchforstet und nichts gefunden was die beiden in zusammenhang bringen würde.
.include "m16def.inc" ; Definitionen für Atmel ATmega8
.def cnt1 = r20 ;count1
.def temp = r21
;################################################# ############################;
.org 0x000
rjmp INIT ; Reset Handler
.org OVF0addr
rjmp Timer0 ; Timer0 Overflow Handler
;################################################# ############################;
.equ frequenz = 7372800 ; Frequenz in Hz
.equ start= 206
;################################################# ############################;
INIT:
ldi temp, LOW(RAMEND)
out SPL, temp
ldi temp, HIGH(RAMEND)
out SPH, temp
ldi temp, 0b11111111
out DDRD, temp ; Port B -> Ausgang
ldi temp, 0b00000000
out PORTD, temp
ldi temp, 0b00000001 ; Timer0 Interrupt aktivieren
out TIMSK, temp
ldi temp, start ; Startwert des Timers
out TCNT0, temp
ldi temp, 0b00000010 ; Prescaler auf 8
out TCCR0, temp
sei ; Interrupts aktivieren
ldi cnt1, 0
rjmp MAIN
;################################################# ############################;
MAIN:
sbic PINA,0
inc r22
rjmp MAIN
;################################################# ############################;
Timer0:
comp1: ldi temp,1
cpse cnt1,temp
rjmp comp2
sbi portd,0
comp2: ldi temp, 10
cpse cnt1,temp
rjmp comp3
cbi portd,0
comp3: ldi temp,210
cpse cnt1,temp
rjmp restart
ldi cnt1,0
restart:
ldi temp, start
out TCNT0, temp
inc cnt1
reti
währe Dankbar wenn einer die 5W Birne in meinem Kopf auf 5,1W erhöhen könnte.
Bin Anfänger I/O setzen, warteschleifen und einfache Programmabläufe gehen
langsam immer besser. ( vorkentnisse: 7 Jahre Maschinenbau als Energie-Anlagenelektroniker )
Ich versuche mich mit Assembler bekannt zu machen weil ich mir gedacht hab
wenn schon Strauss dann Johann Strauss!
Hab folgendes Porblem:
Da ich mich jetzt auf das ansteuern von Servos stürzen will hab ich im Internet Progamme gesucht um das Gesamtbild besser vertehen zu können.
Mir ist nicht klar wir im nachfolgendem Programm Register 22 mit TCNT0
verbunden ist, bzw. es wird r22 incrementiert und TCNT0 erhöht seinen wert. Hab schon sämtliche Bücher und Datenblätter durchforstet und nichts gefunden was die beiden in zusammenhang bringen würde.
.include "m16def.inc" ; Definitionen für Atmel ATmega8
.def cnt1 = r20 ;count1
.def temp = r21
;################################################# ############################;
.org 0x000
rjmp INIT ; Reset Handler
.org OVF0addr
rjmp Timer0 ; Timer0 Overflow Handler
;################################################# ############################;
.equ frequenz = 7372800 ; Frequenz in Hz
.equ start= 206
;################################################# ############################;
INIT:
ldi temp, LOW(RAMEND)
out SPL, temp
ldi temp, HIGH(RAMEND)
out SPH, temp
ldi temp, 0b11111111
out DDRD, temp ; Port B -> Ausgang
ldi temp, 0b00000000
out PORTD, temp
ldi temp, 0b00000001 ; Timer0 Interrupt aktivieren
out TIMSK, temp
ldi temp, start ; Startwert des Timers
out TCNT0, temp
ldi temp, 0b00000010 ; Prescaler auf 8
out TCCR0, temp
sei ; Interrupts aktivieren
ldi cnt1, 0
rjmp MAIN
;################################################# ############################;
MAIN:
sbic PINA,0
inc r22
rjmp MAIN
;################################################# ############################;
Timer0:
comp1: ldi temp,1
cpse cnt1,temp
rjmp comp2
sbi portd,0
comp2: ldi temp, 10
cpse cnt1,temp
rjmp comp3
cbi portd,0
comp3: ldi temp,210
cpse cnt1,temp
rjmp restart
ldi cnt1,0
restart:
ldi temp, start
out TCNT0, temp
inc cnt1
reti
währe Dankbar wenn einer die 5W Birne in meinem Kopf auf 5,1W erhöhen könnte.