liebe assembler gemeinde,
seit tagen plage ich mich mit meinem atmega8 (1MHz takt) und folgendem problem herum:
der CTC Timer soll ein 33kHz rechteck an PB1 erzeugen, gleichzeitig sollen in der hauptschleife im 1s takt PB0, PD7 und PD5, PD6 abwechselnd geschalten werden.
beides funktioniert für sich genommen ganz prima, aber alles zusammen will partout nicht klappen.

Code:
.NOLIST                
.INCLUDE <m8def.inc>  
.LIST                    
.CSEG                    

RESET:
rjmp init     
rjmp DUMMY    
rjmp DUMMY      
rjmp DUMMY 
rjmp DUMMY      
rjmp DUMMY     
rjmp MYINT 
rjmp init    
rjmp MYINT 

.ORG INT_VECTORS_SIZE 

init: 
ldi R16,HIGH(RAMEND) 
out SPH,R16 
ldi R16,LOW(RAMEND) 
out SPL,R16 

; CTC klarmachen
ldi r17,0;
ldi r16,(1<<WGM12)|(1<<CS10)
out TCCR1A,r17 
out TCCR1B,r16

  ; port b und d als ausgang
  LDI r24,255       
  OUT DDRB,r24 
  LDI r24,255
  OUT DDRD,r24

; interrupt
ldi r16,(1<<OCIE1A)|TIMSK;
out TIMSK,r16 

; zaehler laden
ldi r16,0 
out OCR1AH,r16 
ldi r16,255 ;29 (mit 29 sind es ca 33kHz, mit 255 ca 3,8kHz)
out OCR1AL,r16 

; PB1 ist anfangs HIGH
ldi r18,2 
out portb,r18 

sei  ; Interrupts aktivieren

; hauptschleife
loop: 
ldi r24,32
out portd,r24

;  delay loop, 1Hz
          ldi  r17,$09
WGLOOP0:  ldi  r18,$BC
WGLOOP1:  ldi  r19,$C4
WGLOOP2:  dec  r19
          brne WGLOOP2
          dec  r18
          brne WGLOOP1
          dec  r17
          brne WGLOOP0
          nop

ldi r24,192
out portd,r24; PD5+6 auf HIGH

;  delay loop, 1Hz
          ldi  r17,$09
WGLOOP3:  ldi  r18,$BC
WGLOOP4:  ldi  r19,$C4
WGLOOP5:  dec  r19
          brne WGLOOP5
          dec  r18
          brne WGLOOP4
          dec  r17
          brne WGLOOP3
          nop

; immer wiederholen 
rjmp loop

; isr, klappt nicht mit meinen pushes..
MYINT: 
;push r16
;push r17
;push r18
;push r19
;ldi r20,SREG
;push r20
;push r23
;push r24

; toggle funktion:
; "wenn portb=0 ist, wird portb=2"
; "wenn portb=2 ist, wird portb=0"

ldi r20,0
ldi r21,portb
cp r21,r20
breq setport
out portb,r20
rjmp intend

setport:
ldi r21,2 
;ldi r22,portb
;or r21,r22
out portb,r21

intend: ; auch diese pops taugen nicht
;pop r24
;pop r23
;pop r20
;out SREG,r20
;pop r19
;pop r18
;pop r17
;pop r16

reti

DUMMY:
reti
vielleicht ist der atmel mit 1MHz auch zu langsam für das, was ich erreichen will? dann würde ich ein 16MHz quarz dranbasteln. aber auch mit erheblich niedrigerer CTC frequenz geht es nicht.

ausserdem komme ich mit push und pop nicht zurecht. im code sind diese befehle auskommentiert, da ansonsten gar keine 33kHz zustande kommen. aber eigentlich ist es doch ein LIFO, also warum sollte das nicht gehen?

entschuldigt die vielleicht dummen fragen, ich bin noch kein ASM experte, und habe mich bemüht, es alleine (mit datenblatt und forum-suche) zu schaffen. nur langsam verzweifle ich.

bin dankbar für jede hilfe!

eure katze