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