?
Ich habe mal eine Frage zu einem Programm das ich geschrieben habe (in dem Fall nur ein Ausschnitt) welches meiner Meinung nach funktionieren sollte, dies aber nicht tut.
Wie man im nachstehenden Programm sieht sollte ein Sekundentakt erzeugt werden:
Da ich mit einem ATmega644P mit 16MHz Taktfrequenz arbeite habe ich die Berechnung aufgestellt 1024*125*125 = 16MHz
Einmal läuft die Schleife schön bis zum Interrupt und dekrementiert die Variable teiler, aber dann während die Schleife sinnlos durchläuft bis der nächste Interrupt fällig wird springt das Programm auf einmal wieder in die Stackpointerinitialisierung.
Da ich noch relativ neu auf dem Gebiet bin versteh ich irgendwie nicht wieso das Programm das macht. Auch nicht wundern wenn meine Programmiertechnik schlecht ist (würdfe mich über Verbesserungsvorschläge freuen).
Meine Frage nun: Wieso läuft das Programm nicht reibungslos bis die Variable teiler 0 ist?
Hier das Programm (bei dem Label operation sollte es dann noch weiter gehen, der Teil funktioniert aber):
.include "m644def.inc"
.list
.DEF vergleich = r15
.DEF akku = r16
.DEF teiler = r17
.DEF zahl = r18
.EQU clock = 16000000
.equ HWTeiler = 125
;**************************************************************************************
.cseg
.org 0x0000
rjmp reset
.org OC0Aaddr
rjmp interrupt
reset:
jmp start
.org INT_VECTORS_SIZE
start:
initstack:
ldi akku, LOW(RAMEND)
out spl, akku
ldi akku, HIGH(RAMEND)
out sph, akku
initports:
ldi akku,$ff
out DDRC,akku ;PORT C als Ausgang
inittimer0:
ldi teiler,HWTeiler
ldi akku,(1<<WGM01)
out TCCR0A,akku
ldi akku,(1<<CS02|1<<CS00)
out TCCR0B,akku
ldi akku,HWTeiler
out OCR0A,akku
ldi akku, TIMSK0
sbr akku, OCIE0A ;OCIEA0 sets without influecing other Pins
sts TIMSK0,akku
sei;
loop:
rjmp loop
interrupt:
dec teiler
brne weiter
rjmp operation
weiter:
reti
operation: