
Zitat von
Bernd_Stein;659466
Zu HA3 :
Ich habe sie verstanden, aber ist halt nicht mein Stil. Um die Struktur besser zu erkennen, benutze ich lieber den PAP.
[SIZE=3
Verstehe einfach nicht, wieso ~186µs mehr entstehen ( 969 - 783 ~ 186µs bzw. ~76 Takte )?
[/SIZE]
Ich verstehe zwar immer noch nicht warum diese Diskrepanz entsteht und glaube auch nicht dass sich irgendjemand durch meinen " Spaghetticode " arbeiten wird, um der Ursache auf den Grund zu gehen.
Deswegen arbeite ich jetzt mal mit der OC0A-Interrupt. Dort kann man dann wenigstens mittels Änderung des TOP-Wertes ( OC0RA ) im CTC-Mode bestimmen, wann genau die OC0A-IRQ auftreten soll.
Das was du in PAP beschreibst ist rein der Programmablauf wie dieser umgesetzt wird und mit welchen Befehlen, ist jedem natürlich selbst überlassen.
Wenn du aber möchtest das wir dir helfen dann geht es nur über eine annehmbare Programmstruktur. Dies beginnt schon nur damit das man nicht sinnlos alles in irgendwelche INC packt was absolut nicht notwendig ist Beispiel folgt.
Die Zeit wird auch mit dem OC-Int bleiben!!! Weil nicht verstanden wurde die Programmteile strukturiert zu erstellen um diese einzelnd prüfen zu können. Nur so wirst du den Fehler finden.
Jetzt zum Beispiel welches vereinfacht deine Stil dastellt.
Code:
.CSEG ;Was ab hier folgt kommt in den FLASH-Speicher
.ORG $0000 ;Programm beginnt an der FLASH-Adresse 0x0000..
rjmp reset ;..mit der RESET-Vectortabelle
.include IRQt13.inc
.ORG INT_VECTORS_SIZE ;Programmadresse nach den ganzen IRQ-Vektor
Sinvoller so
Code:
.CSEG ;Was ab hier folgt kommt in den FLASH-Speicher
.ORG $0000 ;Programm beginnt an der FLASH-Adresse 0x0000..
rjmp reset ;..mit der RESET-Vectortabelle
.ORG $0001
rjmp IRQ_? ;Sprung zu
.ORG $0002
rjmp IRQ_?? ;Sprung zu
.ORG $0003
reti ;zur Sicherheit RETI falls INT für $0003 doch ausgelöst wird ist keine ISR vorhanden aber
;der STACK wird nicht zerschoßen bzw falsche Ausführung von unerwünschten Programm
oder so
Code:
.CSEG ;Was ab hier folgt kommt in den FLASH-Speicher
.ORG $0000 ;Programm beginnt an der FLASH-Adresse 0x0000..
rjmp reset ;..mit der RESET-Vectortabelle
INT0addr
PCI0addr
OVF0addr
ERDYaddr
ACIaddr
OC0Aaddr
OC0Baddr
WDTaddr
ADCCaddr
Die ISR-Routinen selbst KÖNNEN natürlich in einer separaten INC stehen.
Somit erkennt jeder das die ISR sauber eingetragen sind und vorallem welche. Alles auf den ersten Blick erkennbar.
Lesezeichen