und ich nicht so gut in C! hmm....
kannst du es mir in worten aufschreiben?
MFG
Michael
Da beisst es leider aus... ich kann kein Assembler... tut mir leid...
Gruß,
Franz
und ich nicht so gut in C! hmm....
kannst du es mir in worten aufschreiben?
MFG
Michael
Also, sagen wir "merker" sei eine Globale Variable.
Diese Timerfunktion wird Pro Sekunde einmal ausgeführt:
TIMER-FUNKTION{
WENN( merker ungleich 0 )Dann{ merker = 0; }Ansonsten{ merker = 1; }
}
Bedeutet, dass die Varible "merker" im sekundentakt 0...1....0...1 annimmt.
Dann kann man irgendwo anders im hautpprogramm sagen:
WENN(merker unngleich 0)Dann{ PORTA = 0xFF; }Ansonsten{ PORTA = 0x00; }
Folglich Blinken die LEDs an PortA im Sekundentakt
Hmm... ist es so verständlich?
Gruß,
Franz
nien nicht so richtig! sorry!
MFG
Michael
ah ich glaube habs jetzt so ungefähr kapiert!
Ich mache 3 Timer!
der erste soll 25us eine interrupt auslösen
der zweite 50us
der dritte 75 us
MFG
Michael
Es genügt doch ein Timer... mit 25µs. Das Ereignus für 50µs führst du nur jedes 2. mal aus, das für 75µs jeder 3. mal und das für 25µs eben in jeder IRQ.
Disclaimer: none. Sue me.
versteh dich nicht ganz sprinter!
also alle 25us interrupt! was mache ich dann mit 50us und 75 us!!
MFg
Michael
Stell dir vor du hast eine IRQ, die alle 25µs aufgerufen wird. Dann machst du folgendes; hier als irgendein Speudo-Code. Für 50µs geht's analog wie für die 75µs.
Code:integer wert_75µs := 0 BEGIN IRQ_25µs CALL job_25µs wert_75µs := wert_75µs + 1 IF wert_75µs = 3 THEN wert_75µs := 0 CALL job_75µs ENDIF END IRQ_25µs
Disclaimer: none. Sue me.
so ich verstehe nur assembler und nicht C! ^^
MFG
Michael
Ein Interrupt ist eine Unterbrechung im normalen Programmablauf. Sobald ein Interrupt ausgelöst wird, springt der Controller automatisch in die passende ISR (Interrupt Service Routine). Das ist im Prinzip eine ganz normale Funktion, nur daß man die eben nicht selber aufruft sondern das dem Controller überlässt.
Wenn du also den Timer so einstellst daß er alle 25µs überläuft, und den passenden Interrupt aktivierst, wird eben alle 25µs die ISR aufgerufen die du für den Timer-Interrupt geschrieben hast.
Du möchtest eine LED blinken lassen? Dann schalte in der ISR eben den entsprechenden Pin um. Und wenn sie langsamer blinken soll (also 50µs an - 50µs aus etc.), dann musst du den Pin eben bei jedem zweiten Aufruf der ISR umschalten. Dazu brauchst du natürlich eine Variable die mitzählt wie oft die ISR aufgerufen wurde (also einfach bei jedem Aufruf eins hochzählen).
So viele Treppen und so wenig Zeit!
Lesezeichen