Warum hast Du hier 2 Sprünge?Hier nochmal das Ende vom Code:
Code:brcs nachladen rjmp weiter nachladen: ldi temp1,115 weiter:
Du brauchst nur einen!
Entweder Du überspringst 'nachladen' oder Du läßt es bleiben.
Gruß, Wolfgang
Warum hast Du hier 2 Sprünge?Hier nochmal das Ende vom Code:
Code:brcs nachladen rjmp weiter nachladen: ldi temp1,115 weiter:
Hallo Rolf
So löst du den Sprung aus, wenn du bei der vorhergehenden Operationdas Carry-Bit setzt. Es sind halt bedingte Sprünge. Ist das Bit gesetzt, dann wird der BRCS ausgeführt, wenn nicht, dann mach mit dem nächsten Befehl weiter. Ich hab das Gefühl, du machst es dir selber schwer. Think simple. Assembler ist grad eine Sprache, die wirklich nicht einfacher aufgebaut sein kann.Code:Dec Temp1
Gruß oldmax
Warum hast Du hier 2 Sprünge?
Du brauchst nur einen!
Entweder Du überspringst 'nachladen' oder Du läßt es bleiben.
Gruß, Wolfgang
;Interrupt-ISR
TIMER0_OVF:
push akku
in akku,SREG
dec temp1
cpi temp1,23
brcs nachladen
nachladen: ldi temp1,115
out SREG,akku
pop akku
reti
Dieser Sprung ist doch jetzt vollkommen für die Katz!Code:cpi temp1,23 brcs nachladen nachladen: ldi temp1,115
Waahhhh.... Warum das denn jetzt schon wieder?Code:gehe03: cbi PORTB,PB0 ;PB2-PB0 = 0 Ende: rjmp loop ;Interrupt-ISR TIMER0_OVF: push akku in akku,SREG dec temp1 cpi temp1,23 brcs nachladen rjmp weiter nachladen: ldi temp1,115 weiter: out SREG,akku pop akku reti .EXIT
gehe03: habe ich verjüngt und die ISR abgeändert. Auffallend war, als ich noch kein "rjmp weiter" hatte, lief garnichts
mehr...alle LEDs leuchten...
Eigentlich willst Du doch folgendes:...
Code:ldi temp1,115 ;lade r17 mit 115 (dez.) loop: cpi temp1,92 ;wenn temp1 kleiner 92..C=1 brcs gehe01 ;dann Verzweigung "gehe01" ldi akku,0x07 out PORTB,akku rjmp Ende gehe01: cpi temp1,69 ;wenn temp1 kleiner 69..C=1 brcs gehe02 ;dann Verzweigung "gehe02" cbi PORTB,PB2 ;PB1-PB0 = 1 (PB2=0) rjmp Ende gehe02: cpi temp1,46 ;wenn temp1 kleiner 46..C=1 brcs gehe03 ;dann Verzweigung "gehe03" cbi PORTB,PB1 ;PB0 = 1 (PB2 und PB1=0) rjmp Ende gehe03: cpi temp1,23 ;wenn temp1 kleiner 23..C=1 brcs Ende ;dann Verzweigung "Ende" cbi PORTB,PB0 ;PB2-PB0 = 0 Ende: rjmp loop ;Interrupt-ISR TIMER0_OVF: dec temp1 ;(r17-1) wenn r17=1>>Z=0 brne hinterinit ;Verzweigung, wenn Z=0 ldi temp1,115 ldi akku,0x07 out PORTB,akku hinterinit: reti .EXIT
Von Beginn an erlöschen die 3 LEDS an PB2 bis PB0 im ca. 5 Sek. Rythmus....alles ok.
Das Umschalten (wenn alle LEDs=0) zum Leuchten dauert das doppelte.
Vom logischen Ablauf in "gehe03" muß es auch dazu kommen, denn ab Zählerstand 45 bis runter 23 wird
PB0 ständig auf LOW gesetzt. Bis aber der Zähler temp1 in der ISR zu Null kommt dauert es nochmal 23.
...