Hi
Ich habe eine Verbindung zwischen AVR und PC via MAX232 hergestellt (nachher sollen mal 2µCs via UART miteinander kommunizieren).
Das Senden an den PC funktioniert auch.
Wenn ich vom PC ein Byte an den AVR sende, bleibt der jedoch einfach stehen.
Hier der Code (zu Testzwecken gekürzt)
Code:
.include "2313def.inc"			;Definitionsdatei laden
.equ CLOCK = 8000000
.equ BAUD = 9600
.equ UBRRVAL = CLOCK/(BAUD*16)-1
.def INTtemp=r22
.Def S1Les=r24                          ;gemessenes Servosignal in 128tel
.Def S2Les=r23
.def Puls=r21
.equ S1INOffset=128                     ;Offset des Eingangssignals in 8µS
.equ S2INOffset=128
.equ S1Offset=4                         ;Offsets für Ausgänge in 256µS
.equ S2Offset=4
.Def S1Pos = r28                        ;Servo1 invertiert an PB0 - Position in 64tel
.Def S2Pos = r29
.org 0x000
         rjmp start                     
.org URXCAddr 
         rjmp onRXD                     ;Interupt für RX
.org 0x006
         rjmp T0over

start:	ldi	r16,low(ramend)		
	out	spl,r16			;Stackpointer auf RAM-Ende setzen

	ldi	r16,0b00000000		
	out	ddrd,r16		;PortD auf Eingang setzen von PortD werden nur INT0-1 benutzt
        out     portd,r16               ;Interne Pullups von PortD abstellen
	ldi	r16,0b00000011		
	out	ddrb,r16		;PortB.0-1 auf Ausgang setzen
        out     portb,r16               ;Interne Pullups von PortD abstellen, Ausgänge auf high

        ldi     r16,0b00000011          
        out     TCCR0,r16               ;Prescaler für Timer0 auf 64 stellen
        ldi     r16,0b00000010
        out     TIMSK,r16               ;Timer0-Overflow-Interupt anmachen
        ldi     r16,0b00000010          
        out     TCCR1B,r16              ;Prescaler für Timer1 auf 8 stellen 
        ldi     r16, UBRRVAL            
        out     UBRR, r16               ;Baudrate einstellen
        ldi     r16, 0b10011000         
;        ldi     r16, 0b00011000         ;TEST! RX-Int Ausmachen
        out     UCR, r16                ;TX anmachen, RX anmachen, RX-Int anmachen

        sei                             ;interupts an
;-----------------------HAUPTSCHLEIFE ERZEUGT SERVOSIGNALE----------------------------------------------
loop:

        rjmp loop
;-----------------------ROUTINEN ZUM AUSLESEN DES SERVOSIGNALS------------------------------------------
T0over:                                 ;Fehlerbehandlung, wenn Timer0 überläuft
        ldi puls,0                      ;Alle Servopulse als aus markieren. Am Ende des noch laufenden passiert nichts
        reti
;-----------------------SERVOPOSITIONEN AM UART EMPFANGEN-----------------------------------------------
onRXD:
;        CBI portb,0                     ;TEST!!! - Servo1 Puls anmachen
        IN INTtemp,UDR
        SBRS INTtemp,7                  ;Für Servo1 muss Bit7 0 sein, für Servo2 1
        RJMP S1stell
        SBRC INTtemp,7
        RJMP S2stell
        reti
S1stell:
        MOV S1POS,INTtemp
        OUT UDR,S1les
        reti
S2stell:
        MOV S2POS,INTtemp
        OUT UDR,S2les
        reti
schon der erste Befehl in der Interupt-Routine wird nicht ausgeführt (was auch immer ich da 'reinschreibe).
Wenn ich den Interupt ausmache, läuft der AVR unbeeinflusst weiter, wenn ich was vom PC schicke(weshalb ich einen Hardware-Fehler ausschließe).