@WL: Danke für den Tipp mit dem Timer, hat zwar in dem Fall nix gebracht, aber ansonsten hätten wir jeden Timer falsch programmiert
@wkrug: Ich werd mir das am Wochenende mal genauer anschauen, hatte bisher wie gesagt noch nix damit zu tun.
@WL: Danke für den Tipp mit dem Timer, hat zwar in dem Fall nix gebracht, aber ansonsten hätten wir jeden Timer falsch programmiert
@wkrug: Ich werd mir das am Wochenende mal genauer anschauen, hatte bisher wie gesagt noch nix damit zu tun.
Hallo nochmal,
ich habe mir die Sache mit Assembler jetzt einmal angeschaut. Dabei verstehe ich noch nicht so ganz welche Register ich während der ISR alle sichern muss. Also SREG muss ich so wie ich das sehe auf jedenfall sichern. Die Register R4, R5, R6, R8, R9, R28 und R29 sollte ich laut dem Artikel "Assembler Einführung für Bascom User" auf RN-Wissen am besten einfach in Ruhe lassen. Muss ich dann nur die Register sichern die ich während der ISR verwende oder auch welche die ich gerade irgendwo anders im Programm z.B. der Main Loop verwende ? Würde folgendes z.B. ausreichen:
ON pcint2 isr NOSAVE
isr:
$asm
PUSH r24
IN r24, SREG
PUSH r24
... mach was tolles mit r24
POP r24
OUT r24, SREG
POP r24
end asm
Kurze Antwort:
Wenn Du nur Register r24 nutzen willst reicht das.
Da Du aber Additionen mit ergebnissen größer 255 brauchst würd ich mir das Register r25 mit dazu holen.
INC r24; Register R24 wird um 1 erhöht
BRNE notad; es wird geguckt ob r24 0 ist = Überlauf
INC r25; wenn r24 0 ist wird r25 inkrementiert
notad:
; hier geht dann das Programm weiter
OUT r24, SREG ist falsch rum. Muss heissen OUT SREG, r24.
Lesezeichen