UART Empfangen und LED an

Gast #514799
Lesenswert?

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
Gast #514852
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren