nachdem das senden über uart klappt, sitz ich jetzt am empfangen ich will bei Empfang die LED an portb.0 anschalten. klappt mal wieder nicht. hier der Code: ;------------------------- .include "m168def.inc" ;| Definitionen der Adressen ;------------------------- ; ;-------------------------------- .def temp = r16 ; Definition von Hilfsvariablen .def data = r17 .equ CLOCK = 7372800 .equ BAUD = 9600 .equ UBRRVAL = CLOCK/(BAUD*16)-1 ;-------------------------------- .org 0x0000 rjmp main .org URXCaddr ; Interruptvektor für UART-Empfang rjmp int_rxc main: ldi temp, 0x06 out TCCR0B, temp ;----------------------------------------------------------------------- ----- ldi temp,LOW(RAMEND) ; Stackpointer initalisieren out SPL,temp ; ldi temp,HIGH(RAMEND) ; Stackpointer initalisieren out SPH,temp ; ;----------------------------------------------------------------------- ----- USART_init:; Initialisieren der Schnittstelle im asynchronen Normalmodus *----------- ; ; Berechnung der Parameter für Übertragungsrate: ; BAUD = Oszilatorfrequenz / ( 16 * ( UBRR0 + 1 )) ; daraus folgt: ; UBRR0 = ( Oszilatorfrequenz / 16 * BAUD ) - 1 ; Beispiel: BAUD = 9600 ; UBRR0 = ( 7372800 / 16 * 9600 ) - 1 = 47 = 0x002F ;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''| ; Übertragungsrate einstellen: ; ldi temp, LOW(UBRRVAL) ; Lowbyte: 0x00 sts UBRR0L, temp ; im Register setzen ldi temp, HIGH(UBRRVAL) ; Highbyte: 0x2F sts UBRR0H, temp ; im Register setzen ;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''| ; Einstellung der Übertragungsparameter ldi temp, 0x06 ; Asynchron, Paritätsbit N, Datenlänge 8Bit, Stopbit 1 sts UCSR0C, temp ; ;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''| ; Einstellung Sender und Empfänger ldi temp, 0x98 sts UCSR0B, temp ;_______________________________________________________________________ ____________| ldi temp,0x01 out DDRB, temp sei ; Interrupts global aktivieren loop: rjmp loop ; Endlosschleife ; Interruptroutine: wird ausgeführt sobald ein Byte über das UART empfangen wurde int_rxc: ldi data, UDR0 ldi temp, 0x01 out PORTB, temp reti ; Interrupt beenden
Hallo ; Interruptroutine: wird ausgeführt sobald ein Byte über das UART empfangen wurde int_rxc: ldi data, UDR0 ldi temp, 0x00 ;!!!!!!!!!!!! out PORTB, temp reti ; Interrupt beenden Wenn die LED an Plus hängt muß der AVR eine 0 ausgeben damit sie leuchtet.
naja, das allei scheint nicht das problem zu sein, denn die led leuchtet bei mir, wenn ich den port auf hi stelle. es scheint so, als würde der interrupt nicht generiert.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.